¿Cómo escapar del infierno de la dependencia?

¿Cómo escapar del infierno de la dependencia?

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 dkmscual depende de unas pocas 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 para las dependencias de las dependencias del paquete, etc. Esto se ha convertido en una pelea de varias horas para conseguir todos los paquetes y es realmente tediosa. He estado ejecutando este código para descargar los archivos .deb a la unidad USB en mi computadora en línea, luego me moví a la computadora fuera de línea para insertar la unidad, luego ejecuté sudo apt install ./*en la carpeta y espero lo mejor. Generalmente 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 conoce un método para simplemente volcar todos los archivos .deb de las dependencias de un paquete y todas las subdependencias en una sola carpeta para salvar mi cordura? ¡Gracias!

Respuesta1

Echa un vistazo aapt-offline, una forma (más) fácil de usar de gestionar dependencias fuera de línea. Primero deberá instalarlo descargando el archivo deb y transfiriéndolo a su máquina fuera de línea. Puedes usar algo como sudo apt download apt-offlinepara manejar la descarga. La instalación se puede realizar sudo dpkg -i /path/to/your/debfile.deben la máquina fuera de línea y solo sudo apt installen su máquina en línea.

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

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

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Copie el archivo a 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 de archivos zip nuevamente a su máquina fuera de línea y ejecute este comando en él:

    sudo apt-offline install ndis-ao.zip
    

Deberías haberlo 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.

Puedes intentar echar un vistazo aapt-rdependsasí como generar unacompletográfico de dependencia. Combine esto con apt downloady es posible que tenga una solución alternativa al problema, aunque mis pruebas con esto no han sido concluyentes, por decir lo menos.

información relacionada