Wie erstelle ich ein virtuelles RPM Paket

Aus Linupedia.org
Version vom 19. August 2006, 16:42 Uhr von Rolle (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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.

#!/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