Hier werden verschiedene Möglichkeiten vorgestellt, wie man den oidentd beim Systemstart (zum Beispiel nach einem Reboot) automatisch mitstarten lässt.
Leider gibt es (meines Wissens) keine Möglichkeit, eine allgemeingültige Lösung, die auf allen Systemen und Distributionen? funktioniert, anzugeben. Daher müssen wir hier mehrere Szenarien durchspielen, am besten geordnet nach Distribution, in der Hoffnung, dass eines bei dir funktioniert.
Dies ist sicherlich die Methode, die bei den meisten von euch ohne zu Zimpern klappen würde (obgleich auch sicherlich nicht bei allen). Das init-System? ist ein häufig vorkommender Mechanismus, der dafür sorgt, dass gewisse Prozesse und Dämonen? in bestimmten Runleveln? (Systemzustände, zum Beispiel "Boot", Einzelbenutzer-, Mehrbenutzer-, Netzwerkbetrieb, etc.) an und abgeschaltet werden. So kann man beispielsweise einstellen, dass der Service oidentd immer, wenn der Server sich im Modus Netzwerkbetrieb befindet, gestartet werden soll. Das wollen wir jetzt mal versuchen zu realisieren.
Das ganze funktioniert, grob erklärt, wie folgt: Es gibt ein Verzeichnis, in dem befinden sich lauter Startskripte, mit denen sich die gewünschten Applikationen starten lassen. Dieses Verzeichnis wird in der Fachsprache meist initdir (Init-Directory, Init-Verzeichnis) genannt. Diese Skripte alleine bewirken erstmal noch gar nichts, aber man kann sie per Hand aufrufen und somit durch /etc/init.d/skriptname start
das entsprechende Programm zum laufen bringen. Mit ... stop
stoppt und mit .. restart
restartet man das entsprechende Programm. So ein Startskript für oidentd findest du unten bei "Datei richtig platzieren". Diese Prozedur funktioniert auf allen Systemen fast gleich, du wirst hier kaum auf Probleme stoßen.
Schwierig wird es im nächsten Schritt, da gilt es nämlich deinem System zu sagen zu welchem Zeitpunkt das Skript mit welchem Paramter (start oder stop) aufgerufen werden soll, ob es zum Beispiel beim Systemstart gestartet werden und beim Herunterfahren gestoppt werden soll. Bei manchen Distributionen geht dies ganz einfach, bei anderen ist etwas mehr Fingerfertigkeit gefragt. Aber fangen wir erstmal an. Zunächst kümmern wir uns also um das init-Skript:
Log dich bitte als root in dein Unix? oder Linux-System ein. Gehe ins Verzeichnis /etc/init.d/ (wahrscheinlich ist dort dein init-System zuhause). Überprüfe mit ls -l
ob dort viele Dateien vorhanden sind, vom Namen her klingen, als könnten sie einen Server oder ähnliches starten (Zum Beispiel: crond, named, sshd?, apache, usw...).
Sieht gut aus? Prima, dann weiter. Nun musst du dafür sorgen, dass dieses unten abgebildete Skript mit dem Namen "oidentd" im dortigen Verzeichnis landet. Du kannst das Skript auch hier herunterladen oidentd, z. B. mit wget, wie in unserem Listing. Letztlich muss die Datei noch mit chmod ausführbar gemacht werden:
Also alles zusammengefasst sieht in etwa so aus:
$> cd /etc/init.d $> wget http://irc-guide.de/wiki/uploads/Main/oidentd $> chmod +x oidentd
So sieht das init-Skript aus:
#!/bin/bash # oidentd startup script for init-like startup mechanisms # by Hendrik Bergunde hbergunde@gmx.de http://irc-guide.de # # Remember to change the startcommand variable to your needs if necessary # Put this file in your init.d -directory (/etc/init.d in most cases) # chmod +x /etc/init.d/oidentd # Call the script with ... # /etc/init.d/oidentd <parameter> # Where <parameter> is either "start" to start the oidentd, "stop" to stop it or # "restart" to restart it. No parameter will give a help. # Have Fun! Comments, Bugreports or Bugfixes, Flames are welcome. prog="oidentd" ## Debian Users uncomment the following line and comment the other startcommand-line below # startcommand="/usr/bin/oidentd -u nobody -g nogroup" startcommand="/usr/sbin/oidentd -u nobody -g nobody" start() { echo -n $"Starting $prog " $startcommand RETVAL=$? # echo $RETVAL return $RETVAL } stop() { echo -n $"Stopping $prog: " killall -9 $prog RETVAL=$? echo $RETVAL return $RETVAL } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac
So, nun ist die /etc/init.d/oidentd an ihrem Bestimmungsort. Achtet darauf, dass ihr in dem Skript die Variable startcommand
korrekt gesetzt habt. Dort müsst ihr unter Umständen manchmal den Pfad zu eurem oidentd-Programm anpassen. Wohin sich euer oidentd installiert (siehe auch oidentd Installation und Konfiguration) hat, erfahrt ihr, wenn ihr which oidentd
eingebt. Außerdem müssen Debian-Leute darauf achten, dass sie anstatt -g nobody
dort -g nogroup
verwenden, sonst klappt es nicht.
Jetzt kannst du mal ausprobieren, ob sich der oidentd startet, wenn du ./oidentd start
eingibst (mit ps aux | grep oidentd
prüfen ob er läuft!) und ob er sich abschießt, wenn du ./oidentd stop
eingibst. Meistens wird es auf Anhieb funktionieren. Lass ihn letztlich am besten aber gleich eingeschaltet.
Jetzt müssen wir dem Initsystem klarmachen, dass wir das Startskript /etc/init.d/oidentd start jedes mal ausgeführt haben wollen, wenn der Server in den Netzwerkmodus wechselt (nach jedem Boot). Wie ich eingangs erwähnte funktioniert das auf jedem System ein wenig anders. Wir versuchen uns mal da durchzukämpfen:
Solltest du Gentoo? benutzen, dann reicht die Eingabe des Befehls
$> rc-update add oidentd default
und das Skript wird nach jedem Boot aufgerufen.
Befehl eingeben, und hoffen, dass es danach funktioniert:
$> update-rc.d oidentd defaults
SuSE? bringt das Konfigurationstool YaST mit, dort befindet sich ein Modul, dass sich RunlevelEditor nennt. Mit diesem Werkzeug, kann man "oidentd" ganz einfach zu den gewünschten Runlevels (Zahlenmäßig am besten Runlevel 3) hinzufügen.
... sollten es hiermit probieren (oder doch erstmal weiterlesen, ob eine der folgenden Möglichkeiten nicht vielleicht besser klappen):
$> cd /etc/rc3.d/ $> ln -s /etc/init.d/oidentd ./S99oidentd $> cd /etc/rc4.d/ $> ln -s /etc/init.d/oidentd ./S99oidentd
Soviel zum Thema Initsystem. Hat nicht geklappt? Dann mal weiterlesen.
Zumindest bei Fedora Core, so ist es mir jedenfalls bekannt, wird nach jedem Boot die Datei /etc/rc.local aufgerufen und durchgearbeitet. Folglich kann man in diese Skriptdatei (auch wenn sie zunächst noch leer ist) einen Aufruf für den oidentd platzieren. Also, falls diese Datei bei dir auf dem System existiert, dann öffne sie im Editor deiner Wahl füge ans Ende der Datei folgende Zeile hinzu:
/usr/sbin/oidentd -u nobody -g nobody
Speichern und das war's dann auch schon.
@reboot
Einige cron?-Dämonen? unterstützen das magic word @reboot mit dem Befehle nach einem Reboot ausgeführt werden können. Ob dein crond dies Unterstützt kannst du nachprüfen, indem du die manpage der Software mit man 5 crontab
aufrufst und schaust, ob dort etwas von @reboot steht. ;-)
Öffne die Datei /etc/crontab und füge folgende Zeile am Ende der Datei ein:
@reboot root /usr/sbin/oidentd -u nobody -g nobody