Вопрос или проблема
Могу ли я настроить Ubuntu так, чтобы она никогда не устанавливала конкретный пакет, даже если он требуется для установки другого пакета?
Как и в Debian, мы можем использовать apt-pinning для управления версиями и установкой, в Ubuntu тоже.
Чтобы заблокировать установку определённого пакета, мы можем добавить следующие строки в /etc/apt/preferences
Package: <nameofpackage>
Pin: release *
Pin-Priority: -1
Установив отрицательный приоритет для этого пина, мы заблокируем установку <nameofpackage>
. Критерий пина обязателен, но здесь мы используем подстановочный знак. Мы можем внести в чёрный список более конкретные версии пакета, изменив строку Pin, см. man apt_preferences.
Перед тем как продолжить, настоятельно рекомендуется прочитать упомянутую выше документацию и справочную страницу из apt_preferences, так как ошибки в этих файлах не проверяются apt, и если они возникнут, могут нарушить управление пакетами.
Для альтернативы и для предотвращения обновления определённого пакета см.:
У меня есть пакет, который постоянно возвращается и ломает git
sudo apt-mark hold libgnutls-deb0-28
это должно предотвратить установку этого пакета
В Debian вы можете заблокировать пакет, и он больше не будет обновляться
# echo name_of_package hold | dpkg --set-selections
но я не уверен, что вы можете запретить
Ответ или решение
Задать вопрос о блокировке установки определенного пакета в Ubuntu вполне уместно, поскольку это может помочь избежать нежелательных последствий, например, конфликтов с другими установленными пакетами. Ниже приведены несколько способов, как можно запретить установку конкретного пакета.
Метод 1: Использование APT пиннинга
Вы можете воспользоваться функцией пиннинга APT, чтобы заблокировать установку пакета. Для этого выполните следующие шаги:
-
Откройте терминал.
-
Создайте или отредактируйте файл
/etc/apt/preferences
:sudo nano /etc/apt/preferences
-
Добавьте следующие строки в файл, заменив
<nameofpackage>
на имя пакета, который вы хотите заблокировать:Package: <nameofpackage> Pin: release * Pin-Priority: -1
Присвоение отрицательного приоритета (-1) гарантирует, что данный пакет не будет установлен, даже если его требуется установить в зависимости от других пакетов. На практике это означает, что менеджер пакетов APT будет игнорировать его при установки или обновлении.
-
Сохраните изменения и выйдите из редактора.
Важно: Перед редактированием этого файла рекомендуется ознакомиться с документацией и мануалом apt_preferences
, так как ошибки в этих файлах могут привести к проблемам с управлением пакетами.
Метод 2: Использование apt-mark
Если вы хотите предотвратить обновление или установку определенного пакета, вы можете использовать команду apt-mark
. Например, чтобы заблокировать пакет libgnutls-deb0-28
, выполните следующую команду:
sudo apt-mark hold libgnutls-deb0-28
Это не позволит пакету обновляться или устанавливаться, пока вы не отмените блокировку. Для этого выполните команду:
sudo apt-mark unhold libgnutls-deb0-28
Метод 3: Использование команды dpkg
В Debian более старинные методы также могут быть полезны и в Ubuntu. Вы можете заблокировать обновление пакета с помощью следующей команды:
echo name_of_package hold | dpkg --set-selections
Имейте в виду, что этот метод может не полностью блокировать установку пакета, но предотвращает его автоматическое обновление.
Заключение
Теперь вы располагаете несколькими способами запретить установку конкретного пакета на Ubuntu. Использование пиннинга APT является наиболее надежным методом, однако apt-mark
также предоставляет простое средство для блокировки обновлений. Убедитесь, что вы внимательно следите за тем, какие изменения вносите в систему, чтобы избежать потенциальных конфликтов и проблем с управлением пакетами.