menu.jpg  ::  Home ::  Computing ::  Downloads ::  Harley Davidson ::  Links ::  Music ::  Nonsense ::  Mail :: 

Ich habe mir für mein Debian-System ein System-V Init-Skript gebastelt, dass bei jedem Rechner-Start vor Eintritt in die Runlevel 2 bis 5 den Numlock der Konsolen anschaltet und einen Klang ausgibt. Bei jedem Reboot oder Stop schaut es nach, ob sich noch Zip-Disketten oder CD-ROMs in den jeweiligen Laufwerken befinden und wirft diese aus.

Auf meinen bisherigen SuSE-Systemen, die auf RPM aufsetzten, war es nahezu ein Ding der Unmöglichkeit, entsprechende Pakete zu basteln (oder hast Du Dich jemals mit einer von RPM benötigten spec-file abgequält?). Ich habe das o. a. Skript mit allen Links damals immer über ein Tar-File eingespielt, was ja irgendwie nicht ganz im Sinne der Sache ist. Debian-Pakete sind da m. E. wesentlich einfacher und - sagen wir einmal - transparenter herzustellen als RPM's.

Zu Testzwecken wollte ich immer schon 'mal das o. a. Skript in ein Debian-Paket verbasteln und habe diesen Wunsch mit diesem kleinen Projekt verwirklicht. Das Paket ist mittlerweile auf jedem Rechner in meinem Home-Netzwerk installiert und verleiht jeder Maschine ässerst einfach zu konfigurierende individuelle autostart-/autostop-Mechnismen.

Das fertige Debian-Archiv (das absolut nix tut, bis Du nach seiner Installation die Datei '/etc/init.d/rc.local' editierst) kannst Du auf meiner Download-Site runterladen.

1. Software-Voraussetzungen

Folgende Paktet müssen/sollten installiert sein:

Die drei letzten Pakete sind nicht unbedingt erforderlich, aber machen das ganze als Viewer bzw. Online-Hilfe doch etwas einfacher.

2. Vorbereitungen

Als root habe ich ein Verzeichnis 'debs' angelegt, in dem ich wiederum ein Unterverzeichnis 'rc-local-deb' kreiert habe. In diesem Verzeichnis habe ich folgende Verzeichnisstruktur geschaffen:

   DEBIAN
   etc   -+
          |
          +- init.d
   usr   -+
          |
          +- share -+
                    |
                    +- doc -+
                            |
                            +- rc-local

Das Verzeichnis 'DEBIAN' hat nichts mit der zu installierenden Software zu tun, sondern enthält ausschliesslich Informationen und Skripte für die Paketverwaltung. Die anderen beiden Verzeichnisse enthalten die zu installierenden Programmteile in ihren absoluten Pfaden.

Jetzt wechsele man in das Verzeichnis 'debs/rc-local-deb/DEBIAN' und führe folgende Befehle aus:

   # for i in conffiles control md5sums postinst postrm prerm; do touch $i; done
   # chmod +x postinst postrm prerm 

Die damit geschaffenen Dateien werden nicht installiert, sondern dienen lediglich der Paketverwaltung. Sie sollen folgendes im Leben des Debian-Paketes bewirken:

Datei Zweck
conffiles Diese Datei enthält den Pfad zu im Paket enthaltenen Konfigurationsdateien, die vom Nutzer an sein System angepasst sind/sein könnten. Bei einem Update des Paketes wird angefragt, ob diese beibehalten oder ersetzt werden sollen. In unserem Fall muss hier sie Datei '/etc/init.d/rc.local' eingetragen werden, die ja nach Installation an das jeweilige System angepasst wird.
control Diese Datei enthält alle Informationen und 'Goodies', die man mit 'dselect' und Konsorten sehen kann, sowie Informationen, die für das Paket-Management wichtig sind.
md5sums Diese Datei enthält das Ergebnis von md5sum, das auf alle statischen, d. h. auf alle nicht in 'conffiles' aufgeführten, Dateien des Paketes ausgeführt wurde. Diese können im Betrieb mit dem Tool 'debsums' überprüft werden, aber das ist ein anderer Schnack :-).
postinst Dieses Skript wird nach der Installation ausgeführt.
postrm Dieses Skript wird nach der De-Installation ausgeführt.
prerm Dieses Skript wird vor der De-Installation ausgeführt.

Weitere hier denkbare Dateien kannst Du dem Packaging-Manual (ist entweder auf Deinem CD-Set oder dem Debian-Server erhältlich) entnehmen. Für mein Projekt habe ich lediglich die in der o.a. Tabelle enthaltenen Dateien benötigt.

3. Die zu installierenden Dateien erstellen

Jetzt müssen die beiden anderen Verzeichnisse noch mit den zu installierenden Dateien "gefüllt" werden. Bei diesem Paket sieht es folgendermassen aus:

Pfad Datei(en) Bemerkungen
/etc/init.d rc.local Das Init-Skript
/usr/share/doc/rc-local
  • copyright
  • changelog.gz
  • README
Die Debian-Policy verlangt von jedem Paket-Maintainer, dass jedem Paket ein File namens copyright, aus dem sich Lizenzbestimmungen u. ä. entnehmen lassen, sowie ein changelog, das Auskunft über bei der Entwicklung des Paketes gemachte Änderungen erteilt, beiliegen. Die dritte Datei ist von mir, da ich es persönlich immer als angenehm empfinde, wenn einer Software irgend etwas dokumentationsartiges beiliegt. Und da die Erstellung einer Man-Page für dieses kleine Paket ja geradezu Overkill wäre, muss es eben das README tun.

Ich habe es mir jetzt erspart, die Inhalte der vier Dateien hier auch noch aufzuführen, da das m. E. über das Ziel dieses Artikels, der ja nur das Erstellen von Debian-Paketen beschreiben will, hinausschiessen würde. Wie eingangs schon gesagt, kann das komplette Paket von meiner Download-Site heruntergeladen werden.

4. Die Debian-spezifischen Dateien erstellen

4.1 Die Datei 'conffiles'

In diesem Paket ist nur eine vom Systemverwalter (yeah, good old root) zu konfigurierende Datei enthalten, das Kernstück, die Datei '/etc/init.d/rc.local'. Diese ist hier mit ihrem absolutem Pfad einzutragen.

4.2 Die Datei 'control'

Schlüsselwort Wert
Package: Name des Paketes (ohne Versionsnummer und Präfix
Version: Versionsnummer
Section: Eine der Debian-eigenen Sektionen, wie z. B. admin, base, utils, misc, net...
Priority: Die Priorität des Paketes für das System, wie z. B. required, optional, extra...
Architecture: Wenn das Paket aufgrund darin enthaltener Binaries nur auf bestimmten Rechnerarchitekturen lauffähig ist, ist diese (z. B. i386, alpha...) hier zu vermerken. Anderenfalls kann man hier "all" eintragen.
Installed-Size: Hier wird der Platzbedarf des installierten Paketes in KByte eingetragen.
Maintainer: Der Betreuer des Paketes in der Form "Vorname Nachname <email@adress.se>"
Description: Unmittelbar hinter dem Schlüsselwort folgt die kurze einteilige Beschreibung, die man in 'dselect' oder per 'dpkg -l' sieht. In den darunter folgenden Zeilen kann man ein Whitespace eingerückt eine etwas ausführlichere Beschreibung verfassen. Leerzeilen müssen mit einem Punkt maskiert werden.

Weitere Schluüsselworte mit möglichen Werten liefert Dir das Packaging-Manual.

Hier kommt die für meine Systeme funktionierende 'control';

Package: rc-local
Version: 0.1-1
Section: martin
Priority: extra
Architecture: all
Installed-Size: 56
Maintainer: Martin Bock <mbock@bigfoot.de>
Description: Initscript for local stuff 
 Adds a rc.local in Red Hat-Style to your systems System V-Init,
 where you can start local stuff on system-startup and stop local
 stuff on reboot or shutdown.
 .
 This mechanism is not meant to start deamons; it is just an easy
 to maintain local autostart-/autostop-thingie.

4.3 Die Datei 'md5sums'

Mit Inhalten gefüllt wird sie aus dem Verzeichnis 'rc-local-0.1-deb' durch den Befehl:

 # md5sum find /usr -type f -exec md5sum {} \; >> DEBIAN/md5sums 

Danach enthält diese Datei Prüfsummen für die mit dem Paket installierten statischen Dateien.

4.4 Die Datei 'postinst'

Dieses nach der Installation auszuführende Script ist folgendermassen aufgebaut:

#!/bin/sh -e
if [ "$1" = "configure" ]
then
    if [ -d /usr/doc -a ! -e /usr/doc/rc-local -a -d /usr/share/doc/rc-local ]
    then
        ln -sf ../share/doc/rc-local /usr/doc/rc-local
    fi
    if [ -x /usr/sbin/update-rc.d ]
    then
        /usr/sbin/update-rc.d rc.local start 99 S . stop 32 0 . stop 32 6 .
    fi
fi

Das Script legt einen Link von '/usr/share/doc/rc-local' nach '/usr/doc/rc-local', damit man auf die Dokumentation auch über diesen Pfad zufreifen kann. Ausserdem legt sie Links zu dem Skript '/etc/init.d/rc.local' nach

4.5 Die Datei 'postrm'

Diese nach der De-Installation auszuführende Script hat folgenden Inhalt:

#!/bin/sh
set -e
if [ $1 = purge ]
then
    if [ -x /usr/sbin/update-rc.d ]
    then
        /usr/sbin/update-rc.d -f rc.local remove >/dev/null
    fi
fi

Es entfernt die nach der Installation angelegten verschiedenen Links in den Verzeichnissen '/etc/rc*.d' auf das jetzt deinstallierte Init-Skript sowie den symbolischen Link in das Verzeichnis '/usr/doc'

4.6 Die Datei 'prerm'

Diese vor der De-Installation auszuführende Script sieht folgendermassen aus:

#!/bin/sh -e
if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/rc-local ]
then
    if [ -L /usr/doc/rc-local ]
    then
        rm -f /usr/doc/rc-local
    fi
fi

Es entfernt den nach der Installation angelegten Link von '/usr/local/share/doc/rc-local' nach '/usr/doc/rc-local'.

5. Das Paket erstellen

Das Paket wird aus dem Verzeichnis 'debs' mit folgendem Befehl erstellt:

# dpkg-deb -b rc-local-deb rc-local_0.1-1_i386.deb

Die Nummernfolge im Paketnamen wird üblicherweise folgendermassen gehandhabt:

Die Versionsnummer solltest Du im *NIX-Stil sukzessive bei Fortgang des Projektes erhöhen, damit Dein Paket vielleicht auch einmal eine Versions-Nummer >=1.* erreicht ;-).

6. Links

Debian Packaging Manual
dpkg-Interna
File Hierarchy Standard (FHS)
Pakethandling unter Debian

Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU-Emacs on Sat Jan 20 16:58:42 CET 2001

Valid CSS