Czy istnieje polecenie apt, aby pobrać plik deb z repozytoriów do bieżącego katalogu?

46

Często interesują mnie wyzwalacze instalacji (postinst, postrm) lub niektóre części pakietów (jak /usr/sharei /etc). Obecnie uruchamiam następne polecenie, aby pobrać kod źródłowy:

apt-get source [package-name]

Minusem jest to, że plik ten jest często znacznie większy niż pakiet binarny i nie odzwierciedla drzewa instalacji.

W tej chwili pobieram pakiety za pośrednictwem http://packages.ubuntu.com/ :

  1. Szukaj [package-name]
  2. Wybierz pakiet
  3. Kliknij amd64 / i386, aby pobrać
  4. Pobierz aktualny plik

Trwa to dla mnie zbyt długo i jako ktoś, kto naprawdę lubi powłokę, chciałbym zrobić coś takiego jak następne ( wyobrażone ) polecenie:

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

Nie mogłem znaleźć czegoś takiego na stronie podręcznika apt-get . Najbliżej znalazłem --download-onlyprzełącznik, ale umieszcza on pakiet /var/cache/apt/archives(który wymaga uprawnień roota), a nie w bieżącym katalogu.

Lekensteyn
źródło
Różnice na komputerach bez zapisywania plików: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust
Możesz użyć debgetz pakietu debian-goodies.
Shayan

Odpowiedzi:

59

Można użyć downloadsub-dowodzenie apt, apt-getalbo aptitude. Na przykład, jeśli $ PKG jest pakietem, który chcesz, którykolwiek z nich zrobi:

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

Nie wymaga to uprawnień roota. To samo można również oszacować za pomocą apt-geti wget:

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

Spowoduje to jednak pobranie wszystkich pakietów wymaganych do zainstalowania pakietu, dlatego możesz spróbować go ograniczyć:

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

Możesz także wstawić wiersz funkcji do wget, aby móc go używać jako polecenia apt-download z nazwą pakietu jako parametrem:

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

Zwróć uwagę na modyfikacje: $ PKG zostaje zastąpione 1 $, a parametr -c umożliwia kontynuowanie przerwanych pobierania.

Kees Cook
źródło
1
Doskonale, właśnie tego szukam. Innym powodem, aby zachować umiejętności w moim systemie, drugi przydatna komenda, która nie jest dostarczana przez aptto aptitude changelog $PKG.
Lekensteyn,
4
Aktualizacja: od Natty (apt wersja 0.8.11 być precyzyjne), przy czym aptitude downloadfunkcja jest dostępna w apttakże: apt-get download $PKG.
Lekensteyn
słodko, działa pomimo mojego starożytnego apt v0.8.10
rogerdpack 12.12.2013
wygląda na to, że zrezygnowali z opcji
--print
Opcja
--print
8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Uwaga:

Musisz utworzyć folder o nazwie częściowy w folderze docelowym.

mount.cifs
źródło
Nie brzmi tak źle. Opcje wydają się być opisane przez man apt.conf. Chciałbym uniknąć tworzenia folderu.
Lekensteyn,
Jestem tylko ciekawy, dlaczego miałbyś unikać tworzenia folderu?
mount.cifs
Nie muszę przechowywać paczki na zawsze i unikanie tworzenia folderu również oszczędza czas.
Lekensteyn,
Chciałem tylko zauważyć, że to rozwiązanie będzie również nalegało na usunięcie pakietu (np. Jeśli zmienisz wersję /etc/apt/sources.listna nowszą, z zamiarem pobrania późniejszych pakietów) - w takim przypadku wgetpowyższa metoda może być bardziej przydatna, jeśli nie nie chcę niczego usuwać ...
sdaau
5

W Ubuntu 14.04 ( aptwersja pakietu 1.0.1ubuntu2, jak sądzę), apt-getzawiera downloadpolecenie pobrania danego pakietu jako .debw bieżącym katalogu.

Załóżmy na przykład, że chcemy pobrać menedżera plików Ranger:

$ apt-get download ranger

Prowadzi do:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb
Aaron Santavicca
źródło
To jest doskonałe. Wszystkie inne rozwiązania, które wypróbowałem, nie działają, jeśli apt installnie spełniają wszystkich wymagań dotyczących zależności. Chciałem tylko plik .deb do majsterkowania!
Raziel
3

Jeśli chcesz pobrać wszystkie pakiety deb z listy, możesz to zrobić:

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

Wystarczy umieścić jedną nazwę pakietu w wierszu. Jak w pliku wymagania.txt. Na przykład z takimi treściami:

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

Mam nadzieję że to pomoże. ;)

Jayme Tosi Neto
źródło
2

sudo apt-get install devscripts

dget [package-name]

Michael Terry
źródło
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem.
s3lph
Jak nie zapewnia odpowiedzi? Spowoduje to pobranie deb z archiwum do bieżącego katalogu. Czy to nie jest dokładnie to pytanie?
Michael Terry
Przydaje się nieco więcej szczegółów. Chociaż technicznie kwalifikuje się to jako odpowiedź, nadal możesz chcieć podać więcej niż dwa polecenia.
s3lph 14.04.15
:: wzruszenie ramionami :: W przeciwieństwie do innych odpowiedzi tutaj, ta nie ma żadnych zastrzeżeń ani zastrzeżeń. To prosta odpowiedź na proste pytanie.
Michael Terry
0

/var/cache/apt/archivesjest czytelny na całym świecie. Następnie apt-get -dpo prostu wypakuj go stamtąd do katalogu domowego. Uruchom dpkg -e /var/cache/apt/archives/foo_version.deb foow swoim katalogu domowym, a pliki kontrolne zostaną zrzucone foo/.

psusi
źródło
Myślę, że problem z tą metodą polega na tym, że pobieranie nadal wymaga uprawnień administratora. Głupotą jest przechodzenie do takich ekstremów tylko po to, aby pobrać plik do katalogu domowego.
ændrük
Otwarcie .debs nie stanowi problemu, pobieranie jest. Może to być błąd lub nie, ale na pakiety w / var / cache / apt / archives` również wpływa umask. Ustawiłem umask na 027 i dlatego /var/cache/apt/archivesnie mogę odczytać pakietów w . Ponieważ muszę tylko zbadać zawartość pakietu, muszę go tylko raz pobrać: do /tmp.
Lekensteyn,
0

Możesz użyć polecenia debgetzawartego w pakiecie debian-goodies.

Zainstaluj z:

sudo apt install debian-goodies

Pobierz pakiety za pomocą:

debget <package_name>

Na przykład:

debget debian-goodies

Które pobiorą debian-goodies_0.79_all.debw twoim bieżącym katalogu (zrobić, pwdaby wydrukować bieżący katalog roboczy).

Shayan
źródło
debian-goodieszawiera wiele przydatnych poleceń, patrz także: askubuntu.com/a/1170001/777279
Shayan