Защо 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, преди да пренася трафик.