RPM اصلاً برای نصب نرمافزار ساخته نشد
خلاصهٔ کاملتر
نویسنده میگه روایت رایج از RPM اشتباهه: ردهت دنبال یه ابزار نصب نبود، چون خود نصب کردن مسئلهٔ سختی نیست. مسئلهٔ اصلی این بود که چطور صدها پروژهٔ بالادستی، که هرکدوم تقویم انتشار خودشون رو دارن، تبدیل به یه توزیع بشن بدون اینکه مهندسهای ردهت تا ابد سورس همهشون رو دستی وصله بزنن. جواب شد Pristine Sources، یعنی تاربال اصلی بالادست اصلاً دست نمیخوره و هر تغییر یه فایل پچ جدا و اسمدار کنارشه، بهعلاوهٔ یه spec file که میگه پچها چطور اعمال و بیلد بشن.
فایدهٔ عملیش اینه که رفتن روی نسخهٔ جدید بالادست یعنی بیلد دوباره با همون مجموعه پچ، نه مرج دستی یه فورک. یه بکپورت امنیتی هم بهجای یه تودهٔ مبهم تغییرات، به شکل یه دیف کوچیک تو spec file قابل بازبینیه. نکتهٔ کمتر شنیدهشده هم اینه که اولین ردهت لینوکس اصلاً rpm نداشت و از ابزاری به اسم rpp استفاده میکرد؛ اولین ابزاری که واقعاً اسمش rpm بود، نسخهٔ ۱.x نوشتهشده با Perl بود که اوایل ۱۹۹۵ با ردهت لینوکس ۲.۰ اومد، دو سال قبل از بازنویسی با C.
نکتهٔ بعدی اینه که RPM فقط یه آرشیو نیست، یه دیتابیس تراکنشی از وضعیت نصب سیستمه: هر فایل با مالک، دسترسی، چکسام و بستهای که بهش تعلق داره. برای همینه که rpm -V میفهمه یه فایل کانفیگ بیرون از پکیج منیجر دستکاری شده و rpm -qf سریع میگه یه فایل مال کدوم بستهست. روی دیگهٔ سکه اینه که این دیتابیس فقط وضعیت محلیه؛ یه تراکنش نصفهکاره خرابش میکنه و rpm --rebuilddb ایندکس رو از هدر بستهها میسازه ولی چیزی رو که اصلاً ثبت نشده برنمیگردونه.
به گفتهٔ نویسنده، غافلگیرکنندهترین بخش اینه که خود دستور rpm هیچوقت وابستگیها رو خودکار حل نکرده؛ فقط میگه چی کمه و پیدا کردن و مرتب کردن بقیه کار یه لایهٔ بالاتره. اول up2date و چند ابزار حالا فراموششده این نقش رو داشتن و Yum تازه با RHEL5 استاندارد شد. طراحی Yum مال سال ۲۰۰۰ بود و با بزرگتر شدن مخزنها کند میشد، چون وابستگی هر بسته رو جدا و بعد کل مجموعه رو برای هر تراکنش دوباره حساب میکرد.
DNF فرمت بسته و دیتابیس RPM رو دست نزد و فقط همون لایهٔ حل وابستگی رو عوض کرد: فورکی از Yum 3.4 با کتابخونهٔ hawkey که روی libsolv سواره و مسئله رو به شکل SAT (یعنی ارضاپذیری بولی، همون کلاس مسئلهای که ابزارهای وارسی صوری حلش میکنن) میبینه، نه یه پیمایش درختی دستساز. سازگاری خط فرمان هم عمدی بود و برای همین مهاجرت تقریباً نامرئی موند: DNF از فدورا ۱۸ آزمایشی اومد، از فدورا ۲۲ پیشفرض شد و حالا پیشفرض RHEL 8 به بعده.
نکات کلیدی:
- Pristine Sources یعنی سورس بالادست دستنخورده میمونه و هر تغییر یه پچ جدا و قابل حذفه
- اولین ابزار به اسم rpm نسخهٔ ۱.x با Perl بود و با ردهت لینوکس ۲.۰ در ۱۹۹۵ اومد؛ بازنویسی با C در ۱۹۹۷
- خود دستور rpm حل وابستگی نداره و Yum تازه از RHEL5 این نقش رو استاندارد کرد
- DNF فقط solver رو عوض کرد: hawkey روی libsolv و حل وابستگی بهشکل مسئلهٔ SAT
- DNF وابستگیهای ضعیف Recommends و Suggests رو پیشفرض میاره؛ با --setopt=install_weak_deps=False خاموش میشه
- dnf history undo فقط تراکنشهای DNF رو میشناسه و نصب مستقیم با rpm از دیدش نامرئیه




