Як я можу отримати apt-get ігнорувати деякі залежності?


86

Як зробити так, щоб apt-get ігнорував деякі залежності? Наприклад, я хотів встановити mailx, щоб я міг використовувати його для надсилання електронної пошти із cron script / інструментів для створення звітів. Однак при встановленні mailx також встановлюється exim4 та ціла купа залежностей (у мене вже встановлений Postfix), мені це не дуже потрібно, і, напевно, пошта може також жити без цього.

Як я ігнорую деякі залежності, але все ж використовую apt-get, оскільки це хороший інструмент?


як встановлюється постфікс? через пакет debian? чи ви встановили постфікс із джерела?
тушковане

Так, Postfix було встановлено з джерела
FrancisV

3
Пакет Mailx Debian лише 'рекомендує' exim4, не вимагає цього. Якщо ви не хочете встановлювати рекомендовані пакети, просто додайте їх APT::Install-Recommends "false";до своїх apt.conf.
ruief

Я знайшов задовільну відповідь на це на unix.stackexchange.com; unix.stackexchange.com/a/404449/23542
artfulrobot

Відповіді:


45

Просте і легке рішення: просто вкажіть небажані пакети з додатковими -після кожного з них.

Приклад без -вимикача:

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це зробити пізніше!


5
Це найкращий спосіб уникнути встановлення будь-якої конкретної залежності. Інші відповіді або уникають встановлення всіх залежностей, видалення залежностей після їх встановлення, або пропонують втомливо редагувати пакети.
Ніл

1
Це саме те, що мені було потрібно! (установка gnupg2без pinentry-gtk2уникнення X deps)
lapo

Це дійсно чудово, проте в моєму випадку apt-get відмовляється встановлювати пакет із "невиконаними залежностями" (що я вказав за допомогою цього методу). Зокрема пакет документації на 100 мегабайт, який мені не цікавий.
Рольф

3
Працює лише з необов'язковими залежностями, а не з необхідними. Rmessage Помилка: Depends: xxx but it is not going to be installed. Ви можете пропустити всі необов'язкові пакети зapt-get install --no-install-recommends PACKAGE
koppor

Також не працює з віртуальними пакетами. Але дивіться unix.stackexchange.com/a/404449/23542
artfulrobot

55

Ви можете змінити залежності дебетового пакету так:

  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 управління)
  3. Виправлення залежностей у control(використовуйте текстовий редактор)
  4. Перепакувати control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Перепакувати деб: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(замовлення важливо! Див. [Примітка])

[Примітка]: dpkg не зможе швидко прочитати метадані пакета, якби довелося шукати, де закінчився розділ даних!


2
Приємно, це вирішує для мене особливий випадок залежності від "raring8" до "raring6", але та сама версія = (, дуже дякую
Феліпе Алькасібар

1
Спасибі й мені; Мені довелося скористатися цим, оскільки потрібна програма, libmng1.so.1хоча вона прекрасно працювала із встановленим символьним посиланням libmng1.so.2. apt-getпросто не могло бути задумливим і постійно дратувало мене щодо невиконаних залежностей (навіть при встановленні чогось абсолютно не пов'язаного!). Яке навантаження сміття.
синтаксичний помилок

+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. СПАСИБІ!
Ерік Дункан

1
Чудове рішення, дякую. Я трохи змінив крок 2 і 4: 2. FILES=$(tar zxvf control.tar.gz)щоб зберегти список файлів у змінній. 4. tar zcf control.tar.gz $FILES- створити архів за один крок без труб або переадресацій, використовуючи оригінальний список файлів (після модифікації).
Бретт

2
Ще одна пара припускає. Для №4: додайте --ignore-failed-readтак, щоб tarігнорувати відсутні файли з решти командного рядка. (Наприклад, prerm, postrmвідсутні багато пакунків.) Крім того , тарбол може бути , .xzа не .gzв більш нових версіях формату архіву Debian (наприклад data.tar.xz).
Дан Ленскі

33

Після того, як ви встановите пакет з --ignore-depends опцією, перейдіть і відредагуйте /var/lib/dpkg/statusфайл, і видаліть необхідну залежність. Просто будьте дуже обережні. Для того, щоб деп. буде необхідно, це більш ніж імовірно BE потрібно


3
Після оновлення /var/lib/dpkg/statusможливо, доведеться закінчити встановлення sudo apt-get -f install(не потрібно вказувати пакет).
Zmicier Zaleznicenka

Тут також знайдено: superuser.com/a/815371/127024 .
Йоганн

Це дає мені повзання, але це спрацювало бездоганно!
Девід Шмітт

25

Ви можете спробувати --nodepsпрапор apt-get.
Або завантажте пакет і встановіть його за dpkgдопомогою опції --ignore-depends.

Наприклад, якщо ви хочете встановити пакет fooбез залежності bar:

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

52
Яка у вас версія APT? У шахти ( 0.8.10 ) немає такої можливості.
thepang

8
сказати dpkg ігнорувати залежність не є для нього варіантом. Він лише каже dpkg ігнорувати залежності для цієї транзакції, а потім намагатиметься задовольнити залежності або видалити пакунок наступного разу, коли ви щось зробите.
тушковане

2
Досі не пощастило з APT 0.8.16 BTW. Дуже погано, оскільки не здається розумних альтернатив. Яку версію ви використовували ще у 2011 році для того, щоб це працювало?
Крістіан

2
ви можете скористатися apt-get скачуванням, а потім dpkg
Фредерік Рот

7
--no-install-recommendsпрацював на мене.
Olle Härstedt

14

Оскільки ви встановили постфікс із джерела, вам потрібно встановити "фіктивний" пакет, який задовольнятиме залежність поштового транспорту-агента від mailx (або bsd-mailx). Пакет "equivs" в debian існує для створення такого макетного пакету, який можна встановити, щоб сказати dpkg "ця залежність задоволена"

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


2
Дивіться також цю відповідь, що посилається на підручник (хоча він надмірно складний) superuser.com/a/416560/128960 . Коротка версія: запустіть equivs-control <name>, відредагуйте створений файл, щоб забезпечити потрібну залежність та добре ім'я, потім запустіть equivs-build <name>і, нарешті, dpkg -iотриманий файл .deb.
Крістіан

1
ІМХО це справді найприємніше рішення. Всі інші запропоновані тут рішення є трохи надто хакерськими. Це потрібно зробити лише один раз, і ви можете встановити будь-яке програмне забезпечення залежно від самостійно складеного програмного забезпечення після цього ... Тож давайте підтвердити цю відповідь!
rugk

7

Я шукав цю опцію на сервері Ubuntu 12.04 під керуванням Xen. У своїх доменах я використовую -virtual ядро, і apt наполегливо намагався встановити grub з кожним оновленням пакета ядра. Однак груб не потрібен всередині domU при використанні p [yv] grub.

Я шукав варіант -nodeps для apt-get також, але це не спрацювало, тому закінчилося видалення / очищення grub * після кожного оновлення ядра.

Зрештою, справді читання чоловічої сторінки допомагає іноді - виявляється, подібний варіант apt-get 12.04 здається --no-install-рекомендує, що насправді працює в цьому випадку, оскільки grub вказаний як "рекомендований" у інформація про пакет (я думаю, це не "реальна" залежність?).

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


6

Ви можете завантажити пакет з apt-get, а потім встановити його з dpkg, вручну перелічивши залежність, яку ви хотіли б проігнорувати.

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

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

Зазначимо лише, що це залишить вас спритним "розбитим". Це не дозволить вам встановлювати інші пакети, поки ви не виправите відсутність залежності.
drpexe

6

Альтернативний спосіб вручну налаштувати залежності:

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb

2

У моїй системі debian від фактично залежить bsd-mailx default-mta | mail-transport-agent(ви можете перевірити, від чого залежить пакет apt-cache show <pkg>для чого завгодно в архіві чи dpkg -s <pkg>для встановлених пакетів.

Можливо, у вашому пакеті Postfix не Provides: mail-transport-agentтак, щоб apt не розумів, що у вас встановлений MTA. Для цього варто було б подати помилку, якщо це офіційний пакет.


1

Для цього можна просто встановити цвях, який, на мою думку, не має цих залежностей?

apt-get install nail

-5

Ну - ні.

Використання роботи інших людей дуже важливо на шляху до будь-якого успіху. Створюючи деяке програмне забезпечення з джерела (tarball), ви упускаєте можливість використовувати роботу диспетчера пакунків дистрибутива.

Ви не отримаєте "безкоштовних" оновлень. Більшість випадків ніхто не оновлює пакунки, встановлені ними з джерела. Оскільки їм потрібно відслідковувати програмне забезпечення для нових версій, відновити його та всі залежні програми (спробуйте запам’ятати їх).

У вас виникнуть проблеми з іншими пакунками з репостів вашого розповсюдження. Саме такий випадок зазначений у запитанні: ubuntu має чудового менеджера пакунків та декількох дуже приємних людей, які підтримують пакунки. І вони вирішили, що для роботи програми mailx вам потрібен MTA. Отже, якщо ви встановили постфікс із джерел, ubuntu не просить вас встановити exim.

Якщо з якихось причин обслуговування сервера переходить на якусь іншу людину (наприклад, ваш проект стає дуже успішним, і ви вирішите найняти іншого хлопця, який керуватиме серверами, поки ви зайняті іншими речами), він, природно, розраховує працювати, dpkg --get-selectionsщоб отримати всі встановлені пакети.

Спробуйте якомога більше використовувати програмне забезпечення для управління пакетами. Навчіться створювати власні пакети, якщо ви не зможете знайти одного попередньо побудованого і ви станете кращим професіоналом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.