¿Cómo descargar el paquete .deb y todas las dependencias?


14

Para todas las respuestas que encontré sobre este tema, la solución fue crear, en cierta computadora A donde necesito instalar el paquete, un archivo que contenga todas las dependencias que necesita y luego descargarlo en otra computadora, llamémoslo B.

La cuestión es que quiero tener un almacenamiento de cierto software crítico que necesito trabajar para poder instalarlos fuera de línea más adelante en caso de que tenga que formatear mi escritorio.

REALMENTE NO ME IMPORTA tener muchos archivos .deb redundantes en mi computadora, y REALMENTE NO ME IMPORTA si voy a almacenar 1 gb de archivos para instalar un software de 10 MB.

Por lo tanto, quiero que se descargue cualquier dependencia posible. ¿Hay alguna manera de que pueda hacer esto?


Respuestas:


22

Yo iría con esto:

apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download

Luego puede instalarlo dpkg -i *.deben el directorio donde los descargó.


1
Creo que hizo el trabajo, muchas gracias. Lo
probaré

¿Me puede explicar qué hacen los comandos awk y xargs? Estoy empezando a usar Linux y nunca antes había visto estos 2 comandos
ebernardes

apt-cache depends -ibuscará dependencias importantes para el PAQUETE. Se ejecutará solo si apt-get download PACKAGElogra encontrar PAQUETE en los repositorios de ppa a los que ha agregado /etc/apt/sources.list. Ahora, apt-cache depends -i PACKAGEtiene salida de forma Depends: dependency-name. Solo necesitamos nombres de dependencias, así que eso es lo que está haciendo awk: está obteniendo solo la segunda cadena. Por ejemplo, intenta hacerlo apt-cache depends -i vim | awk '{print $2}' . Tenga en cuenta también, toda la línea a la derecha de && puede considerarse una declaración
Sergiy Kolodyazhnyy

1
¡Gracias! Pero investigué un poco, y usé el comando sed '/ ^ </ d' para eliminar parte de la salida de apt-cache depend, ya era bueno, pero ahora funciona en todos los casos que estoy intentando. ¡Muchas gracias!
ebernardes

dpkg -i *.debno es tan bueno, no instala el paquete por orden de dependencias. Por lo tanto, es posible que deba volver a intentarlo varias veces para instalar todos los paquetes. De todos modos a la solución?
Mithril

1

¿Es una cosa de una sola vez, o algo que desea mantener actualizado? ¿Está trabajando principalmente en línea y solo quiere una copia de seguridad local de todos sus paquetes, por si acaso?

Hay varios servicios que puede instalar que actúan como un proxy / caché APT. Apunte APT a su caché local, se descargará de Internet y mantendrá una copia almacenada localmente de todos los paquetes. Esto puede ser muy útil si tiene muchas computadoras en su red con una selección idéntica de paquetes.

Mi caché de apt preferido es aproximadamente , pero también hay apt-cacher-ng y algunos otros. Cada uno tiene pequeñas diferencias sobre cómo se puede configurar el almacenamiento en caché.

Siempre uso los instaladores netinst mínimos para construir mis sistemas basados ​​en Debian, lo que significa que mi caché apt generalmente tiene casi todos los paquetes para construir completamente mis sistemas.


Esto es algo que quiero conservar por si acaso, si necesito instalar rápidamente algún software, incluso si es una versión desactualizada, antes de poder actualizarlo más tarde. Lo comprobaré, gracias :)
ebernardes

0

ejecuta el siguiente programa de Python:

import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
    print(t.stdout)
    exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
    one_choice_made=False
    for needed_package in choices.split(b"\n"):
        needed_package=needed_package.strip(b"\n ")
        t=subprocess.run(["apt-get", "download", needed_package])
        if t.stderr or t.returncode:
            print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
        else:
            one_choice_made = True
            #print("downloaded",vajalik_pakk)
            break
    if not one_choice_made:
        print("could not get one of dependecies", choices)

1
¿Y por qué es esto mejor que la respuesta aceptada?
RalfFriedl

0

ejecuta el siguiente programa python3:

import subprocess
olemas_olevad_pakid=set()
def r(pakk):
    t=subprocess.run(["apt-get", "download", pakk])
    if t.stderr or t.returncode:
        #print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
        return False
    olemas_olevad_pakid.add(pakk)
    t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
    if t.stderr or t.returncode:
        print(t.stdout)
        exit(t.stderr)
    #print(":", t.stdout)
    needed_pacages=t.stdout.split(b"Depends: ")[1:]
    #print(pakk, "needs packages:", needed_pacages)
    for choices in needed_pacages:
        one_choice_made=False
        for needed_package in choices.split(b"\n"):
            needed_package=needed_package.strip(b"\n ")
            if needed_package in olemas_olevad_pakid or r(needed_package):
                one_choice_made=True
                break
        if not one_choice_made:
            print("PROBLEM: could not download any of", choices)
            return False
    return True
#for pakk in packages_to_download:
#    print("pakk:",pakk)
#    r(pakk)
r(input("package name:"))

Descargará todas las dependencias de todas las dependencias, no solo las dependencias inmediatas. Pero instalarlos con dpkg -i *.debfalló. Tal vez porque apt-cache depends -i packageda información errónea o algunos archivos some.deb todavía necesitan conexión a Internet para instalarse.


Puede fallar porque dpkg no está instalando los paquetes en el orden correcto. Es posible que desee volver a intentar dpkg varias veces hasta que se instalen todas las dependencias.
Black Owl Kai
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.