oc2pus
Ultimate Guru
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 nVida-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.
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.
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 nVida-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.
Code:
#!/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.