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.