Facciamo una copia di backup dei pacchetti Rpm installati

Dom, 07/09/2008 - 18:02

Facciamo una copia di backup dei pacchetti Rpm installati

Inviato da Moreno 8 commenti

MGSM0065 07/09/2008 Facciamo una copia di backup dei pacchetti Rpm installati.

1) Introduzione

Da un po' di tempo mi frulla per la testa un idea su come si possa effettuare il backup dei pacchetti rpm installati su di una macchina, per distro debian like esiste il comodo aptoncd http://aptoncd.sourceforge.net/ che si preoccupa di scaricare da internet i pacchetti necessari ed a creare una o più iso per la masterizzazione.
Visto che non ho trovato nulla di simile disponibile per Mandriva, tanto per cominciare, mi sono scritto uno script che ha come scopo di mantenere in una cartella tutti i pacchetti installati mantenendola sempre aggiornata con il procedere degli aggiornamenti.

Lo script, per ottimizzare i tempi di download, evita di scaricare i pacchetti prersenti nel DVD di installazione o presenti nella cache di Urpmi.

Questo non è che un primo abbozzo di quello che dovrebbe essere il programma finale che penso scriverò in Python o Java in modo da renderlo indipendente dalla piattaforma.

Questo script penso funzioni solo con versioni di Mandriva installate da DVD, la versione su 3 CD richiederebbe un continuo cambio di CD da far venire il mal di testa mentre la Live One installata non avendo un CD contenente i pacchetti si scaricherebbe tutti i pacchetti installati.

Ricordatevi di abilitare le sorgenti DVD di installazione e di inserire il DVD di installazione prima di avviare lo script!!!
2) Backup dei Pacchetti
2.1) Inseriamo il DVD di Mandriva

La primissima cosa da fare è quella di inserire il DVD della Mandriva usato per l'installazione nel lettore, se non fate questo vi troverete a scaricare tutti i pacchetti di Mandriva installati(un po' tantini).

2.2) Abilitiamo le sorgenti DVD

In genere l'utente normale non disabilita mai le sorgenti del DVD altrimenti dovrebbe installare tutto dai mirror internet comunque è sempre meglio verificare.
La procedura è semplicissima

a) Menu -> Strumenti -> Strumenti di Sistema -> Configura il tuo Computer
Cool Inserire parola d'ordine di root
c) Click su linguetta Gestione software
d) Click su Configura i supporti da cui installare ed aggiornare
e) Ora bisogna verificare che tutte le sorgenti DVD e le sorgenti da cui avete scaricato i vari pacchetti abbiano il segno di spunta su Abilitato
e) Click su OK
f) Chiudere il centro di controllo.

2.3) Apriamo un terminale

Innanzi tutto occorre aprire un terminale con Menu -> Strumenti -> konsole

2.4) Diventiamo root

$ su
Password: LaPasswordDiRoot
#

2.5) Aggiorniamo la macchina

Questo script di backup, specialmente la versione veloce, preleva tutti i pacchetti da internet e se non li trova esce segnalando l'errore senza scaricare nulla.
Per l'aggiornamento è preferibile usare urpmi in modo da mantenere i pacchetti scaricati nella cache e non doverli scaricare 2 volte.

# urpmi --clean
# urpmi.update -a
# urpmi --auto --auto-select --noclean
#

Se invece preferite usare metodi grafici non ci sono problemi a parte il fatto che appunto i nuovi pacchetti verranno scaricati due volte.

C'è un bug report aperto da anni che richiede l'aggiunta dell'opzione noclean a rpmdrake https://qa.mandriva.com/show_bug.cgi?id=13522 ma la cosa è ancora ferma al palo.
Votate e fate votare questo Bug magari chissa che non ci diano retta.

2.6) Creiamo la cartella di Backup

# md /backup_rpm
# cd /backup_rpm
#

2.7) Scarichiamo lo script di backup

2.8) Rendiamo eseguibile lo script

# chmod u+x DownloadDiffRpm
#

2.9) Effettuiamo il backup

# ./DownloadDiffRpm

Adesso occorre armarsi di molta ma molta pazienza, lo script può impiegare anche mezzora ad elaborare tutti i pacchetti e poi una volta elaborati deve scaricare da internet quelli mancanti (nel mio caso erano 800 pacchetto pari a poco più di 900MB).
Alla fine del processo se non ci sono stati errori dovreste avere un certo numero di pacchetti Rpm nella cartella backup_rpm che sono appunto quelli scaricati da internet.

3) Aggiornamento periodico

Questo script andrebbe eseguito periodicamente in modo da tenere traccia dell'evoluzione della macchina.
Se i pacchetti del backup non vengono cancellati essi saranno ritrasferiti nella cache per cui non saranno più scaricati, solo i nuovi pacchetti aggiornati saranno scaricati, questo renderà più veloce le successive operazioni di download.
Alla fine delle operazioni solo i pacchetti realmente installati saranno trasferiti di nuovo nella cartella di backup mentre quelli vecchi o rimossi rimarranno in cache che sarà successivamente svuotata.

Per effettuare l'aggiornamento basterà reinserire il DVD di installazione di Mandriva e rilanciare, come root, lo script DownloadDiffRpm.

4) Ripristino di un Backup

L'operazione di ripristino di un backup è un operazione estremamente semplice, basta infatti installare nuovamente Mandriva, copiare la cartella di Backup ed installare tutti i pacchetti con un banalissimo urpmi *.rpm.
In pochissimo tempo riavrete la macchina con gli stessi identici programmi presenti nell'ultimo backup e senza scaricare un byte da internet.
Questa procedura è anche utilissima per aggiornare macchine non connesse in rete o sprovviste di connessione internet o per creare dei cloni di una specifica installazione evitando che gli utenti possano installare pacchetti indesiderati.

In alternativa, dato che ad ogni operazione di backup viene ricreato il file hdlist.cz, è possibile usare la cartella come sorgente di installazione per altre macchine.
Per fare ciò basta copiare la cartella di Backup nel computer che si vuole aggiornare e dare il comando urpmi.addmedia --update BackupPC /backup_rpm with media_info/hdlist.cz.
In questo modo l'utente può scegliere quali pacchetti installare fra quelli presenti senza correre il rischio di avere dipendenze non presenti localmente.

5) Lo script di Backup

Lo script come già detto lo trovate all'indirizzo http://www.moreno.m-2.it/mandrakeitalia/DownloadDiffRpm .
Ecco il suo contenuto

#!/bin/bash
# Procedura di backup dei pacchetti Rpm installati prelevati dai Mirror internet
# con un unica operazione urpmi
# Questa procedura è abbastanza veloce ma fallisce completamente se manca qualche pacchetto nei mirror
# Moreno Ver.1 Rev.0 2008-08-30
#

#copia tutti i pacchetti rpm gia'  scaricati nella cache
mv *.rpm /var/cache/urpmi/rpms

#ricava elenco pacchetti installati
rpm -qa | sort > rpm.txt

#crea una variabile Pacchetti contenente l'elenco dei pacchetti installati
#vengono esclusi i pacchetti gpg-pubkey che in realta'  non sono veri pacchetti e mandano in errore urpmi
Pacchetti="$(cat rpm.txt | grep -v gpg-pubkey)"

#effettua il download dei pacchetti installati esclusi quelli presenti nel DVD.
#I PACCHETTI NON SARANNO ASSOLUTAMENTE REINSTALLATI!!!
urpmi --no-install --replacepkgs $Pacchetti

#scansione elenco Pacchetti alla ricerca di tutti i pacchetti realmente installati
#non sposta i pacchetti relativi a pacchetti aggiornati o rimossi rispetto al backup precedente
echo
echo
echo
echo
echo "NON PREOCCUPATEVI PER EVENTUALI ERRORI DI MV,"
echo "ESSI SONO DOVUTI A PACCHETTI NON SCARICATI PERCHE' PRESENTI NEL DVD"
echo
echo
echo
echo
for Pacchetto in $Pacchetti
do
mv /var/cache/urpmi/rpms/$Pacchetto*.rpm .
done

#pulizia finale della cache di urpmi per rimuovere i pacchetti aggiornati o rimossi
urpmi --clean

#genera l'hdlist dei pacchetti
genhdlist2 --clean .

Come si può notare è uno script semplicissimo solo che si sono usate opzioni un po' particolari.
Con urpmi si sono usate le opzioni --no-install --replacepkgs la prima dice di non installare il pacchetto scaricato mentre la seconda dice di sostituire il pacchetto esistente con quello che si scaricherà.
L'effetto finale di questo comando è di ritrovarsi nella cache di urpmi il pacchetto anche se è già installato.
Chiaramente questo vale solo per i pacchetti scaricati dato che quelli presenti nelle sorgenti locali non passano per la cache.
L'unico difetto di questo script è che funziona solo se tutti i pacchetti da scaricare sono presenti nei mirror, basta che ne manchi anche solo uno e urpmi segnala un errore e non scarica nulla.
I finti pacchetti gpg-pubkey li ho già filtrati nella riga Pacchetti="$(cat rpm.txt | grep -v gpg-pubkey)" se ne trovate altri occorre editare lo script ed aggiungere | grep -v TestoDaFitrare dopo gpg-pubkey.

Nel caso ci siano tanti pacchetti non più disponibili questo script diventa praticamente inutilizzabile per cui ne ho scritto un altro molto ma molto più lento del precedente che però scarica tutti i pacchetti disponibili senza bloccarsi, eccolo:

#!/bin/bash
# Procedura di backup dei pacchetti Rpm installati prelevati dai Mirror internet
# con un operazione urpmi per ogni pacchetto
# Questa procedura è molto lenta ma non si blocca se manca qualche pacchetto nei mirror.
# Moreno Ver.1 Rev.0 2008-08-30
#

#copia tutti i pacchetti rpm gia'  scaricati nella cache
mv *.rpm /var/cache/urpmi/rpms

#ricava elenco pacchetti installati
rpm -qa | sort > rpm.txt

#crea una variabile Pacchetti contenente l'elenco dei pacchetti installati
Pacchetti="$(cat rpm.txt)"

#scandisci Pacchetti alla ricerca di tutti i pacchetti installati
for Pacchetto in $Pacchetti
do
#solo i pacchetti non presenti nel DVD vengono scaricati dai mirror
echo $Pacchetto
urpmi --no-install --replacepkgs $Pacchetto
done

#scansione elenco Pacchetti alla ricerca di tutti i pacchetti realmente installati
#non sposta i pacchetti relativi a pacchetti aggiornati o rimossi rispetto al backup precedente
echo
echo
echo
echo
echo "NON PREOCCUPATEVI PER EVENTUALI ERRORI DI MV,"
echo "ESSI SONO DOVUTI A PACCHETTI NON SCARICATI PERCHE' PRESENTI NEL DVD"
echo
echo
echo
echo
for Pacchetto in $Pacchetti
do
mv /var/cache/urpmi/rpms/$Pacchetto*.rpm .
done

#pulizia finale della cache di urpmi per rimuovere i pacchetti aggiornati o rimossi
urpmi --clean

#genera l'hdlist dei pacchetti
genhdlist2 --clean .

che potete scaricare all'indirizzo http://www.moreno.m-2.it/mandrakeitalia/DownloadDiffRpmSlow

Questo script, a differenza del precedente, lancia un comando urpmi per ogni pacchetto, così facendo nella peggiore delle ipotesi solo singoli comandi falliscono mentre la stragrande maggiornaza andrà a buon fine scaricando i pacchetti disponibili nella cacahe.

Ciao Ciao, Moreno


In:



Commenti

Ritratto di Astragalo
#1

Inviato da Astragalo il Lun, 08/09/2008 - 00:35.

Backup rpm installati

L'idea è ottima ed anche molto utile, pensi sia possibile inserire dei comandi che facciano anche il backup dei dati sensibili tipo la cartella etc per il sistema, e la .kde per gli utenti?

In questo modo si avrebbe un ripristino anche delle personalizzazioni.

A presto.



Ritratto di Moreno
#2

Inviato da Moreno il Lun, 08/09/2008 - 06:18.

Re: Backup rpm installati

Ciao

Direi proprio di No visto che tutto si basa su di urpmi per quelle cose abbondano i tools di backup, sarebbe come reinventare la ruota.

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#3

Inviato da roberto_65 il Lun, 08/09/2008 - 14:41.

Re: Backup rpm installati

Ma prima di eseguire lo script bisogna essere posizionati in una directory contenente eventuali pacchetti RPM !!!

Meglio aggiungere queste righe intesta prima di:
Quote:

#copia tutti i pacchetti rpm gia' scaricati nella cache

# Genera percorso repository interno se non esiste<br />if [ ! -d &quot;/repository&quot; ]; then<br /> mkdir -p /repository<br />fi<br />cd /repository

Lo script completo dovrebbe venire così:
#!/bin/bash<br /># Procedura di backup dei pacchetti Rpm installati prelevati dai Mirror internet<br /># con un operazione urpmi per ogni pacchetto<br /># Questa procedura è molto lenta ma non si blocca se manca qualche pacchetto nei mirror.<br /># Moreno Ver.1 Rev.0 2008-08-30<br />#<br /><br /># Genera percorso repository interno se non esiste<br />if [ ! -d &quot;/repository&quot; ]; then<br />       mkdir -p /repository<br />fi<br />cd /repository<br /><br />#copia tutti i pacchetti rpm gia&#039;  scaricati nella cache<br />mv *.rpm /var/cache/urpmi/rpms<br /><br />#ricava elenco pacchetti installati<br />rpm -qa | sort &gt; rpm.txt<br /><br />#crea una variabile Pacchetti contenente l&#039;elenco dei pacchetti installati<br />Pacchetti=&quot;$(cat rpm.txt)&quot;<br /><br />#scandisci Pacchetti alla ricerca di tutti i pacchetti installati<br />for Pacchetto in $Pacchetti<br />do<br />#solo i pacchetti non presenti nel DVD vengono scaricati dai mirror<br />echo $Pacchetto<br />urpmi --no-install --replacepkgs $Pacchetto<br />done<br /><br />#scansione elenco Pacchetti alla ricerca di tutti i pacchetti realmente installati<br />#non sposta i pacchetti relativi a pacchetti aggiornati o rimossi rispetto al backup precedente<br />echo<br />echo<br />echo<br />echo<br />echo &quot;NON PREOCCUPATEVI PER EVENTUALI ERRORI DI MV,&quot;<br />echo &quot;ESSI SONO DOVUTI A PACCHETTI NON SCARICATI PERCHE&#039; PRESENTI NEL DVD&quot;<br />echo<br />echo<br />echo<br />echo<br />for Pacchetto in $Pacchetti<br />do<br />mv /var/cache/urpmi/rpms/$Pacchetto*.rpm .<br />done<br /><br />#pulizia finale della cache di urpmi per rimuovere i pacchetti aggiornati o rimossi<br />urpmi --clean<br /><br />#genera l&#039;hdlist dei pacchetti<br />genhdlist2 --clean .



Ritratto di roberto_65
#4

Inviato da roberto_65 il Lun, 08/09/2008 - 19:20.

Re: Backup rpm installati

Comunque è meglio generare il backup su di un HD esterno su porta USB così lo si puo' ripristinare facilmente su qualsiasi PC !!!

Ciao Roberto



Ritratto di Moreno
#5

Inviato da Moreno il Lun, 08/09/2008 - 20:23.

Re: Backup rpm installati

Ciao

No non è necessario creare la cartella e spostarcisi dentro, lo script non è nel path eseguibile quindi comunque per lanciarlo bisogna essere dentro alla cartella.

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#6

Inviato da roberto_65 il Mar, 09/09/2008 - 12:43.

Re: Backup rpm installati

Si e cosa avevo detto allora ???

Se non sei dentro la cartella con gli RPM o per sbaglio sei dentro la radice del HD combini dei disastri !!!!

O More' ti si contraddetto !!!!



Ritratto di Moreno
#7

Inviato da Moreno il Mar, 09/09/2008 - 13:19.

Re: Backup rpm installati

Ciao

Uffa sei alquanto snervante quando fai così, mi sembra quasi che tu voglia dimostrare di essere il più figo, personalmente a me non interessa minimamente sapere chi lo è.

Non mi sono assolutamente contraddetto, al punto 2.6 della guida viene fatta creare una cartella dove viene salvato lo script e reso eseguibile.
Questa cartella non è nel path dei comandi eseguibili e quindi se da / o da qualsiasi altra cartella dai il comando otterrai un bel command not found.
Seguendo il tuo ragionamento se l'utente invece si salvare i pacchetti in /backup_rpm volesse salvarli nel suo disco USB ad esempio in /mount/DiscoUSB sarebbe costretto a modificare lo script.

In ogni caso lo script non è in grado di fare alcun disastro in quanto lavora solo con i file rpm che notoriamente non stanno in / anzi a dire il vero non stanno da nessuna parte per cui nella peggiore delle ipotesi si fa un po' di disordine e niente altro.

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#8

Inviato da roberto_65 il Mar, 09/09/2008 - 20:11.

Re: Backup rpm installati

Ma io avevo sottoposto il tuo script ad un'accurata "radiografia" !!!!
Ghgh !!!