FreeBSD دو روش عمده برای نصب برنامهها در اختیار کاربر قرار میدهد:
- استفاده از Ports Collection (نصب از طریق کدهای منبع)
- استفاده از بستهها (نصب از طریق باینریهای از پیش کامپایل شده)
در این مقاله نحوه استفاده از بستهها را شرح داده و استفاده از Ports Collection را در مقاله دیگری بررسی می کنیم.
FreeBSD ابزارهای مختلفی را برای مدیریت این بسته های نرم افزاری در اختیار شما قرار می دهد که با چند دستور ساده می توانید اقدام به نصب/حذف/بروزرسانی بسته های نرم افزاری نمایید. بسته های نرم افزاری به صورت فایل هایی با پسوند .tbz یا .tgz توزیع می شوند. این بسته ها را می توانید از اینجا یا DVD نصب FreeBSD تهیه کنید. هر دیسک FreeBSD شامل یک دایرکتوری به نام /packages است که این دایرکتوری دربرگیرنده بسیاری از بسته های نرم افزاری پراستفاده است. تحت این دایرکتوری، بسته های نرم افزاری به شکل بسیار زیبایی گروه بندی شدهاند که در یافتن یک بسته به شما کمک فراوان می کند.
نصب یک بسته
می توانید از pkg_add برای نصب یک بسته استفاده کنید. pkg_add قادر است بسته ها را هم به صورت محلی و هم از طریق یک سرور راه دور نصب کند. در مثال زیر، ابتدا یک بسته نرم افزاری را از طریق اینترنت دانلود کرده و سپس با دستور pkg_add آن را نصب می کنیم:
# ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. ۲۲۰ ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. ۳۳۱ Guest login ok, send your email address as password. ۲۳۰- ۲۳۰- This machine is in Vienna, VA, USA, hosted by Verio. ۲۳۰- Questions? E-mail freebsd@vienna.verio.net. ۲۳۰- ۲۳۰- ۲۳۰ Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ ۲۵۰ CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz ۲۰۰ PORT command successful. ۱۵۰ Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). ۱۰۰% |**************************************************| ۹۲۳۷۵ ۰۰:۰۰ ETA ۲۲۶ Transfer complete. ۹۲۳۷۵ bytes received in 5.60 seconds (16.11 KB/s) ftp> exit # pkg_add lsof-4.56.4.tgz
همان طور که می بینید کافی است نام فایل مورد نظر را بعد از دستور pkg_add بنویسید. اگر می خواهید چند بسته را با هم نصب کنید، به سادگی آنها را پشت سر هم بنویسید. مانند زیر:
pkg_add squid-3.1.19.tbz w3m-0.5.3.tbz firefox-10.0.3,1.tbz
این در حالتی است که ما بسته نرم افزاری را قبلاً دانلود کرده ایم. البته pkg_add قادر است تا به صورت خودکار یک بسته نرم افزاری را برای شما دانلود و سپس نصب کند. کافی است این دستور را به همراه گزینه -r فراخوانی کنید:
# pkg_add -r lsof
دقت کنید که در صورت استفاده از گزینه -r، نیازی به نوشتن نسخه مربوط به بسته ندارید. pkg_add به صورت خودکار آخرین نسخه از بسته مورد نظر را دانلود و سپس نصب می کند.
گزینه | توضیح |
---|---|
-v , –verbose | این گزینه باعث میشود تا pkg_add گزارش کاملی را از فرایند نصب ارائه دهد. |
-K, –keep | این گزینه باعث میشود تا بسته ها بعد از دانلود پاک نشوند. بدین صورت می توانید آنها را در آینده هم استفاده کنید. اگر متغیر محیطی PKGDIR مقداردهی شده باشد، بسته ها در آنجا ذخیره خواهند شد وگرنه آنها در دایرکتوری جاری ذخیره می شوند. |
-i, –no-deps | یک بسته را بدون دانلود و نصب وابستگی های آن (dependency ) نصب خواهد کرد. |
-I, –no-script | هر بسته نرم افزاری ممکن است شامل اسکریپت هایی باشد که بعضی از این اسکریپت ها قبل از نصبِ بسته و بعضی دیگر بعد از نصبِ بسته اجرا می شوند. این گزینه از اجرا شدن این اسکریپت ها جلوگیری می کند. |
-n, –dry-run | بسته را به صورت واقعی نصب نخواهد کرد. فقط از مراحل نصب گزارشی را ارائه می دهد. |
-f, –force | اگر وابستگیهای یک بسته نصب نباشند، یا اجرای اسکریپت های موجود در بسته با شکست مواجه شود، استفاده از این گزینه باعث نادیده گرفتن این موارد شده و بسته را نصب خواهد کرد. |
لازم به ذکر است که pkg_add از ابزار fetch برای دانلود بسته ها استفاده می کند. بنابراین شاید لازم باشد تا متغیرهای FTP_PASSIVE_MODE،FTP_PROXY یا FTP_PASSWORD را مقدار دهی کنید. اگر قرار است از پشت یک فایروال بسته ها را دانلود کنید یا از یک ftp/http پراکسی استفاده کنید باید این متغیرها مقدار دهی شوند. برای اطلاعات بیشتر fetch(3) را ببینید.
pkg_info
همان طور که از اسم آن پیداست، از طریق این دستور می توانید اطلاعاتی را در مورد بسته های نرم افزاری کسب کنید. برای مثال:
# pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ...
می توانید قبل از نصب یک بسته، اطلاعاتی را در مورد آن بسته بدست آورید:
pkg_info squid-3.1.19.tbz
همچنین برای اینکه بدانید در حال حاضر یک بسته نصب است یا نه می توانید به این صورت عمل کنید:
pkg_info -a | grep mutt
pkg_version
این دستور یک کار جالب انجام می دهد. نسخه نصب شده از یک بسته را با نسخه موجود در درخت port ها مقایسه کرده و به شما اطلاع می دهد که کدام جدیدتر و کدام قدیمی تر است. مثال:
# pkg_version cvsup = docbook = ...
علامت | توضیح |
---|---|
= | نسخهای که در حال حاضر بر روی سیستم نصب است، با نسخه موجود در درخت پورت برابر است. |
< | نسخهای که در حال حاضر بر روی سیستم نصب است، قدیمی تر از نسخه موجود در درخت پورت ها است. |
> | نسخهای که در حال حاضر بر روی سیستم نصب است، جدیدتر از نسخه موجود در درخت پورت ها است. |
? | نسخهای که در حال حاضر بر روی سیستم نصب است، در درخت پورت ها موجود نیست. (ممکن است از درخت پورت ها حذف شده باشد یا اینکه تغییر نام داده باشد) |
* | نسخه های مختلفی از بسته وجود دارد. |
! | نسخهای که در حال حاضر بر روی سیستم نصب است، در درخت پورت ها هم وجود دارد، ولی بنا به دلایلی pkg_version قادر به مقایسه این دو نیست. |
پاک کردن یک بسته
برای پاک کردن یک بسته می توانید از دستور pkg_delete استفاده کنید.
# pkg_delete xchat-1.7.1
دقت کنید که هم باید نام بسته را بنویسید و هم نسخه مربوط به بسته را؛ وگرنه بسته پاک نخواهد شد. در مثال قبل اگر xchat را به جای xchat-1.7.1 می نوشتیم، دستور pkg_delete کار نمی کرد. اگر نسخه یک برنامه را نمی دانید، می توانید از دستور pkg_version استفاده کرده و نسخه نصب شده را پیدا کنید. البته به جای این کار، می توانید به سادگی از یک wildcard استفاده کنید:
# pkg_delete xchat\*
دستور بالا تمام بسته هایی که با xchat شروع میشوند را پاک می کند.
گزینه | توضیح |
---|---|
-i, –interactive | قبل از پاک کردن بسته، از کاربر تأیید می گیرد. |
-v یا –verbose | این گزینه باعث میشود تا pkg_delete از فرایند حذف یک بسته گزارش کاملی را ارائه دهد. |
-D, –no-script, –no-scripts | باعث میشود تا اسکریپت های موجود به همراه بسته اجرا نشوند. |
-a, –all | باعث میشود تا تمام بسته های نصب شده پاک شوند. فقط هسته و بعضی بسته های پایهای باقی خواهد ماند. |
-r, –recursive | علاوه بر بسته های مشخص شده، تمام بسته هایی که به این بسته ها احتیاج دارند را پاک می کند. |
-n, –dry-run | بسته به صورت واقعی پاک نخواهد شد. |