Generare una lista dei pacchetti da installare formato package_list.pl

Gio, 11/03/2010 - 15:19

Generare una lista dei pacchetti da installare formato package_list.pl

Inviato da hmandevteam 6 commenti

Avendo customizzato Mandriva 2010.0  con environment e vari pacchetti
e volendo duplicare su un'altra macchina la stessa installazione, ho
cercato di utilizzare la funzionalità di importazione lista pacchetti
che propone l'installer di Mandriva.
Scegliendo "Selezione manuale
dei pacchetti" è possibile selezionare un file di testo contenente
l'elenco dei pacchetti che vogliamo installare. Così ho provato ad usare
il comando
$ rpm -qa > listapacchetti.txt
per generare la lista dei
pacchetti e poi, sull'altra macchina, ho provato a passare questo file
all'installer.
Errore, file non valido.
Cercando su Google
ho trovato il dettaglio del formato del file da passare all'installer:

$o = {
'default_packages' => [
'libgtksourceview',
'mingetty',
'perl-Digest-SHA1',
...
...
]
}; 

visto che normalmente i pacchetti
installati sono più di 1000, ho realizzato questo
applicativo
che genera il file nell'apposito formato a partire dal
file generato con il comando sopradescritto ($ rpm -qa > nomefile)
L'applicazione
richiede l'installazione di mono.
Per generare il file usare:
$
 mono packagelist-creator.exe path_of_packagefilelist_generated_by_rpm_-qa

saluti
Armando B.


In:



Commenti

Ritratto di Alwuzer
#1

Inviato da Alwuzer il Ven, 12/03/2010 - 09:11.

Re: Generare una lista dei pacchetti da installare formato ...

Sarebbe possibile avere i sorgenti dell'applicativo, per chi, come me, ha problemi ad installare mono sulla propria linux-box? Smile

casa: Mandriva 2010.1 - i586 su Dell Inspiron 6400.
ufficio: Mandriva 2010.1 - x86_64 su Compaq 500B MT (Intel Dual Core)



Ritratto di hmandevteam
#2

Inviato da hmandevteam il Ven, 12/03/2010 - 09:36.

Re: Generare una lista dei pacchetti da installare formato ...

no prob Smile
http://hman.pastebin.com/W7wkyMUu
cmq per mono su xbox se ne stà occupando Massimiliano Mantione, se vuoi posso chiedergli qualche info a riguardo.

Mandriva 2010.1 x86_64 - Athlon 64 X2 Dual Core 5200 - Ram 4 GB - Mb Asus M2N - Sk Video NVidia 7300 GT - Wireless RaLink RT2561
Projects:
- http://www.integrazioneweb.com/themonospot
- http://www.integrazioneweb.com/monosim
- http://www.integrazionew



Ritratto di Moreno
#3

Inviato da Moreno il Ven, 12/03/2010 - 09:37.

Re: Generare una lista dei pacchetti da installare formato ...

Ciao

Effettivamente usare Mono per questi compiti forse è un po' eccessivo, si può fare tranquillamente tutto con uno script.

Se il tracciato è quello indicato, un primo abbozzo di script potrebbe essere:

#!/bin/bash
#
rpm -qa > rpmtmp.txt
 
echo "\$o = {" > listapachetti.lst
echo "'default_packages' => [" >> listapachetti.lst
 
Pacchetti="$(cat rpmtmp.txt)"
 
for Pacchetto in $Pacchetti
do
echo "$Pacchetto'," >> listapachetti.lst
done
 
 
echo "]" >> listapachetti.lst
echo "};" >> listapachetti.lst
 
 
rm rpmtmp.txt

Che genera il file listapachetti.lst.
Questo script contiene un grave Bug che non riesco ad eliminare, infatti l'ultimo pacchetto termina con una virgola e questo non è corretto.

Bisogna editare manualmente il file listapachetti.lst e nell'ultima riga

libqalculate-data-0.9.7-6mdv2010.1',
]
};

occorre rimuovere manualmente la virgola

libqalculate-data-0.9.7-6mdv2010.1'
]
};

Se qualcuno sa come sistemare il Bug me lo faccia sapere.

Ciao Ciao, Moreno

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



Ritratto di hmandevteam
#4

Inviato da hmandevteam il Ven, 12/03/2010 - 10:53.

Re: Generare una lista dei pacchetti da installare formato ...

>l'ultimo pacchetto termina con una virgola
si potrebbe (dopo la chiusura del ciclo for) rileggere il file listapacchetti.lst meno un carattere (la virgola appunto) e poi bisogna aggiungereun apice singolo in testa ad ogni nome del pacchetto
echo "'$Pacchetto'," >> listapachetti.lst
ma rimane il problema di estrarre solo il nome del pacchetto dal nome-versione

Mandriva 2010.1 x86_64 - Athlon 64 X2 Dual Core 5200 - Ram 4 GB - Mb Asus M2N - Sk Video NVidia 7300 GT - Wireless RaLink RT2561
Projects:
- http://www.integrazioneweb.com/themonospot
- http://www.integrazioneweb.com/monosim
- http://www.integrazionew



Ritratto di Alwuzer
#5

Inviato da Alwuzer il Ven, 12/03/2010 - 11:17.

Re: Generare una lista dei pacchetti da installare formato ...

Ecco una soluzione per togliere la virgola aLl'ultima riga della lista...

Citazione:

#!/bin/bash
#
rpm -qa > rpmtmp.txt

echo "\$o = {" > listapachetti.lst
echo "'default_packages' => [" >> listapachetti.lst

Pacchetti="$(cat rpmtmp.txt)"
TmpP=""
for Pacchetto in $Pacchetti
do
TmpP="$Pacchetto',"
echo ${TmpP} >> listapachetti.lst
done

echo ${TmpP} | cut -d ',' -f 1 >> listapachetti.lst
echo "]" >> listapachetti.lst
echo "};" >> listapachetti.lst

rm rpmtmp.txt

    
Con un po' più di tempo posso vedere di eliminare dai nomi le versioni e sistemare meglio qualche altro dettaglio.

casa: Mandriva 2010.1 - i586 su Dell Inspiron 6400.
ufficio: Mandriva 2010.1 - x86_64 su Compaq 500B MT (Intel Dual Core)



Ritratto di Moreno
#6

Inviato da Moreno il Ven, 12/03/2010 - 12:31.

Re: Generare una lista dei pacchetti da installare formato ...

Ciao

Mentre me ne stavo sguazzando in piscina mi è venuta in mente un altra soluzione al problema della virgola, non è elegantissimo ma funziona.

Non sapevo che servisse solo il nome del pacchetto, anche questo è un problema di semplicissima soluzione, basta aggiungere a rpm -qa l'opzione --qf='%{name}\n'.

Già che c'ero ho eliminato anche il file temporaneo che non serve assolutamente a nulla

#!/bin/bash
#
 
echo "\$o = {" > listapachetti.lst
echo "'default_packages' => [" >> listapachetti.lst
 
Pacchetti="$(rpm -qa --qf='%{name}\n')"
 
for UltimoP in $Pacchetti ; do : ; done
 
for Pacchetto in $Pacchetti
do
if [ $UltimoP = $Pacchetto ]; then
echo "'$Pacchetto'" >> listapachetti.lst
else
echo "'$Pacchetto'," >> listapachetti.lst
fi
done
 
 
echo "]" >> listapachetti.lst
echo "};" >> listapachetti.lst
  

Ora dovrebbe essere perfettamente funzionante.

[postedit]
Ora che mi ricordo, quasi 2 anni fa scrissi un altro script che trovate in questa guida che invece di salvare solo i nomi dei pacchetti, li scarica tutti direttamente da internet.
Questo sistema è utilissimo per aggiornare macchine che non dispongono di una connessione ad internet.
[/postedit]

Ciao Ciao, Moreno

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