[HOWTO] Wie erstelle ich ein virtuelles RPM Paket ?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Gesperrt
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

[HOWTO] Wie erstelle ich ein virtuelles RPM Paket ?

Beitrag von oc2pus » 13. Aug 2004, 08:57

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: Alles auswählen

#!/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.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Werbung:
Benutzeravatar
scg
Hacker
Hacker
Beiträge: 399
Registriert: 4. Jul 2004, 09:56
Wohnort: Nürnberg (SuSE-City)
Kontaktdaten:

Beitrag von scg » 16. Jun 2005, 22:26

CU scg

Benutzeravatar
scg
Hacker
Hacker
Beiträge: 399
Registriert: 4. Jul 2004, 09:56
Wohnort: Nürnberg (SuSE-City)
Kontaktdaten:

Beitrag von scg » 3. Okt 2005, 10:32

Und hier gehts zum Link:

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

Danke an Saber_rider und oc2pus von uns allen !
CU scg

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste