2010-02-16 13 views
8

C'è un modo per ottenere dpkg, apt-get o aptitude per produrre un elenco dei pacchetti che devono essere installati su una seconda macchina per duplicare i pacchetti installati in un primo?Come posso elencare il set minimo di pacchetti Debian necessari per ricreare un insieme di pacchetti installati?

cioè se ho installato un server di Ubuntu pianura, ha scelto l'opzione sshd al momento dell'installazione, quindi installato build-essential mi aspetterei l'uscita a guardare qualcosa di simile:

#ubuntu 9.10 server 
openssh-sshd 
build-essential 

Per quanto posso vedi, tutti gli strumenti di packaging disponibili produrranno un elenco dettagliato dei pacchetti su una scatola. Non mi interessano le librerie openssh, ld, gcc e tutti gli altri pacchetti estratti da sshd e build-essential, poiché verranno installati quando installo sshd e build-essential.

Mi piacerebbe vedere solo l'elenco del pacchetto che ho bisogno di installare per ricreare il mio attuale pacchetto di pacchetti su un'altra macchina.

È possibile?

risposta

11

deborphan, una specie di. Costruisce un elenco di ogni pacchetto nel sistema, individua cosa dipende da cosa e stampa i pacchetti che non hanno alcuna dipendenza. Per impostazione predefinita, stampa solo le librerie (per semplificare la ricerca di librerie installate da altri pacchetti e non più necessarie, da cui il nome). Ha opzioni per fare quello che vuoi, soprattutto. Ho eseguito piace:

deborphan -anp required --no-show-section

-a specifica tutti i pacchetti (non solo biblioteche)
-n ignora "Suggerisce" o "raccomanda" la dipendenza di controllo (vale a dire solo "dipende")
-p required elenca tutti i pacchetti nonostante priorità --no-show-section non indica quale parte di debian è presente, solo una bella funzione di formattazione che potrebbe essere utile per creare un elenco.

Ora, mancheranno i pacchetti, perché alcuni pacchetti hanno dipendenze circolari. Ma quelli tendono ad essere abbastanza rari, quindi dovrebbe avvicinarti abbastanza.

+0

Perché 'deborphan -anp richiesto --no-show-section' include 'gcc' nel suo output, quando 'apt-rdepends build-essential' mostra che 'build-essential' dipende da 'gcc'? – fadedbee

+0

Mostra una versione specifica di gcc, come gcc-4.3, o il pacchetto gcc stesso? Se è il pacchetto 'gcc', forse build-essential non è effettivamente installato? ... non ci sono buone ipotesi, mi dispiace. Nella mia versione, vedo build-essential ma no gcc. –

1

Quindi, si desidera l'elenco di pacchetti che sono stati installati esplicitamente (come, ad esempio, ubuntu-desktop e openssh) e non le dipendenze automatiche? Non sono positivo, ma penso che sia quello che fa dpkg --get-selections. Così, si può fare

dpkg --get-selections > file 

E poi, sull'altro computer, utilizzare lo stesso "file" ed eseguire

dpkg --set-selections < file 
apt-get dselect-upgrade 

Io non sono assolutamente positivo che questi comandi basta fare selezionato manualmente pacchetti, però, e attualmente sono lontano da qualsiasi sistema basato su Debian su cui verificare. :)

+0

No, sembra che elenchi i pacchetti che sono stati inseriti come dipendenze. Sulla mia macchina, la lista include pacchetti come g ++, g ++ - 4.4, gcc ... che so sono stati installati da build-essential. – fadedbee

2

Il codice che dannysauer ha pubblicato è un inizio. Una volta che hai un elenco di pacchetti che include dipendenze, puoi usare apt-rdepends per trovare le dipendenze per un particolare pacchetto (vedi this page per esempio utilizzo e output).

Procedura contorno

  1. scorrere l'elenco dei pacchetti restituito dal codice di dannysauer
  2. chiamata apt-rdepends su ogni
  3. Elimina tutti i pacchetti dalla lista che compare nella produzione di apt-rdepends
+0

Penso che questo sia anche un approccio praticabile, ma sembra più lento e più lavoro di deborphan. C'è qualche problema con l'uso di deborphan che apt-rdepends risolve? – fadedbee

+0

IIRC, 'deborphan' crea solo un elenco di pacchetti installati che non hanno nulla che dipende da loro. Questo potrebbe non essere quello che vuoi (vedi il commento di Eric sopra a proposito di "deborphan", forse pacchetti mancanti). In caso di problemi, ho menzionato 'apt-rdepends' perché puoi sempre ottenere un elenco completo di tutti i pacchetti installati da entrambe le macchine, eliminare i pacchetti comuni ad entrambi gli elenchi ed esaminare i pacchetti rimanenti con' apt-rdepends' per generare l'elenco più breve possibile di pacchetti che ricrea il set di pacchetti corrente sulla seconda macchina. Questo dovrebbe anche essere facilmente programmabile. – bta

0

Che cosa circa questo:

#!/bin/bash 

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}') 

for pkg in $packages 
do 
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l) 
    if [ "$nr_lines" = "2" ] 
    then 
     echo $pkg 
    fi 
done 

Funziona bene? Può essere migliorato in qualche modo?

Problemi correlati