¿Cómo escapar de la dependencia del infierno?

21

Tengo una computadora Ubuntu sin internet y una computadora Ubuntu con internet. El que no tiene internet requiere la instalación de un controlador a través de ndiswrapper. El problema es que ndiswrapper-dkmsdepende de dkmsqué depende de algunas cosas, y esas pocas cosas dependen de muchas cosas, que dependen de más, y así sucesivamente. He descargado manualmente 92 dependencias hasta ahora y todavía necesito más. He estado usando el código

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

que hace el trabajo pero solo para las dependencias de un paquete, no las dependencias de las dependencias del paquete, etc. Esto se ha convertido en una pelea de varias horas para obtener todos los paquetes y es realmente tedioso. He estado ejecutando este código para descargar los archivos .deb a la unidad USB en mi computadora en línea, luego me mudé a la computadora fuera de línea para insertar la unidad, luego ejecuté sudo apt install ./*en la carpeta y esperaba lo mejor. Por lo general, escupe algo como esto:

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

¿Alguien sabe de un método para volcar todos los archivos .deb para dependencias de paquetes y todas las subdependencias en una sola carpeta para salvar mi cordura? ¡Gracias!

TriVoxel
fuente
También puede conectar en red las 2 máquinas directamente por Ethernet para que la máquina fuera de línea utilice la conexión de máquinas en línea. Por lo que recuerdo, el proceso apt-offline suena mucho más directo; pero esta respuesta dice que es "plug and play".
pbhj
1
Siempre y cuando lo uses Recommendsy en Suggestslugar de solo Dependsespero que termines instalando todo Internet sin importar desde qué paquete comiences.
tubería
1
@ N0rbert Nunca he encontrado esas respuestas satisfactorias. Sin embargo, sé que ese no es el objetivo del sistema duplicado.
wizzwizz4
@ N0rbert Esa no es una pregunta obvia para resolver situaciones infernales de dependencia. Cualquier duplicación entre los dos está en la respuesta , no en la pregunta .
Rico

Respuestas:

27

Eche un vistazo a apt-offlineuna forma (más) fácil de usar de administrar dependencias fuera de línea. Necesitará instalarlo primero descargando el archivo y transfiriéndolo a su máquina fuera de línea. Puede usar algo como sudo apt download apt-offlinemanejar la descarga. La instalación se puede hacer usando sudo dpkg -i /path/to/your/debfile.debla máquina fuera de línea y solo sudo apt installen su máquina en línea.

Una vez hecho esto, deberá preparar un montón de cosas para la instalación real.

  1. Comience creando una firma de su sistema fuera de línea que le solicite instalar los ndiswrapperpaquetes:

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Copie el archivo en su máquina en línea y ejecute el siguiente comando en la máquina en línea para descargar todos los archivos necesarios:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Mueva el paquete zipfile nuevamente a su máquina fuera de línea y ejecute este comando en él:

    sudo apt-offline install ndis-ao.zip
    

Debería haber ndiswrapper-dkmsinstalado en este punto y todo debería estar bien.


Si su apt-offlinepaquete no se instala, tome nota de los paquetes dependientes que fallaron y resuélvalos uno por uno (copiando manualmente según sea necesario). El infierno de dependencia es molesto, pero desafortunadamente ese es uno de los problemas con un sistema más fuera de línea.

Usted puede tratar de echar un vistazo a apt-rdependsasí a generar una completa dependencia gráfico. Combine esto con apt downloady podría tener una solución alternativa al problema, aunque mis pruebas con esto no han sido concluyentes por decir lo menos.

Kaz Wolfe
fuente