freeX: Tips & Tricks

Die ausschließlichen Vertriebsrechte an diesem Artikel liegen beim Computer- & Literaturverlag (C&L). Der Artikel darf nicht kopiert oder gar erneut in einer Zeitschrift oder einem Buch veröffentlicht werden ohne vorherige Erlaubnis von C&L. Der Verlag gestattet freundlicherweise die Veröffentlichung auf diesen Seiten. Wer öfter auf diesen Hinweis trifft, sollte sich überlegen, die Zeitschrift freeX zu abonnieren.

Kernel-Parameter zur Laufzeit anpassen

Seit einiger Zeit liefert »procps«-Paket das Programm »sysctl« mit, das jedoch nur wenigen Personen bekannt ist. Das Programm dient dazu verschiedene Parameter des Kernels zu justieren.

Dazu muß man wissen, daß es verschiedene Möglichkeiten gibt, den Linux-Kernel an die Umgebung anzupassen. Zum einen werden beim Compilieren generelle Einstellungen vorgenommen, z.B. welche Module benötigt werden und wie groß verschiedene Puffer sein sollen. Zum anderen können weitere Einstellungen im Quellcode vorgenommen werden. Das ist jedoch eine Möglichkeit, die man nur in Betracht ziehen sollte, wenn man wenigstens ansatzweise versteht, was man macht und welche Auswirkungen die Änderungen hat, denn schnell kann man sich dabei wichtige Einstellungen versauen.

Eine weitere Möglichkeit, die speziell für das Anpassen im laufenden Betrieb gedacht ist, befindet sich im Pseudo-Dateisystem »/proc«. Dort gibt es im Unterverzeichnis »sys« viele "Dateien", die nicht nur gelesen, sondern auch geschrieben werden dürfen. So besteht die Möglichkeit, im laufenden Betrieb mit dem Kernel in Verbindung zu treten und spezielle Einstellungen vorzunehmen.

Damit ein GNU/Linux-Rechner z.B. Router oder Firewall ist und Pakete von einem Netz-Interface zu einem anderen Netz-Interface weiterleitet, reicht es nicht aus, beim Compilieren die Netzwerktreiber zu aktivieren. Zusätzlich muß beim Booten des Systems die Variable »/proc/sys/net/ipv4/ip_forward« auf 1 gesetzt werden. Das geschieht normalerweise in einem Boot-Skript (z.B. »rc.local«) mit dem Befehl:

   echo 1> /proc/sys/net/ipv4/ip_forward

Anstatt diese und ähnliche Einstellungen in verschiedene Skripte zu verteilen, was die Wartung erschwert, können sie dank »sysctl« auch in einer einzigen Datei zusammengefaßt werden. Generell ist »sysctl« in der Lage, die Werte der verschiedenen Parameter in »/proc/sys« zu lesen und zu setzen. Zum Setzen von neuen Werten muß das Programm aus verständlichen Gründen als »root« ausgeführt werden.

Die Parameter werden ohne den Präfix »/proc/sys/« angegeben und der Schrägstrich darf auch gegen einen einfachen Punkt ausgetauscht werden. Um den Wert eines Parameters zu erfahren, wird dieser einfach in der Kommandozeile angegeben, z.B.

   sysctl net/ipv4/ip_forward

Zum Setzen eines neuen Wertes wird der Parameter »-w« neben dem neuen Wert angegeben. Wenn ein Rechner zum Router umfunktioniert werden soll, benötigt man z.B. folgenden Befehl:

   sysctl -w net/ipv4/ip_forward=1

Wichtig ist dabei, daß vor und nach dem Gleichheitszeichen kein Leerzeichen steht, auch wenn »sysctl« inkonsequenterweise Leerzeichen in die Ausgabe einfügt. Die vollständige Liste der möglichen Parameter wird mit »sysctl -a« ausgegeben.

Das Programm »sysctl« sorgt auch dafür, daß die Einstellungen permanent sind. Wenn sie nicht auf der Kommandozeile vorgenommen werden, sondern stattdessen sauber in die Datei »/etc/sysctl.conf« eingetragen werden, lädt »sysctl -p« sie und nimmt die Einstellungen erneut vor. Dieser Befehl wird üblicherweise beim Booten des Rechners ausgeführt.

Eine Beschreibung der Pseudo-Dateien sowie die Bedeutung der dort eingestellten Werte befindet sich im Quellcode vom Linux-Kernel im Verzeichnis »Documentation/sysctl/«. Wenn der Kernel z.B. zuviel Meldungen auf die Konsole schreibt, kann der Grund in der Einstellung der Variablen »kernel/printk« liegen. Den ersten Wert zu erhöhen, sollte die Console von derartigen Meldungen verschonen.

Martin Schulze
Quelle: freeX 2/03