Slackware-Packages erstellen
- Vorwort
- Packages erstellen
- installpkg
- explodepkg
- upgradepkg
- removepkg
-
- pkgtool
- rpm2tgz
- Nachwort
Ich werde hier kurz erklaeren wie man Packages fuer Slackware erstellt. Hintergrund ist schlicht
und einfach der, dass einige User (zumindest die, die mich staendig via Email belabern) auf
externe Programme (stow, depot, ..)
zurueckgreifen, obwohl das meist ueberfluessig ist. Slackware bietet dafuer eigene Tools an, die
dem User diese Arbeit abnehmen bzw. das Management von Packages erheblich erleichtern, aber
dazu spaeter mehr.
Eins gleich vorneweg. Das ist *keine* offizielle Anleitung, sondern lediglich ein Leitfaden
wie man Packages erstellt, die unter Slackware verwaltet werden koennen. Ich werde hier auch nicht
auf die install/slack-desc oder install/doinst.sh eingehen! Wer dazu naehere Informationen
sucht, sollte sich das Handbuch durchlesen, bei
http://www.linuxpackages.net/ nachsehen oder sich offizielle
Packages ansehen. Ich gehe davon aus, dass Slackware sowie die benoetigten Programme (autoconf, automake,
..) bereits installiert sind.
Bevor wir anfangen ein Package zu erstellen, sehen wir zuerst mal nach ob nicht bereits ein solche Package
existiert. Die neusten Packages findet man in Slackware-current (auf dem ftp-Server von Slackware) oder
bei http://www.linuxpackages.net/. Wenn ihr dort eins gefunden
habt, aber die Version nicht uebereinstimmt, dann reicht es meist aus, wenn man die VERSION-Variable im
SlackBuild-Script abaendert (steht immer ziemlich am Anfang).
Um ein Package zu erstellen, brauchen wir zuerst mal die Sourcen des Programms. Ich nehme hier jetzt
einfach mal Vim als Beispiel. Vim hat am 2004-06-08 die Version 6.3
released (also nicht Vim hat sich selbst released, sondern Bram. Eh klar oder?), aber es gibt noch kein
Package fuer Slackware und deswegen bauen wir uns jetzt eins (eins und nicht einen!). Zuallererst
brauchen wir - wie schon gesagt - die Sourcen von Vim; die bekommt man auf dem ftp-Server von Vim (genauer
gesagt unter ftp://ftp.vim.org/pub/unix/vim-6.3.tar.bz2).
Sobald man diese hat, muss man sie entpacken und in der neu erstellte Verzeichnis wechseln. Dort ruft man
dann wie bei der normalen Installation das configure-Script mit den Optionen auf. Ich verwende dazu immer
./configure --with-features=huge --disable-gui --without-x --with-compiledby='Christan Schneider <strcat@gmx.net>'
--prefix=/usr
Note: Wenn man "--prefix" nicht angibt, wird vim unter /usr/local/bin/vim* und /usr/local/share/vim/* installiert.
Per Default liegt Vim bei Slackware unter /usr/bin/vim* und /usr/share/vim/* rum. Wenn ihr also bereits eine
andere Version von Vim installiert habt, wird die neue Version davon parallel installiert.
Sobald das configure-Script das Makefile erstellt hat, kompilieren wir die Sourcen, indem wir einfach
make
eingeben und warten bis der Compiler fertig ist. Bis jetzt war die Installation so, wie man es sonst auch
immer macht, aber das aendert sich jetzt.
Neuere Versionen von automake unterstuetzen die Variable DESTDIR; diese Variable "kontrolliert"
wohin die Dateien bei einem "make install" abgelegt werden. Dazu ueberpruefen wir ob das Makefile diese
Variable enthaelt, indem wir
grep -r DESTDIR *
eingeben (bei Vim 6.3 ist das der Fall). Jetzt installieren wir Vim, indem wir
make DESTDIR=/tmp/packages/vim-6.3 install
eingeben. Sollte das Makefile die Variable DESTDIR nicht enthalten, muessen wir stattdessen
make prefix=/tmp/packages/vim-6.3/usr install
verwenden. In beiden Faellen muessen die Verzeichnisse nicht erstellt werden; das erledigt "make" fuer uns.
Es muss nur sichergestellt werden, dass man in dem angegebenem Verzeichnis Schreibrechte besitzt. Sobald
"make" durchgelaufen ist, wechseln wir in das Verzeichnis (in dem Fall /tmp/packages/vim-6.3) und werden feststellen,
das dort die Verzeichnisse install usr/{bin,man,share} vorhanden sind. Wenn das der Fall ist,
koennen wir das Package erstellen. Also
cd /tmp/packages/vim-6.3
makepkg vim-6.3-`uname -m`-1.tgz
Der Name des Packages sollte folgendermassen aufgebaut sein. Zuerst der Name des Programms, dann die Version,
anschliessend die Architektur auf der das Package gebaut worden ist (uname -m) und zu guter letzt noch die
"Build-Number"; letzter ist aber optional und wird eigentlich nur gebraucht, wenn man gleiche Programme mit
verschiedenen Features baut (und dann auch nur zur einfacheren Unterscheidung).
Das Package ist erstellt worden; jetzt geht es ans Installieren. Dazu steht uns das Programm installpkg
zur Verfuegung. Um das Programm verwenden zu koennen, *muss* man root-rechte haben und die bekommt man am
einfachsten, wenn man su oder gleich sudo verwendet. Einfach - als root - visudo
aufrufen und dann folgende Zeile eintragen:
username ALL = NOPASSWD: /sbin/installpkg
Abspeichern, als username einloggen und schon kann man installpkg mit
sudo installpkg paketname.tgz
aufrufen, ohne nach dem Passwort gefragt zu werden oder root werden zu muessen. installpkg bietet
folgende Optionen an.
-warn
Hier wird der User gewarnt wenn Dateien ueberschrieben werden, aber es wird nichts installiert.
-root
Hier kann man angeben was als '/' verwendet werden soll (i. e.: installpkg -root /foobar).
-infobox
Hier wird lediglich der Inhalt der Datei slack-desc ausgegeben.
-menu
Das ist aehnlich der Ausgabe von pkgtool. Es wird der Packagename angezeigt, eine Beschreibung des
Programms (sofern slack-desc enthalten ist und man kann via Menu steuern was man machen moechte
(installieren, nicht installieren, Abbrechen).
-ask
In Verbindung mit -menu wird der User gefragt ob er das Package installieren will.
-priority ADD|REC|OPT|SKP
Sobald -menu verwendet werden die Levels der Datei tagfile im Package ueberschrieben. ADD
bedeutet das automatisch installiert wird, REC schlaegt eine Alternative vor, OPT steht fuer "Optional"
und SKP bedeutet Skip.
-tagfile
Hier kann man ein anderes Tagfile angeben.
In unserem Fall reicht ein
sudo installpkg vim-6.3-i686-1.tgz
um Vim 6.3 zu installieren. Anschliessend ist Vim in der Version 6.3 installiert und kann mit den anderen
Tools (auf die ich gleich eingehe) verwaltet werden.
explodepkg ist ein simples Programm um den Inhalt eines Packages (oder tar + GNUzip Archives).
Schon beim Aufruf von explodepkg wird klar, welchen Zweck es erfuellt.
Explodes a Slackware compatible software package (or any tar+gzip archive) in
the current directory. Equivalent to (for each package listed):
( umask 000 ; tar xzvf package_name )
upgradepkg wird verwendet, um aeltere Packages upzugraden; dabei wird das neue Package installiert
und das alte entfernt!. Man muss lediglich das Paket angeben, das man Upgraden will. Wenn z. B. vim-6.2-i686
installiert ist und wir diese Version durch unsere ersetzen wollen, reicht ein
upgradepkg vim-6.3-`uname -m`-1.tgz
Auch hier stehen wieder mehrere Optionen zur Verfuegung:
--dry-run
Hier wird lediglich ueberprueft ob das Package installiert/aktuallisiert werden kann, aber es wird nichts
ausgefuehrt.
--install-new
Normalerweise installiert/upgraded upgradepkg nur Packages, die bereits installiert sind. Bei Verwendung
von --install-new werden auch Packages installiert, die noch nicht auf dem System vorhanden sind.
--reinstall
Sollte klar sein. Hier wird ein bereits installiertes Package neu installiert.
--verbose
Damit schaltet man ausfuehrliche Ausgaben ein.
removepkg entfernt installierte Packages. Man koennte z. B. Vim folgendermassen deinstallieren:
$ removepkg vim-6.3-i686-1.tgz
$ removepkg vim-6.3-i686-1
$ removepkg vim.tgz
$ removepkg vim
Wie bei den anderen Tools auch, stehen auch hier wieder mehrere Optionen zur Verfuegung:
-warn
Hier wird auf STDOUT angezeigt, welche Dateien removepkg entfernt.
-preserve
Hier wird der komplette Package-Subtree in der Datei /tmp/preserved_packages/paketname aufgezeichnet.
-copy
Das gleiche wie bei -preverse, nur das hier nichts geloescht wird (sozusagen ein Testlauf).
pkgtool ist das Standard-Programm zum Verwalten von Packages, aber ein Bild sagt mehr als
tausend Worte.

rpm2tgz ist ein Shellscript (bzw. ein Symlink gegen /usr/bin/rpm2targz), mit dem man *.rpm - Pakete
zu *.tgz - Packages konvertieren kann. Es stehen keine zusaetzlichen Optionen zur Verfuegung, sondern es
wird lediglich die Angabe eines *.rpm - Paketes erwartet.
rpm2tgz foo-bar.rpm
Damit wird aus dem Paket foo-bar.rpm ein Slackware-Package erstellt (foo-bar.tgz), dass
mit installpkg, removepkg, .. verwaltet werden kann.
Nachwort
Weitere Tools die es wert sind genannt zu werden, sind slapt-get,
Swaret und slackupdate. Diese
Tools erleichtern das Verwalten von Packages erheblich und aehneln der Bedienung von apt-get
(Debian-User kennen es sicherlich). Mit slapt-get und swaret ist es auch moeglich auf die Packages von
http://www.linuxpackages.net/ zuzugreifen, alle installierten
Programme auf den neusten Stand zu bringen oder das komplette System upzugraden.
Sollten sich in diesen Text inhaltliche Fehler eingeschlossen haben, dann zoegert nicht und schickt mir
eine Mail (strcat@gmx.net) und ich werde mich darum kuemmern.
$Id: make+slack-packs.html,v 1.1 2004/06/19 12:26:24 dope Exp dope $
Send comments to strcat@gmx.net.