عملیات بستهها میان توزیعها و زنجیره اعتماد
در این درس ۲ بخش
در نگهداری حرفهای باید منشأ هر فایل و بسته و پیامد تغییر وابستگیها را توضیح دهید. پیشنیاز عملی، Ubuntu آزمایشی دارای apt-cache و dpkg-query است. بخش اجرایی فقط روی Ubuntu انجام میشود؛ مثالهای خانوادههای دیگر مرجع مقایسهاند و ادعای آزمون همه توزیعها نداریم. تألیف مستقل: تحریریه درسآوند.
منشأ فایل، نام بسته و منشأ نسخه را جدا کنید
مالکیت در پایگاه بستهها، اثبات دستنخورده بودن فایل یا محل دریافت تاریخی آن نیست. Candidate نسخه پیشنهادی حلکننده وابستگیهاست، نه لزوماً بالاترین شماره موجود؛ اولویت مخزن، معماری و محدودیت نسخه اثر دارند. فراداده محلی ممکن است قدیمی باشد؛ زمان بهروزرسانی را در تفسیر نتیجه لحاظ کنید.
dpkg-query -S /usr/bin/apt
dpkg-query -W -f='${Package} ${Version} ${Architecture}\n' apt
apt-cache policy apt
apt-cache depends aptخروجی اول معمولاً apt را مالک مسیر معرفی میکند؛ فرمان دوم نسخه و معماری نصبشده را نشان میدهد. در policy به Installed، Candidate و نشانی مخازن زیر جدول نسخهها توجه کنید. یک نسخه میتواند در چند مخزن باشد؛ از این خروجی بهتنهایی محل دانلود گذشته را نتیجه نگیرید. depends نیز نمایی از روابط بسته میدهد و برنامه نهایی تراکنش نیست. امضای معتبر مخزن، زنجیره انتشار را احراز میکند، اما گواه بیخطر بودن کد یا درست بودن انتخاب فروشنده نیست.
در Debian و Ubuntu، dpkg عملیات بسته محلی و APT انتخاب نسخه و وابستگی مخزن را مدیریت میکند. در Fedora و RHEL، RPM لایه بسته محلی و DNF مسئول حل وابستگی مخزن است. گزینههای DNF4 و DNF5 را بدون بررسی نسخه یکسان فرض نکنید. در openSUSE، Zypper از libzypp برای مخازن و وابستگیها استفاده میکند؛ بستهها معمولاً RPM هستند.
# مرجع خواندنی؛ هر سطر فقط روی خانواده مربوط
rpm -qf /usr/bin/bash
dnf info bash
zypper info bash
pacman -Qi bash
apk info busyboxArch از pacman و Alpine از apk استفاده میکند. نام بسته، تفکیک بسته توسعه و اجرا، و فایل تنظیمات بین این خانوادهها یکسان نیست. مالک فایل: rpm -qf در RPM، pacman -Qo در Arch و apk info --who-owns در Alpine. ابتدا نوع مسئله را مشخص کنید: جستوجو، بازرسی محلی، حل وابستگی یا تغییر سیستم؛ سپس فرمان همان نسخه ابزار را انتخاب کنید.
بهروزرسانی امنیتی یک سیاست است
در Ubuntu و Debian، مخزن و شاخه امنیتی اهمیت دارد؛ apt upgrade را معادل «فقط وصله امنیتی» ندانید. در DNF، محدودسازی با --security وابسته به advisoryهای مخزن است؛ برچسب نداشتن، دلیل مصون بودن بسته نیست. Zypper مفهوم patch و دسته امنیتی دارد؛ در Tumbleweed مسیر عادی ارتقا zypper dup است. در Arch ارتقای کامل با pacman -Syu انجام میشود و ارتقای ناقص پشتیبانی نمیشود. در Alpine نیز شاخه مخازن و تفاوت پوشش main و community تعیینکننده است.
پیش از افزودن مخزن ثالث، ناشر، نسخه هدف توزیع، کلید و دامنه اعتماد آن را بررسی کنید. Signed-By در APT میتواند اعتماد کلید را به مخزن مربوط محدود کند؛ خاموش کردن بررسی امضا راهحل خطای کلید نیست. نصب از مخزن توزیع دیگر ممکن است وابستگیهای بنیادی را عوض کند؛ مشابه بودن شماره نسخه کافی نیست.
تاریخچه DNF میتواند مبنای undo یا rollback تراکنش باشد، اما دسترسپذیری نسخه قدیمی و حل وابستگی همچنان لازم است. downgrade، تغییر پایگاه داده برنامه یا فایلهای تولیدشده پس از ارتقا را خودکار برنمیگرداند. Snapshot پیکربندیشده Btrfs و Snapper در openSUSE نیز فقط بخشهای مشمول snapshot را بازمیگرداند. برنامه بازیابی باید بسته، تنظیمات، داده سازگار و دسترسی نجات را پوشش دهد. اینجا فقط طرح تغییر را میخوانیم.
apt-get --simulate install aptشبیهسازی نباید بستهای نصب کند؛ ممکن است اعلام کند چیزی تغییر نمیکند یا فهرست Inst و Conf نشان دهد. این طرح بر فراداده فعلی متکی است، نه آزمون اجرای برنامه. تمرین: اگر فایل اجرایی موجود باشد اما جستوجوی مالک بسته نتیجه ندهد، آیا باید آن را حذف کرد؟ پاسخ: خیر؛ ممکن است دستی نصب شده، از محیط مجازی آمده یا مسیرش پیوند باشد. منشأ و مصرفکننده را بررسی کنید. نبود مالک صرفاً سرنخ است، نه حکم حذف.
مدیریت سرویس نیز به توزیع وابسته است. در نصبهای متداول Ubuntu و بسیاری از خانوادههای این درس systemd را میبینید؛ Alpine معمولاً از OpenRC برای خدمات استفاده میکند. وجود فرمان systemctl بهتنهایی فعال بودن systemd بهعنوان مدیر سرویس را ثابت نمیکند، خصوصاً در کانتینر و WSL. در OpenRC، rc-service وضعیت جاری و rc-update عضویت در runlevel را مدیریت میکند. پیش از دنبال کردن درس بعد، نوع محیط و در دسترس بودن مدیر کاربر systemd را بررسی کنید.
منابع رسمی انگلیسی:
APT cache: https://manpages.debian.org/trixie/apt/apt-cache.8.en.html
APT trust: https://manpages.debian.org/testing/apt/apt-secure.8.en.html
APT repository keys: https://manpages.debian.org/testing/apt/sources.list.5.en.html
RPM manual: https://rpm.org/docs/6.0.x/man/rpm.8
DNF5 upgrade: https://dnf5.readthedocs.io/en/latest/commands/upgrade.8.html
DNF5 history: https://dnf5.readthedocs.io/en/latest/commands/history.8.html
Zypper manual: https://manpages.opensuse.org/Tumbleweed/zypper/zypper.8.en.html
Arch system maintenance: https://wiki.archlinux.org/title/System_maintenance
Alpine apk: https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html
Alpine OpenRC: https://wiki.alpinelinux.org/wiki/OpenRC
متن درسهای عمومی را بدون ورود بخوانید.