Comment échapper à l'enfer de la dépendance?

21

J'ai un ordinateur Ubuntu sans Internet et un ordinateur Ubuntu avec Internet. Celui sans Internet nécessite l'installation d'un pilote via ndiswrapper. Le problème est que cela ndiswrapper-dkmsdépend de dkmsce qui dépend de quelques choses, et ces quelques choses dépendent de beaucoup de choses, qui dépendent de plus, etc. Jusqu'à présent, j'ai téléchargé 92 dépendances manuellement et j'en ai encore besoin de plus. J'ai utilisé le code

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

qui fait le travail mais uniquement pour les dépendances d'un package, pas les dépendances des dépendances du package et ainsi de suite. Cela s'est transformé en un combat de plusieurs heures pour obtenir tous les packages et c'est vraiment fastidieux. J'ai exécuté ce code pour télécharger les fichiers .deb sur le lecteur USB de mon ordinateur en ligne, puis je me suis déplacé vers l'ordinateur hors ligne pour insérer le lecteur, puis j'ai exécuté sudo apt install ./*dans le dossier et espéré le meilleur. Il crache généralement quelque chose comme ceci:

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

Est-ce que quelqu'un connaît une méthode pour simplement vider tous les fichiers .deb pour les dépendances d'un package et toutes les sous-dépendances dans un seul dossier pour sauver ma santé mentale? THX!

TriVoxel
la source
Vous pouvez également mettre en réseau les 2 machines directement par Ethernet afin que la machine hors ligne utilise la connexion des machines en ligne. D'après ce que je me souviens, le processus apt-offline semble beaucoup plus simple; mais cette réponse dit que c'est "plug and play".
pbhj
1
Tant que vous utilisez Recommendset Suggestsau lieu de seulement Dependsje m'attends à ce que vous finissiez par installer tout Internet, quel que soit le package à partir duquel vous démarrez.
pipe
1
@ N0rbert Je n'ai jamais trouvé ces réponses satisfaisantes. Je sais que ce n'est pas le but du système en double, cependant.
wizzwizz4
@ N0rbert Ce n'est pas une question évidente pour résoudre les situations d'enfer de dépendance. Toute duplication entre les deux est dans la réponse , pas dans la question .
Rich

Réponses:

27

Jetez un œil à apt-offline, une manière (plus) conviviale de gérer les dépendances hors ligne. Vous devrez d'abord l'installer en téléchargeant le fichier debfile et en le transférant sur votre machine hors ligne. Vous pouvez utiliser quelque chose comme sudo apt download apt-offlinepour gérer le téléchargement. L'installation peut être effectuée en utilisant sudo dpkg -i /path/to/your/debfile.debsur la machine hors ligne et uniquement sudo apt installsur votre machine en ligne.

Une fois cela fait, vous devrez préparer un tas de choses pour l'installation réelle.

  1. Commencez par créer une signature de votre système hors ligne demandant d'installer les ndiswrapperpackages:

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Copiez le fichier sur votre ordinateur en ligne et exécutez la commande suivante sur l'ordinateur en ligne pour télécharger tous les fichiers requis:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Déplacez le fichier zipfile vers votre ordinateur hors ligne et exécutez cette commande dessus:

    sudo apt-offline install ndis-ao.zip
    

Vous devriez avoir ndiswrapper-dkmsinstallé à ce stade et tout devrait aller bien.


Si l' apt-offlineinstallation de votre package échoue, notez les packages dépendants qui ont échoué et résolvez-les un par un (copie manuelle si nécessaire). L'enfer de la dépendance est ennuyeux, mais malheureusement, c'est l'un des problèmes d'un système plus hors ligne.

Vous pouvez jeter un oeil à apt-rdependsmême de générer un complet graphe de dépendance. Combinez cela avec apt downloadet vous pourriez avoir une solution alternative au problème, bien que mes tests avec cela n'aient pas été concluants pour le moins.

Kaz Wolfe
la source