FreeBSD دو روش عمده برای نصب برنامه‌ها در اختیار کاربر قرار می‌دهد:

  1. استفاده از Ports Collection (نصب از طریق کد‌های منبع)
  2. استفاده از بسته‌ها (نصب از طریق باینری‌های از پیش کامپایل شده)

در این مقاله نحوه استفاده از بسته‌ها را شرح داده و استفاده از 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
بسته به صورت واقعی پاک نخواهد شد.