![]() |
:: Home :: Computing :: Downloads :: Scooter :: 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.
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.
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.
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 |
|
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.
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.
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.
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.
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
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'
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'.
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 ;-).
Zurück zur Main-Site |