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, перш ніж він почне передавати трафік.

Схожі статті