RPM-build-MINI-HOWTO-german

 
V 0.9 © Tilo Chucholowius (tc@tc-world)  10.12.2001

1. Vorbereitung

2. Das *.spec-File

2.1. Header
2.2. Description
2.3. Prep
2.4. Build
2.5. Install
2.6. Cleaning
2.7. pre und post Install/Uninstall Scripts
2.8. Files
2.9. Changelog

3. RPM's bauen

1. Vorbereitung

Zuerst besorgt man sich die orginal Sourcen der Software.
Entpacken und enttaren
z.B.
gunzip <file>
tar -xvf <file>
 

Das komplette Verzeichnis noch mal kopieren
cp -r <verzeichnis>  <verzeichnis.orig>

im "Bastelverzeichnis" (<verzeichnis>) kann man dann alle Änderungen und Ergänzungen vornehmen.
z.B.
-./configure script anpassen -oder das Makefile selbst, wenn es kein ./configure Script gibt
-Sourcen editieren
-Neue Dateien hinzufügen (Konfigfiles) die später im /etc stehen

Jetzt jagt man über die beiden Verzeichnisse einen recursieven diff Befehl und lenkt den Output in eine Datei um.
diff -uNr <Verzeichnis.orig> <Verzeichnis>  > ../SOURCES/Verzeichnis.patch

Name eines RPM Paketes:

<Name>-<Version>-<Release>.<Architektur>.rpm
z.B.
tac_plus-F4.0.4.alpha-1.i386.rpm
 
 

2. Das *.spec-File

Soweit zu den Vorbereitungen. Es gibt eine Datei die den gesamten RPM Erstellprozeß steuert.
Diese Datei heißt <Paketname>.spec

Wie sieht die Datei aus? Ich werde in diesem HOWTO mit einem Beispiel arbeiten, dann damit wird es am deutlichsten.
So kann ein *.spec File aussehen:

Summary: TACACS+ Server F4.0.4.alpha from www.cisco.com.
Name: tac_plus
Version: F4.0.4.alpha
Release: 2
Packager: tc@tc-world.de
Copyright: GPL
Group: System Environment/Daemons
Source: http://ftp.cisco.com/tac_plus-F4.0.4.alpha.tar.gz
Patch: tac_plus-F4.0.4.alpha-buildroot.patch
BuildRoot: /var/tmp/%{name}-buildroot

%description
TACACS+ server for Linux. The sources come from Cisco.
Version F4.0.4.alpha.
A demo configfile is included. For detailed infos see the manpage.

%prep
%setup
%patch -p1 -b .buildroot

%build
#make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" tac_plus
make RPM_OPT_FLAGS="-O3 -fomit-frame-pointer -mcpu=pentiumpro -march=i586 \
-ffast-math -funroll-loops -pipe -s" tac_plus

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
mkdir -p $RPM_BUILD_ROOT/usr/local/man/man1
mkdir -p $RPM_BUILD_ROOT/etc

install -s -m 755 tac_plus $RPM_BUILD_ROOT/usr/local/bin/tac_plus
install -m 644 tac_plus.1 $RPM_BUILD_ROOT/usr/local/man/man1/tac_plus.1
install -m 644 tac_plus.confg $RPM_BUILD_ROOT/etc/tac_plus.confg

#%cleancd
#rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/usr/local/bin/tac_plus
/usr/local/man/man1/tac_plus.1
/etc/tac_plus.confg

%doc users_guide CHANGES
%config tac_plus.confg

%changelog

* Tue Sep 22 2001  Tilo Chucholowius <tc at tc-world.de>
- some filenames and directories modified
- democonfig added (file /etc/tac_plus.confg)

* Wed Sep 22 2001  Tilo Chucholowius <tc at tc-world.de>
- Initial release (source F4.0.4.alpha)
 

2.1. Header:

Summary: TACACS+ Server F4.0.4.alpha from www.cisco.com.
Name: tac_plus
Version: F4.0.4.alpha
Release: 2
Packager: tc@tc-world.de
Copyright: GPL
Group: System Environment/Daemons
Source: http://ftp.cisco.com/tac_plus-F4.0.4.alpha.tar.gz
Patch: tac_plus-F4.0.4.alpha-buildroot.patch
BuildRoot: /var/tmp/%{name}-buildroot
 

Summary:   -> Hier trägt man eine Kurzbeschreibung des Paketes ein
Name:        -> Name des RPM Paketes
Version:     -> Version der Software
Release:     -> laufende Nr. von der RPM Paketerstellung
Copyright:  -> ohne Worte (GPL, BSD, public domain etc.)
Group:       -> Welcher Gruppe ist das Paket zuzuordnen
Source:      -> orginal Sourcecode  (Name des Source-Files muß mit dem verwendeten Source-File übereinstimmen)
Patch:        -> Nmae des Diff-Files welches alle Änderungen an den Sourcen enthält
BuildRoot: -> temp.Verzeichnis relativ zu / in welche die fertingen Binärdateien während des Buildprozesses reinkopiert werden
 
 

2.2. Description

Unter der Description steht eine ausführlichere Beschreibung des Paketes, welche mit
rpm -qpi <paketname.rpm> u.a. ausgelesen werden kann.

%description
TACACS+ server for Linux. The sources come from Cisco.
Version F4.0.4.alpha.
A demo configfile is included. For detailed infos see the manpage.
 
 

2.3. Prep

Hier wird alles für  make  vorbereitet.
Anmerkung: In jedem er noch folgenden Abschnitte nach dem %prep Tag können sh (shell) Skripte ausgeführt werden.
Hier gibt es Makros die die Arbeit erleichtern:
%setup ->entpackt und ent'tar't die Sourcen.
%patch ->patched unsere Sourcefiles mit dem im Header unter Patch angegebenen File (tac_plus.F4.0.4.alpha-buildroot.patch)

%prep
%setup
%patch -p1 -b .buildroot
 

2.4. Build

Hier gibst es keine Makros.
In jeder Section wird das aktuelle Verzeichnis wieder auf das "root" der Sourcen gesetzt.
RPM_OPT_FLAGS sind die Compileroptionen für dieses System. Diese sind in
/usr/lib/rpm/rpmrc gespeichert.
Möchte man spezielle Optionen für einen ganz bestimmten User fürs RPM bauen einstellen, so kann man auch eine Datei .rpmrc in seinem home-Verzeichnis erstellen und entsprechend anpassen.
RPM_OPT_FLAGS kann man aber auch ganz weglassen. Es ist ein optionaler Wert.

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
 
 

2.5. Install

Wie schon bei %build gibt es keine Makros.
Hier kann man make install aufrufen falls vorhanden oder die Files per Skript an die entsprechenden Stellen kopieren.
Die Variable $RPM_BUILD_ROOT ist das "Bauverzeichnis" siehe Header:
BuildRoot: /var/tmp/%{name}-buildroot
also /var/tmp/tac_plus-F4.0.4.alpha-buildroot/

Achtung!
Wenn man make install verwendet, das Makefile entsprechend anpassen und $RPM_BUILD_ROOT als root Verzeichnis einfügen sonst werden die Dateien relativ zum Rootverzeichnis ("/") kopiert und nicht ins  RPM_BUILD_ROOT Verzeichnis. Als Folge dessen werden diese Dateien nicht ins binär- und source RPM Paket übernommen. (<paketname>.rpm,   <paketname>.srpm)
Vorschalg:
make install  prefix=$RPM_BUILD_ROOT

Im Beispiel gab es kein "make install" also habe ich die Dateien einzeln "installiert".

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
mkdir -p $RPM_BUILD_ROOT/usr/local/man/man1
mkdir -p $RPM_BUILD_ROOT/etc

install -s -m 755 tac_plus $RPM_BUILD_ROOT/usr/local/bin/tac_plus
install -m 644 tac_plus.1 $RPM_BUILD_ROOT/usr/local/man/man1/tac_plus.1
install -m 644 tac_plus.confg $RPM_BUILD_ROOT/etc/tac_plus.confg
 

2.6. Cleaning

Hier gibt es wieder ein Makro namens %cleancd.
Dieses löscht das alte RPM_BUILD_ROOT Verzeichnis.
Achtung!:
Ein Test ob das RPM_BUILD_ROOT nicht zufällig auf "/" gesetzt ist, wäre für Leute ohne Backup angebracht ;-).

%cleancd
(ist zu sehen wie "rm -rf $RPM_BUILD_ROOT")
 

2.7. optional pre und post Install/Uninstall Scripts


Hier können Skripte angegeben werden die vor oder nach Installation/Deinstallation von bin-Paketen gestartet werden.
Sind shared Libraries installiert worden, ist es z.B. notwendig danach ldconfig aufzurufen um das dem System mitzuteilen.
Sections in dennen die Shell Skripte stehen:

2.8. Files

Hier müssen alle Files gelistet werden die auf dem System installiert werden.
Von einem "make install"  bekommt rpm diese Angaben nicht geliefert.
Es gibt einige Makros: %defattr(-,root,root)
%files
/usr/local/bin/tac_plus
/usr/local/man/man1/tac_plus.1
/etc/tac_plus.confg

%doc users_guide CHANGES
%config tac_plus.confg
 
 

2.9. Changelog

Hier werden alle Änderungen eingetragen wenn ein neues Release erscheint.
Zu beachten die Syntax des Datums: (wie der folgende Unix Befehl)
date "+%a %b %d %Y"
Des Rest ist freier Text, sollte jedoch strukturiert daherkommen.

%changelog

* Tue Sep 22 2001  Tilo Chucholowius <tc at tc-world.de>
- some filenames and directories modified
- democonfig added (file /etc/tac_plus.confg)

* Wed Sep 22 2001  Tilo Chucholowius <tc at tc-world.de>
- Initial release (source F4.0.4.alpha)
 
 

3. RPM's bauen


Zuserst sollten wir sicherstellen das die Verzeichnisstruktur zum RPM's basteln vorhanden ist. Die Struktur ist konfigurierbar im /etc/rpmrc File bzw. spezielle Einstellungen für einen bestimmten User in .rpmrc in dessen Home-Verzeichnis.
Wir brachen:

Mit dem folgenden Befehl baut man ein Paket:

rpm -ba testsoftware-1.0.spec

Man sollte sich dazu im SPEC Verzeichnis befinden.
Zur option -b gibt es ein paar Optionen.


ein  paar Zusatzoptionen:


Bsp.:
rpm -vv -ba  tac_plus-F4.0.4.alpha.spec
 

Den Output von rpm -ba vom Beispiel habe ich mir hier geschenkt und würde diese  HOWTO ausufern lassen.
 
 

Dank an Donnie Barnes für die engl. RPM HOWTO Copyright © 1999 by Red Hat, Inc. Rev. V3.0 1999 an die ich mich angelehnt habe.
Den Overkill an Infos zu RPM "Maximum RPM" gibt es bei http://www.rpm.org.

Meinungen, Anregungen, Fragen,Wünsche --> tc@tc-world.de