• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[HOWTO] Wie erstelle ich ein virtuelles RPM Paket ?

Status
Für weitere Antworten geschlossen.

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.

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.
 

scg

Hacker
Und hier gehts zum Link:

http://www.linux-club.de/viewtopic.php?t=42756

Danke an Saber_rider und oc2pus von uns allen !
 
Status
Für weitere Antworten geschlossen.
Oben