dependencies - todas - ¿Cómo listar/descargar las dependencias recursivas de un paquete debian?
instalar.deb debian 9 (4)
Como midihenry señaló midihenry , instale el paquete apt-rdepends y luego ejecute este
$ apt-rdepends gcc | awk ''$1 ~ /^Depends:/{print $2}'' | xargs apt-get download
esta línea obtendrá todas las dependencias de forma recursiva y, mirando la segunda tubería, descargará todos los paquetes por nombre desde el stdio, que es lo que la línea -
awk $1 ~ /^Depends:/{print $2}
hace. imprime los nombres de los paquetes. Si ejecuta estos comandos de forma aditiva, verá lo que quiero decir.
Necesito listar / descargar todas las dependencias recursivas de un paquete debian.
Supongamos que necesito instalar el paquete a.deb y depende del paquete b.deb y nuevamente el paquete b.deb depende del paquete c.deb.
Necesito descargar todos los paquetes dependientes recursivos para que puedan instalarse en otra máquina sin acceso a Internet.
Gracias.
Puede usar apt-rdepends
para obtener todas las dependencias para un paquete de forma recursiva. Y al canalizar el resultado a grep, solo puede tener los nombres de los paquetes y omitir la información innecesaria.
Ejemplo :
$ apt-rdepends cowsay | grep -E ''^[a-zA-Z0-9]''
Salida :
cowsay
perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
perl-base
perl-modules
Luego puede descargar esos paquetes utilizando apt-get download $package
e instalarlos sin conexión en su máquina.
Si solo desea descargar un paquete Debian, entonces:
apt-get -d package
o
apt-get download package
De lo contrario, si solo desea una lista de las dependencias de un paquete:
apt-cache depends package
Obviamente, reemplace el package
con el nombre del paquete que desea consultar.
Por alguna razón, apt-rdepends
no me funcionó (al buscar el paquete ''docker-engine'', se perdió la dependencia de libltdl7
que se introdujo con docker-engine 1.11.1-0
).
Así que se me ocurrió la siguiente suite de comandos.
Listar recursivamente las dependencias
$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends <your-package-here> | grep "^/w" | sort -u
(obviamente tiene que cambiar <your-package-here>
al final de la línea con el paquete que desea analizar)
La clave aquí es la opción --recurse
. Lamentablemente, no puede especificar el contenido que desea (o no encontré el camino), por lo que debe desactivar todas las dependencias no deseadas para mantener solo las "dependencias". ¡Es un poco detallado y difícil de recordar!
Desde la página man de apt-cache:
Por defecto, las dependencias y rdepends imprimen todas las dependencias
Descarga esas dependencias
Entonces, para descargar esas dependencias, ejecute el siguiente comando que las descargará en el directorio de trabajo actual:
$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends <your-package-here> | grep "^/w" | sort -u)
Opcionalmente, para instalar esas dependencias.
Esto extiende ligeramente la pregunta planteada, pero parece coincidir con la intención de la pregunta.
Necesitas construir el índice de los paquetes recién descargados. Esto se hace desde la misma carpeta donde se descargaron todos los .deb:
$ dpkg-scanpackages . | gzip -9c > Packages.gz
Luego simplemente copie esa carpeta (todo .deb + el archivo Packages.gz) al sistema de destino que no tiene acceso a Internet y agregue la carpeta a la lista de fuentes de APT.
$ echo "deb file:<your folder here> ./" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update
Et voilà
En un sistema sin acceso a Internet, puedo instalar un paquete (Docker en mi ejemplo) y sus dependencias:
$ sudo apt-get install docker-engine