Wie kann man der Hölle der Abhängigkeit entkommen?


21

Ich habe einen Ubuntu-Computer ohne Internet und einen Ubuntu-Computer mit Internet. Für einen Computer ohne Internet muss ein Treiber über ndiswrapper installiert werden. Das Problem ist, dass es darauf ndiswrapper-dkmsankommt, dkmswas von ein paar Dingen abhängt, und diese wenigen Dinge hängen von vielen Dingen ab, die von mehr abhängen, und so weiter. Ich habe bisher 92 Abhängigkeiten manuell heruntergeladen und benötige immer noch mehr. Ich habe den Code benutzt

for i in $(apt-cache depends <package> | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

Das erledigt den Job, aber nur für die Abhängigkeiten eines Pakets, nicht für die Abhängigkeiten der Abhängigkeiten des Pakets und so weiter. Dies hat sich zu einem mehrstündigen Kampf um alle Pakete entwickelt und es ist wirklich mühsam. Ich habe diesen Code ausgeführt, um die .deb-Dateien auf das USB-Laufwerk meines Online-Computers herunterzuladen. Dann bin ich zum Offline-Computer gewechselt, um das Laufwerk einzulegen. Dann habe ich sudo apt install ./*in dem Ordner ausgeführt und auf das Beste gehofft. Normalerweise spuckt es so etwas aus:

...
The following packages have unmet dependencies:
 binutils : Depends: binutils-common (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: libbinutils (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: binutils-x86-64-linux-gnu (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
 cpp-doc : Depends: cpp-7-doc (>= 7.4.0-1~) but it is not installable
 file : Depends: libmagic1 (= 1:5.32-2ubuntu0.2) but 1:5.32-2ubuntu0.1 is to be installed
 g++-7 : Depends: libstdc++-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 g++-multilib : Depends: g++-7-multilib (>= 7.4.0-1~) but it is not installable
 gcc-7-multilib : Depends: lib32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
                  Depends: libx32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 gfortran : Depends: gfortran-7 (>= 7.4.0-1~) but it is not installable
 glibc-doc : Depends: glibc-doc-reference (>= 2.18) but it is not installable
 libasan4-dbg : Depends: libasan4 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libatomic1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                  Depends: libatomic1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libbabeltrace1 : Depends: libdw1 (>= 0.126) but it is not installable
 libcc1-0 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libcilkrts5-dbg : Depends: libcilkrts5 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libfl-dev : Depends: libfl2 (= 2.6.4-6) but it is not installable
 libgcc-7-dev : Depends: libitm1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libatomic1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libasan4 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: liblsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libtsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libubsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libcilkrts5 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libmpx2 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
 libgcc1 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgcc1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgomp1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libgomp1 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libitm1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libitm1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 liblsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: liblsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libmpx2-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libmpx2 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libquadmath0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                    Depends: libquadmath0 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libstdc++6 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libtsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libtsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libubsan0-dbg : Depends: libubsan0 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libumfpack5 : Depends: libcholmod3 (>= 1:4.5.2) but it is not going to be installed
 m4 : Depends: libsigsegv2 (>= 2.9) but it is not installable
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Kennt jemand eine Methode, um einfach alle .deb-Dateien für Paketabhängigkeiten und alle Unterabhängigkeiten in einem einzigen Ordner abzulegen, um meine Vernunft zu retten? Danke!



Möglicherweise können Sie die beiden Computer auch direkt über Ethernet vernetzen, sodass der Offline-Computer die Online-Computer-Verbindung verwendet. Soweit ich mich erinnere, klingt der apt-offline-Prozess viel einfacher. Aber diese Antwort besagt, dass es "Plug and Play" ist.
20.

1
Solange Sie verwenden Recommendsund Suggestsnicht nur Dependsich gehe davon aus, dass Sie am Ende das gesamte Internet installieren, egal von welchem ​​Paket Sie ausgehen.
Pipe

1
@NoRbert Ich habe diese Antworten noch nie für befriedigend befunden. Ich weiß, dass dies nicht der Sinn des doppelten Systems ist.
wizzwizz4

@NoRbert Das ist keine naheliegende Frage zur Lösung von Abhängigkeitshölle-Situationen. Jede Verdoppelung zwischen den beiden ist in der Antwort , nicht die Frage .
Rich

Antworten:


27

Werfen Sie einen Blick auf apt-offlineeine (benutzerfreundlichere) Möglichkeit, Offline-Abhängigkeiten zu verwalten. Sie müssen es zuerst installieren, indem Sie die Debfile herunterladen und auf Ihren Offline-Computer übertragen. Sie können so etwas wie sudo apt download apt-offlinedas Herunterladen handhaben. Die Installation kann sowohl sudo dpkg -i /path/to/your/debfile.debauf dem Offline-Computer als auch sudo apt installauf Ihrem Online-Computer erfolgen.

Danach müssen Sie einige Dinge für die eigentliche Installation vorbereiten.

  1. Beginnen Sie mit der Erstellung einer Signatur Ihres Offlinesystems, in der Sie aufgefordert werden, die ndiswrapperPakete zu installieren :

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Kopieren Sie die Datei auf Ihren Online-Computer und führen Sie den folgenden Befehl auf dem Online-Computer aus, um alle erforderlichen Dateien herunterzuladen:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Verschieben Sie das zipfile-Bundle zurück auf Ihren Offline-Computer und führen Sie den folgenden Befehl aus:

    sudo apt-offline install ndis-ao.zip
    

Sie sollten ndiswrapper-dkmszu diesem Zeitpunkt installiert haben und alles sollte gut sein.


Wenn Ihr apt-offlinePaket nicht installiert werden kann, notieren Sie sich die fehlgeschlagenen abhängigen Pakete und beheben Sie sie nacheinander (manuelles Kopieren nach Bedarf). Die Hölle der Abhängigkeit ist ärgerlich, aber das ist leider eines der Probleme mit einem offlineeren System.

Sie können auch einen Blick darauf werfen apt-rdepends, um ein vollständiges Abhängigkeitsdiagramm zu erstellen. Kombinieren Sie dies mit apt downloadund Sie haben möglicherweise eine alternative Lösung für das Problem, obwohl meine Tests damit gelinde gesagt nicht schlüssig waren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.