http://www.linux-tips-and-tricks.de

Wie kann man herausfinden welche Pakete nach einem Versionsupgrade fehlen PDF Print E-mail
Donnerstag, 20 Oktober 2011
Regelmäßig gibt es neue Releases bei Linux Distributionen. Das bedeutet man installatiert parallel zur altenRelease die neue Release und zieht dann die Benutzerdaten und Systemkonfigurationen vom älteren zum neueren Release um. Das dumme ist, dass man im alten Release Softwarepakete installiert hat, die standardmäßig im neuen release nicht installiert sind da man sie mit dem jeweiligen Paketmanager manuell nachinstalliert hat. Dabei gibt es i.d.R. zwei Typen: Einmal Software, die man zu lieben und schätzen gelernt hat und auch weiterhin im neuen Release benutzen will und irgendwelche Installationen um mal eben was auszuprobieren. Die Distributionen bieten Möglichkeiten an, diePakete der alten Release automatisch im neuen Release einzuspielen, nur leider wird dann auch sämtliches Test- und Spielpaket wieder installiert.
 
===> English <===
 
From time to time there exists a new release of Linux distributions. In order to upgrade you install the new release in parallel to the old one and migrate the user data and system configurations to the new release. Unfortunately you installed software packages in the old release manually. Because they are not standard they are not installed in the new release installation. In general you now have two types of additional software: Software which you like and want to use in the new release also and software which you installed for testing or evaluation puposes only. The distributions offer ways to install all missing software on the new distribution. But it doesn't allow to filter and to exclude test and evaluation packages.
 
 
Genaugenommen muss man die rpm Listen des alten Releases und des neuen Releases vergleichen und eine List erstellen von den Paketetn, die im neuen Release nicht gefunden werden. Danach kann man die (hoffentlich relativ kurze) Liste durchgehen und die wichtigen Pakete identifizieren und dann manuell nachinstallieren. Um mir das zu vereinfachen habe ich ein kleines Python Script geschrieben, welches zwei rpm Listings vergleicht und die fehlenden Pakete in einer Liste ausgibt. Eingabe für das Script sind sortierte rpm Listings des alten und des neuen Releases. Ausgabe ist die Liste der Pakete, die im alten Release vorhanden sind aber im neuen Release fehlen.
 
Bedienungsanleitung:
 
1) Ausführen des folgenden Befehls auf dem alten Release
     rpm -qa  | sort > release_old
 
2) Ausführen des folgenden Befehls auf dem neuen Release
     rpm -qa  | sort  > release_new
 
3) Aufruf des Vergleichsscripts mit einer Liste von Paketen, die ignoriert werden sollen
     compareDistroRPMs release_old release_new "(lib|yast2|sax2|bundle)"
 
Das Script kann hierruntergeladen werden. Beim letzten Parameter für das Script ist zu berücksichtigen, dass es ein regulärer Ausdruck sein muss. Faustregel: Die Klammern lassen und mit | getrennt Teile des Paketnamens angeben, die ausgefiltert werden sollen, weil es Pakate sind, die in der Ausgabeliste zu ignorieren sin.
 
Beispiel: Um Pakete auszunehmen "(lib|yast2|sax2|bundle|game)"  als dritten Parameter benutzen.
 
===> English <===
 
It's not that complicated and you have to compare the rpm listings of both releases and find out which packages are missing in the new release. The you have to go through the list and identify the important packages and reinstall them again. I wrote a short Python Script which compares two rpm listings and creates a list of missing packages. Input for the script is a sorted rpm list of both releases 
 
Usage:
 
1) Execute on the old release
     rpm -qa  | sort > release_old
 
2) Execute on the new release
     rpm -qa  | sort  > release_new
 
3) Call the compare scriptand pass a list of packages which should be ignored
     compareDistroRPMs release_old release_new "(lib|yast2|sax2|bundle)"
 
You can download the script here. The last parameter has to be a regular expression. Rule of thumb: Keep the parentheses and add new packages to exclude with |.
 
Example: To exclude packages with game in their name use "(lib|yast2|sax2|bundle|game)" 
Last Updated ( Donnerstag, 20 Oktober 2011 )
 

Add comment

===> Pls add comments in German or English only <===
eMail will be hidden/eMail wird versteckt


Security code
Refresh

< Prev   Next >