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