Come posso elencare l'insieme minimo di pacchetti Debian necessari per ricreare una serie di pacchetti installati?

StackOverflow https://stackoverflow.com/questions/2273836

  •  20-09-2019
  •  | 
  •  

Domanda

C'è un modo di ottenere dpkg, apt-get o aptitude per produrre un elenco dei pacchetti che hanno bisogno di essere installato su una seconda macchina per duplicare i pacchetti installati su un primo?

vale a dire. 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 vedere, tutti gli strumenti dell'imballaggio disponibile produrrà un elenco dettagliato dei pacchetti su una scatola. Io non sono interessato a librerie OpenSSH, LD, gcc, e tutti gli altri pacchetti introdotti dalle sshd e build-essential, in quanto saranno installati quando installo sshd e build-essential.

Mi piacerebbe vedere solo la lista del pacchetto che devo installare per ricreare la mia attuale serie di pacchetti su un'altra macchina.

È possibile?

È stato utile?

Soluzione

deborphan, sorta di. Si crea un elenco di tutti i pacchetti nel sistema, capisce cosa dipende da ciò, e stampa i pacchetti che non hanno alcuna dipendenza. Di default viene stampato solo librerie (per rendere più facile trovare le librerie che sono stati installati da altri pacchetti e non è più necessario, da qui il nome). Ha opzioni per fare ciò che si vuole, per lo più. Ho eseguito come:

deborphan -anp required --no-show-section

-a specifica tutti i pacchetti (non solo biblioteche)
-n ignora "suggerisce" o "Raccomanda" dipendenza di controllo (vale a dire solo "dipende")
-p required elenca tutti i pacchetti, nonostante la priorità
--no-show-section non indica quale parte di Debian è in, solo una bella caratteristica di formattazione si potrebbe trovare utile per la costruzione di una lista.

Ora, mancherà pacchetti, perché alcuni pacchetti hanno dipendenze circolari. Ma quelli tendono ad essere abbastanza raro, quindi dovrebbe arrivare abbastanza vicino.

Altri suggerimenti

Il codice che dannysauer postato è un inizio. Una volta che avete una lista di pacchetti che comprende le dipendenze, è possibile utilizzare apt-rdepends per trovare il dipendenze per un particolare pacchetto (vedi questa pagina ad esempio l'utilizzo e l'uscita).

Procedura contorno

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

Quindi, si desidera che l'elenco dei pacchetti che sono stati installati in modo esplicito (come, ad esempio, ubuntu-desktop e openssh), e non le auto-dipendenze? Io non sono positivi, ma penso che è 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

Non sono assolutamente positivo che questi comandi basta fare selezionato manualmente dei pacchetti, però, e io sono attualmente in pausa da tutti i sistemi basati su Debian per verificare su. :)

Che dire di 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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top