Wie entkommt man der Abhängigkeitshölle?

Wie entkommt man der Abhängigkeitshölle?

Ich habe einen Ubuntu-Computer ohne Internet und einen Ubuntu-Computer mit Internet. Für den ohne Internet muss ein Treiber über ndiswrapper installiert werden. Das Problem ist, dass ndiswrapper-dkmsAbhängigkeiten dkmsvon einigen wenigen Dingen abhängen, und diese wenigen Dinge hängen von vielen Dingen ab, die wiederum von weiteren abhängen, und so weiter. Ich habe bisher 92 Abhängigkeiten manuell heruntergeladen und brauche immer noch mehr. Ich habe den Code verwendet

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 die Aufgabe, aber nur für die Abhängigkeiten eines Pakets, nicht für die Abhängigkeiten der Abhängigkeiten des Pakets und so weiter. Das hat sich zu einem mehrstündigen Kampf entwickelt, um alle Pakete zu bekommen, und es ist wirklich mühsam. Ich habe diesen Code ausgeführt, um die .deb-Dateien auf das USB-Laufwerk auf meinem Online-Computer herunterzuladen, bin dann zum Offline-Computer gewechselt, um das Laufwerk einzustecken, habe es dann sudo apt install ./*im 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 alle .deb-Dateien für die Abhängigkeiten und alle Unterabhängigkeiten eines Pakets einfach in einen einzigen Ordner zu kopieren, damit ich nicht verrückt werde? Danke!

Antwort1

Schauen Sie sich anapt-offline, eine (mehr) benutzerfreundliche Methode zur Verwaltung von Offline-Abhängigkeiten. Sie müssen es zuerst installieren, indem Sie die Deb-Datei herunterladen und auf Ihren Offline-Rechner übertragen. Sie können etwas wie verwenden, um den Download abzuwickeln. Die Installation kann auf dem Offline-Rechner und nur auf Ihrem Online-Rechner sudo apt download apt-offlinedurchgeführt werden .sudo dpkg -i /path/to/your/debfile.debsudo apt install

Sobald dies erledigt ist, müssen Sie eine Reihe von Dingen für die eigentliche Installation vorbereiten.

  1. Beginnen Sie mit der Erstellung einer Signatur Ihres Offline-Systems mit der Aufforderung zur Installation der ndiswrapperPakete:

    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 ZIP-Dateipaket zurück auf Ihren Offline-Computer und führen Sie diesen Befehl darauf aus:

    sudo apt-offline install ndis-ao.zip
    

Die Installation sollte ndiswrapper-dkmsnun abgeschlossen sein und alles sollte in Ordnung sein.


Wenn apt-offlinedie Installation Ihres Pakets fehlschlägt, notieren Sie sich die abhängigen Pakete, bei denen die Installation fehlgeschlagen ist, und lösen Sie sie nacheinander auf (bei Bedarf manuell kopieren). Die Abhängigkeitshölle ist ärgerlich, aber leider ist das eines der Probleme bei einem eher offline geschalteten System.

Sie können einen Blick aufapt-rdependssowie zur Generierung einesvollständigAbhängigkeitsdiagramm. 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.

verwandte Informationen