مهدی
مهدی
خواندن ۶ دقیقه·۳ سال پیش

اطلاعات همراه با بسته های باینری ( Package meta-info )

توی مقاله قبلی راجع به خود بسته های باینری صحبت کردم اگه نخوندید از اینجا اون رو بخونید بعد بیاید اینجا تا ادامه بدیم.

سلام.

الان یک شناخت مختصر از بسته های باینری و محتویات اون ها داریم. توی قدم اول ببینیم اون فایل control.tar.gz چی هست و چی داره و به چه کاری میاد :)




یک بسته دبیان نه تنها فایل های اجرایی و اجزای مهم دیگه رو داره، بلکه یک قسمت از دنیای بزرگ تری هست که رابطه اش با بقیه بسته ها رو شرح میده ( ملزومات، پیش‌نیاز ها، تعارضات ( conflicts )، پیشنهاد ها ). همچنین اسکریپت های مورد نیازی که نگهدارنده و یا maintainer بسته برای اون بسته در زمان حیاتش نوشته را ( نصب ، حذف و آپدیت ) داراست. این اطلاعات توسط ابزار های مدیریت بسته استفاده میشن و قسمتی از خود اون نرم افزار نیستن و چیز هایی فرا بسته‌ای نام میگیرن ( یعنی اطلاعاتی راجع به اطلاعات دیگه به ما میدن :| )



فایل کنترل: the control file

این فایل از ساختاری شبیه به سرصفحه های ایمیل ( email headers ) داره که توسط استاندارد ( RFC 2822 ) تعریف میشن و توسط Debian Policy و manual page هاش خیلی خوب شرح داده شدن.

برای Debian Policy به اینجا و اگه میخواهید من پیج هاش رو بخونید به deb-control(5) و deb822(5) مراجعه کنید.

برای مثال کنترل فایل بسته apt اینگونه هست:

حالا بیاید فیلد های این فایل رو جدا جدا با هم بررسی کنیم ( اینجا چند تا از مهم هاش رو میگم )

پیش‌نیاز ها : فیلد Depends

پیش‌نیاز های مورد نیاز بسته برای اینکه درست کار کنه توی این فیلد نوشته شدن. این فیلد یک لیستی از شرط هاست که باید همه تایید بشن یعنی این لیست یه لیست اجباریه، اگر برای مثال بخواید بسته ای رو با دی‌پکیج نصب کنید، دی‌پکیج میاد این فیلد رو نگاه میکنه و اگر حتی یکی از شرط ها تحقق نیافت فرایند رو متوقف میکنه. این اطلاعات توسط ابزارهایی مثل apt استفاده میشن تا کتابخانه ها، درایور‌ها، ابزار ها و خلاصه همه‌ی چیزی که اون بسته بهشون نیاز داره رو با ورژنی خاصی که براش توی این فیلد مشخص شده فراهم کنن. برای هر پیش‌نیاز میشه یک دامنه ای از ورژن ها رو تعریف کرد. مثلا عکس بالا رو نگاه کنید بسته libc6 جلو اش نوشته ( >= 2.3.4 ) این یعنی برای اینکه apt درست کار کنه به این بسته و با ورژن مساوی یا بالاتر از 2.3.4 نیاز داره!

توصیه شده ها، پیشنهاد ها Recommends, Suggests
این دوتا فیلد پیش‌نیاز هایی رو معرفی میکنن که اجباری برای نصبشون نیست. بسته های فیلد توصیه شده ها ( Recommends ) که بسیار مهم تر از بسته های فیلد پیشنهاد ها هستن، قابلیت ها و توان‌مندی های بسته نصبی رو به میزان قابل توجهی بهتر میکنن ولی عملکرد پایه ای بسته نصبی بهشون وابسته نیست و اگر هم نباشن مشکلی نیست.
بسته های فیلد پیشنهاد ها از توصیه شده ها اهمیت کمتری دارن و نشان می دهد که بسته های خاصی ممکنه ابزار مربوطه را تکمیل و عملکرد اون را افزایش دهند.

شما بهتره که همیشه بسته های فیلد توصیه شده ها رو نصب کنید، مگر اینکه دقیقا بدونید چرا به اون ها یا چند تا از اون ها نیازی ندارید. این رفتار برای APT هم صدق میکنه تا وقتیه که خودتون تغییرش نداده باشید
و از اون لازم نیست که بسته های فیلد پیشنهاد ها رو نصب کنید مگر اینکه بدونید برای چی بهشون نیاز دارید,
رفتار APT رو میشه با کانفیگ کردن اون با : APT::Install-Recommends و APT::Install-Suggests و یا موقع نصب با آپشن های apt --[no-]install-recommends --[no-]install-suggests install package کنترل کرد
فیلد Pre-Depends یک Depends سخت گیرانه تر
همین‌طور که از اسمش پیداست این فیلد حتی مهم تر از فیلد پیش‌نیاز هاست.
بسته هایی که توی فیلد پیش‌نیاز ها هستن باید قبل از استخراج و کانفیگ شدن بسته ای که اون ها رو به عنوان پیش‌نیاز قید کرده نصب و کانفیگ بشن که یه چیز عادی و معمولی ای هست.
اما بسته یا بسته هایی که در فیلد Pre-Depends هستن باید حتی قبل از اینکه اسکریپت پیش از نصب ( pre-installation script ) بسته اجرا بشه، نصب و کانفیگ بشن. یعنی قبل از اینکه اراده کنیم بسته ای رو نصب کنیم باید اول Pre-Depends هارو نصب و کانفیگ کنیم و بعدش قصد نصب کنیم :))
این فیلد برای APT بسیار مهم هست و خودش همه اقدامات لازم رو برامون انجام میده.

جالبه بدونید که Pre-Depends ها خیلی کم پیشنهاد میشه که استفاده بشن ( یعنی دولوپر ها خیلی کم باید از اون ها استفاده کنن منظورم کسایی هست که میخوان بسته های رو ارائه بدن یا نگهداری کنن ) حتی به توسعه دهنده پیشنهاد میشه قبل از اینکه میخوان بسته ای رو توی این فیلد بگذارن، بیان و توی
debian-devel@lists.debian.org راجع بهش سوال بپرسن، بحث کنن و مشورت بگیرن.

تعارضات : فیلد Conflicts

این فیلد مشخص میکنه که چه بسته هایی نمیتونن همزمان با هم نصب بشن. معمول ترین اتفاقی که ممکنه رخ بده اینکه دو تا بسته فایلی دارن که توی هر دو اون ها اسم و مسیرش یکی باشه، یا سرویسی رو روی یک پورت TCP ارائه میدن.

دی‌پکیچ اگر بسته ای رو روی سیستم دید که با بسته ای که داره نصب میکنه تعارض داره، عملیات رو متوقف میکنه، مگر اینکه بسته جدید بگه من اون فایل رو جایگزین خواهم کرد، و در این صورت دی‌پکیج بسته جدید رو با بسته قدیمی جایگزین میکنه. APT هم همیشه به حرف شما گوش میده و اگر چنین موقعیتی براش پیش بیاد میپرسه که آیا اون بسته ای رو که مشکل ایجاد میکنه، حذف کنم؟

ناسازگاری ها : فیلد Breaks

این فیلد هم تأثیری شبیه به فیلد Conflicts داره ، اما دارای معنی خاصیه. این فیلد نشون میده که نصب یک بسته ، بسته دیگری (یا نسخه های خاصی از اون ) را "خراب" می کنه. به طور کلی ، این ناسازگاری بین دو بسته گذرا است و رابطه Breaks به طور خاص به نسخه های ناسازگار اشاره می کنه.
دی‌پکیج از نصب بسته ای که عملکرد بسته دیگه ای رو که روی سیستم هست خراب کنه ، امتناع می کنه و apt-get با به روز کردن بسته ای که مشکل ایجاد میکند، مشکل رو حل می کنه.این وضعیت ممکنه در مورد به روزرسانی های که سازگاری با گذشته ندارن ( They are not backward compatible ) رخ بده : این مورد در صورتی اتفاق می افتi که نسخه جدید دیگر با نسخه قدیمی کار نکنه و بدون ایجاد شرایط خاصی باعث خرابی برنامه دیگری بشه. فیلد ناسازگاری ها مانع از مواجه شدن کاربر با این مشکلات می شه.

مواردی که ارائه میشوند :‌ فیلد Provided

این فیلد یکی از جذاب ترین مبحث هارو معرفی میکنه به اسم بسته های مجازی ( virtual packages ) این بسته های قوانین مهمی دارن و میشه براشون یک مقاله جدا نوشت اما یه اشاره کوچک میتونه فضا رو برامون روشن تر کنه.

ارائه یک سرویس

همه سرور های پیام ( mail servers ) مثل postfix یا sendmail سرویسی رو به عنوان mail-trasport-agent ارائه میدن، با توجه به این، هر بسته ای که به این سرویس احتیاج داشته باشه تا بتونه فعالیت کنه، مثل بسته های مدیریت کننده mailing list ها ( برای مثال smartlist یا sympa ) خیلی ساده توی فیلد پیش نیاز ها قید میکنن که من به این سرویس احتیاج دارم نه اینکه بیان کلللی بسته دیگه رو تک تک نام ببرن، و بعد هم APT میاد بسته ای که این سرویس رو ارائه میده نصب میکنه و همه چیز میشه Up and running :)

فایل هایی که جایگزین میشوند: فیلد Replaces
این فیلد به ما میگه که این بسته فایل هایی داره که در بسته دیگه ای هم حضور دارن و این اجازه رو به مدیر بسته میده که اون ها رو موقع نصب بدون هیچ اشکالی جایگزین کنه.




فایل های مهم دیگه‌ای همراه با کنترل فایل در بسته باینری وجود داره که زندگی بسته به اون ها وابسته‌ست، اینجا هم یه نگاهی به اونها میندازیم و هم می‌بینیم موقع نصب بروزرسانی و یا حذف بسته چه اتفاقاتی میوفته.

دبیانلینوکسآموزشیادگیری
سلام، من مهدی‌ام، مطالعه‌ی تخصصیم پایتونه و هر از چندی یه مقاله راجع به پایتون می‌نویسم
شاید از این پست‌ها خوشتان بیاید