debian

Einleitung

Die folgenden Kurzanleitungen habe ich im Laufe der Zeit zusammen gestellt. Es handelt sich um Kurztipps und Tutorials rund um das Betriebssystem debian GNU/Linux, können aber teilweise auch auf andere Linux-Distributionen angewendet werden.

« zurück (Gesammelte Anleitungen)

Inhalt

Debian-Mischsystem

Herausfinden, welche installierten Pakete nicht dem stable-Zweig angehören

Grundsätzlich betreibe ich meine Rechner mit dem aktuellen stable-Zweig von debian. Manchmal sind die Pakete aber zu alt für ein Desktopsystem, so dass man doch mal auf testing oder auch backports zurückgreifen muss. Hat man dann so ein Mischsystem eine Weile laufen, interessiert es einen ja vielleicht doch mal, wie viel vom stable-Zweig noch übrig ist. Hierfür kann man aptitude bemühen, dass über den gewohnten interaktiven Modus hinaus auch einen Batch-Modus unterstützt. Will man nun alle installierten Pakete anzeigen lassen, die nicht dem Zweig stable angehören, kann man das an der Konsole über das folgende Kommando erfahren:

$ aptitude -F "%p %v %t" search ~i | egrep -v " stable" | less

Die Optionen von aptitude bedeuten im Einzelnen:

  • -F <format>: Gibt das Ausgabeformat an
  • search ~i: Sucht nur in den installierten Paketen (~i ist hierbei ein Wildcard)

Eine genauere Beschreibung des Ausgabeformats und der Optionen befindet sich im aptitude user's manual, das unter /usr/share/doc/aptitude/README zu finden sein sollte.

Initial RAM-Disk (initrd) unter debian mit vanilla-Kernel einrichten

Hinweis: Linux-Kernel ab Version 2.6.12 (?) besitzen die hier beschriebene Einschränkung nicht mehr.

Was ist eine RAM-Disk?

Die Bezeichnung initrd kommt von Initial RAM-Disk. Eine RAM-Disk ist eine Art virtuelle Festplatte, für die im Hauptspeicher eine festgelegte Größe an Speicher reserviert wird. Darin kann man Informationen z. B. abspeichern, auf die schnell oder häufig zugegriffen werden muss.

Die Startdiskette von Windows 98 hat z. B. auch eine RAM-Disk eingerichtet, um die sehr langsame Zugriffszeit und vor allem die begrenzte Speicherkapazität der Diskette (1,44 MB) zu kompensieren. So wurden von der Diskette komprimierte Diagnoseprogramme geladen und in der RAM-Disk entpackt und man konnte mit den Werkzeugen schneller arbeiten.

Wann bzw. wozu braucht man eine Initial RAM-Disk?

Die Initial RAM-Disk ist eine dem Kernel übergebenes RAM-Disk Abbild (Image), dass entpackt und in den Speicher geladen wird. Darin befinden sich die Kernelmodule, die für das Einhängen des Root-Dateisystems nötig sind, da darin die restlichen Kernelmodule und vor allem das Programm init liegen. Der Speicher der RAM-Disk wird nach der Abarbeitung eines Boot-Skriptes, das innerhalb der RAM-Disk liegt, wieder freigegeben. Ein Kernel, in dem fast alle Treiber in Module gepackt wurden, kann ohne RAM-Disk also nicht starten. Liegen alle wichtigen Funktionen für das Einhägen bereits im Kernel vor, ist eine Initial RAM-Disk überflüssig.

Was macht debian anders?

Zu diesem Zeitpunkt (Linux 2.6.10) ist es immer noch nicht möglich, mit einem ungepatchten Kernel (vanilla) von kernel.org eine RAM-Disk mit cramfs (Compressed ROMFS) zu starten. Schuld daran sind die Linux Utilities, eine Sammlung von Programmen für das Arbeiten mit dem Kernel, die CRAMFS nicht unterstützen. Deshalb muss auf ein anderes, von den Utils unterstütztes Dateisystem zurück gegriffen werden, z. B. ROMFS (unkomprimiertes CRAMFS). Das gewählte Dateisystem muss fest in den Kernel eingebunden sein, darf also nicht als Modul kompiliert werden, da diese sich auf der RAM-Disk befinden und da die RAM-Disk dann nicht geladen werden kann, beißt sich die Schlange in den Schwanz. ;-)

Debian verwendet speziell gepatchte Kernel, die auch CRAMFS unterstützen und das Skript mkinitrd ist standardmäßig so eingerichtet, dass es CRAMFS-Abbilder erzeugt. Außerdem warnt make-kpkg bei Verwendung der Option --initrd immer vor der CRAMFS-Problematik. Zuerst einmal muss man also die Datei /etc/mkinitrd/mkinitrd.conf editieren:

# /etc/mkinitrd/mkinitrd.conf:
#  Configuration file for mkinitrd(8).  See mkinitrd.conf(5).
#
# This file is meant to be parsed as a shell script.

[...]

# Command to generate the initrd image.
#MKIMAGE='mkcramfs %s %s > /dev/null'
MKIMAGE='genromfs -d %s -f %s'

[...]

Am besten, man lässt den alten Eintrag in der Datei auskommentiert stehen, falls man mal wieder einen debian-Kernel benutzen möchte oder sich an der Unterstützung für CRAMFS etwas ändern sollte.

Damit der obige Eintrag in /etc/mkinitrd/mkinitrd.conf auch funktioniert, muss man allerdings das Paket "genromfs" installieren.

$ apt-cache search genromfs
genromfs - This is the mkfs equivalent for romfs filesystem
# apt-get install genromfs

CRAMFS-Warnung von make-kpkg deaktivieren

Da jedes Mal bei der Ausführung von "make-kpkg --initrd ..." die Warnmeldung wegen CRAMFS erscheint, wir dieses aber gar nicht mehr benutzen, kann man in der Datei /etc/kernel-img.conf diese Warnung deaktivieren:

[...]
warn_initrd = no
[...]

Ein eventuell bestehender Eintrag wie "do_initrd = yes" kann gelöscht werden. Die Option "do_initrd" gibt nicht die richtige Aussage wieder, denn es unterdrückt die Warnung (genau wie warn_initrd) und ist kein Schalter für das Erstellen der RAM-Disk (denn das ist die Option --initrd von make-kpkg). Wegen dieser falschen Aussagekraft wurde die Option do_initrd wohl auch als "veraltet" eingestuft und soll nicht mehr verwendet werden.

« nach oben

Fehlermeldungen an der Systemkonsole beschränken

Die Nachrichten an der Systemkonsole kann man auf zwei Arten eindämmen, wobei die früher von mir beschriebene Variante über die Konfigurationsdatei des klogd heute überholt ist. Die neue Variante ist die Verwendung von sysctl, mit welchem die entprechenden Kernelvariablen gesetzt werden.

In der Datei /etc/sysctl.conf sind Werte für Kernelvariablen angegeben, die dann zur Bootzeit zugewiesen werden. Die für die Meldungen an der Systemkonsole zuständige Variable heißt kernel.printk. Im Folgenden der im Wert bereits angepasste Eintrag:

# Datei /etc/sysctl.conf

# [... weitere Variablen ...]

kernel.printk = 3 4 1 7

Die vier Zahlen heißen im einzelnen:

  1. console_loglevel: Alle Nachrichten, die eine höhere Prirität als hier angegeben haben, werden an der Konsole ausgegeben.
  2. default_message_level: Nachrichten ohne angegebene Priorität bekommen diesen Wert zugewiesen.
  3. minimum_console_loglevel: Der Minimalwert für den Wert von console_loglevel.
  4. default_console_loglevel: Der Defaultwert für den Wert von console_loglevel.

Mit der obigen Einstellung werden Meldungen an der Systemkonsole ausgegeben, die mindestens die Einstufung 4 (= Error) haben. Die Werte aller Stufen sind in syslog(3) aufgelistet (level).

+ Ausgeblendet: Die alte Variante über die Konfigurationsdatei des klogd.
(+) drücken, um diesen Teil einzublenden

Hinweis: Bei dem aktuellen debian release "etch" ist das bereits besser gelöst: Man editiert die klogd-Kommandozeile über die Variable KLOGD in der Datei /etc/default/klogd. Diese Lösung ist dem Editieren des init-Skriptes vorzuziehen, da die Dateien unter /etc/default als Konfigurationsdateien behandelt und bei einem Paket-Upgrade somit nicht überschrieben werden.

Vielleicht ist das Problem bekannt: Man meldet sich an der (Text-)Konsole an und wird sogleich mit irgendwelchen Meldungen, z. B. von der Firewall, überflutet und sieht die eigenen Kommandos nicht mehr. Schuld hieran ist ein zu niedrig eingestellter Loglevel für Systemmeldungen an die Konsole, den man aber zum Glück kontrollieren kann:

$ dmesg -n 3

Der obere Befehl verhindert jetzt, dass Meldungen, die von der Wichtigkeit über 3 (Kritisch, s.u.) sind nicht mehr auf dieser Textkonsole ausgegeben werden. Die Loglevel haben die folgende Bedeutung (mit absteigender Wichtigkeit):

  1. Emergency: Das System ist unbenutzbar
  2. Alert: Es muss sofort etwas unternommen werden
  3. Critical: Kritisch
  4. Error: Fehler
  5. Warning: Warnung
  6. Notice: Normal, aber bedeutsam
  7. Info: Normale Information
  8. Debug: Debug-Nachricht (nur für Entwickler von Interesse)

Da es immer noch zu umständlich ist, diese Einstellung jedes Mal nach dem Anmelden am System vorzunehmen, kann man die Einstellung bereits beim Startvorgang übernehmen. Zuständig für die Logmeldungen ist klogd, der Kernel Log Daemon. Um klogd seine Gesprächigkeit abzugewöhnen, muss der für seinen Start zuständige init-Skript /etc/init.d/klogd angepasst werden:

#! /bin/sh
# /etc/init.d/klogd: start the kernel log daemon.

PATH=/bin:/usr/bin:/sbin:/usr/sbin

pidfile=/var/run/klogd.pid
binpath=/sbin/klogd

test -f $binpath || exit 0

#  Use KLOGD="-k /boot/System.map-$(uname -r)" to specify System.map
#
KLOGD="-c 3 -k /boot/System.map-$(uname -r)"

[...]

Die Variable KLOGD legt die Optionen für den klogd fest. Die Option "-c 3" stellt den Loglevel auf 3 (keine nicht-kritschen Meldungen auf der Konsole ausgeben). Weitere Optionen des klogd gibt es in der Manpage klogd(8).

« nach oben

« zurück (Gesammelte Anleitungen)