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

Я нашел похожий вопрос: https://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies. Пара ответов предоставляет удобные шаги вручную для изменения зависимостей определенных пакетов.

Я все еще ищу надежный автоматизированный метод.

3 ответа3

24

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

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

Решение, которое я нашел:

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

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

2

То, что вы пытаетесь сделать, противоречит назначению менеджера пакетов, который пытается поддерживать нормальную среду, т. Е. Вы используете неправильный инструмент для этой работы. Не пытайся сломать apt-get.

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

И последнее замечание: вы можете поставить под сомнение целесообразность сопровождения esl-erlang включить некоторые зависимости, но вы не можете обвинить менеджер пакетов в предполагаемом поведении. Если вы считаете, что эти зависимости неверны, вы должны сообщить об ошибке в пакет.

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>/";

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .