it-swarm.com.de

Wie kann ich apt-get dazu bringen, einige Abhängigkeiten zu ignorieren?

Wie kann ich dafür sorgen, dass apt-get einige Abhängigkeiten ignoriert? Zum Beispiel wollte ich mailx installieren, damit ich damit E-Mails von Cron-Skripten/Tools zur Berichterstellung senden kann. Bei der Installation von mailx werden jedoch auch exim4 und eine ganze Reihe von Abhängigkeiten installiert (ich habe bereits Postfix installiert), die ich nicht wirklich brauche und auf die mailx vermutlich auch verzichten kann.

Wie ignoriere ich einige Abhängigkeiten, verwende aber trotzdem apt-get, da es ein nettes Tool ist?

93
FrancisV

Einfache und einfache Lösung : Geben Sie einfach die unerwünschten Pakete mit einem zusätzlichen - Nach jedem von ihnen an.

Beispiel ohne den Schalter -:

[email protected]:~# 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 zu vermeiden Sie die Installation von exim4-base. Beachten Sie den - Am Ende:

[email protected]:~# 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 können, versucht apt-get Nicht mehr, das Paket exim4-base Zu installieren, und es versucht nicht, die verschiedenen Abhängigkeiten (exim4-config Usw.) zu installieren.

Und wenn Sie sich geirrt haben und diese exim4-base - Abhängigkeit doch brauchten, können Sie sie später einfach apt-get install!

51
Jealie

Sie können die Abhängigkeiten eines Deb-Pakets wie folgt ändern:

  1. Deb auspacken: ar x golden-linux.deb (erstellt d. h. drei Dateien: debian-binary control.tar.gz data.tar.gz)
  2. Kontrollarchiv entpacken: tar xzf control.tar.gz (erstellt: postinst postrm preinst prerm md5sums control)
  3. Beheben Sie Abhängigkeiten in control (verwenden Sie einen Texteditor)
  4. Packe control.tar.gz neu: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Deb neu packen: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (Reihenfolge wichtig! Siehe [Hinweis])

[Hinweis]: dpkg könnte die Metadaten eines Pakets nicht schnell lesen, wenn es nach dem Ende des Datenabschnitts suchen müsste!

57
Janus Troelsen

Nachdem Sie das Paket mit dem --ignore-depends Option, gehen Sie und bearbeiten Sie die /var/lib/dpkg/status Datei und entfernen Sie alle Abhängigkeiten, die Ihrer Meinung nach nicht benötigt werden. Sei einfach sehr vorsichtig. Um eine dep. erforderlich zu sein, ist es mehr als wahrscheinlich, dass erforderlich ist

34
Manolis

Sie können versuchen, die --nodeps flag mit apt-get.
Oder laden Sie das Paket herunter und installieren Sie es mit dpkg mit der Option --ignore-depends.

Wenn Sie beispielsweise das Paket foo ohne Abhängigkeit bar installieren möchten:

dpkg --ignore-depends=bar -i foo_1.2.3_AMD64.deb
26
Bart De Vos

Da Sie Postfix von der Quelle installiert haben, müssen Sie ein "Dummy" -Paket installieren, das die Abhängigkeit des Mail-Transport-Agenten von mailx (oder bsd-mailx) erfüllt. Das "equivs" -Paket 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, warum es keine gute Lösung ist, dpkg anzuweisen, Abhängigkeiten einfach zu ignorieren, besteht darin, dass Sie dpkg/apt nur anweisen, es für eine einzelne Transaktion zu ignorieren. Sie können es nicht anweisen, Abhängigkeiten für immer zu ignorieren. Jedes Mal, wenn Sie apt verwenden, werden die Abhängigkeiten von all Paketen überprüft

15
stew

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

Ich habe nach dieser Option auf einem Ubuntu 12.04-Server gesucht, auf dem Xen ausgeführt wird. In meinen Domänen verwende ich den virtuellen Kernel und apt versuchte beharrlich, grub bei jedem Upgrade des Kernelpakets zu installieren. Grub wird jedoch innerhalb der domU nicht benötigt, wenn p [yv] grub verwendet wird.

Ich habe nach der Option -nodeps gesucht, um sie auch zu erhalten, aber sie hat nicht funktioniert. Daher wurde Grub * nach jedem Kernel-Upgrade deinstalliert/gelöscht.

Immerhin wirklich Lesen eine Manpage hilft manchmal - es stellt sich heraus, dass eine ähnliche apt-get-Option am 12.04 --no-install-empfohlen ist, was in diesem Fall tatsächlich funktioniert, da grub ist in den Paketinformationen als "empfohlen" aufgeführt (ich denke, es handelt sich also nicht um eine "echte" Abhängigkeit?).

Ich füge dies hier hinzu, weil es in meinem Fall ein ähnliches Problem gelöst hat und der Hinweis für '--no-install-empfehle' noch nicht erwähnt wurde.

7
memartin

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 beispielsweise mypackage herunterladen möchte, dies jedoch von libperl5.14 abhängt und 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
7
A.Badger

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

Möglicherweise verfügt Ihr Postfix-Paket nicht über Provides: mail-transport-agent, Daher erkennt apt nicht, dass Sie einen MTA installiert haben. Es würde sich lohnen, einen Fehler dafür einzureichen, wenn es sich um ein offizielles Paket handelt.

2
Andy

Zu diesem Zweck könnten Sie einfach Nagel installieren, von dem ich glaube, dass es diese Abhängigkeiten nicht gibt.

apt-get install nail
1
jamespo