Что означает State: not a real package (virtual) при просмотре информации о пакете?

Dmitriy_2014
На сайте с 01.07.2014
Offline
344
153

Почему при просмотре информации о пакете через apt show выдает что:

State: not a real package (virtual)

N: Can't select candidate version from package proftpd as it has no candidate

N: Can't select versions from package 'proftpd' as it is purely virtual

N: No packages found

А apt policy пишет что:

proftpd:

  Installed: (none)

  Candidate: (none)

Хотя сервис работает если проверить его статус через systemctl, порт открыт, и при proftpd help выводится справочная информация, как если бы программа установлена и работает в нормальном режиме.

Она типа как бы установлена в неофициальном режиме получается, в обход пакетного менеджера?


SA
На сайте с 12.04.2024
Offline
34
#1
Чат гпт что говорит по этому поводу?
SA
На сайте с 12.04.2024
Offline
34
#2
Бесплатно спросил у близнецов, сказали:
Вы совершенно верно подметили: похоже, proftpd у вас установлен "в обход" пакетного менеджера apt. Давайте разберем, почему так происходит и что означают сообщения, которые вы видите.
Что означает "State: not a real package (virtual)" и "purely virtual"
В контексте apt и Debian-подобных систем:
 * Virtual package (Виртуальный пакет): Это не реальный установочный пакет, который вы можете найти в репозитории и установить. Вместо этого, виртуальный пакет — это, скорее, зависимость, которая может быть удовлетворена несколькими реальными пакетами. Например, пакет mail-transport-agent является виртуальным. Он не существует как таковой, но его могут удовлетворить такие реальные пакеты, как postfix, exim4 и т.д.
 * "Can't select candidate version from package proftpd as it has no candidate" / "Can't select versions from package 'proftpd' as it is purely virtual": Это означает, что apt ищет пакет с именем proftpd в своих источниках (репозиториях), но не находит его как самостоятельный, устанавливаемый пакет. Он воспринимает proftpd как нечто, что может быть виртуальным пакетом, который не имеет конкретных версий для установки.
Почему apt policy показывает "Installed: (none)" и "Candidate: (none)"
 * apt policy показывает информацию о том, какие версии пакета доступны в репозиториях (Candidate) и какая версия установлена через apt (Installed).
 * Если apt не видит proftpd как "реальный" пакет в своих репозиториях (что подтверждается "purely virtual"), то, естественно, он не может предложить кандидата на установку, и не знает о том, что он установлен через свой механизм.
Почему сервис работает, порт открыт, и proftpd --help выводит информацию
Это ключевой момент, который указывает на то, что proftpd был установлен одним из следующих способов:
 * Ручная компиляция и установка из исходного кода: Это самый распространенный сценарий, когда ПО устанавливается "мимо" пакетного менеджера. Вы скачали исходники proftpd, скомпилировали их (./configure, make, sudo make install), и исполняемые файлы (например, proftpd) были помещены в системные пути (часто /usr/local/bin или /usr/local/sbin).
 * Установка из стороннего репозитория/PPA, который не был корректно добавлен или сконфигурирован для apt: Менеджер пакетов может быть настроен на использование только официальных репозиториев, а пакет установлен из другого источника, который не был адекватно проиндексирован.
 * Использование готовых бинарных файлов (portable): Вы могли просто скачать скомпилированные бинарники proftpd и разместить их где-то в системе, а затем создать unit-файл systemd для запуска сервиса или скрипт инициализации.
 * proftpd является частью другого пакета (маловероятно в данном случае, но возможно): Иногда один большой пакет может устанавливать несколько исполняемых файлов, и один из них может называться proftpd, но сам по себе proftpd не является отдельным пакетом в репозитории. Однако, сообщения apt больше указывают на чисто виртуальную природу.
Итог: Установка "в обход" apt
Да, ваше предположение верно. proftpd у вас установлен "в обход" пакетного менеджера apt. apt не знает о его существовании и установке, потому что он не управлял этим процессом.
Что это значит для вас:
 * Обновления: apt upgrade не будет обновлять proftpd. Вам придется обновлять его вручную (например, перекомпилировать новую версию из исходников).
 * Удаление: apt remove proftpd не сработает. Чтобы удалить proftpd, вам придется вручную удалить файлы, которые были установлены (исполняемый файл, конфигурационные файлы, man-страницы и т.д.).
 * Зависимости: apt не сможет проверить и установить зависимости, необходимые для proftpd, так как он не управляет его установкой.
Если вы хотите, чтобы proftpd управлялся apt, вам нужно будет удалить текущую установку и затем установить его из официальных репозиториев Debian/Ubuntu (если он там доступен) или из корректно добавленного стороннего репозитория.
Чтобы узнать, откуда запускается proftpd, можно попробовать:
which proftpd

или
find / -name proftpd 2>/dev/null | xargs ls -l

(будьте осторожны с этой командой, она может занять много времени и выдать много ошибок доступа)
А также посмотреть в unit-файле systemd для proftpd (например, /etc/systemd/system/proftpd.service или похожий) на строку ExecStart, чтобы увидеть полный путь к исполняемому файлу.

WebAlt
На сайте с 02.12.2007
Offline
261
#3
apt show показывает расширенную информацию о пакете.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий