Esiste un comando apt per scaricare un file deb dai repository nella directory corrente?


46

Sono spesso interessato ai trigger di installazione (postinst, postrm) o ad alcune parti di pacchetti (come /usr/sharee /etc). Attualmente, sto eseguendo il comando successivo per recuperare il codice sorgente:

apt-get source [package-name]

L'aspetto negativo è che questo file è spesso molto più grande del pacchetto binario e non riflette l'albero di installazione.

In questo momento, sto scaricando i pacchetti tramite http://packages.ubuntu.com/ :

  1. Cercare [package-name]
  2. Seleziona il pacchetto
  3. Fare clic su amd64 / i386 per il download
  4. Scarica il file attuale

Questo richiede troppo tempo per me e come qualcuno a cui piace davvero la shell, vorrei fare qualcosa come il prossimo comando ( immaginario ):

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

Non sono riuscito a trovare qualcosa del genere nella pagina del manuale di apt-get . Il più vicino che ho trovato è stato lo --download-onlyswitch, ma questo inserisce il pacchetto /var/cache/apt/archives(che richiede i permessi di root) e non nella directory corrente.


Differenze sulle macchine senza salvare i file: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust

È possibile utilizzare debgetdal pacchetto debian-goodies.
Shayan,

Risposte:


59

È possibile utilizzare il downloadcomando secondario di apt, apt-geto aptitude. Ad esempio, se $ PKG è il pacchetto desiderato, uno di questi farà:

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

Questo non richiede i privilegi di root. Lo stesso può anche essere approssimato usando apt-gete wget:

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

Questo, tuttavia, recupererà tutti i pacchetti richiesti per installare il pacchetto, quindi puoi tentare invece di limitarlo:

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

Puoi anche mettere una linea wget in una funzione, per poterla usare come comando apt-download con il nome del pacchetto come parametro:

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

Nota le modifiche: $ PKG viene sostituito con $ 1 e il parametro -c consente di continuare a scaricare interrotti.


1
Eccellente, questo è quello che sto cercando. Un altro motivo per mantenere l'attitudine sul mio sistema, l'altro utile comando che non è fornito da aptè aptitude changelog $PKG.
Lekensteyn,

4
Aggiornamento: da Natty (apt versione 0.8.11 per la precisione), la aptitude downloadfunzione è disponibile in aptoltre: apt-get download $PKG.
Lekensteyn,

dolce, funziona nonostante il mio antico apt v0.8.10
rogerdpack

sembra che abbiano eliminato l'opzione --print-urls
erjoalgo il

L'opzione --print-urls è ancora lì
kumarharsh

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

Nota:

È necessario creare una cartella denominata parziale nella cartella di destinazione.


Non suona così male. Le opzioni sembrano essere descritte da man apt.conf. Vorrei evitare la creazione della cartella.
Lekensteyn,

Sono solo curioso, perché dovresti evitare di creare la cartella?
mount.cifs

Non ho bisogno di conservare il pacchetto per sempre ed evitare di creare la cartella consente di risparmiare tempo.
Lekensteyn,

Volevo solo notare che questa soluzione insisterà anche sulla rimozione dei pacchetti (ad esempio se si cambia la versione tramite /etc/apt/sources.listuna più recente, con l'intento di scaricare i pacchetti successivi) - in tal caso, il wgetmetodo sopra potrebbe essere più utile, se non si non voglio rimuovere nulla ...
Sdaau,

5

In Ubuntu 14.04 ( aptversione del pacchetto 1.0.1ubuntu2, credo), apt-getinclude il downloadcomando per scaricare il pacchetto dato come .debnella directory corrente.

Ad esempio, supponiamo di voler scaricare il file manager Ranger:

$ apt-get download ranger

Risultati in:

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

Questo è perfetto. Tutte le altre soluzioni che ho provato non funzionano se apt installnon sono in grado di soddisfare tutti i requisiti di dipendenza. Volevo solo il file .deb per armeggiare!
Raziel,

3

Se vuoi scaricare tutti i pacchetti deb da un elenco, puoi farlo:

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

Inserisci solo un nome di pacchetto per riga. Come in un file requisito.txt. Ad esempio, con contenuti come questo:

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

Spero che sia di aiuto. ;)


2

sudo apt-get install devscripts

dget [package-name]


Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post.
s3lph

Come non fornisce una risposta? Questo scarica un deb dall'archivio nella directory corrente. Non è esattamente questa la domanda?
Michael Terry,

Un po 'più di dettagli può essere utile. Sebbene tecnicamente si qualifichi come una risposta, potresti comunque voler fornire più di due comandi.
s3lph

:: scrollata di spalle :: A differenza delle altre risposte qui, questa non ha disposizioni o avvertenze. È una risposta semplice a una domanda semplice.
Michael Terry,

0

/var/cache/apt/archivesè leggibile dal mondo. Dopo apt-get -d, basta estrarlo da lì alla tua home directory. Esegui dpkg -e /var/cache/apt/archives/foo_version.deb foomentre sei nella tua home directory e i file di controllo verranno scaricati in foo/.


Penso che il problema con questo metodo sia che il download richiede ancora privilegi di amministratore. Sembra sciocco andare a tali estremi solo per ottenere un file nella tua home directory.
ændrük,

Aprire il file .debs non è il problema, scaricarlo è. Potrebbe essere un bug o no, ma anche i pacchetti in / var / cache / apt / archives` sono influenzati da umask. Ho impostato un umask di 027 e quindi i pacchetti in /var/cache/apt/archivesnon possono essere letti da me. Dato che ho solo bisogno di esaminare il contenuto del pacchetto, ho solo bisogno di scaricarlo una volta: a /tmp.
Lekensteyn,

0

È possibile utilizzare il comando debgetincluso nel pacchetto debian-goodies.

Installalo con:

sudo apt install debian-goodies

Scarica i pacchetti utilizzando:

debget <package_name>

Per esempio:

debget debian-goodies

Che verrà scaricato debian-goodies_0.79_all.debnella directory corrente (fare pwdper stampare la directory di lavoro corrente).


debian-goodiesviene fornito con molti comandi utili, vedi anche: askubuntu.com/a/1170001/777279
Shayan
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.