Bis man Linux einigermassen verstanden hat, vergehen Jahre und dann vergisst man wieder alles.. Naja. Ich möchte auf einer NSLU2 mit Debian 5.03 (Lenny) sshd gegen dropbear tauschen. sshd läuft, dropbear wird noch nicht gestartet (weil sshd erkannt wurde). Da ich das Ding über ssh steuere, muss wohl sshd aus den startup skripten irgendwie raus, dropbear rein, dann neustart. Wie geht das mit dem Tausch im einzelnen?
NICHT aus /etc/init.d entfernen! Die Skripte in /etc/init.d können (oder müssen) mit einem Parameter aufgerufen werden; von sich aus tun sie nichts und stören folglich auch nicht. Vielmehr geht der init-Prozess beim Wechsel des run levels in das Verzeichnis /etc/rc<x>.d (wobei <x> dem alten run level entspricht) und führt darin in alphabetischer Reihenfolge alles aus, was mit K beginnt mit dem Parameter "stop" (zum Beenden), anschließend geht init in das Verzeichnis /etc/rc<x>.d (wobei <x> jetzt dem neuen run level entspricht) und führt darin alles aus, was mit S beginnt mit dem Parameter "start". (bei anderen Linuxen als Debian können /etc/init.d bzw. /etc/rc... auch etwas anders liegen, aber das Prinzip wird überall gleich sein.) Der Trick zur einfacheren Verwaltung ist nun der, daß die Skripte in /etc/rc...d gar keine sind, sondern nur symbolische Links auf die tatsächlichen Skripte in /etc/init.d. Um einen weiteren Dienst zu aktivieren, schreibt man einfach in das entsprechende /etc/rc<x>.d einen symbolischen Link mit dem Namen S_irgendwas, der auf die passende Datei in /etc/init.d verweist, und zum Deaktivieren löscht man den Link aus /etc/rc<x>.d wieder. Die Zahl hinter K... bzw. S.. dient nur dazu, die Reihenfolge der Skripte untereinander zu steuern (erst Netzwerk, dann sshd und so weiter). Früher hatte ich SuSE-Rechner, da gab es meines Wissens ein Kommando um so einen symbolischen Link anzulegen, ob es das unter Debian auch gibt, weiß ich nicht. Ich mache es immer von Hand, indem ich einfach den Link setze. Falls man einen Dienst komplett neu einrichten will, für den es in /etc/init.d noch nichts gibt, dann legt man dort ein passendes Skript ab, das mit dem Argument "start" halt das jeweilge Programm anwirft, mit "stop" wieder beendet und mit "reload" anhält und neu startet, und macht dann wie beschrieben die Links in den /etc/rc<x>.d, je nachdem, in welchen run leveln das Ding laufen soll. Welcher der normale run level ist, der nach dem Hochfahren angesteuert wird, wenn nichts anderes beim boot loader angegeben wird, steht übrigens in der /etc/inittab in der Zeile, die mit initdefault markiert ist, z.B.:
1 | id:2:initdefault: |
führt bei mir zum default-run level 2.
Aber was ich nicht verstehe: wenn man sshd deinstalliert und dropbear dafür installiert, sollte das die Paketverwaltung automatisch machen, oder nicht? Die stopppt und startet doch Dienste normalerweise passend, je nachdem was installiert wurde?
Die Links in den rcN.d Directories werden mit update-rc.d verwaltet. Normalerweise werden die automatisch über die debian Paketverwaltung eingerichtet, d.h. bei zwei Alternativen fliegt die andere raus. Es gibt aber Pakete, die trotz vorhandener Links von Haus aus deaktiviert sind, weil man sie erst in /etc/defaults/paketname konfigurieren muss.
oh, danke für die Antworten. Habe ich irgendwie übersehen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.