Package Management در FreeBSD

همانطور که قبلاً قول داده بودم و نیز یک شماره به عنوان local authentication در FreeBSD ارایه کردم،‌ این مطلب نیز از سری مطالب پایه‌ای در FreeBSD می‌باشد.bsd_o
سیستم port به عنوان package management در FreeBSD مورد استفاده قرار می‌گیرد و اگر از قبل با آن آشنا نیستید بهتر است موارد زیر را بخوانید:

  • بر خلاف yum و apt که یک نرم‌افزار را به چند بسته می‌شکنند و اصطلاحاً به چنین package management هایی multipart package systems گفته می‌شود. اما port چنین نیست. هر کدام معایب و مزایایی دارند.

  • در port بسته از اول کامپایل می‌شود ولی در package management هایی چون apt و yum باینری بسته نصب می‌شود. (هر چند علاوه بر port شما می‌توانید از گزینه‌ای دیگر برای نصب برنامه در FreeBSD نیز استفاده نمایید که سرعت کار بالا رود.)

  • port دارای یک Directory Structure در /usr/ports/ می‌باشد که برنامه‌ها را طبقه‌بندی کرده است و هر برنامه دارای یک Makefile می‌باشد. اینDirectory Structure باید به روز با سرور باشد.

  • فرض بر این است که خواننده با دستور make و کامپایل کردن آشناست.

  • FreeBSD را به عنوان یک سیستم‌عامل لخت می‌شناسند و حتی بعضی از فرمان‌های اولیه که بر روی port ها کار می‌کنند را باید نصب کرد.

۱. گام اول به روز شدن Port Tree:

۱.۱ استفاده از portsnap

نیاز است قبل از هر کاری Port Tree یعنی همان دایرکتوری /usr/ports/ را با سرور به روز کنید. بدین منظور باید از دستور portsnap استفاده کرد.
نکته: portsnap جزو دستور‌های base سیستم می‌باشد.

۲.۱ استفاده از svn:

راه دیگری نیز برای به روز رسانی Port Tree وجود دارد که استفاده از Subversion به صورت زیر می‌باشد:

سناریو کمی با قبل فرق دارد، زیرا دستور svn جزو فرمان‌های base نمی‌باشد و باید در ابتدا بسته subversion را به صورت زیر نصب نمایید:

سپس دو فرمان زیر را به کار برید:

نکته: برای بار اول باید به ریشه Port Tree رفته و یک index بسازید:

همچنین می‌توانید به جای فرمان بالا از make fetchindex استفاده نمایید.

۲. کار دستی با port ها:

در این قسمت قبل از هر چیز باید وارد ریشه Port Tree شویم:

فرض بر این است که می‌خواهیم tcpdump را نصب نماییم. بدین منظور اینگونه رفتار می‌کنیم:

اما خروجی فرمان مذکور زیاد می‌شود و برای جلوگیری از این موضوع key را با name تعویض می‌کنیم:

باز برای کوچکتر شدن خروجی فرمان زیر را استفاده می‌کنیم:

در‌واقع فرمان فرقی نکرد، بلکه برای مسیر‌ها یک grep نوشتیم تا فقط آن‌ها را چاپ نماید. سپس وارد مسیر tcpdump می‌شویم تا آن را نصب نماییم:

در دایرکتوری هر port، چندین فایل وجود دارد که یکسری از آن‌ها بعد از کامپایل port بوجود می‌آیند، در این قسمت به توضیح برخی از آنها می‌پردازیم:
Makefile: وقتی از دستور make استفاده می‌کنیم باید یا به صورت پیش‌فرض در دایرکتوری جاری چنین فایلی وجود داشته باشد و یا به دستور make چنین فایلی را معرفی کنیم. (به صورت پیش‌فرض FreeBSD از GNU make استفاده می‌نماید.)

  • distinfo: شامل اسامی و checksum فایل‌هایی می‌باشد که باید دانلود شوند.

  • pkg-descr: جزییات بیشتری از برنامه در این فایل توضیح داده شده‌اند.

  • pkg-plist: در این فایل لیست فایل‌های نصب شده ذخیره می‌گردد. و با توجه به این فایل deinstall انجام می‌شود.

  • /files: این دایرکتوری شامل patchها برای کامپایل بر روی برنامه می‌باشد. همچنین این دایرکتوری جایگاهی است برای دیگر فایل‌ها که به ساختن port کمک می‌کنند.

  • /work: در این دایرکتوری کامپایل صورت می‌گیرد و configuration file ها و دیگر فایل‌ها موقت در اینجا قرار می‌گیرند. به عنوان مثال فایل‌های دانلودی در اینجا هستند.

زمانی که وارد شاخه port یعنی /usr/ports/net/tcpdump/ شدید، می‌توانید کار کامپایل را شروع نمایید.
نکته: بهتر است برای هر port لیست از dependency هایش بگیرید تا مطمئن شوید چقدر کار دارید و خدای ناکرده چیزی نامربوط به سرور نصب نکنید:

سپس کار را با با دستور زیر شروع می‌کنیم:

نکته: به صورت پیش‌فرض برای شما make config اجرا می‌شود، که باید port خود را قبل از کامپایل پیکربندی نمایید. برای tcpdump صفحه زیر به نمایش در می‌آید:
tcpdump_for_bsd
نکته: عموما چنین صفحات پیکربندی را در APT یا YUM کمتر دیده‌اید.
نکته: کافیست بخواهید دوباره آن را پیکربندی نمایید و کامپایل نمایید،‌از دستورات زیر استفاده می‌نمایید:

نکته: اگر بخواهید فایل پیکربندی را پاک نمایید می‌توانید از دستور زیر استفاده نمایید:

نکته: فرض کنید، یکبار پیکربندی کرده‌اید، می‌توانید با دستور زیر پیکربندی خود را مشاهده نمایید:

نکته: در مورد متغیر‌های جلوی configure/. توضیح نمی‌دهم، زیرا قرار بر این بود که شما با کامپایل کردن آشنا باشید. جلوی دستور make با کمی تغییر می‌توانید از آن‌ها بهره ببرید.

۳. استفاده از فرمان pkg:

تا الان مکانیزمی مبتنی بر دانلود کد و کامپایلش را مطرح کردیم. از قدیم الایام،‌ در کنار port شما می‌توانستید از این مکانیزم استفاده نموده و بسته را بصورت باینری دانلود و نصب نمایید.
نکته: وقتی یک سیستم FreeBSD را نصب نمودید فرمان زیر را اجرا کنید تا database آن از حالت قدیمی به New Generation تبدیل شود:

نکته: ممکن است برای بعضی از port ها به مشکل بر بخورید بدین منظور باید در فایل etc/make.conf/ چنین بنویسید:

فرمان pkg را آهسته آهسته شروع کنیم. برخلاف فرمان‌های BSD-base که نوع help آن‌ها زیاد جالب نمی‌باشد، این فرمان سیستم help جالبی دارد. بگذارید از ابتدا شروع کنیم، این فرمان خود دارای زیرفرمان‌هایی همانند install و upgrade و غیره است. برای دیدن manual آن‌ها نیاز نیست man pkg را بخوانید. کافیست از دستورات زیر استفاده نمایید:

و هر فرمان دیگری که این دستور دارد می‌توان از آن help گرفت.
فرمان زیر محتوای یک بسته را نشان می‌دهد که معادل dpkg -L در APT می‌باشد:

برای install کردن برنامه کافیست از فرمان install استفاده نماییم، در سناریوی زیر برنامه nmap را نصب کرده‌ایم که یک dependency به همراه دارد:

برای پاک کردن یک port کافیست از فرمان delete استفاده نماییم:

اگر درport های نصب نشده دنبال نامی می‌گردید می‌توانید از فرمان زیر استفاده نمایید:

در‌واقع این فرمان معادل فرمان زیر در Port Tree می‌باشد:

اگر فرمان pkg info را بدون آرگومان که نام بسته باشد لیست کل بسته‌ها را به شما می‌دهد، همانند زیر:

اما اگر مشخصات بسته‌ای خاص را می‌خواهید می‌توانید اینگونه عمل نمایید:

برای اینکه با بحث نسخه‌بندی و version بسته‌ها آشنا شویم بهتر است با چند عملگر و دستور آشنا شویم:

  • =: این بدان معناست که بسته‌ جاری به روز است.

  • >: این بدان معناست که بسته جاری قدیمی‌تر از نسخه جاری می‌باشد.

  • <: این بدان معناست که بسته جاری به روزتر از نسخه جاری می‌باشد.

  • ؟: این بدان معناست که بسته در database یا Ports Tree نمایان نیست یا هنوز در Official Ports Tree قرار نگرفته است.

  • !: این بدان معناست که بسته در database نمایان نیست ولی port در Port Tree وجود دارد، Makefile این port به مشکل برخورده است و نمی‌تواند آخرین نسخه آن را تهیه کند.

  • # : این بدان معناست که بسته نصب شده منشاء و مبدأ ذخیره شده ندارد. می‌توانید این مشکل را با pkgdb -F حل نمایید.

دو دستور اساسی برای کار نسخه بسته‌ها وجود دارد یکی خود pkg است و دیگری portversion که در بسته portupgrade می‌باشد.
زمانی که برای اولین بار این بسته را اجرا می‌کنید چنین چیزی می‌بینید:

وقتی برای بسته‌هایی که هنوز upgrade نشده‌اند query می‌گیرید چینین چیزی می‌زنید:

فرض کنید می‌خواهیم curl را upgrade نماییم ، از فرمان زیر استفاده می‌کنیم:

شما نیاز دارید همانند apt-get update با سرور همگام شوید و metadata های خود را با سرور یکی کنید. بدین منظور باید از فرمان زیر استفاده نمایید:

۴. نکاتی در باب یادگیری کار با بسته‌ها و پورت‌ها :

  • مفاهیم مربوط به backend ها را خوب hack کنید.

  • تمام دستورات مرتبط به port ها را در حالت‌های خاص به کار برید، این بدان معناست که هر دستور و پارامتری جایی دارد.

  • کل سیستم را upgrade نکنید. یکی از خطرناک‌ترین کارهایی است که می‌توانید انجام دهید.

  • مفاهیم مربوط به پاکسازی دیسک (مربوط به port) را کاملاً فرا گیرید.

  • زمانی که در حال نصب port هستید، به دقت هر لحظه از آن را “بفهمید” که چه اتفاقی در حال انجام است.

  • مسیر کش‌های خود را پیدا کنید.

  • کل پارامتر‌های make را یاد بگیرید.

  • با pkg دوست باشید.

2 دیدگاه برای «Package Management در FreeBSD»

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *