چرا apt-cache برای بسته VPN شما «نصبشده (هیچ)» نشان میدهد
نصبشده (هیچ) یعنی بسته VPN نصب نشده است، نه اینکه وجود ندارد. پیش از ویرایش منابع، خطوط نامزد، پین و معماری را بخوانید.
بسته VPN که Installed: (none) گزارش میدهد گم نشده است؛ فقط نصب نشده است. خطی که تعیین میکند آیا میتوانید آن را نصب کنید Candidate است که APT آن را از نمایهها، نام suite، معماری و هر قاعده پینکردن در حال اجرا استخراج میکند. بیشتر گزارشها درباره بسته VPN ناپدیدشده در واقع مشکل نامزد هستند نه مشکل بستهبندی. پیش از دست زدن به حتی یک ورودی منابع، هر دو خط را بخوانید.
من ابتدا نامزد را بررسی میکنم چون فقط یک فرمان هزینه دارد و نیمی از حدسهای معمول را کنار میگذارد.
خروجی apt-cache policy چه چیزی به شما میگوید
apt-cache policy حافظه نهان محلی بستهها را میخواند، نه شبکه را. نسخه نصبشده، نسخه نامزد و جدول هر نمایهای که بسته را عرضه میکند همراه با اولویت متصل به آن چاپ میکند.
apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpnنامزد همان نسخهای است که APT همین حالا انتخاب میکرد. madison فهرست میکند هر منبع چه چیزی با اولویتش عرضه میکند، و اینگونه بستهای را میبینید که در یک نمایه هست اما رقابت پین را میبازد. راهنمای apt-cache هر دو را خواندن حافظه نهان میداند، پس هیچکدام ثابت نمیکند آینه در این لحظه در دسترس است.
اگر خط نامزد خالی باشد یا (none) نشان دهد، هیچ چیز در منابع پیکربندیشده برای این سامانه به شکلی که پیکربندی شده واجد شرایط نیست.
چهار دلیل برای ناپدید شدن نامزد
در عمل علت تقریباً همیشه یکی از چهار چیز است و هر یک درمان متفاوتی دارد.
نام suite در منابع شما باید با توزیعی که بسته برای آن ساخته شده مطابقت داشته باشد. سامانه Debian bookworm که به آینه trixie اشاره میکند، یا انتشار Ubuntu که در هنگام ارتقا در فایل sources.list.d تغییر نام داده، برای بستههایی که فقط در suite دیگر وجود دارند چیزی حل نمیکند. lsb_release -cs را با فیلد suite در هر ورودی مقایسه کنید.
APT فقط بستههایی را میبیند که برای معماریهایی ساخته شدهاند که dpkg میشناسد. یک کانتینر 32 بیتی، یک تصویر arm64 یا نصب Raspberry Pi که بستهای میخواهد که فقط برای amd64 ارسال میشود، به جای پیام خطا نامزد خالی میگیرد. dpkg --print-architecture و dpkg --print-foreign-architectures به شما میگویند در کدام مجموعه هستید.
مؤلفهها هم مهماند. بستهای در contrib یا non-free وقتی فقط main فعال است نامرئی است، و universe در Ubuntu همین رفتار را دارد. نمایه وجود دارد و بسته در آن است؛ فقط فهرست مؤلفههای فعال شما شامل آن نیست.
پینکردن همان بیصداست. فایلی در /etc/apt/preferences.d میتواند بستهای را زیر آستانه نصب محدود کند و آنگاه نامزدی کاملاً خوب از خروجی ناپدید میشود در حالی که نمایه هنوز آن را فهرست میکند. چون policy اولویتها را کنار هر منبع چاپ میکند، بستهای که هر منبعش شماره پین پایینی دارد نشانه است.
نمایههای کهنه شبیه بستههای گمشده به نظر میرسند
حافظه نهان یک تصویر لحظهای است. اگر آخرین apt update روی یک نمایه شکست خورده باشد، پرسوجوها همچنان از نسخه قدیمیتر پاسخ میدهند و بستهای که انتظار دارید ممکن است در آن نسخه نباشد.
apt update خطاها را برای هر نمایه چاپ میکند، پس آنها را بخوانید به جای اینکه مستقیم به آخرین خط بروید.
بهروزرسانیای که به خاطر خطای امضا، فایل release منقضی یا آینه غیرقابل دسترس شکست میخورد، نمایه قبلی را در جای خود میگذارد. این طراحی معقولی است، چون وقتی آینه برای مدت کوتاهی از کار میافتد حافظه نهان کارآمدی نگه میدارد. عارضه جانبی این است که جستوجو میتواند موفق شود در حالی که مخزن آفلاین است. همچنین یعنی نبود یک بسته تا زمانی که ندانید نمایه آخرین بار چه وقت گرفته شده چیزی را ثابت نمیکند. پیش از سرزنش نام بسته، تاریخ فایلهای زیر /var/lib/apt/lists را بررسی کنید.
بستهای را که واقعاً لازم دارید نام ببرید
OpenVPN یک دیمن است و قطعاتی که مردم معمولاً میخواهند بستههای جداگانهاند.
موتور، افزونه NetworkManager و ویرایشگر رومیزی سه بسته با سه نام هستند و افزونه یک گونه GTK دارد که نامش بین توزیعها متفاوت است. apt-cache search --names-only openvpn نامها و نامهای ارائهشده را تطبیق میدهد نه توصیفها، و همین چیزی است که وقتی تقریباً میدانید آن چیز چه نام دارد میخواهید.
اگر نام واقعاً ناشناخته است، یک بار در توصیفها جستوجو کنید، سپس به نامهای دقیق برگردید. پسوند -gui قرضگرفته از توزیعی دیگر را اضافه نکنید و نتیجه نگیرید که بسته دیگر وجود ندارد.
منابع را آخر از همه تغییر دهید، سپس تراکنش را بررسی کنید
افزودن مخزن تغییر میدهد چه کسی بهروزرسانیهای شما را تأمین میکند، پس به پایان بررسی تعلق دارد نه آغاز آن.
پیش از آن، انتشار، معماری، مؤلفه و وضعیت پین را تأیید کنید. بنویسید کدام یک از چهار مورد را بررسی کردید تا نفر بعدی جاروب را تکرار نکند. اگر هر چهار مورد درست باشند و نامزد هنوز نباشد، نتیجه صادقانه این است که این انتشار آن بسته را ارسال نمیکند. گزینههای باقیمانده backport، بسته فروشنده یا انتشار پشتیبانیشده دیگری است و هر یک انتخابی آگاهانه است نه حدس.
وقتی نامزد ظاهر شد، پیش از اجرا شبیهسازی کنید: apt-get install --simulate با نام بسته نشان میدهد چه چیزی کشیده و چه چیزی حذف میشود. در دسترس بودن بسته، نصب و تونل کارآمد سه مرحله جداگانه میمانند و تونل هنوز پیش از انتقال ترافیک به پروفایل، اعتبارنامهها، مسیرها و DNS خود نیاز دارد.