• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Programmliste für Neuinstallation sichern

Sevemiyen

Newbie
Kann ich irgendwie die Liste von meinen installierten Programmen speichern oder so?
Das es evtl. automatisch nach einer Neuinstallation die Sachen sich selber drauf packt per apt, yast oder auch manuell?
Konfigurationen können dabei ruhig verloren gehen...

System: Suse 10.0
 

oc2pus

Ultimate Guru
rpm -qa | sort liefert dir eine Liste der Installierten Pakete.
daraus kannst du mit awk und Gehilfen eine Liste erstellen die nur die Paketnamen enthält und diese dann an einen apt install <liste> weiterleiten .

oder
rpm -qa --qf "%{NAME}\n" | sort das ist eine Liste der Paketnamen

oder
du erzeugst dir eine selektions-Datei für dein YaST und lädst diese dann wieder neu ein.
 
OP
S

Sevemiyen

Newbie
:oops: Bin noch ein ziehmlicher Neuling.. Darf ich es nochmal zusammenfassen um zu schauen ob ich es richtig verstanden habe?

Wenn ich...

"rpm -qa | sort" kommt in der Konsole ne Liste... Die kann ich dann einfach kopieren und in eine Textdatei rein schmeißen und später dann einfach bei apt "apt install liste.txt" eingeben dann übernimmt apt den Rest von alleine und ich schau die nächsten Stunden nur zu wie er es aus dem Netz zieht und installiert.

Oder ich gib in der Konsole "rpm -qa --qf "%{NAME}\n" | sort" Erstellt er irgendwo eine Liste...?? [Um ehrlich zu sein hab ich den Teil garnicht verstanden... In welchem Pfad speichert er dann die Liste? Und steht NAME in den Befehl für die Bennung der Liste?

Den letzte Teil scheint ja am einfachsten zu sein... Wenn man weiß wie es geht ^.^° ... Wie geht es denn?

Welches der 3 Lösungen ist am Benutzerfreundlichsten bsw. verläuft meist ohne Reibung, so das es für mich [Neuling, der bei jedem kleinen Problem in den Linux-Club Channel jumpt] durchführbar sind...
Habe eigentlich nur die Standartinstallation von Suse 10.0 drin aber dannach kaman mit apt viele Sachen wie xine, mplayer, vlc, und viele codec's für Multimedia die ich nur dank der Hilfe der L-C'ler hin gekriegt habe... Finde es irgendwie aber dumm sie immer zu belästigen vor allem bei solchen größeren und längeren Fragen :-(
 

oc2pus

Ultimate Guru
rpm -qa | sort liefert:
Code:
3ddiag-0.728-2
Asunder-0.1.0-0.oc2pus.4
BaseOCF-1.2-0.oc2pus.1
CheckHardware-0.1-970
DirectFB-0.9.22-2
GTorrentViewer-0.2b-0.oc2pus.3
....
==> Nachbearbeitung um aus 3ddiag-0.728-2 ==> 3ddiad=0.728-2 zu machen und dann mit dieser Liste ein apt install auszuführen.
Vorteil, alle Programme werden in der GLEICHEN Version wieder geladen.

"rpm -qa --qf "%{NAME}\n" | sort" liefert:
Code:
3ddiag
Asunder
BaseOCF
CheckHardware
DirectFB
GTorrentViewer
....
d.h. eine Liste der Paketnamen. Das ist eine ganz normale Syntax für einen rpm-Query Aufruf (schau dir man rpm an ...)
Diese Liste kannst du an apt verfüttern und es werden genau diese Programme geladen. Evtl werden aber andere Versionen geladen!

Zum Thema Selktionsdatei, hier mal ein Beispiel:
Code:
#! /bin/bash
#####################################################
# script to generate meineListe.sel
#
# version 1.0 - oc2pus
#####################################################

# debug switch
#set -x

#####################################################
#####################################################
function usage ()
{
	echo ""
	echo "$PROGNAME: wrong call or missig parameters ..."
	echo ""
	echo "$PROGNAME: call `basename $0` cache [oc2pus | tux]"
	echo "$PROGNAME:      to list all packages from your actual apt-cache $CACHEDIR"
	echo "$PROGNAME: call `basename $0` db [oc2pus | tux]"
	echo "$PROGNAME:      to list all installed packages"
	echo ""
	exit 1
}

#####################################################
# package_0.64.4-X.oc2pus.Y.i586.rpm ==> package
#####################################################
function packageBaseName ()
{
	TMPdatei=$1
	TMPdatei2=${TMPdatei%-*}
	TMPdatei3=${TMPdatei2%_*}
	PACKAGENAME=${TMPdatei3##/*/}
}

#####################################################
#####################################################
function createBody ()
{
	DATUM=`date`
	cat > $1 << EOF
# Meine-Package-Selection 1.0
# generated on $DATUM

=Ver: 1.0

=Sel: MeineListe

=Sum: Base System
=Sum.de: Grundsystem

=Cat: addon

=Vis: true

=Ord: 10

+Ins:
EOF
}

#####################################################
#####################################################
function createTail ()
{
	echo "-Ins:" >> $1
	echo ""      >> $1
}

#####################################################
#####################################################
function createCacheList ()
{
	echo "$PROGNAME: reading cache $CACHEDIR ..."
	myList=`ls -1 $CACHEDIR/*.oc2pus.*`
	for i in $myList; do
		packageBaseName $i
		echo $PACKAGENAME >> $1
	done
}

#####################################################
# query RPM database and get all packagenames for $PACKAGER
# output only package-name
#####################################################
function createDatabaseList ()
{
	echo "$PROGNAME: inspecting RPM-database ..."
	rpm -qa --queryformat "%-30{name} %20{version} %10{release}\n" | \
		sort | \
		grep $PACKAGER | \
		awk '{print $1}' >> $1
}

#####################################################
# adjust parameters for your desires ...
#####################################################
PROGNAME=`basename $0`
SELNAME=meineListe.sel
CACHEDIR=/var/cache/apt/archives
PACKAGER=oc2pus
if [ ! -z "$2" ]; then
	PACKAGER=$2
fi

createBody $SELNAME
case "$1" in
	cache)
		echo "$PROGNAME: generating $SELNAME from directory $CACHEDIR for packager: $PACKAGER ..."
		createCacheList $SELNAME
		;;
	db)
		echo "$PROGNAME: generating $SELNAME from RPM-database for packager: $PACKAGER ..."
		createDatabaseList $SELNAME
		;;
	*)
		usage
		;;
esac
createTail $SELNAME

echo "$PROGNAME: $SELNAME written"
echo "$PROGNAME: now edit $SELNAME and remove/add some packages"
echo "$PROGNAME: install the file $SELNAME in the directory: /var/adm/YaST/InstSrcManager/IS_CACHE_0x00000001/DATA/descr/"
echo "$PROGNAME: (you must be root to do this!)"
echo "$PROGNAME: "
echo "$PROGNAME: To install all meinePakete packages in one step, simply call: "apt groupinstall meinePakete""

Dieses Beispiel erstellt eine Selektionsliste für alle *.oc2pus.* Pakete. Du kannst sie aber einfach erweitern auf alle, dazu musst du in der Funktion "createDatabaseList" etwas anpassen..... Das überlasse ich dir ;)

Mit apt groupinstall meinePakete würde dann alles zurückgeladen.

Anmerkung: wenn du dieses Script mit cut & paste kopierst, achte darauf das du KEINE Zeielnumbrüche dort erhälst wo keine hingehören!
Und bearbeite das gespeicherte Script mit dem Befehl dos2unix. Das nur um die üblichen Rückfragen auszuschliessen *fg*
 
OP
S

Sevemiyen

Newbie
rpm -qa | sort liefert:

Code:
3ddiag-0.728-2
Asunder-0.1.0-0.oc2pus.4
BaseOCF-1.2-0.oc2pus.1
CheckHardware-0.1-970
DirectFB-0.9.22-2
GTorrentViewer-0.2b-0.oc2pus.3
....

==> Nachbearbeitung um aus 3ddiag-0.728-2 ==> 3ddiad=0.728-2 zu machen und dann mit dieser Liste ein apt install auszuführen.
Vorteil, alle Programme werden in der GLEICHEN Version wieder geladen.

Also das scheint mir das vernünftigste zu sein :)..
Dannach kann man einfach ein apt upgrade machen und schon hat man alles auf den neusten Stand.
Und es geht so?

1. Man schreibe in die Konsole "rpm -qa | sort" rein.
2 Man kopiere alle installierten Pakete was dann ungefähr so aussieht..
Code:
3ddiag-0.728-2
855resolution-0.4-3
a2ps-4.13-1058
a52dec-0.7.4-3.pm.1
aaa_base-10.0-28
aaa_skel-2005.9.7-2
aalib-1.4.0-290
acl-2.2.31-3
acpid-1.0.4-9.4
acroread-7.0.1-4
agfa-fonts-2003.03.19-15
alsa-1.0.10-0.pm.1
...
3. Man füge diese per Copy und Paste in eine Textdatei rein.
4. Speichere sie unter Proglist.txt
5. Neuinstallation... => Apt installieren.
6. Konsole => SU => *Pwd* => apt install proglist.txt
7. Apt lädt nun alle Pakete aus dem Internet....
[Frage dazu... Lädt Apt auch die schon installierten Pakete aus dem Internet?? Kann man das Prog nicht sagen er soll nur die drauf Packen was noch nicht installiert worden ist weil er sonst das ganze Betriebsstem theorätisch nochmal drauf spiel geschweige downloaded oder?]
8. Du hast deinen [fast] alten Betriebssystem wieder... [Hoffentlich]
 

Grothesk

Ultimate Guru
Schieb den output doch direkt in eine Textdatei...

rpm -qa | sort > proglist.txt

Dann sparst du dir Schritt 2-4

Zu 7: Wenn installierte Version eine andere/niedrigere Versionsnummer hat dann wird die aktuellere geladen. Macht ja auch Sinn. Wenn die Versionen gleich sind lädt apt die auch nicht nach...
 

oc2pus

Ultimate Guru
ad 3.) 4.)
rpm -qa | sort > Proglist.txt

ad 5.)
mit sed oder awk das "=" reinschiessen (siehe man sed, man awk)
oder mit so einer (ähnlichen) Funktion
Code:
function packageBaseName ()
{
   TMPdatei=$1
   TMPdatei2=${TMPdatei%-*}
   TMPdatei3=${TMPdatei2%_*}
   PACKAGENAME=${TMPdatei3##/*/}
}

ad 6:)
cat Proglist.txt | apt install

ad 7.)
es wird nur das geladen was NICHT im cache steht bzw neuer als der Cache ist

so sollte es funktionieren ;)
 
OP
S

Sevemiyen

Newbie
^.^° Ich weiß langsamm nerv ich wirklich... :(
Aber ich glaube das ist dann die letzte mir unklare Frage O:)

ad 5.)
mit sed oder awk das "=" reinschiessen (siehe man sed, man awk)
oder mit so einer (ähnlichen) Funktion

Code:
function packageBaseName ()
{
TMPdatei=$1
TMPdatei2=${TMPdatei%-*}
TMPdatei3=${TMPdatei2%_*}
PACKAGENAME=${TMPdatei3##/*/}
}

Wie schon gesagt bin ich ziehmlich N00big und mein English nicht gerade ausreichend für die man...
Kannst du diesen Schritt evtl irgendwie als vorlage in einer Code machen und mir Zeigen wie dann der Proglist.txt am Ende eigentich aussehen sollte? Vielleicht an Hand eines Beispiels deines Proglist's oder der meine oben angegebener?
Danke für all die Hilfe und Mühe von euch ^.^
 

oc2pus

Ultimate Guru
hm, mit so wenig Eigeninitiative kommst du nicht sehr weit ...

Code:
rpm -qa --qf "%{NAME}=%{VERSION} " > myProgList.txt
liefert so etwas:
Code:
...fluidsynth=1.0.6 libjpeg=6.2.0 grep=2.5.1a telnet-server=1.2 libnscd=1.1 atk-devel=1.10.3 readline=5.0 ....

dann mit folgendem Befehl alles wieder installieren:
Code:
cat myProgList.txt | apt install

und fertig ist die Laube ...
 
Oben