Вопрос: Как мне получить apt-get, чтобы игнорировать некоторые зависимости?


Как заставить apt-get игнорировать некоторые зависимости? Например, я хотел установить mailx поэтому я могу использовать его для отправки электронной почты из cron-скриптов / инструментов генерации отчетов. Однако установка mailx также устанавливает exim4 и целая куча зависимостей (у меня уже установлен Postfix) Мне действительно не нужно, и я думаю, что mailx также может жить без него.

Как игнорировать некоторые зависимости, но все же использовать apt-get, поскольку это хороший инструмент?


61
2018-03-22 08:17


Источник


Как установить постфикс? через пакет debian? или вы установили postfix из источника? - stew
Да, Postfix был установлен из источника - FrancisV
Пакет mailx от Debian «рекомендует» exim4, не требует его. Если вы не хотите устанавливать рекомендуемые пакеты, просто добавьте APT::Install-Recommends "false"; на ваш apt.conf, - ruief


Ответы:


Вы можете попробовать --nodeps флаг с apt-get,
Или загрузите пакет и установите его, используя dpkg с опцией --ignore-depends,

Например, если вы хотите установить пакет foo без зависимости bar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb

17
2018-03-22 08:24



Какая версия APT у вас есть? Мой (0.8.10) не имеет такого варианта. - Tshepang
говорить dpkg игнорировать dependencies не вариант для него. Он только сообщает dpkg игнорировать зависимости для этой транзакции, он попытается затем удовлетворить зависимости или удалить pacakge в следующий раз, когда вы что-нибудь сделаете. - stew
Еще не повезло с APT 0.8.16 BTW. Слишком плохо, потому что, похоже, нет разумных альтернатив. Какую версию вы использовали в 2011 году, чтобы заставить ее работать? - Christian
вы можете использовать apt-get download, а затем dpkg - Frederick Roth
--no-install-recommends работал на меня. - Olle Härstedt


Вы можете изменить зависимости пакета deb следующим образом:

  1. Распаковать deb: ar x golden-linux.deb (создаст, т. е. три файла: debian-binary control.tar.gz data.tar.gz)
  2. Распаковать архив управления: tar xzf control.tar.gz (создаст: postinst postrm preinst prerm md5sums control)
  3. Зафиксировать зависимости в control (используйте текстовый редактор)
  4. Repack control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (важно для важности! См. [Примечание])

[Примечание]: dpkg не сможет быстро прочитать метаданные пакета, если он должен был найти, где закончилась секция данных!


41
2018-04-27 21:29



Ницца, он решает мне специальный случай зависимостей для «raring8» до «raring6», но с той же версией = (, очень спасибо - Felipe Alcacibar
Спасибо от меня тоже; Я должен был использовать это, потому что требуется приложение libmng1.so.1 хотя он отлично работал с набором символических ссылок libmng1.so.2, apt-get просто не мог быть намордник и продолжал раздражать меня о неудовлетворенных зависимостях (даже при установке чего-то совершенно не связанного!). Какой груз концепции мусора. - syntaxerror
+1 Это работало и для меня. пакет gnome-settings-daemon разыскивается gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11 но у меня уже есть gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2 (<- отметить «.2» на конце). Эта процедура позволила мне отредактировать пакет и заставить его использовать новую версию 11.2. СПАСИБО! - Eric Duncan
Отличное решение, спасибо. Я немного изменил шаги 2 и 4: 2. FILES=$(tar zxvf control.tar.gz) для хранения списка файлов в переменной. 4. tar zcf control.tar.gz $FILES - создать архив за один шаг без труб или переадресации, используя исходный список файлов (после модификации). - Brett
Еще пара предложений. Для # 4: добавить --ignore-failed-read так что tar игнорирует отсутствующие файлы из остальной части командной строки. (Например, prerm,postrm отсутствуют во многих пакетах.) Кроме того, tarball могут быть .xz скорее, чем .gzв новых версиях формата архива Debian (например, data.tar.xz). - Dan Lenski


Простое и простое решение: просто укажите нежелательные пакеты с дополнительным - после каждого из них.

Пример без - переключатель:

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

Пример использования переключателя избегать установки  exim4-base, Обратите внимание на - в конце:

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

Как вы видете, apt-get больше не пытается установить exim4-base пакет, и он не пытается установить свои различные зависимости (exim4-config и т.д).

И если вы ошибались и нуждались в этом exim4-base в конце концов, вы можете просто apt-get install это позже!


31
2018-01-30 19:43



Это прекрасно, спасибо. - Onlyjob
Это лучший способ избегать установки любая конкретная зависимость. Другие ответы либо избегают установки всех зависимостей, либо деинсталлируют зависимости после их установки, либо предлагают утомительно редактировать пакеты. - Neil
Это было именно то, что мне нужно! (установка gnupg2 без pinentry-gtk2 чтобы избежать X deps) - lapo
Это действительно здорово, однако в моем случае apt-get отказывается устанавливать пакет с «неудовлетворенными зависимостями» (который я указал с помощью этого метода). В частности, пакет документации на 100 мегабайт, который мне не нужен. - Rolf
Работает только с необязательными зависимостями, а не с требуемыми. Ошибка rmessage: Depends: xxx but it is not going to be installed, Вы можете пропустить все дополнительные пакеты с помощью apt-get install --no-install-recommends PACKAGE - koppor


После установки пакета с помощью --ignore-depends  , перейдите и отредактируйте /var/lib/dpkg/status файл и удалить любую зависимость, которая, по вашему мнению, не требуется. Просто будьте очень осторожны. Для того, чтобы отменить. для этого требуется более чем вероятно БЫТЬ обязательный


29
2018-05-11 21:33



После обновления /var/lib/dpkg/status может потребоваться завершить установку с помощью sudo apt-get -f install (нет необходимости указывать пакет). - Zmicier Zaleznicenka
Также можно найти здесь: superuser.com/a/815371/127024, - Johann


Поскольку вы установили postfix из исходного кода, вам необходимо установить пакет «фиктивный», который будет удовлетворять зависимости mail-транспорта-агента от mailx (или bsd-mailx). Пакет «equivs» в debian существует для создания такого фиктивного пакета, который вы можете установить, чтобы сообщить dpkg «эта зависимость удовлетворена»

Причина, по которой говорить, что dpkg просто игнорировать зависимости не является хорошим решением, заключается в том, что вы только сообщаете dpkg / apt игнорировать его для одной транзакции, вы не можете сказать ему игнорировать зависимости навсегда. Каждый раз, когда вы используете apt, он проверяет зависимости от все пакеты


12
2018-03-23 22:40



См. Также этот ответ, который ссылается на учебник (хотя он слишком сложный) superuser.com/a/416560/128960, Короткая версия: run equivs-control <name>, отредактируйте файл, созданный для обеспечения правильной зависимости, и получите красивое имя, затем выполните equivs-build <name> и наконец dpkg -i результирующий файл .deb. - Christian
ИМХО это действительно самое приятное решение. Все другие предлагаемые здесь решения немного слишком хакерские. Это нужно сделать только один раз, и потом вы можете установить любое программное обеспечение в зависимости от самокомпилированного программного обеспечения ... Итак, давайте рассмотрим этот ответ! - rugk


Я искал эту опцию на сервере Ubuntu 12.04 под управлением Xen. В моих доменах я использую -virtual kernel, и apt настойчиво пытался установить grub с каждым обновлением пакета ядра. Однако Grub не нужен внутри domU при использовании p [yv] grub.

Я искал вариант -nodeps для apt-get, но это не сработало, поэтому закончилось удаление / очистка grub * после каждого обновления ядра.

В конце концов, действительно чтение иногда появляется справочная страница - получается, что аналогичный параметр apt-get на 12.04 кажется --no-install-рекомендует, который на самом деле работает в этом случае, поскольку grub указан как «рекомендуется» в информации о пакете (я думаю так что это не «настоящая» зависимость?).

Я добавляю это здесь, потому что в моем случае он решил аналогичную проблему, и намек на «-no-install-рекомендует» еще не упоминался.


7
2017-11-14 12:18





Вы можете загрузить пакет с помощью apt-get, а затем установить его с помощью dpkg, указав вручную зависимость, которую вы хотите игнорировать.

Например, если я хочу загрузить mypackage, но это зависит от libperl5.14, и я не хочу устанавливать libperl5.14, поскольку у меня есть другая версия, я могу игнорировать эту зависимость следующим образом:

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb

5
2017-08-21 11:16



Просто упомянем, что это оставит вас «сломанным». Он не позволит вам устанавливать другие пакеты, пока вы не устраните недостающую зависимость. - drpexe