2012-12-07 28 views
38

Sto provando a installare un pacchetto su una macchina senza connessione Internet. Quello che voglio fare è scaricare tutti i pacchetti e le dipendenze su una macchina con una connessione Internet e quindi sneaker-net tutto al computer offline.Come scaricare tutte le dipendenze e pacchetti nella directory

Ho giocato con il apt-get e apt-cache ma non ho trovato un modo semplice e veloce per scaricare il pacchetto e le dipendenze in un colpo solo in una directory di mia scelta. Come lo farei? Sto andando su questo problema correttamente? Come installereste i pacchetti offline che hanno molte dipendenze?

+0

http://superuser.com/questions/876727/how-to-download-deb-package-and-all- dipendenze | http://askubuntu.com/questions/492435/how-to-download-apt-and-all-its-dependencies | http://askubuntu.com/questions/219828/getting-deb-package-dependencies-for-an-offline-ubuntu-computer-through-windows | http: // Ask Ubuntu.it/questions/216746/dependency-not-satisfiable-offline-deb-package-install/216755 –

risposta

33
# aptitude clean 
# aptitude --download-only install <your_package_here> 
# cp /var/cache/apt/archives/*.deb <your_directory_here> 
+16

Funziona solo se il pacchetto o le sue dipendenze non sono installati localmente. – Kissaki

+8

In situazioni del mondo reale questo non funziona per voi. Nella maggior parte dei casi sono stati installati molti pacchetti di dipendenze, quindi - download-only non li scaricherà e non li metterà nella directory/var/cache/apt/archive /. così finisci con pacchetti di dipendenza incompleti. – Shnd

+0

Immagino che questo funzionerà se si riescono a mantenere entrambe le installazioni, la sorgente (presumibilmente connessa ad Internet) e la destinazione (senza connessione Internet) esattamente la stessa, ad esempio installando Ubuntu dallo stesso ISO su entrambe le macchine e quindi pulendo tutto '. deb sulla fonte, quindi installando le cose desiderate, copiando tutti i '.deb' appena scaricati sul computer di destinazione e poi eseguendo' sudo dpkg -i * .deb' ??? – Mahesha999

1

Suppongo che tu abbia una bella USB HD e una buona connessione alla rete. È possibile utilizzare apt-mirror per creare essenzialmente il proprio mirror debian.

http://apt-mirror.sourceforge.net/

+1

No, non lo faccio. Gioco male con apt-mirror ma non ho una grossa USB HD o una buona connessione alla rete. Voglio solo scaricare i pacchetti di cui ho assolutamente bisogno. – Rell3oT

11

Il aptitude --download-only ... approccio funziona solo se si dispone di una distro debian con connessione a Internet nelle tue mani.

Se non lo fai, penso che sia meglio per eseguire il seguente script sulla macchina debian scollegata:

apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list 

spostare il file in una downloads.list Linux collegato (o non Linux) della macchina, ed eseguire:

wget --input-file myurilist 

questo downloads tutti i file nel directory.After corrente che è possibile copiarli su una chiavetta USB ed installare nella vostra macchina debian scollegata.

crediti: http://www.tuxradar.com/answers/517

PS ho praticamente copiato il post sul blog, perché non era molto leggibile, e nel caso del post scompare.

+2

L'approccio apt-get funziona solo quando il pacchetto non è installato –

+0

L'aggiunta di '-qq' alla riga apt-get rimuove la necessità di' grep' (e la necessità di '--assume-yes') – jpaugh

45

La risposta contrassegnata presenta il problema che i pacchetti disponibili sulla macchina che sta eseguendo i download potrebbero essere diversi dal computer di destinazione e pertanto il pacchetto potrebbe essere incompleto.

Per evitare questo e ottenere tutte le dipendenze, sto usando la seguente:

apt-get download $(apt-rdepends <package>|grep -v "^ ") 
+4

Ho usato' apt-rdepends' perché * ricorsivamente * elenca i pacchetti necessari. Tuttavia, entrambe le soluzioni hanno il problema ancora (minore IMO) che alcune dipendenze possono essere fornite solo da pacchetti che sono effettivamente denominati come la dipendenza. Alcune dipendenze sono risolte da pacchetti denominati in modo diverso, ma con un tag 'Provides' corrispondente. Per esempio, mi sono imbattuto nel problema di avere un riferimento su debconf-2.0 non risolto - la mia soluzione kludgy ma molto praticabile è quella di filtrare manualmente quei pacchetti (di solito molto pochi) con un altro 'grep -v' aggiunto al pipe. – onno

+0

Sei sicuro che significa dipendenze ricorsive? Penso che sia una dipendenza inversa. –

+2

Per il mio precedente commento sopra ho confuso "apt-cache rdepends" con apt-rdepends. Il mio errore: tu eri corretto e questo è potente. –

3

ho usato apt-cache depends packageper ottenere tutti i pacchetti necessari in ogni caso se la sono già installato sul sistema oppure no. Quindi funzionerà sempre correttamente.
Poiché il comando apt-cache funziona in modo diverso, a seconda della lingua, è necessario provare questo comando sul proprio sistema e adattare il comando. apt-cache dipende yourpackage
In un sistema englisch si ottiene:

$ apt-cache depends yourpackage 
node 
    Depends: libax25 
    Depends: libc6 


Su un sistema tedesco si ottiene: nodo

Hängt ab von: libax25 
    Hängt ab von: libc6 


La versione ital con il termine:
" Depends: "
È necessario modificare il termine" yourpackage "per il tuo desiderio due volte in questo comando, fare attenzione di questo!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep " Depends:" | sed 's/ Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list 


e la versione tedesca con il termine:
"Hängt ab von:"
Devi cambiare il termine "yourpackage" al tuo desiderio due volte in questo comando, prendersi cura di questo!
Questo comando viene utilizzato due volte in questo comando, se si desidera adattarlo alla propria lingua, occuparsi di questo!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" | sed 's/ Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list 


si ottiene l'elenco di link in downloads.list
Controllare l'elenco, andare alla cartella ed eseguire l'elenco:

$ cd yourpathToYourFolder 

$ wget --input-file downloads.list 


Tutti i pacchetti richiesti sono in:

$ ls yourpathToYourFolder 
+0

Una volta ottenuti i file, quale comando useresti per assicurarti che tutti questi file vengano utilizzati quando si esegue un'installazione offline? – dtmland

+0

Penso che se crei dpkg -i pacchetto .deb package2.deb, dpkg capirà l'ordine di installazione – FreeSoftwareServers

+0

Questo non ha funzionato per me perché uno dei miei dipendenti era che non era gestito correttamente nella One liner, ma sono sicuro che funzionerà per un sacco di cose, il concetto generale funziona, ma ho usato la risposta di ozma – FreeSoftwareServers

6

Un modo un po 'semplificato (e ciò che ha funzionato per me) che ha funzionato per me (basato su tutti Quanto sopra)
Si noti che le dipendenze gerarchia può andare più in profondità, allora un livello

Ottenere dipendenze della confezione

$ apt-cache depends mongodb | grep Depends: 
    Depends: mongodb-dev 
    Depends: mongodb-server 

Ottenere gli URL:

sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-tools | grep "http://" | awk '{print$1}' | xargs -I'{}' echo {} | tee files.list 
wget --input-file files.list 
+0

Grazie mille per questo. In realtà mi chiedo se c'è un modo per dire a APT di scaricare anche le dipendenze e memorizzarle nella cache in/var/cache/apt/archives. Volevo scaricare 'texlive-full --install-recommendations' e ho finito con un metapacchetto chiamato' texlive-full' nei miei archivi. –

+1

Non so la cache. Dovrai provarlo da solo http://askubuntu.com/questions/463380/difference-between-apt-get-d-install-apt-get-download – ozma

5

Questo scaricherà tutto il Debs alla corrente directory, e NON fallirà se non riesce a trovare un candidato.

Inoltre NON richiede sudo per eseguire sript!

nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh 

#!/bin/bash 

package=ssmtp 

apt-cache depends "$package" | grep Depends: >> deb.list 

sed -i -e 's/[<>|:]//g' deb.list 

sed -i -e 's/Depends//g' deb.list 

sed -i -e 's/ //g' deb.list 

filename="deb.list" 

while read -r line 
do 
    name="$line" 
    apt-get download "$name" 
done < "$filename" 

apt-get download "$package" 

Nota: Ho usato questo come il mio esempio, perché mi è stato effettivamente cercando di DL i Deps per SSMTP ed è fallito su debconf-2.0, ma questo script mi ​​ha fatto quello che mi serve! Spero che sia d'aiuto.

+0

questo ha funzionato alla grande per me. Ho dovuto aggiungere un'altra linea per gestire PreDepends però. grazie per la condivisione! – tay10r

Problemi correlati