GNU/Linux >> Linux Esercitazione >  >> Debian

Debian:come replicare le selezioni di pacchetti installati da un sistema Debian a un altro? (Debian Wheezy)?

Sto provando a configurare un ambiente di staging in una VM, per testare gli aggiornamenti prima di applicarli al mio sistema principale.

Per fare ciò, ho eseguito un'installazione di base di Debian Wheezy (come sul sistema principale) nella VM, quindi ho eseguito come root dall'interno della VM:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] 'dpkg --get-selections | grep -v deinstall' | 
  dpkg --set-selections

L'architettura i386 è purtroppo necessaria nel mio caso; il sistema è nativo per amd64.

Il problema è con dpkg --set-selections eseguire nella VM. Ho alcuni pacchetti che richiedono una gestione speciale (questi sono in realtà il motivo principale per cui voglio un ambiente di staging in primo luogo) ma quando eseguo l'ultimo comando sopra, ottengo circa un miliardo di righe di output come:

dpkg: warning: package not in database at line NNN: package-name

per i pacchetti che dovrebbero essere realmente disponibili nel sistema di base. Gli esempi includono xterm , yelp e zip .

Ora per la mia domanda:

Qual ​​è il processo specifico per trasferire l'elenco di selezione dei pacchetti da un sistema Debian a un altro (supponendo lo stesso livello di rilascio di Debian, in Wheezy) e successivamente applicare tali modifiche? L'obiettivo è che entrambi abbiano lo stesso elenco di pacchetti installati, idealmente in modo tale da eseguire un diff tra gli output di dpkg --get-selections o dpkg --list sui due torna senza mostrare differenze.

grep -v deinstall parte è presa in prestito da Impedisci la rimozione dei pacchetti dopo aver eseguito dpkg --set-selections su Chiedi a Ubuntu.

Ho cambiato il sorgente nella VM in modo che sia lo stesso del sistema principale, installando anche apt-transport-https :

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

Guardando l'output di –set-selections, vedo:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

I numeri di riga sembravano dispari e la parte corrispondente dell'output di –get-selections è:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

Nota che tra acl e aglfn sono acpi-support-base , acpid e adduser per i quali non vengono segnalati errori . Sembra che i pacchetti per i quali vengono segnalati gli errori siano un secondo dpkg -l o dpkg -l non ha alcuna idea su di loro (dpkg-query: no packages found matching ... ). So che ci sono alcuni pacchetti installati localmente, ma non molti. i386 non viene visualizzato fino a gcc-4.7-base:i386 install molto più in basso nell'elenco (riga 342 nell'output –get-selections).

Correlati:quali sono le differenze fondamentali tra le shell *NIX tradizionali??

Risposta accettata:

Per clonare un'installazione Debian, usa apt-clone utilità. È disponibile (come pacchetto separato, non parte dell'installazione predefinita) in Debian da wheezy e in Ubuntu dal 12.04. Sul computer esistente, esegui

apt-clone clone foo

Questo crea un file foo.apt-clone.tar.gz . Copialo sul computer di destinazione ed esegui

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Se stai lavorando con un vecchio sistema in cui apt-clone non è disponibile o se vuoi semplicemente replicare l'elenco dei pacchetti installati ma non un file di configurazione, ecco i passaggi manuali.

  • Sul computer di origine:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Sulla macchina di destinazione:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

Credo che tu sia interessato da una modifica incompatibile in dpkg che per la prima volta è diventata sibilante. Vedi il bug #703092 per lo sfondo.

La storia breve è che dpkg --set-selections ora accetta solo i nomi dei pacchetti che sono presenti nel file /var/lib/dpkg/status o /var/lib/dpkg/available . Se usi APT solo per gestire i pacchetti, come la maggior parte delle persone, allora /var/lib/dpkg/available non è aggiornato.

Dopo aver eseguito apt-get update e prima di eseguire dpkg --set-selections e apt-get -u dselect-upgrade , esegui il comando seguente:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Da jessie in poi, puoi semplificarlo a

apt-cache dumpavail | dpkg --merge-avail

In alternativa, esegui

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

o anche più semplice

apt-get install dctrl-tools
sync-available

Un altro metodo semplice che non richiede l'installazione di un pacchetto aggiuntivo ma scaricherà nuovamente gli elenchi dei pacchetti è

dselect update

Per ulteriori informazioni, vedere le domande frequenti su dpkg. (Questo è menzionato nella pagina man di dpkg, ma più in un modo che ti ricorderebbe il problema se ne fossi già a conoscenza, non in un modo che spieghi come risolvere il problema!)

Nota che clonare l'installazione di un pacchetto con dpkg --set-selections non ripristina il contrassegno automatico/manuale in APT. Vedere Ripristino di tutti i dati e le dipendenze da dpkg –set-selections '*' per maggiori dettagli. Puoi salvare i segni sul sistema di origine con

apt-mark showauto >auto.list

e ripristinarli sul sistema di destinazione con

xargs apt-mark auto <auto.list

Debian
  1. Come aggiornare il sistema Debian Linux da Wheezy a Jessie versione stabile

  2. Come installare Gradle su Debian 10

  3. Debian:come installare un singolo pacchetto da Debian Testing o Unstable su Stable?

  4. Fedora:come replicare la selezione del pacchetto installato da un'istanza Fedora all'altra?

  5. Come compilare dal sorgente e installare Nginx in un VPS Debian 7 (Wheezy).

Come installare i pacchetti su Debian 10

Come installare PostgreSQL 14 su Debian 11

Come installare il pacchetto Debian (.deb).

Come installare webmin su Debian 11

Come reindirizzare da un dominio all'altro in Nginx e Debian 11

Come installare Wine su Debian 7 Wheezy