Wie kann ich einige Abhängigkeiten ignorieren?

86

Wie kann ich apt-get dazu bringen, einige Abhängigkeiten zu ignorieren? Ich wollte zum Beispiel mailx installieren, damit ich damit E-Mails von Cron-Skripten / Tools zur Berichterstellung senden kann. Die Installation von mailx installiert jedoch auch exim4 und eine ganze Reihe von Abhängigkeiten (ich habe bereits Postfix installiert), die ich nicht wirklich brauche und auf die mailx vermutlich auch verzichten kann.

Wie kann ich einige Abhängigkeiten ignorieren und trotzdem apt-get verwenden, da es ein gutes Tool ist?

FrancisV
quelle
Wie wird Postfix installiert? über das Debian-Paket? oder hast du postfix von der quelle installiert?
Eintopf am
Ja, Postfix wurde von der Quelle installiert
FrancisV
3
Das mailx-Paket von Debian 'empfiehlt' exim4 nur und benötigt es nicht. Wenn Sie die empfohlenen Pakete nicht installieren möchten, fügen APT::Install-Recommends "false";Sie sie einfach zu Ihren hinzu apt.conf.
Ruief
Ich habe eine zufriedenstellende Antwort auf diese Frage bei unix.stackexchange.com gefunden. unix.stackexchange.com/a/404449/23542
artfulrobot

Antworten:

45

Einfache und unkomplizierte Lösung: Geben Sie -nach jedem unerwünschten Paket ein zusätzliches an.

Beispiel ohne den -Schalter:

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
[...]

Beispiel mit dem Schalter, um die Installation zu vermeidenexim4-base . Beachten Sie die -am Ende:

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
[...]

Wie Sie sehen, apt-getwird nicht mehr versucht, das exim4-basePaket zu installieren , und es wird nicht versucht, die verschiedenen Abhängigkeiten ( exim4-configusw.) zu installieren .

Und wenn Sie sich geirrt haben und diese exim4-baseAbhängigkeit doch gebraucht haben, können Sie es einfach apt-get installspäter tun!

Jealie
quelle
5
Dies ist der beste Weg, um die Installation spezifischer Abhängigkeiten zu vermeiden . Die anderen Antworten vermeiden entweder die Installation aller Abhängigkeiten, deinstallieren Abhängigkeiten nach der Installation oder schlagen vor, Pakete mühsam zu bearbeiten.
Neil
1
Genau das habe ich gebraucht! (Installation gnupg2ohne pinentry-gtk2X Deps zu vermeiden)
Lapo
Das ist wirklich großartig, aber in meinem Fall weigert sich apt-get, das Paket mit "nicht erfüllten Abhängigkeiten" (die ich mit dieser Methode angegeben habe) zu installieren. Insbesondere ein 100-Megabyte-Dokumentationspaket, das mir egal ist.
Rolf
3
Funktioniert nur mit optionalen Abhängigkeiten, nicht mit erforderlichen. Fehler rmessage: Depends: xxx but it is not going to be installed. Sie können alle optionalen Pakete mitapt-get install --no-install-recommends PACKAGE
koppor
Funktioniert auch nicht mit virtuellen Paketen. Aber siehe unix.stackexchange.com/a/404449/23542
artfulrobot
55

Sie können die Abhängigkeiten eines Deb-Pakets folgendermaßen ändern:

  1. Entpacke deb: ar x golden-linux.deb(erzeugt zB drei Dateien: debian-binary control.tar.gz data.tar.gz)
  2. Kontrollarchiv entpacken: tar xzf control.tar.gz(wird erstellen: postinst postrm preinst prerm md5sums control)
  3. Abhängigkeiten in korrigieren control(Texteditor verwenden)
  4. Control.tar.gz neu verpacken: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Deb neu verpacken: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(Reihenfolge wichtig! Siehe [Anmerkung])

[Anmerkung]: dpkg wäre nicht in der Lage, die Metadaten eines Pakets schnell zu lesen, wenn es danach suchen müsste, wo der Datenabschnitt endet!

Janus Troelsen
quelle
2
Schön, es löst für mich einen speziellen Fall von Abhängigkeiten für "raring8" zu "raring6", aber die gleiche Version = (, sehr danke
Felipe Alcacibar 18.07.13
1
Danke auch von mir; Ich musste dies verwenden, weil eine Anwendung erforderlich war libmng1.so.1, obwohl sie mit einem auf gesetzten Symlink perfekt funktionierte libmng1.so.2. apt-getIch konnte mich einfach nicht täuschen lassen und nervte mich immer wieder über unerfüllte Abhängigkeiten (selbst wenn ich etwas installierte, das absolut nichts damit zu tun hatte!). Was für ein Müllkonzept.
Syntaxfehler
+1 Das hat auch bei mir perfekt geklappt. Paket gnome-settings-daemonwollte gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11ich aber schon haben gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<- beachte die ".2" am Ende). Mit diesem Verfahren konnte ich das Paket bearbeiten und die Verwendung der neueren Version 11.2 erzwingen. DANKESCHÖN!
Eric Duncan
1
Tolle Lösung, danke. Ich habe die Schritte 2 und 4 ein wenig geändert: 2. FILES=$(tar zxvf control.tar.gz)um die Dateiliste in einer Variablen zu speichern. 4. tar zcf control.tar.gz $FILES- Erstellen Sie das Archiv in einem einzigen Schritt ohne Pipes oder Redirects unter Verwendung der ursprünglichen Dateiliste (nach der Änderung).
Brett
2
Noch ein paar Vorschläge. Für # 4: Addieren, --ignore-failed-readdamit tarfehlende Dateien in der restlichen Befehlszeile ignoriert werden. (Zum Beispiel prerm, postrmsind aus vielen Paketen fehlen.) Auch kann der tarballs sein , .xzanstatt .gzin neueren Versionen des Debian - Archiv - Formats (zB data.tar.xz).
Dan Lenski
33

Nachdem Sie das Paket mit der --ignore-depends Option installiert haben , bearbeiten Sie die /var/lib/dpkg/statusDatei und entfernen Sie alle Abhängigkeiten, die Ihrer Meinung nach nicht benötigt werden. Sei einfach sehr vorsichtig. Um eine dep. erforderlich ist, ist es mehr als wahrscheinlich BE erforderlich

Manolis
quelle
3
Nach dem Update /var/lib/dpkg/statuskann es erforderlich sein, die Installation mit sudo apt-get -f install(ohne Angabe eines Pakets) abzuschließen.
Zmicier Zaleznicenka
Auch hier zu finden: superuser.com/a/815371/127024 .
Johann
Das macht mir Angst, aber es hat einwandfrei funktioniert!
David Schmitt
25

Sie können die --nodepsFlagge mit probieren apt-get.
Oder laden Sie das Paket herunter und installieren Sie es dpkgmit der Option --ignore-depends.

Wenn Sie beispielsweise ein Paket fooohne Abhängigkeit installieren möchten bar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb
Bart De Vos
quelle
52
Welche APT-Version hast du? Meins ( 0.8.10 ) hat keine solche Option.
Tshepang
8
dpkg anzuweisen, Abhängigkeiten zu ignorieren, ist für ihn keine Option. Es weist dpkg nur an, die Abhängigkeiten für DIESE Transaktion zu ignorieren. Es wird dann versucht, die Abhängigkeiten zu erfüllen oder das Paket zu entfernen, wenn Sie das nächste Mal etwas tun.
Eintopf am
2
Immer noch kein Glück mit APT 0.8.16 BTW. Schade, da es keine vernünftigen Alternativen zu geben scheint. Welche Version haben Sie 2011 verwendet, um dies zum Laufen zu bringen?
Christian
2
Sie können Apt-Get Download und dann Dpkg
Frederick Roth
7
--no-install-recommendsarbeitete für mich.
Olle Härstedt
14

Da Sie Postfix aus dem Quellcode installiert haben, müssen Sie ein "Dummy" -Paket installieren, das die Mail-Transport-Agent-Abhängigkeit von mailx (oder bsd-mailx) erfüllt. Das Paket "equivs" in debian existiert, um ein solches Dummy-Paket zu erstellen, das Sie installieren können, um dpkg mitzuteilen, dass "diese Abhängigkeit erfüllt ist".

Der Grund dafür, dass dpkg angewiesen wird, Abhängigkeiten einfach zu ignorieren, ist keine gute Lösung, da Sie dpkg / apt nur anweisen, sie für eine einzelne Transaktion zu ignorieren. Sie können dpkg nicht anweisen, Abhängigkeiten für immer zu ignorieren. Jedes Mal, wenn Sie apt verwenden, werden die Abhängigkeiten aller Pakete überprüft

Eintopf
quelle
2
Siehe auch diese Antwort, die auf ein Tutorial verweist (obwohl es zu komplex ist) superuser.com/a/416560/128960 . Die Kurzversion lautet: Ausführen equivs-control <name>, die erzeugte Datei bearbeiten, um die richtige Abhängigkeit bereitzustellen und einen schönen Namen zu haben, dann ausführen equivs-build <name>und schließlich dpkg -idie resultierende .deb-Datei.
Christian
1
IMHO das ist wirklich die schönste Lösung. Alle anderen hier angeforderten Lösungen sind etwas zu hackisch. Dieser Vorgang muss nur einmal durchgeführt werden und Sie können anschließend jede Software installieren, die von der selbst kompilierten Software abhängt. Stimmen wir dieser Antwort also zu!
Rugk
7

Ich habe nach dieser Option auf einem Ubuntu 12.04-Server gesucht, auf dem Xen ausgeführt wird. In meinen Domains verwende ich den -virtuellen Kernel und versuche beharrlich, grub mit jedem Kernel-Paket-Upgrade zu installieren. Grub wird jedoch nicht in der domU benötigt, wenn p [yv] grub verwendet wird.

Ich habe auch nach der Option -nodeps gesucht, um apt-get zu verwenden, aber es hat nicht funktioniert. Daher wurde grub * nach jedem Kernel-Upgrade deinstalliert / gelöscht.

Schließlich hilft es manchmal , eine Manpage wirklich zu lesen - es stellt sich heraus, dass eine ähnliche apt-get-Option für 12.04 zu sein scheint - no-install-recommends, was in diesem Fall tatsächlich funktioniert, da grub in der Liste als 'Recommended' aufgeführt ist Paketinformationen (Ich denke, es ist also keine "echte" Abhängigkeit?).

Ich füge dies hier hinzu, weil in meinem Fall ein ähnliches Problem behoben wurde und der Hinweis für '--no-install-recommends' noch nicht erwähnt wurde.

memartin
quelle
6

Sie können das Paket mit apt-get herunterladen und dann mit dpkg installieren, wobei Sie die Abhängigkeit, die Sie ignorieren möchten, manuell auflisten.

Wenn ich zum Beispiel mein Paket herunterladen möchte, es aber von libperl5.14 abhängt und ich libperl5.14 nicht installieren möchte, da ich eine andere Version habe, kann ich diese Abhängigkeit wie folgt ignorieren:

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb
A.Badger
quelle
Nur um zu erwähnen, dass dies Sie "kaputt" machen wird. Sie können erst dann andere Pakete installieren, wenn Sie die fehlende Abhängigkeit behoben haben.
drpexe
6

Eine alternative Möglichkeit, die Abhängigkeiten manuell zu optimieren, ist:

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
AndrewHarvey
quelle
2

Auf meinem Debian-System ist bsd-mailx tatsächlich abhängig von default-mta | mail-transport-agent(Sie können überprüfen, wovon ein Paket apt-cache show <pkg>für alles im Archiv oder dpkg -s <pkg>für installierte Pakete abhängt .

Es kann sein, dass Ihr Postfix-Paket nicht über Provides: mail-transport-agentFolgendes verfügt: apt merkt nicht, dass Sie einen MTA installiert haben. Wenn es sich um ein offizielles Paket handelt, lohnt es sich, dafür einen Bug einzureichen.

Andy
quelle
1

Zu diesem Zweck können Sie einfach einen Nagel installieren, von dem ich glaube, dass er diese Abhängigkeiten nicht hat.

apt-get install nail
jamespo
quelle
-5

Nun - tu es nicht.

Die Arbeit anderer zu nutzen ist sehr wichtig, um erfolgreich zu sein. Wenn Sie Software aus dem Quellcode (Tarball) erstellen, verpassen Sie die Gelegenheit, die Arbeit des Paketmanagers der Distribution zu nutzen.

Sie erhalten keine "kostenlosen" Updates. In den meisten Fällen werden die von ihnen aus dem Quellcode installierten Pakete nie aktualisiert. Da sie die Software für neue Versionen nachverfolgen müssen, müssen sie und alle abhängigen Programme neu erstellt werden (versuchen Sie, sich an sie zu erinnern).

Sie haben Probleme mit anderen Paketen aus den Repos Ihrer Distribution. Dies ist genau der Fall, der in der Frage angegeben ist: Ubuntu hat einen großartigen Paketmanager und einige sehr nette Leute, die die Pakete warten. Und sie haben entschieden, dass für das Mailx-Programm ein MTA benötigt wird. Wenn Sie also Postfix aus Quellen installiert hätten, würde Ubuntu Sie nicht bitten, exim zu installieren.

Wenn aus irgendeinem Grund die Wartung des Servers an eine andere Person weitergegeben wird (z. B. Ihr Projekt wird sehr erfolgreich und Sie entscheiden sich, einen anderen Mitarbeiter einzustellen, der die Server verwaltet, während Sie mit anderen dpkg --get-selectionsDingen beschäftigt sind), wird er natürlich damit rechnen, die gesamte Wartung zu übernehmen installierte Pakete.

Versuchen Sie, die Paketverwaltungssoftware der Distribution so oft wie möglich zu verwenden. Erfahren Sie, wie Sie Ihre eigenen Pakete erstellen, wenn Sie keine vorgefertigte finden und ein besserer Profi werden.

Skarap
quelle