Archiv

Posts Tagged ‘RPM’

Erstellung eines einfachen RPM-Pakets mit einer Datei

2012/01/17 Kommentare aus

Eines der RHCE-Prüfungsziele ist das Erstellen eines RPM-Pakets mit einer Datei. Diese Anforderung ist relativ einfach zu erfüllen.

Voraussetzungen

Der erste Schritt ist die Installation des Pakets rpmdevtools:

yum install rpmdevtools

yum kümmert sich automatisch um Abhängigkeiten und installiert diese mit. Der nächste Schritt ist die Ausführung des Befehls

rpmdev-setuptree

Dieser erstellt das Verzeichnis rpmbuild mit diversen Unterverzeichnissen im Heimatverzeichnis des aufrufenden Benutzers.

Vorbereitung des Paketinhalts

Nun kann die Datei vorbereitet werden, die das RPM-Paket enthalten soll. Dazu wechseln wir in das Verzeichnis SOURCES und erstellen dort ein Verzeichnis mit dem Namen des Pakets:

cd ~/rpmbuild/SOURCES
mkdir mypackage-1.0

Das Verzeichnis sollte den gleichen Namen haben wie das zu erstellenden Paket. Durch einen Bindestrich getrennt folgt noch die Versionsnummer des Pakets, in diesem Fall 1.0.

Im soeben angelegten Verzeichnis muss eine configure-Datei vorhanden sein, welche aber für unseren Zweck auch leer sein kann. Die leere Datei wird hier einfach mit dem Befehl touch erstellt. configure muss für den Benutzer ausführbar sein, die Rechte werden mit chmod entsprechend angepasst. Zuletzt wird noch die Datei angelegt, die Inhalt des Pakets sein soll. Hier wird einfach die im System vorhandene Datei /etc/services kopiert und als myfile.txt abgelegt:

cd mypackage-1.0
touch configure
chmod u+x configure
cp /etc/services myfile.txt

Der Paketinhalt muss nun noch gepackt und komprimiert werden:

cd ..
tar -czf mypackage-1.0.tar.gz mypackage-1.0

Möglich ist auch die Verwendung von bzip2-Komprimierung anstatt gzip.

Konfiguration des Pakets

Danach begeben wir uns in das Unterverzeichnis SPECS und erstellen darin eine leere Vorlage mit dem Namen mypackage.spec:

cd ~/rpmbuild/SPECS
rpmdev-newspec mypackage.spec

Es sind einige Anpassungen in dieser Datei notwendig, um unser RPM-Paket erfolgreich zu erstellen. Notwendige Änderungen sind dabei fett dargestellt:

Name: mypackage
Version: 1.0
Release: 1%{?dist}
Summary: Ein Paket mit einer Datei.
Group: Miscellanous
License: GPL
URL: https://rhceprep.wordpress.com
Source0: mypackage-1.0.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
#BuildRequires:
#Requires:
%description
Dieses Paket installiert die Datei myfile.txt unter /tmp/mypackage.
%prep
%setup -q

%build
#%configure
#make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
#make install DESTDIR=$RPM_BUILD_ROOT
install -d -m 0755 $RPM_BUILD_ROOT/tmp/mypackage
install -m 0644 myfile.txt $RPM_BUILD_ROOT/tmp/mypackage/myfile.txt

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
/tmp/mypackage/myfile.txt
/tmp/mypackage
%doc
%changelog

Die meisten Punkte sollten selbsterklärend sein. Eine Angabe von BuildArch ist nur notwendig wenn das Paket für eine andere Architektur als die aktuell verwendete erstellt werden soll. noarch bedeutet hier, dass das Paket für alle Architekturen verfügbar ist.

Am wichtigsten ist die Angabe der Quelle unter source0 sowie die Anweisungen zur Installation unter der Direktive %install. Unter %files werden noch alle Dateien angeführt, die Teil dieses Pakets sind. Bei einer Deinstallation des RPM-Pakets werden die hier angeführten Dateien gelöscht.

Erstellung des RPM-Pakets

Das Paket wird anhand der vorhandenen SPEC-Datei mit dem Befehl rpmbuild generiert:

rpmbuild -bb mypackage.spec

Das RPM-Paket wird unter dem Verzeichnis ~/rpmbuild/RPMS/noarch unter dem Namen mypackage-1.0-1.el6.noarch.rpm erstellt. Falls BuildArch noarch in der Konfiguration nicht angeführt wurde ist das Paket eventuell unter x86_64 oder x86 zu finden.

Installation, Deinstallation, Auflistung von Paketinformationen

Die Installation des Pakets erfolgt durch den Aufruf von

rpm -ihv mypackage-1.0-1.el6.noarch.rpm

Informationen zum installierten Paket lassen sich durch Verwendung der Parameter -qi anzeigen. Eine Auflistung enthaltener Dateien erhält man nach Ausführung von rpm -ql:

rpm -qi mypackage
rpm -ql mypackage

Installierte Pakete lassen sich mit rpm -e wieder entfernen:

rpm -e mypackage