Ripristino di tutti i dati e le dipendenze da dpkg --set-selections '*'


44

Quindi posso eseguire su una macchina:

dpkg --get-selections '*' > selection.txt

Su un'altra macchina:

dpkg --set-selections < selection.txt

... seguito da uno dei seguenti:

aptitude install
apt-get -u dselect-upgrade

... per installare i pacchetti che.

Tuttavia, sembra che alcune informazioni vadano perse nel processo, come se un pacchetto (diciamo xyz) fosse installato automaticamente come dipendenza di un altro pacchetto ( abc). Puoi vederlo ogni volta che fai qualcosa del genere apt-get --purge remove abc. Sulla macchina originale verrebbe notificato che il pacchetto è xyzstato installato come dipendenza di abce che è possibile utilizzare apt-get autoremoveper eliminarlo.

Ora sono a conoscenza di deborphane debfoster, ma sono ingombranti da usare dato il compito (semplice) a portata di mano.

Sembra che salvare e ripristinare le selezioni come mostrato sopra non sia sufficiente per ripristinare le sottili dipendenze dei pacchetti installati.

C'è un modo per eseguire il backup del set completo di metadati per la gestione dei pacchetti e ripristinarlo poi nella sua interezza?


Mi sono spesso chiesto la stessa cosa che ho generato un grosso script di shell con un 'sudo apt-get install' con tutti i miei pacchetti (meno libs). Certo, incontro lo stesso problema che stai riscontrando.
Chuck R,

Immagino che il posto migliore per iniziare a cercare sarebbe verificare se dpkg è effettivamente responsabile di tali informazioni. Se non lo è, forse è il lavoro di apt.
Huckle,

3
Se stai andando nel modo manuale, potresti essere interessato a apt-marksalvare / ripristinare le informazioni sui pacchetti automatici vs installati manualmente
Lekensteyn

Non è nel repository di pacchetti 10.04, vero? Fa parte dei repository canonici o di terze parti?
0xC0000022L

2
No, è solo un commento "per tua informazione". Userei apt-mark (fa parte di apt, quindi dovrebbe già essere installato) per ottenere e impostare i segni per i pacchetti (vedere la sua manpage per i dettagli).
htorque,

Risposte:


39

Backup:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Ristabilire:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)

Grazie, stavo per chiedere a te o Lekensteyn di scriverlo come risposta.
0xC0000022L

Questi comandi ti consentono di reinstallare i programmi da quell'elenco?
Svetlana Belkin,

questo può rimuovere i pacchetti installati extra, al ripristino?
n611x007,

1
Puoi spiegare la differenza tra autoe manual? Grazie.
Anto,

Ho accidentalmente contrassegnato come manuale un gruppo di altri pacchetti ... c'è un modo per ripristinare? Grazie
dentex,

2

La risposta selezionata a questa domanda è incompleta e non funziona (o non funziona più). La soluzione dolorosa consiste nell'utilizzare un for-loop bash per analizzare i file di output * .lst e inviarli a apt install. Cattiva scelta, tuttavia, quindi non verrà illustrata qui.

Una scelta migliore è usare apt-clone, come si vede in questa risposta su Unix & Linux Stackexchange. Questo crea un piccolo file (circa 100 K o meno per il mio sistema). Presumibilmente, clonerà i pacchetti con poco sforzo o dolore.

Quindi, in breve, sulla macchina originale:

apt-clone clone `uname -n`

Quindi, sulla macchina su cui clonare, copiare il file clone ed eseguire:

apt-clone restore original-machine-name.apt-clone.tar.gz

Includo questa risposta qui poiché questa pagina è stata visualizzata nelle ricerche Web iniziali, ma l'altra risposta no. Questo metodo sembra molto più semplice.

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.