Ігноруйте всі залежності для конкретного пакету з apt-get


16

Це дуже специфічне запитання, на яке Google не допоміг відповісти.

Я запускаю Ubuntu 13.04 с apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

Я хочу встановити Erlang з пакету .deb, але я не хочу витягувати всі його залежності. Сам пакет вказує, що це залежить від Java та wx бібліотек, але насправді вони не потрібні, якщо ви не хочете взаємодіяти з Java або wxWidgets.

Я можу встановити Erlang так

sudo dpkg -i --force-depends erlang.deb

Однак установка будь-чого іншого apt-getпісля цього не вдається через невиконання залежностей. Отже, якщо я хочу встановити git після Erlang, я отримую наступне

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Чи є спосіб зробити esl-erlangпакет закритим без запуску apt-get install -f?

Я хочу щось подібне:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

або так:

sudo apt-cache shut-package-up esl-erlang

або це:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

Я знайшов подібне запитання: /server/250224/how-do-i-get-apt-get-to-ignore-some-dependitions . Кілька відповідей надають зручні вручну кроки для зміни залежностей певних пакетів.

Я все ще шукаю надійний автоматизований метод.


Ви пробували --nodeps( apt-get) чи --ignore-dependsз dpkg?
Майк Кох

Відповіді:


27

Я розумію думку bjanssen, але диспетчеру пакунків здається смішним дозволити --force-dependsвстановлення одного пакету, але не допускає залежності від сили, що залежить, і назавжди, і зупини-попереджає мене.

У мене була аналогічна проблема з пакетом, який залежав від версії libcairo трохи вище, ніж той, який зараз доступний в Debian. Для моїх цілей це все ще працює чудово. Я радий продовжувати його використовувати, поки оновлення libcairo не з’явиться влучно. Я не хочу компілювати з джерела чи створювати власний пакет.

Я знайшов рішення:

  • редагувати /var/lib/dpkg/status,
  • знайдіть пакет із розбитими залежностями
  • відредагуйте Depends:рядок, щоб зупинити скаргу на пакет.

Я припускаю, що буде перезаписано наступного разу, коли пакет оновиться, але це саме те, що я хочу.


2
Це ідеально, саме те, що мені потрібно було тимчасово подолати неправильну залежність від PPA!
Кас

2

Те, що ви намагаєтеся зробити, - це проти мети менеджера пакунків, який намагається зберегти здорове середовище, якщо ви не використовуєте неправильний інструмент для роботи. Не намагайтеся зламати apt-get.

Правильний спосіб вирішити свою проблему - створити власний пакет із залежностей, які вам підходять. Існує офіційний спосіб (досить задіяний: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) та швидкий та брудний спосіб використання apt-buildабо для пакетів, які не є джерелом розповсюдження, checkinstall. Усі вироблені пакети apt-get з радістю встановлять.

На завершальній ноті, ви можете поставити під сумнів мудрість підтримуючого esl-erlang, щоб включити певні залежності, але ви не можете звинуватити менеджера пакунків у передбачуваній поведінці. Якщо ви вважаєте, що ці залежності неправильні, вам слід подати помилку в пакет.


Те, що ви сказали про "призначення менеджера пакунків", в основному відповідає дійсності, але також не слід узагальнювати. Я хочу навести приклад: потрібна одна програма libmng1. Але я libmng2встановив І встановлений символьний посилання libmng1.so. Працювала загроза, жодних проблем не виникала. Але apt-getзавжди скаржилися на "невиконані залежності". Тож, безумовно, є вагома причина, що намагається знайти спосіб заглушити здібність у цьому відношенні. Так як речі роблять роботу, він просто продовжує скаржитися на те , що просто не мають ніяких проблем. Він просто бачить проблеми там, де їх немає. І це дратує.
синтаксичний помилок

Це курйозна ситуація. Я думаю, ви встановили пакет із сховища нерозповсюдження? У такому випадку погляньте на equivs"замовкнення" підходу, не порушуючи його.
bjanssen

Ну, могло бути так. Але насправді це було не так ... Я просто встановив старіший пакет з того самого дистрибутива, тож в термінах Ubuntu я був на 15.x, але встановив libmng1 від 12.04 LTS.
синтаксичний помилок

0

Перевірте, чи "проксі-сервер" використовується в apt.conf(належно (тобто відповідно до вашої мережі)). Це також викликає такі проблеми, оскільки URL-адреси були б недосяжні.

Як правило, якщо ви використовуєте проксі, то ваш /etc/apt/apt.confвиглядатиме так:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.