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.

Packages erstellen

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 SlackBuilds.org 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). 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.

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
# 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

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

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

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

pkgtool ist das Standard-Programm zum Verwalten von Packages, aber ein Bild sagt mehr als tausend Worte.

pkgtool.png

rpm2tgz

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-Pakets 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.