Gibt es einen apt-Befehl zum Herunterladen einer deb-Datei aus den Repositorys in das aktuelle Verzeichnis?


46

Ich bin oft an den Installations-Triggern (postinst, postrm) oder bestimmten Teilen von Paketen (like /usr/shareund /etc) interessiert . Derzeit führe ich den nächsten Befehl zum Abrufen des Quellcodes aus:

apt-get source [package-name]

Der Nachteil ist, dass diese Datei oft viel größer als das Binärpaket ist und nicht den Installationsbaum widerspiegelt.

Im Moment lade ich die Pakete über http://packages.ubuntu.com/ herunter :

  1. Suchen nach [package-name]
  2. Wählen Sie das Paket aus
  3. Klicken Sie zum Herunterladen auf amd64 / i386
  4. Laden Sie die aktuelle Datei herunter

Das dauert mir zu lange und als jemand, der die Shell wirklich mag, möchte ich so etwas wie den nächsten ( imaginären ) Befehl machen:

apt-get get-deb-file [package-name]

Ich konnte so etwas nicht in der apt-get-Handbuchseite finden . Am nächsten kam mir der --download-onlySchalter, der jedoch das Paket einfügt /var/cache/apt/archives(für das Root-Berechtigungen erforderlich sind) und nicht im aktuellen Verzeichnis.


Unterschiede auf Maschinen ohne Speichern von Dateien: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust

Sie können debgetaus dem Paket verwenden debian-goodies.
Shayan

Antworten:


59

Sie können den downloadUnterbefehl apt, apt-getoder verwenden aptitude. Wenn beispielsweise $ PKG das gewünschte Paket ist, kann Folgendes ausgeführt werden:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

Dies erfordert keine Root-Rechte. Das Gleiche kann auch mit apt-getund angenähert werden wget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

Dadurch werden jedoch alle für die Installation des Pakets erforderlichen Pakete abgerufen, sodass Sie versuchen können, es stattdessen einzuschränken:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

Sie können auch eine wget-Zeile in eine Funktion einfügen, um sie als Befehl apt-download mit dem Paketnamen als Parameter verwenden zu können:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

Beachten Sie die Änderungen: Die $ PKG wird durch $ 1 ersetzt, und der Parameter -c ermöglicht das Fortsetzen unterbrochener Downloads.


1
Ausgezeichnet, das ist was ich suche. Ein weiterer Grund, um auf meinem System fit zu bleiben, ist der andere nützliche Befehl, der nicht von bereitgestellt aptwird aptitude changelog $PKG.
Lekensteyn

4
Update: von Natty (apt - Version 0.8.11 um genau zu sein), das aptitude downloadist Feature in verfügbar aptauch: apt-get download $PKG.
Lekensteyn

süß, funktioniert trotz meiner alten Wohnung v0.8.10
Rogerdpack

anscheinend haben sie die option --print-urls
abgeschafft. erjoalgo

Die Option --print-urls ist noch vorhanden
kumarharsh

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Hinweis:

Sie müssen einen Ordner mit dem Namen partial im Zielordner erstellen.


Klingt nicht so schlimm. Die Optionen scheinen von beschrieben zu werden man apt.conf. Ich möchte die Erstellung des Ordners vermeiden.
Lekensteyn

Ich bin nur neugierig, warum sollten Sie es vermeiden, den Ordner zu erstellen?
mount.cifs

Ich muss das Paket nicht für immer aufbewahren und das Erstellen des Ordners spart auch Zeit.
Lekensteyn

Ich möchte nur darauf hinweisen, dass diese Lösung auch das Entfernen von /etc/apt/sources.listPaketen wgeterfordert (z. B. wenn Sie die Version über auf eine neuere Version ändern , um spätere Pakete herunterzuladen) will nichts entfernen ...
sdaau

5

Enthält in Ubuntu 14.04 ( aptPaketversion 1.0.1ubuntu2, glaube ich) apt-getden downloadBefehl, das angegebene Paket als .debim aktuellen Verzeichnis herunterzuladen .

Angenommen, wir möchten den Dateimanager herunterladen Ranger:

$ apt-get download ranger

Ergebnisse in:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

Dies ist perfekt. Alle anderen Lösungen, die ich ausprobiert habe, funktionieren nicht, wenn apt installnicht alle Abhängigkeitsanforderungen erfüllt werden können. Ich wollte nur die .deb-Datei zum Basteln!
Raziel

3

Wenn Sie alle deb-Pakete von einer Liste herunterladen möchten, können Sie dies tun:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

Geben Sie einfach einen Paketnamen pro Zeile ein. Wie in einer requirements.txt-Datei. Zum Beispiel mit Inhalten wie diesem:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

Hoffe das hilft. ;)


2

sudo apt-get install devscripts

dget [package-name]


Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag.
S3LPH

Wie gibt es keine Antwort? Dadurch wird eine Deb aus dem Archiv in das aktuelle Verzeichnis heruntergeladen. War das nicht genau die Frage?
Michael Terry

Ein bisschen mehr Detail kann nützlich sein. Obwohl dies technisch als Antwort qualifiziert ist, möchten Sie möglicherweise dennoch mehr als zwei Befehle bereitstellen.
S3LPH

:: achselzucken :: Im Gegensatz zu den anderen Antworten hier hat diese keine Vorbehalte oder Vorbehalte. Es ist eine einfache Antwort auf eine einfache Frage.
Michael Terry

0

/var/cache/apt/archivesist weltweit lesbar. Danach apt-get -dextrahieren Sie es einfach von dort in Ihr Home-Verzeichnis. Führen dpkg -e /var/cache/apt/archives/foo_version.deb fooSie das Programm aus, während Sie sich in Ihrem Ausgangsverzeichnis befinden, und die Steuerdateien werden abgelegt foo/.


Ich denke, das Problem mit dieser Methode ist, dass der Download noch Administratorrechte erfordert. Es scheint dumm zu sein, so extrem zu sein, nur um eine Datei in Ihr Home-Verzeichnis zu bekommen.
ændrük

Das Öffnen der .debs ist nicht das Problem, das Herunterladen ist es. Es kann ein Fehler sein oder nicht, aber die Pakete in / var / cache / apt / archives` sind auch von umask betroffen. Ich habe eine umask von 027 eingestellt und daher können die Pakete in /var/cache/apt/archivesnicht von mir gelesen werden. Da ich den Paketinhalt nur untersuchen muss, muss ich ihn nur einmal herunterladen: to /tmp.
Lekensteyn

0

Sie können den Befehl verwenden, debgetder im Paket enthalten ist debian-goodies.

Installiere es mit:

sudo apt install debian-goodies

Pakete herunterladen mit:

debget <package_name>

Zum Beispiel:

debget debian-goodies

Welches wird debian-goodies_0.79_all.debin Ihrem aktuellen Verzeichnis heruntergeladen (tun pwd, um Ihr aktuelles Arbeitsverzeichnis zu drucken).


debian-goodiesKommt mit vielen nützlichen Befehlen, siehe auch: askubuntu.com/a/1170001/777279
Shayan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.