Come scaricare il pacchetto .deb e tutte le dipendenze?


14

Per tutte le risposte che ho trovato su questo argomento, la soluzione è stata quella di creare, in un determinato computer A dove ho bisogno di installare il pacchetto, un file contenente tutte le dipendenze di cui ha bisogno e quindi scaricarlo su un altro computer, chiamiamolo B.

Il fatto è che voglio avere una memoria di alcuni software critici che devo lavorare per poterli installare offline in seguito nel caso dovessi formattare il mio desktop.

Davvero non mi preoccupo di avere un sacco di file .deb ridondanti nel mio computer e non mi preoccupo davvero se ho intenzione di memorizzare 1 gb di file per installare un software da 10 MB.

Quindi, voglio avere qualsiasi possibile dipendenza scaricata. C'è un modo in cui posso farlo?


Risposte:


22

Vorrei andare con questo:

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

Quindi puoi installarlo con dpkg -i *.debnella directory che hai scaricato.


1
Penso che abbia funzionato, grazie mille. Lo
proverò

Puoi spiegarmi cosa fanno i comandi awk e xargs? Ho appena iniziato a usare Linux e non ho mai visto questi 2 comandi prima
ebernardes,

apt-cache depends -icontrollerà le dipendenze importanti per PACCHETTO. Verrà eseguito solo se apt-get download PACKAGEriuscirà a trovare PACCHETTO dai repository ppa che hai aggiunto /etc/apt/sources.list. Ora, apt-cache depends -i PACKAGEha un output di forma Depends: dependency-name. Abbiamo solo bisogno di nomi di dipendenze, quindi è quello che fa awk: sta ottenendo solo la seconda stringa. Ad esempio, prova a fare apt-cache depends -i vim | awk '{print $2}' . Nota anche che l'intera riga a destra di && può essere considerata un'affermazione
Sergiy Kolodyazhnyy,

1
Grazie! Ma ho fatto qualche ricerca e ho usato il comando sed '/ ^ </ d' per cancellare parte dell'output di apt-cache, era già buono, ma ora funziona in ogni caso che sto provando. Molte grazie!
ebernardes,

dpkg -i *.debnon è così buono, non installa il pacchetto in base all'ordine delle dipendenze. Pertanto, potrebbe essere necessario riprovare più volte per installare tutto il pacchetto. Comunque per risolvere il problema?
Mithril,

1

È una cosa una tantum o qualcosa che vuoi mantenere aggiornato? Lavori principalmente online e vuoi solo un backup locale di tutti i tuoi pacchetti, per ogni evenienza?

Esistono diversi servizi che è possibile installare che fungono da proxy / cache APT. Punta APT sulla cache locale, questa verrà scaricata da Internet e manterrà una copia memorizzata nella cache locale di tutti i pacchetti. Questo può essere molto utile se nella tua rete sono presenti molti computer con una selezione identica di pacchetti.

La mia cache apt preferita è approssimativa , ma c'è anche apt-cacher-ng e alcuni altri. Ciascuno presenta differenze minori su come è possibile configurare la memorizzazione nella cache.

Uso sempre i programmi di installazione netinst minimi per costruire i miei sistemi basati su Debian, il che significa che la mia cache apt di solito ha quasi tutti i pacchetti per costruire completamente i miei sistemi.


Questo è qualcosa che voglio conservare per ogni evenienza, se devo installare rapidamente alcuni software, anche se è una versione obsoleta, prima di poterlo aggiornare in seguito.
Verificherò

0

eseguire il seguente programma 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
E perché è meglio della risposta accettata?
RalfFriedl,

0

eseguire il seguente programma 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:"))

Scaricherà tutte le dipendenze di tutte le dipendenze non solo le dipendenze immediate. Ma installarli con dpkg -i *.debfallito. Forse perché apt-cache depends -i packagefornisce disinformazione o alcuni file some.deb necessitano ancora di una connessione a Internet per l'installazione.


Potrebbe non funzionare perché dpkg non sta installando i pacchetti nell'ordine giusto. Potresti voler riprovare dpkg alcune volte fino a quando tutte le dipendenze sono installate.
Black Owl Kai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.