Come sfuggire all'inferno delle dipendenze?


21

Ho un computer Ubuntu senza Internet e un computer Ubuntu con Internet. Quello senza internet richiede l'installazione di un driver tramite ndiswrapper. Il problema è che ndiswrapper-dkmsdipende da dkmsquale dipende da alcune cose, e quelle poche cose dipendono da molte cose, che dipendono da più e così via. Finora ho scaricato manualmente 92 dipendenze e ne ho ancora bisogno. Sto usando il codice

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

che esegue il lavoro ma solo per le dipendenze di un pacchetto, non le dipendenze delle dipendenze del pacchetto e così via. Questo si è trasformato in una lotta di più ore per ottenere tutti i pacchetti ed è davvero noioso. Ho eseguito questo codice per scaricare i file .deb sull'unità USB sul mio computer online, quindi passare al computer offline per inserire l'unità, quindi eseguire sudo apt install ./*nella cartella e sperare per il meglio. Di solito sputa qualcosa del genere:

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

Qualcuno conosce un metodo per scaricare tutti i file .deb per le dipendenze di un pacchetto e tutte le sottodipendenze in una singola cartella per salvare la mia sanità mentale? Grazie!



Potresti anche essere in grado di collegare in rete le 2 macchine direttamente tramite Ethernet in modo che la macchina offline utilizzi la connessione delle macchine online. Da quello che ricordo, il processo apt-offline sembra molto più semplice; ma questa risposta dice che è "plug and play".
pbhj

1
Fintanto che usi Recommendse Suggestsinvece Dependsmi aspetto solo che finirai per installare l'intera Internet, indipendentemente dal pacchetto da cui inizi.
pipe

1
@ N0rbert Non ho mai trovato soddisfacenti quelle risposte. So che non è questo il punto del sistema duplicato.
wizzwizz4,

@ N0rbert Non è una domanda ovvia per risolvere le situazioni infernali della dipendenza. Qualsiasi duplicazione tra i due è nella risposta , non nella domanda .
Ricco

Risposte:


27

Dai un'occhiata a apt-offlineun modo (più) facile da usare per gestire le dipendenze offline. Dovrai installarlo prima scaricando il debfile e trasferendolo sul tuo computer offline. Puoi usare qualcosa di simile sudo apt download apt-offlineper gestire il download. L'installazione può essere eseguita utilizzando sudo dpkg -i /path/to/your/debfile.debsul computer offline e sudo apt installsul proprio computer online.

Una volta fatto, dovrai preparare un sacco di cose per l'installazione effettiva.

  1. Inizia creando una firma del tuo sistema offline chiedendo di installare i ndiswrapperpacchetti:

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Copia il file sul tuo computer online ed esegui il seguente comando sul computer online per scaricare tutti i file richiesti:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Sposta il bundle zipfile sul tuo computer offline ed esegui questo comando su di esso:

    sudo apt-offline install ndis-ao.zip
    

Dovresti averlo ndiswrapper-dkmsinstallato a questo punto e tutto dovrebbe andare bene.


Se l' apt-offlineinstallazione del pacchetto non riesce, annotare i pacchetti dipendenti non riusciti e risolverli uno per uno (copia manuale secondo necessità). L'inferno delle dipendenze è fastidioso, ma sfortunatamente questo è uno dei problemi con un sistema più offline.

Puoi anche provare a dare un'occhiata apt-rdependsper generare un grafico completo delle dipendenze. Combinalo con questo apt downloade potresti avere una soluzione alternativa al problema, anche se il mio test con questo è stato a dir poco inconcludente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.