Wie lade ich das .deb-Paket und alle Abhängigkeiten herunter?

14

Für alle Antworten, die ich zu diesem Thema gefunden habe, bestand die Lösung darin, auf einem bestimmten Computer A, auf dem ich das Paket installieren muss, eine Datei mit allen benötigten Abhängigkeiten zu erstellen und sie dann auf einen anderen Computer herunterzuladen. Nennen wir sie B.

Die Sache ist, ich möchte einen Speicher für bestimmte kritische Software haben, die ich arbeiten muss, um sie später offline installieren zu können, falls ich meinen Desktop formatieren muss.

Ich kümmere mich wirklich nicht darum, viele redundante .deb-Dateien auf meinem Computer zu haben, und ich kümmere mich WIRKLICH NICHT darum, ob ich 1 GB Dateien speichern werde, um eine 10-MB-Software zu installieren.

Ich möchte also eine mögliche Abhängigkeit herunterladen. Kann ich das irgendwie tun?

ebernardes
quelle
stackoverflow.com/questions/13756800/…
Ciro Santilli 25 病毒 病毒 审查 六四

Antworten:

22

Ich würde damit gehen:

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

Dann können Sie es mit dpkg -i *.debin dem Verzeichnis installieren, in das Sie diese heruntergeladen haben.

Darek
quelle
1
Ich denke, es hat die Arbeit gemacht, vielen Dank. Ich werde es nur noch ein bisschen testen, bevor ich zurückkomme, um mich noch einmal bei Ihnen zu bedanken :)
Ebernardes
Können Sie mir erklären, was die Befehle awk und xargs tun? Ich fange gerade an, Linux zu verwenden und ich habe diese 2 Befehle noch nie gesehen
Ebernardes
apt-cache depends -isucht nach wichtigen Abhängigkeiten für PACKAGE. Es wird nur ausgeführt, wenn apt-get download PACKAGEes erfolgreich ist, PACKAGE aus den von Ihnen hinzugefügten ppa-Repositorys zu finden /etc/apt/sources.list. Jetzt apt-cache depends -i PACKAGEhat Ausgabe der Form Depends: dependency-name. Wir brauchen nur Namen von Abhängigkeiten, also macht awk genau das - es bekommt nur die zweite Zeichenfolge. Versuchen Sie es zum Beispiel apt-cache depends -i vim | awk '{print $2}' . Beachten Sie auch, dass die gesamte Zeile rechts von && als eine Aussage betrachtet werden kann
Sergiy Kolodyazhnyy
1
Vielen Dank! Aber ich habe einige Nachforschungen angestellt und den Befehl sed '/ ^ </ d' verwendet, um einen Teil der Ausgabe von apt-cache zu löschen. Es war bereits gut, aber jetzt funktioniert es in jedem Fall, den ich versuche. Vielen Dank!
Ebernardes
dpkg -i *.debist nicht so gut, es installiert das Paket nicht in der Reihenfolge der Abhängigkeiten. Daher müssen Sie möglicherweise mehrmals versuchen, das gesamte Paket zu installieren. Wie auch immer, um das Problem zu umgehen?
Mithril
1

Ist das eine einmalige Sache oder etwas, das Sie auf dem Laufenden halten möchten? Arbeiten Sie hauptsächlich online und möchten nur für alle Fälle eine lokale Sicherung aller Ihrer Pakete?

Sie können mehrere Dienste installieren, die als APT-Proxy / Cache fungieren. Wenn Sie APT auf Ihren lokalen Cache verweisen, wird es aus dem Internet heruntergeladen und eine lokal zwischengespeicherte Kopie aller Pakete aufbewahrt. Dies kann sehr nützlich sein, wenn Sie viele Computer in Ihrem Netzwerk mit einer identischen Auswahl an Paketen haben.

Mein bevorzugter apt-Cache ist ca. , aber es gibt auch apt-cacher-ng und einige andere. Jedes hat geringfügige Unterschiede, wie das Caching konfiguriert werden kann.

Ich verwende immer die minimalen netinst-Installationsprogramme, um meine Debian-basierten Systeme zu erstellen, was bedeutet, dass mein apt-Cache normalerweise fast alle Pakete enthält, um meine Systeme vollständig zu erstellen.

Zoredache
quelle
Dies ist etwas, das ich für alle Fälle behalten möchte, wenn ich schnell Software installieren muss, auch wenn es sich um eine veraltete Version handelt, bevor ich sie später aktualisieren kann. Ich werde das überprüfen, danke :)
Ebernardes
0

Führen Sie das folgende Python-Programm aus:

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)
Hilugan
quelle
1
Und warum ist das besser als die akzeptierte Antwort?
RalfFriedl
0

Führen Sie das folgende Python3-Programm aus:

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:"))

Es werden alle Abhängigkeiten aller Abhängigkeiten heruntergeladen, nicht nur unmittelbare Abhängigkeiten. Aber die Installation mit dpkg -i *.debfehlgeschlagen. Vielleicht, weil apt-cache depends -i packagees Fehlinformationen gibt oder einige.deb-Dateien noch eine Internetverbindung benötigen, um installiert zu werden.

FISCH
quelle
Dies kann fehlschlagen, da dpkg die Pakete nicht in der richtigen Reihenfolge installiert. Möglicherweise möchten Sie dpkg einige Male wiederholen, bis alle Abhängigkeiten installiert sind.
Black Owl Kai