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.


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.


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.


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

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. ;)


2

sudo apt-get install devscripts

dget [package-name]


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/.


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).


debian-goodieszawiera wiele przydatnych poleceń, patrz także: askubuntu.com/a/1170001/777279
Shayan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.