Wie erstelle ich ein virtuelles RPM Paket
Mit dem folgenden shell-Script kann man ein virtuelles RPM erstellen.
Ein virtuelles RPM gaukelt dem System vor, das ein bestimmtes Paket oder eine bestimmte Bibliothek vorhanden ist.
So etwas wird zum Beispiel gebraucht um unter SuSE 9.0 einen 2.6er Kernel zu installieren:
mkVirtualrpm /sbin/update-modules.dep
und anschliessen
rpm -i myVirtualPackages
Damit kann dann der 2.6er Kernel Problemlos installiert werden und die Abhängigkeit /sbin/update-modules.dep ist "gelöst". Ein weiteres Anwendungsbeispiel sind die NVidia-RPMs und die libGL*.so Probleme welche manchmal auftauchen, wenn man den nVidia-Treiber manuell installiert.
Diesen Code abspeichern z.Bsp als /usr/local/bin/mkVirtualrpm und mit chmod +x ausführbar machen. Der Aufruf erfolgt dann mit mkVirtualrpm <paketname> oder mkVirtualrpm </pad/Bibliothek-Name>. Das fertige RPM wird dann in das aktuelle Verzeichnis kopiert und kann anschliessen mit
rpm -i myVirtualPackages installiert werden.
Die Parameter Summary=, Group= etc kann natürlich jeder für sich selber noch anpassen.
#!/bin/sh # Examples: # ./mkvirtualrpm.sh glibc python db3 XFree86-libs zlib mysql postgresql # ./mkvirtualrpm.sh /bin/csh # ./mkvirtualrpm.sh libstdc++-2.96-98 # ./mkvirtualrpm.sh /usr/bin/env if [ -z "$1" ]; then echo "usage: $0 <name of lib or rpm>" exit 1 fi if test -z $SCRIPT_VERSION; then SCRIPT_VERSION=1.0 fi if test -z $RELEASE_VERSION; then RELEASE_VERSION=0.xx.1 fi mySpecName=myVirtual.spec name=myVirtualPackages packages="$*" echo "virtual rpms: $packages" tmpdir=`mktemp /tmp/virtual.XXXXXX` rm -f $tmpdir mkdir -p $tmpdir/{RPMS/i386,SPECS} ( # Header cat <<EOF Summary: virtual provided rpms Name: $name Version: $SCRIPT_VERSION Release: $RELEASE_VERSION Group: Whatever License: GPL BuildArch: i386 EOF ( for i in $packages; do if echo $i | grep -q /; then ##filenames containing slashes echo $i else if rpm -q $i --quiet ; then rpm -q --provides `basename $i` fi echo $i fi done ) | sort | uniq | sed 's/^/Provides: /' # spec-Trailer cat <<EOF %description Virtual packages and provides for rpm-database %files EOF ) > $tmpdir/SPECS/$mySpecName cat $tmpdir/SPECS/$mySpecName rpm -bb --define "_topdir $tmpdir" $tmpdir/SPECS/$mySpecName echo "copying $tmpdir/RPMS/i386/*rpm" cp -p $tmpdir/RPMS/i386/*rpm . rm -fr $tmpdir
Falls der Befehl rpm -bb bei jemanden nicht funktioniert:
1) entweder man rpm lesen und die Datei /etc/popt erstellen ODER
2) den Aufruf von rpm -bb im Script ersetzen durch /usr/bin/rpmbuild -bb ODER
3) den Aufruf von rpm -bb im Script ersetzen durch /usr/lib/rpm/rpmb -bb
und das Script nochmal starten.
oc2pus
Hallo allerseits,
unter dieser Adresse ist das Skript zum Erstellen eines virtuellen RPM-Pakets erhältlich. Aktuell ist Version 0.1.2, ein Changelog und ein README sind enthalten.
Saber_Rider
Zurück zur Shellscripte Übersicht
Zurück zur Paketmanager-Übersicht