View previous topic :: View next topic |
Author |
Message |
sschlueter Guru
Joined: 26 Jul 2002 Posts: 578 Location: Dortmund, Germany
|
Posted: Sun Oct 30, 2005 3:06 pm Post subject: Installierte Pakete, die nicht mehr im Portage Tree sind |
|
|
Um möchte herrausfinden, welche installierten Pakete nicht mehr im Portage Tree sind.
Ich mache das jetzt erstmal so, daß ich eine Liste der installierten Pakete erstelle:
equery --quiet --nocolor list > installed-packages.txt
Und dann überprüfe, ob Portage jedes einzelne Paket in genau dieser Version re-emergen würde:
cat installed-packages.txt | sed 's/\(.*\)/=\1/g' | xargs emerge --pretend --oneshot
Die Sache ist ziemlich aufwendig, weil Portage dann nur das erste Paket bemängelt, das nicht mehr im Tree ist.
Ich deinstalliere das dann, entferne den Eintrag aus der Liste der installierten Pakete und führe
cat installed-packages.txt | sed 's/\(.*\)/=\1/g' | xargs emerge --pretend --oneshot
erneut aus. Und dann wiederhole ich das ganze erneut.
Das Verfahren ist natürlich nur unkritisch, solange Versionen von Paketen deinstalliert werden, von denen sowieso mehrere Versionen installiert sind (Bibliotheken etc.). Es kann jedoch auch passieren, daß man durch dieses Verahren eine Anwendung, von der nur eine Version installiert ist, deinstalliert und die Anwendung dann nicht mehr benutzt werden kann. Vor einiger Zeit hatte ich so einen Fall bei einem von mir benutzten DynDNS-Client, der irgendwann nicht mehr im Tree gewesen ist. War für mich nicht so schlimm, weil ich einfach auf einen anderen DynDNS-Client umgestiegen bin. Natürlich kann man, wenn man sich von der Anwendung nicht verabschieden will, auch die alte Version weiterhin in seinem eigenen Overlay-Tree behalten.
Naja, aber meine eigentlich Frage lautet: Das von mir beschriebene verfahren ist ja ziemlich aufwendig. Gibt es da keinen einfacheren Weg?
Ich hatte schon daran gedacht, daß man die Liste der installierten Pakete vielleicht mit der Ausgabe von emerge --emptytree world vergleichen könnte, aber da wüßte ich nicht, wie.
Last edited by sschlueter on Sun Oct 30, 2005 3:28 pm; edited 2 times in total |
|
Back to top |
|
|
sschlueter Guru
Joined: 26 Jul 2002 Posts: 578 Location: Dortmund, Germany
|
Posted: Sun Oct 30, 2005 3:24 pm Post subject: |
|
|
Achso, ich sollte vielleicht noch schreiben, daß ich das ganze auch nutze, um in /etc/portage/package.keywords aufzuräumen.
Ich habe ein 'x86' System, aber es kommt regelmäßig vor, daß ich ein Paket einfach früher haben möchte. Also trage ich regelmäßig etwas in /etc/portage/package.keywords ein. Mit der Zeit wird die Datei also immer größer, obwohl immer nur ein paar Einträge wirklich notwendig sind, weil die meisten Pakete schon längst für 'stable' freigegeben worden sind.
Um die tatsächliche notwendigen Pakete herauszufinden, kommentiere ich alle Zeilen in /etc/portage/package.keywords aus. Wenn ich dann
emerge --ask --verbose --update --deep world
sehe ich schon einige Einträge, die notwendig in package.keywords sind, weil Portage mir von denen ein Downgrade ankündigt.
Es ist nur so, daß man damit anscheinend nicht alle Fälle findet. Wenn ich ein Paket installiert habe, von dem es keine 'stable' Version gibt, also wo Portage auch kein Downgrade anzeigen könnte, beschwert Portage sich bei emerge --ask --verbose --update --deep world darüber überhaupt nicht. Finde ich irgendwie ein wenig unlogisch, aber ich kann diese Fälle ebenfalls über das beschriebene Verfahren mit dem
cat installed-packages.txt | sed 's/\(.*\)/=\1/g' | xargs emerge --pretend --oneshot
herausfinden. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Oct 30, 2005 4:47 pm Post subject: |
|
|
Um dein package.keywords clean zu halten, schau dir dieses Script an.
Ist von mir.
Code: |
grep ~x86 /var/db/pkg/*/*/*.ebuild |sed s'#/var/db/pkg/##'|gawk -F / {'print $1 echo "/" $2'}| sed s'#^#=#'|sed s'#$# ~x86#'
echo "In keywords eintragen?"
read -e RUECK
if [ $RUECK == "j" ]; then
grep ~x86 /var/db/pkg/*/*/*.ebuild |sed s'#/var/db/pkg/##'|gawk -F / {'print $1 echo "/" $2'}| sed s'#^#=#'|sed s'#$# ~x86#' > /etc/portage/package.keywords
echo ''
echo ''
cat /etc/portage/package.keywords |wc
fi
if [ $RUECK == "n" ]; then
exit
fi
|
Grundgedanke:
Es werden alle Ebuilds von installierten Paketen nach ~x86 durchsucht.
Diese werden dann mit = vor dem namen und ~x86 in die Datei reingeschrieben.
Damit sind alle Fälle komplett abgedeckt.
Ciao |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Oct 30, 2005 4:56 pm Post subject: |
|
|
Und zu deinem ersten Post.
Unter /var/db/pkg/*/*/*.ebuild müsstest du alle ebuilds finden, von den Programmen, die installiert worden sind, egal ob es sie noch im Portage gibt oder nicht.
Lass die dir ausgeben:
Code: |
/usr/bin/ls -1 /var/db/pkg/*/*/*.ebuild |gawk -F / {'print $7'} >> installierte ebuils
/usr/bin/ls -1 /usr/portage/*/*/*.ebuild |gawk -F / {'print $6'} >> alle ebuilds
|
und vergleiche sie dann.
Ciao
Tobi |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|