Jim Mock Erweitert und neu strukturiert von Jake Hamby Ursprünglich veröffentlicht von Robert Altschaffel Übersetzt von Konfiguration des FreeBSD Kernels Übersicht Kernel Erstellen eines angepassten Kernels Der Kernel ist das Herz des FreeBSD Betriebssystems. Er ist verantwortlich für die Speicherverwaltung, das Durchsetzen von Sicherheitsdirektiven, Netzwerkfähigkeit, Festplattenzugriffen und vieles mehr. Obwohl FreeBSD es immer mehr ermöglicht, dynamisch konfiguriert zu werden, ist es ab und an notwendig, den Kernel neu zu konfigurieren und zu kompilieren. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen: Wieso Sie Ihren Kernel neu konfigurieren sollten. Wie Sie eine Kernelkonfigurationsdatei erstellen oder verändern. Wie Sie mit der Konfigurationsdatei einen neuen Kernel kompilieren. Wie Sie den neuen Kernel installieren. Wie sie die benötigten Einträge in /dev erstellen. Was zu tun ist, falls etwas schiefgeht. Wieso einen eigenen Kernel bauen? Traditionell besaß FreeBSD einen monolithischen Kernel. Das bedeutet, dass der Kernel ein einziges großes Programm war, das eine bestimmte Auswahl an Hardware unterstützte. Also musste man immer, wenn man das Kernelverhalten verändern wollte, zum Beispiel wenn man neue Hardware hinzufügen wollte, einen neuen Kernel kompilieren, installieren und das System neu starten. Heutzutage vertritt FreeBSD immer mehr die Idee eines modularen Kernels, bei dem bestimmte Funktionen, je nach Bedarf, als Module geladen werden können. Ein bekanntes Beispiel dafür sind die Module für die PCMCIA-Karten in Laptops, die zum Starten nicht zwingend benötigt werden, und erst bei Bedarf geladen werden. Diese Module nennt man KLDs (kernel loadable modules). Trotzdem ist es noch immer nötig, einige statische Kernelkonfigurationen durchzuführen. In einigen Fällen ist die Funktion zu systemnah, um durch ein Modul zu realisiert werden. In anderen Fällen hat eventuell noch niemand ein ladbares Kernelmodul für diese Funktion geschrieben. Das Erstellen eines angepaßten Kernels ist eines der wichtigsten Rituale, das nahezu jeder Unix Benutzer erdulden muss. Obwohl dieser Prozess recht viel Zeit in Anspruch nimmt, bringt er doch viele Vorteile für Ihr FreeBSD System. Der GENERIC Kernel muss eine Vielzahl unterschiedlicher Hardware unterstützen, im Gegensatz dazu unterstützt ein angepasster Kernel nur Ihre Hardware. Dies hat einige Vorteile: Schnellerer Bootvorgang. Da der Kernel nach weniger Geräten sucht, ist die Boot-Sequenz weitaus schneller. Geringere Speicherausnutzung. Ein eigener Kernel benötigt in der Regel weniger Speicher als ein GENERIC Kernel, was vorteilhaft ist, da der Kernel immer im RAM verweilt. Insbesondere profitieren Systeme mit wenig RAM davon. Zusätzliche Hardwareunterstützung. Ein angepasster Kernel kann Unterstützung für Geräte wie Soundkarten bieten, die im GENERIC Kernel nicht unterstützt werden. Erstellen und Installation eines angepassten Kernels Kernel Erstellen und Installation Zuerst erläutern wir die Verzeichnisstruktur, in der der Kernel gebaut wird. Die im Folgenden genannten Verzeichnisse sind relativ zu /usr/src/sys angegeben, das Sie auch über /sys erreichen können. Es existieren mehrere Unterverzeichnisse, die bestimmte Teile des Kernels darstellen, aber die für uns wichtigsten sind arch/conf, in dem Sie die Konfigurationsdatei für den angepassten Kernel erstellen werden, und compile, in dem der Kernel gebaut wird. arch kann entweder i386, alpha oder pc98 (eine in Japan beliebte Architektur) sein. Alles in diesen Verzeichnissen ist nur für die jeweilige Architektur relevant, während der Rest des Codes für alle Plattformen, auf die FreeBSD portiert werden kann, gleich ist. Beachten Sie die Verzeichnisstruktur, die jedem unterstützten Gerät, jedem Dateisystem und jeder Option ein eigenes Verzeichnis zuordnet. Falls Sie kein /usr/src/sys Verzeichnis vorfinden, so sind die Kernelquellen nicht installiert. Der einfachste Weg dies nachzuholen, ist /stand/sysinstall als root auszuführen. Dort wählen Sie Configure, dann Distributions, dann src und schließlich sys. Wenn Sie eine Aversion gegen sysinstall haben und eine offizielle FreeBSD CD-ROM besitzen, können Sie die Kernelquellen auch von der Kommandozeile installieren: &prompt.root; mount /cdrom &prompt.root; mkdir -p /usr/src/sys &prompt.root; ln -s /usr/src/sys /sys &prompt.root; cat /cdrom/src/ssys.[a-d]* | tar -xzvf - Als nächstes wechseln sie in das Verzeichnis, in dem die GENERIC Konfigurationsdatei liegt und kopieren diese in eine Datei mit dem Namen, den Sie Ihrem Kernel geben wollen: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; cp GENERIC MYKERNEL Traditionell ist der Name des Kernels immer in Großbuchstaben. Wenn Sie mehrere FreeBSD mit unterschiedlicher Hardware warten, ist es nützlich, wenn Sie Konfigurationsdatei nach dem Hostnamen der Maschinen benennen. Im Beispiel verwenden wir den Namen MYKERNEL. Es ist nicht zu empfehlen die Konfigurationsdatei direkt unterhalb von /usr/src abzuspeichern. Wenn Sie Probleme haben, könnten Sie der Versuchung erliegen, /usr/src einfach zu löschen und wieder von vorne anzufangen. Fünf Sekunden später werden Sie dann feststellen, dass Sie soeben Ihre Kernelkonfigurationsdatei gelöscht haben. Sie sollten die Konfigurationsdatei an anderer Stelle aufheben und in i386 einen Link auf die Datei erstellen. Beispiel: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; mkdir /root/kernels &prompt.root; cp GENERIC /root/kernels/MYKERNEL &prompt.root; ln -s /root/kernels/MYKERNEL Diese und die folgenden Kommandos müssen Sie als root ausführen, da Sie sonst permission denied Fehler erhalten. Jetzt editieren Sie MYKERNEL mit einem Texteditor Ihres Vertrauens. Wenn Sie gerade neu anfangen, ist Ihnen vielleicht nur der vi Editor bekannt, der allerdings zu komplex ist, um hier erklärt zu werden. Er wird aber in vielen Büchern aus der Bibliographie gut erklärt. FreeBSD bietet aber auch einen leichter zu benutzenden Editor, den ee an, den Sie, wenn Sie Anfänger sind, benutzen sollten. Sie können die Kommentare am Anfang der Konfigurationsdatei ändern, um die Änderungen gegenüber GENERIC zu dokumentieren. SunOS Falls Sie schon einmal einen Kernel unter SunOS oder einem anderen BSD kompiliert haben, werden Sie diese Konfigurationsdatei bereits kennen. Wenn Sie mit einem anderen Betriebssystem wie DOS vertraut sind, könnte die GENERIC Konfigurationsdatei Sie verschrecken. In diesen Fall sollten Sie den Beschreibungen im Abschnitt über die Konfigurationsdatei langsam und vorsichtig folgen. Wenn Sie die FreeBSD Quellen synchronisieren, sollten Sie immer /usr/src/UPDATING durchlesen, bevor Sie etwas verändern. Diese Datei enthält alle wichtigen Informationen, die Sie beim Aktualisieren beachten müssen. Da /usr/src/UPDATING immer zu Ihrer Version der FreeBSD Quellen passt, sind die Informationen dort genauer, als in diesem Handbuch. Nun müssen Sie die Kernelquellen kompilieren. Dazu gibt es zwei Verfahren. Welches Verfahren Sie nehmen, hängt davon ab, warum Sie den Kernel neu bauen und welche Version von FreeBSD Sie verwenden. Wenn Sie nur die Kernelquellen installiert haben, benutzen Sie das Verfahren 1. Wenn Sie eine FreeBSD Version vor 4.0 benutzen und nicht auf FreeBSD 4.0 oder höher mit make world migrieren, benutzen Sie Verfahren 1. Wenn Sie einen neuen Kernel bauen wollen, ohne dabei den Quellcode zu aktualisieren, weil Sie vielleicht nur eine neue Option wie IPFIREWALL hinzugefügt haben, können Sie jedes der Verfahren einsetzen. Wenn Sie als Teil eines make world den Kernel aktualisieren, benutzen Sie das Verfahren 2. Verfahren 1. Bau eines Kernels mit der <quote>alten</quote> Methode Generieren Sie die Kernel Quellen mit &man.config.8;. &prompt.root; /usr/sbin/config MYKERNEL Wechseln Sie in das Bauverzeichnis. &prompt.root; cd ../../compile/MYKERNEL Kompilieren Sie den Kernel. &prompt.root; make depend &prompt.root; make Installieren Sie den neuen Kernel. &prompt.root; make install Verfahren 2. Bau eines Kernels mit der <quote>neuen</quote> Methode Wechseln Sie in das usr/src Verzeichnis. &prompt.root; cd /usr/src Kompilieren Sie den Kernel. &prompt.root; make buildkernel KERNCONF=MYKERNEL Installieren Sie den neuen Kernel. &prompt.root; make installkernel KERNCONF=MYKERNEL Mit FreeBSD 4.2 und älteren Versionen müssen Sie KERNCONF durch KERNEL ersetzen. 4.2-STABLE nach dem 2. Februar 2001 erkennt die Option KERNCONF. cvsup anonymous CVS CTM CVS anonymous Wenn Sie die Quellen nicht auf irgendeine Weise aktualisiert haben, das heißt, Sie haben nicht CVSup, CTM oder anoncvs benutzt, dann können Sie die Sequenz config, make depend, make, make install benutzen. kernel.old Der neue Kernel wird nach /kernel kopiert, während der alte Kernel nach /kernel.old verschoben wird. Um den neuen Kernel zu benutzen, sollten Sie die Maschine jetzt rebooten. Falls etwas schief geht, sehen Sie bitte in dem Abschnitt zur Fehlersuche am Ende dieses Kapitels nach. Dort sollten Sie auch unbedingt den Abschnitt lesen, der erklärt, was zu tun ist, wenn der neue Kernel nicht bootet. Wenn Sie neue Geräte, wie Soundkarten, hinzugefügt haben und FreeBSD 4.X oder eine frühere Version benutzen, müssen Sie unter Umständen Gerätedateien in /dev erstellen, bevor Sie die Geräte benutzen können. Weitere Informationen finden Sie in Erstellen von Gerätedateien später in diesem Kapitel. Die Kernelkonfigurationsdatei Kernel LINT LINT Kernel Konfigurationsdatei Das Format der Konfigurationsdatei ist recht einfach. Jede Zeile enthält ein Schlüsselwort und ein oder mehrere Argumente. Eine Zeile, die von einen # eingeleitet wird, gilt als Kommentar und wird ignoriert. Die folgenden Abschnitte beschreiben jedes Schlüsselwort in der Reihenfolge, in der es in GENERIC auftaucht. Manche zusammengehörende Schlüsselwörter werden in einem Abschnitt beschrieben, obwohl Sie über GENERIC verstreut sind. Eine ausführliche Liste aller Optionen mit detaillierten Erklärungen finden Sie in der Konfigurationsdatei LINT, die sich in demselben Verzeichnis wie GENERIC befindet. Wenn Sie sich über den Zweck oder die Notwendigkeit einer Zeile im Unklaren sind, überprüfen Sie bitte diese bitte zuerst in LINT. Zahlen und Hochkommas Bis einschließlich FreeBSD 3.X forderte &man.config.8;, dass jede Zeichenkette, die Zahlen, die wiederum als Text interpretiert werden sollten, enthielt, in der Konfigurationsdatei in doppelte Hochkommas eingeschlossen werden mussten. Im 4.X Zweig, den dieses Buch behandelt, wurde diese Forderung entfernt. Wenn Sie ein System vor dem 4.X Zweig benutzen, finden Sie Beispiele in /usr/src/sys/i386/conf/LINT und /usr/src/sys/i386/conf/GENERIC. Kernel Beispiel Konfigurationsdatei Das folgende Beispiel zeigt eine GENERIC Konfigurationsdatei, die, wo notwendig, zusätzliche Kommentare enthält. Sie sollte der Datei /usr/src/sys/i386/conf/GENERIC auf Ihrem System sehr ähnlich sein. Für detaillierte Informationen über alle möglichen Optionen sehen Sie sich bitte /usr/src/sys/i386/conf/LINT an. # # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # For more information on this file, please read the handbook section on # Kernel Configuration Files: # # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html # # The handbook is also available locally in /usr/share/doc/handbook # if you've installed the doc distribution, otherwise always see the # FreeBSD World Wide Web server (http://www.FreeBSD.ORG/) for the # latest information. # # An exhaustive list of options and more detailed explanations of the # device lines is also present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp $ Die folgenden Schlüsselwörter sind für jeden Kernel, den Sie bauen, zwingend erforderlich: Kernel-Option machine machine i386 Gibt die Architektur der Maschine an und muss entweder i386, alpha oder pc98 sein. Kernel-Option cpu cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU Die vorigen Zeilen geben den Typ der CPU Ihres Systems an. Sie können mehrere CPU Typen angeben, wenn Sie sich zum Beispiel nicht sicher sind, ob Sie I586_CPU oder I686_CPU benutzen sollen. Für einen angepassten Kernel ist es aber am besten, wenn Sie nur die CPU angeben, die sich in der Maschine befindet. Der CPU-Typ wird in den Boot-Meldungen, die Sie sich mit &man.dmesg.8; ansehen können, ausgegeben. Kernel-Option cpu type Die Alpha Architektur besitzt verschiedene CPU-Typen: cpu EV4 cpu EV5 Wenn Sie eine Alpha Maschine benutzen, sollten Sie einen der obigen Typen angeben. Kernel-Option ident ident GENERIC Gibt den Namen Ihres Kernels an. Hier sollten Sie den Namen einsetzen, den Sie Ihrer Konfigurationsdatei gegeben haben. In unserem Beispiel ist das MYKERNEL. Der Wert, den Sie ident zuweisen, wird beim Booten des neuen Kernels ausgegeben. Wenn Sie den Kernel von Ihrem normal verwendeten Kernel unterscheiden wollen, weil Sie zum Beispiel einen Kernel zum Testen bauen, ist es nützlich, hier einen anderen Namen anzugeben. Kernel-Option maxusers maxusers n Die Größe wichtiger Systemtabellen wird von maxusers bestimmt. Der Wert dieser Variablen sollte ungefähr der Anzahl der Benutzer des Systems entsprechen. Ab FreeBSD 4.5 kann das System diesen Wert selbst setzen, wenn Sie in der Konfigurationsdatei den Wert 0 Der verwendete Algorithmus setzt maxuser auf die Speichergröße des Systems. Der minimale Wert beträgt dabei 32, das Maximum ist 384. angeben. Wenn Sie eine frühere Version von FreeBSD einsetzen, oder den Wert selbst bestimmen wollen, sollten Sie maxusers mindestens auf 4 setzen, insbesondere wenn Sie beabsichtigen, das X Window System zu benutzen oder Software zu kompilieren. Der Grund dafür ist, dass der wichtigste Wert, der von maxusers bestimmt wird, die maximale Anzahl an Prozessen ist, die auf 20 + 16 * maxusers gesetzt wird. Wenn Sie also maxusers auf 1 setzen, können gleichzeitig nur 36 Prozesse laufen, von denen ungefähr 18 schon beim Booten des Systems gestartet werden und nochmal etwa 15 Prozesse dazukommen, wenn Sie das X Window System starten. Selbst eine einfache Aufgabe, wie das Lesen einer Manualpage, braucht neun Prozesse zum Filtern, Dekomprimieren und Anschauen. Für die meisten Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044 gleichzeitige Prozesse zur Verfügung stehen.Wenn Sie allerdings den gefürchteten proc table full Fehler, beim Versuch ein Programm zu starten oder auf einem Server mit einer großen Benutzerzahl (wie ftp.FreeBSD.org) sehen, dann sollten Sie den Wert erhöhen und den Kernel neu bauen. maxusers begrenzt nicht die Anzahl der Benutzer, die sich auf Ihrer Maschine anmelden können. Die Variable legt nur die Größe von verschiedenen Tabellen unter Berücksichtigung der Benutzeranzahl auf den System und der Anzahl der Prozesse, die jeder Benutzer laufen lässt, fest. Mit pseudo-device pty 16 können Sie die Anzahl der erlaubten Anmeldungen von entfernten Systemen festlegen. # Floating point support - do not disable. device npx0 at nexus? port IO_NPX irq 13 npx0 ist die Schnittstelle zur Fließkomma-Einheit in FreeBSD. Dies kann entweder ein Coprozessor oder eine mathematische Software-Emulation sein. Die Angabe dieser Option ist verpflichtend. # Pseudo devices - the number indicates how many units to allocate. pseudo-device loop # Network loopback Das TCP/IP Loopback Device. Wenn Sie eine Telnet oder FTP Verbindung zu localhost (a.k.a., 127.0.0.1) aufbauen, erstellen Sie eine Verbindung zu sich selbst durch dieses Pseudo-Device. Die Angabe dieser Option ist verpflichtend. Das Folgende ist mehr oder weniger optional. Mehr Informationen enthalten die Anmerkungen unter oder neben den diskutierten Optionen. #makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols options MATH_EMULATE #Support for x87 emulation Diese Zeile schaltet die Software-Emulation eines mathematischen Coprozessors für den Fall, das Ihre Maschine keinen besitzt (386 oder 486SX), ein. Wenn Sie einen 386 oder 486SX mit dem dazugehörigen Coprozessor (387 oder 487), einen 486DX oder besser (Pentium, Pentium II, etc.) besitzen, können Sie diese Zeile auskommentieren. Die normalen Emulationsroutinen für den Coprozessor in FreeBSD sind nicht sehr genau. Wenn Sie keinen Coprozessor besitzen, sollten Sie hier GPL_MATH_EMULATE einsetzen, um die Unterstützung der GNU Routinen zu aktivieren. Wegen der damit verbundenen Lizenz, ist diese Option in der Voreinstellung nicht aktiviert. options INET #InterNETworking Netzwerkunterstützung. Auch wenn Sie nicht planen, den Rechner mit einem Netzwerk zu verbinden, sollten Sie diese Option aktiviert lassen. Die meisten Programme sind mindestens auf die Loopback Unterstützung (Verbindungen mit sich selbst) angewiesen. Damit ist diese Option im Endeffekt notwendig. options INET6 #IPv6 communications protocols Aktiviert die Unterstützung für das IPv6 Protokoll. options FFS #Berkeley Fast Filesystem options FFS_ROOT #FFS usable as root device [keep this!] Das Dateisystem für Festplatten. Wenn Sie von einer Festplatte booten wollen, lassen Sie diese Option aktiviert. options UFS_DIRHASH #Improve performance on big directories Diese Option steigert die Geschwindigkeit von Plattenzugriffen auf großen Verzeichnissen. Dadurch verbraucht das System etwas mehr Speicher als vorher. Für stark beschäftigte Server oder Arbeitsplatzrechner sollten Sie diese Option aktiviert lassen. Auf kleineren Systemen, bei denen Speicher eine kostbare Ressource darstellt oder Systemen, auf denen die Geschwindigkeit der Plattenzugriffe nicht wichtig ist, wie Firewalls, können Sie diese Option abstellen. options SOFTUPDATES #Enable FFS Soft Updates support Mit dieser Option wird die Unterstützung für Soft Updates, die Plattenzugriffe beschleunigen, in den Kernel eingebunden. In den FreeBSD 4.X Versionen ist diese Option voreingestellt, sie wird aber vielleicht nicht von Ihrem System genutzt. Überprüfen Sie mit &man.mount.8;, ob die Dateisysteme Softupdates benutzen. Wenn nicht, können Sie die Option nachträglich mit &man.tunefs.8; aktivieren. Für neue Dateisysteme können Sie Option beim Anlegen mit &man.newfs.8; aktivieren. options MFS #Memory Filesystem options MD_ROOT #MD is a potential root device Das speicherbasierte Dateisystem. Dies ist eine RAM-Disk, die zum schnellen Zugriff auf temporäre Dateien dient und nützlich ist, wenn Sie über viel Speicher verfügen. Eine MFS-Partition eignet sich sehr gut für das /tmp Verzeichnis, da dort sehr viele Programme temporäre Daten speichern. Um eine MFS RAM-Disk auf /tmp einzurichten, fügen Sie die folgende Zeile in /etc/fstab hinzu: /dev/ad1s2b /tmp mfs rw 0 0 Um das Dateisystem einzuhängen, können Sie nun booten oder rufen das Kommando mount /tmp auf. Kernel-Option NFS Kernel-Option NFS_ROOT options NFS #Network Filesystem options NFS_ROOT #NFS usable as root device, NFS required Das Network Filesystem. Wenn Sie keine Partitionen von einem Unix File-Server über TCP/IP einhängen wollen, können Sie diese Zeile auskommentieren. Kernel-Option MSDOSFS options MSDOSFS #MSDOS Filesystem Das MS-DOS Dateisystem. Sie können diese Zeile auskommentieren, wenn Sie nicht vorhaben, eine DOS-Partition beim Booten einzuhängen. Das nötige Modul wird ansonsten automatisch geladen, wenn Sie das erste mal eine DOS-Partition einhängen. Außerdem können Sie mit den ausgezeichneten mtools aus der Ports-Sammlung auf DOS-Floppies zugreifen, ohne diese an- und abhängen zu müssen (MSDOSFS wird in diesem Fall nicht benötigt). options CD9660 #ISO 9660 Filesystem options CD9660_ROOT #CD-ROM usable as root, CD9660 required Das ISO-9660 Dateisystem für CD-ROMs. Sie können diese Zeile auskommentieren, wenn Sie kein CD-ROM-Laufwerk besitzen oder nur ab und an CDs einhängen. Das Modul wird automatisch geladen, sobald Sie das erste Mal eine CD einhängen. Für Audio-CDs benötigen Sie dieses Dateisystem nicht. options PROCFS #Process filesystem Das Prozeß-Dateisystem. Dies ist ein Pseudo-Dateisystem, das auf /proc eingehangen wird und es Programmen wie &man.ps.1; erlaubt, mehr Informationen über laufende Prozesse auszugeben. options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] Stellt die Kompatibilität zu 4.3BSD sicher. Belassen Sie diese Option, da sich manche Programme recht sonderbar verhalten werden, wenn Sie diese auskommentieren. options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI Dies weist den Kernel an, 15 Sekunden zu warten, bevor er anfängt nach SCSI-Geräten auf dem System zu suchen. Wenn Sie nur IDE-Geräte besitzen, können Sie die Anweisung ignorieren. Sie können versuchen, den Wert auf 5 Sekunden senken, um den Startvorgang zu beschleunigen. Wenn FreeBSD dann Schwierigkeiten hat, Ihre SCSI-Geräte zu erkennen, sollten Sie den Wert natürlich wieder erhöhen. options UCONSOLE #Allow users to grab the console Erlaubt es Benutzern, die Konsolenausgabe umzulenken. Starten Sie einen xterm mit xterm -C, um Ausgaben von &man.write.1;, &man.talk.1; oder Kernelmeldungen auf der Konsole darin zu sehen. options USERCONFIG #boot -c editor Diese Option erlaubt es Ihnen, den Konfigurationseditor aus dem Bootmenü zu starten. options VISUAL_USERCONFIG #visual boot -c editor Diese Option erlaubt es Ihnen, den Visual-Konfigurationseditor aus dem Bootmenü zu starten. Ab FreeBSD 5.0 werden Geräte mit &man.device.hints.5; anstelle des Konfigurationseditors konfiguriert, dies wird in erklärt. options KTRACE #ktrace(1) support Dies schaltet die Kernel-Prozessverfolgung (engl. kernel process tracing) ein, die sehr nützlich bei der Fehlersuche ist. options SYSVSHM #SYSV-style shared memory Diese Option aktiviert die Unterstützung für System V Shared-Memory. Die XSHM-Erweiterung von X benötigt diese Option und viele Graphik-Programme werden die Erweiterung automatisch benutzen und schneller laufen. Wenn Sie X benutzen, sollten Sie diese Option auf jeden Fall aktivieren. options SYSVSEM #SYSV-style semaphores Unterstützung für System V Semaphoren. Dies wird selten gebraucht, vergrößert aber den Kernel nur um einige hundert Bytes. options SYSVMSG #SYSV-style message queues Unterstützung für System V Messages. Vergrößert den Kernel wiederum nur um einige hundert Bytes. Programme, die diese System V Erweiterungen benutzen, können Sie sich mit &man.ipcs.1; anzeigen lassen. options P1003_1B #Posix P1003_1B real-time extensions options _KPOSIX_PRIORITY_SCHEDULING Echtzeit-Erweiterungen, die 1993 zu POSIX hinzugefügt wurden. Bestimmte Programme wie Star Office benutzen diese Erweiterungen. Kernel-Option ICMP_BANDLIM Denial of Service (DoS) options ICMP_BANDLIM #Rate limit bad replies Diese Option aktiviert die ICMP Bandbreitenbegrenzung für Antworten. Diese Option sollten Sie aktiviert lassen, da sie Ihre Maschine vor Denial of Service Angriffen schützt. Kernel-Option SMP # To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O Beide Option werden für SMP Unterstützung benötigt. device isa Alle von FreeBSD unterstützten PCs benötigen diese Zeile. FreeBSD unterstützt den IBM PS/2 (Microchannel Architektur) nur eingeschränkt. Weitere Informationen über die Microchannel Unterstützung entnehmen Sie bitte /usr/src/sys/i386/conf/LINT. device eisa Fügen Sie diese Zeile ein, wenn Sie ein EISA-Motherboard besitzen. Dies aktiviert die Erkennung und Konfiguration von allen Geräten auf dem EISA Bus. device pci Wenn Sie ein PCI-Motherboard besitzen, fügen Sie diese Zeile ein. Dies aktiviert die Erkennung von PCI-Karten und die PCI-ISA bridge. # Floppy drives device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1 Der Floppy-Controller. fd0 ist das A: Laufwerk und fd1 ist das B: Laufwerk. device ata Dieser Treiber unterstützt alle ATA und ATAPI Geräte. Eine device ata Zeile reicht aus und der Kernel wird auf modernen Maschinen alle PCI ATA/ATAPI Geräte entdecken. device atadisk # ATA disk drives Für ATA Plattenlaufwerke brauchen Sie diese Zeile zusammen mit device ata. device atapicd # ATAPI CDROM drives Zusammen mit device ata wird dies für ATAPI CD-ROM Laufwerke benötigt. device atapifd # ATAPI floppy drives Zusammen mit device ata wird dies für ATAPI Floppy Laufwerke benötigt. device atapist # ATAPI tape drives Zusammen mit device ata wird dies für ATAPI Bandlaufwerke benötigt. options ATA_STATIC_ID #Static device numbering Erzwingt wie der alte Treiber eine statische Gerätenummer für den Controller. Ist diese Option nicht aktiviert, werden die Gerätenummern dynamisch zugeordnet. # ATA and ATAPI devices device ata0 at isa? port IO_WD1 irq 14 device ata1 at isa? port IO_WD2 irq 15 Benutzen Sie die obigen Zeilen für ältere Systeme ohne einen PCI Bus. # SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices device amd # AMD 53C974 (Teckram DC-390(T)) device dpt # DPT Smartcache - See LINT for options! device isp # Qlogic family device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets) device adv0 at isa? device adw device bt0 at isa? device aha0 at isa? device aic0 at isa? SCSI Controller. Kommentieren Sie alle Controller aus, die sich nicht in Ihrem System befinden. Wenn Sie ein IDE-System besitzen, können Sie alle Einträge entfernen. # SCSI peripherals device scbus # SCSI bus (required) device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) SCSI Peripheriegeräte. Kommentieren Sie wieder alle Geräte aus, die Sie nicht besitzen. Besitzer von IDE-Systemen können alle Einträge entfernen. # RAID controllers device ida # Compaq Smart RAID device amr # AMI MegaRAID device mlx # Mylex DAC960 family Unterstützte RAID Controller. Wenn Sie keinen der aufgeführten Controller besitzen, kommentieren Sie die Einträge aus oder entfernen sie. # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD Der Tastatur-Controller (atkbdc) ist für die Ein- und Ausgabe von AT-Tastaturen und PS/2 Zeigegeräten (z.B. einer Maus) verantwortlich. Dieser Controller wird vom Tastaturtreiber (atkbd) und dem PS/2 Gerätetreiber (psm) benötigt. device atkbd0 at atkbdc? irq 1 Zusammen mit dem atkbdc Controller bietet der atkbd Treiber Zugriff auf AT-Tastaturen. device psm0 at atkbdc? irq 12 Benutzen Sie dieses Gerät, wenn Sie eine Maus mit PS/2 Anschluss besitzen. device vga0 at isa? Der Grafikkartentreiber. # splash screen/screen saver pseudo-device splash Zeigt einen Splash Screen beim Booten. Diese Zeile wird auch von den Bildschirmschonern benötigt. # syscons is the default console driver, resembling an SCO console device sc0 at isa? sc0 ist in der Voreinstellung der Treiber für die Konsole, die der SCO-Konsole ähnelt. Da die meisten bildschirmorientierten Programme auf die Konsole mit Hilfe einer Datenbank wie termcap zugreifen, sollte es keine Rolle spielen, ob Sie diesen Treiber oder vt0, den VT220 kompatiblen Konsolentreiber einsetzen. Wenn Sie Probleme mit bildschirmorientierten Anwendungen unter dieser Konsole haben, setzen Sie beim Anmelden die Variable TERM auf den Wert VT220. # Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver #device vt0 at isa? #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor # If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines #options PCVT_SCANSET=2 # IBM keyboards are non-std Der VT220 kompatible Konsolentreiber ist kompatibel zu VT100/102. Auf einigen Laptops, die aufgrund der Hardware inkompatibel zum sc0 Treiber sind, funktioniert dieser Treiber gut. Beim Anmelden sollten Sie die Variable TERM auf den Wert vt100 setzen. Dieser Treiber kann sich als nützlich erweisen, wenn Sie sich über das Netzwerk auf vielen verschiedenen Maschinen anmelden, da dort oft Einträge in termcap oder terminfo für das sc0 Gerät fehlen. Dagegen sollte vt100 auf jeder Plattform unterstützt werden. # Power management support (see LINT for more options) device apm0 at nexus? disable flags 0x20 # Advanced Power Management Unterstützung zur Energieverwaltung. Nützlich für Laptops. # PCCARD (PCMCIA) support device card device pcic0 at isa? irq 10 port 0x3e0 iomem 0xd0000 device pcic1 at isa? irq 11 port 0x3e2 iomem 0xd4000 disable PCMCIA Unterstützung. Wenn Sie einen Laptop benutzen, brauchen Sie diese Zeile. # Serial (COM) ports device sio0 at isa? port IO_COM1 flags 0x10 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9 Es gibt vier serielle Schnittstellen, die in der MS-DOS/Windows Welt COM1 bis COM4 genannt werden. Wenn Sie ein internes Modem, das COM4 benutzt, besitzen und eine serielle Schnittstelle haben, die auf COM2 liegt, müssen Sie den IRQ des Modems auf 2 setzen (wegen undurchsichtigen technischen Gründen ist IRQ2 =IRQ9). Wenn Sie eine serielle Multiport-Karte besitzen, sehen Sie die korrekten Werte für diese Zeilen in &man.sio.4; nach. Einige Graphikkarten, besonders die auf S3-Chips basierten, benutzen IO-Adressen der Form 0x*2e8 und manche billige serielle Karten dekodieren den 16-Bit IO-Adressraum nicht sauber. Dies führt zu Konflikten und blockiert dann die COM4 Schnittstelle. Jeder seriellen Schnittstelle muss ein eigener IRQ zugewiesen werden (wenn Sie eine Multiport-Karte verwenden, bei der das Teilen von Interrupts unterstützt wird, muss das nicht der Fall sein), daher können in der Voreinstellung COM3 und COM4 nicht benutzt werden. # Parallel port device ppc0 at isa? irq 7 Die parallele Schnittstelle auf dem ISA Bus. device ppbus # Parallel port bus (required) Unterstützung für den Bus auf der parallelen Schnittstelle. device lpt # Printer Unterstützung für Drucker über die parallele Schnittstelle. Sie brauchen jede der drei Zeilen, um die Unterstützung für einen Drucker an der parallelen Schnittstelle zu aktivieren. device plip # TCP/IP over parallel Der Treiber für das Netzwerkinterface über die parallele Schnittstelle. device ppi # Parallel port interface device Allgemeine I/O (geek port) und IEEE1284 I/O Unterstützung. #device vpo # Requires scbus and da Zip Laufwerk Dies aktiviert den Treiber für ein Iomega Zip Laufwerk. Zusätzlich benötigen Sie noch die Unterstützung für scbus und da. Die beste Performance erzielen Sie, wenn Sie die Schnittstelle im EPP 1.9 Modus betreiben. # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (Tulip) device fxp # Intel EtherExpress PRO/100B (82557, 82558) device tx # SMC 9432TX (83c170 EPIC) device vx # 3Com 3c590, 3c595 (Vortex) device wx # Intel Gigabit Ethernet Card (Wiseman) Verschiedene Treiber für PCI-Netzwerkkarten. Geräte, die sich nicht in Ihrem System befinden, können Sie entfernen oder auskommentieren. # PCI Ethernet NICs that use the common MII bus controller code. device miibus # MII bus support Einige PCI 10/100 Ethernet Netzwerkkarten, besonders die, die MII-fähige Transceiver verwenden oder Transceiver-Steuerungen implementieren, die ähnlich wie MII funktionieren, benötigen die Unterstützung für den MII-Bus. Die Zeile device miibus fügt dem Kernel die Unterstützung für das allgemeine miibus API und allen PHY-Treibern hinzu. device dc # DEC/Intel 21143 and various workalikes device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (Starfire) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device ste # Sundance ST201 (D-Link DFE-550TX) device tl # Texas Instruments ThunderLAN device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (Boomerang, Cyclone) Treiber, die den MII Bus Controller Code benutzen. # ISA Ethernet NICs. device ed0 at isa? port 0x280 irq 10 iomem 0xd8000 device ex device ep # WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really # exists only as a PCMCIA device, so there is no ISA attachment needed # and resources will always be dynamically assigned by the pccard code. device wi # Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will # work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP # mode (the factory default). If you set the switches on your ISA # card for a manually chosen I/O address and IRQ, you must specify # those parameters here. device an # The probe order of these is presently determined by i386/isa/isa_compat.c. device ie0 at isa? port 0x300 irq 10 iomem 0xd0000 device fe0 at isa? port 0x300 device le0 at isa? port 0x300 irq 5 iomem 0xd0000 device lnc0 at isa? port 0x280 irq 10 drq 0 device cs0 at isa? port 0x300 device sn0 at isa? port 0x300 irq 10 # requires PCCARD (PCMCIA) support to be activated #device xe0 at isa? Treiber für ISA Ethernet Karten. Schauen Sie in /usr/src/sys/i386/conf/LINT nach, um zu sehen, welche Karte von welchem Treiber unterstützt wird. pseudo-device ether # Ethernet support ether brauchen Sie nur, wenn Sie eine Ethernet-Karte besitzen. Der Treiber unterstützt das Ethernet-Protokoll. pseudo-device sl 1 # Kernel SLIP sl aktiviert die SLIP Unterstützung. SLIP ist fast vollständig von PPP verdrängt worden, da letzteres leichter zu konfigurieren, besser geeignet für Modem zu Modem Kommunikation und mächtiger ist. Die Zahl hinter sl gibt der Anzahl der gleichzeitigen SLIP-Verbindungen an, die unterstützt werden. pseudo-device ppp 1 # Kernel PPP Dies ist Kernel Unterstützung für PPP Wählverbindungen. Es existiert auch eine PPP Version im Userland, die den tun Treiber benutzt. Die Userland Version ist flexibler und bietet mehr Option wie die Auswahl auf Anforderung. Die Zahl hinter ppp gibt die Anzahl gleichzeitiger PPP Verbindungen an, die unterstützt werden. pseudo-device tun # Packet tunnel. Dies wird vom der Userland PPP benutzt. Die Zahl hinter tun gibt die Anzahl der unterstützten gleichzeitigen Verbindungen an. Weitere Informationen erhalten Sie im Abschnitt PPP dieses Handbuchs. pseudo-device pty # Pseudo-ttys (telnet etc) Dies ist ein Pseudo-Terminal oder simulierter Login-Terminal. Er wird von einkommenden telnet und rlogin Verbindungen, xterm und anderen Anwendungen wie Emacs benutzt. Eine Zahl hinter pty gibt die Anzahl der zu erstellenden ptys an. Wenn Sie mehr Verbindungen als die 16 erlaubten in der Voreinstellung brauchen, erhöhen Sie diesen Wert bis zu einem Maximum von 256. pseudo-device md # Memory disks Pseudo-Gerät für Speicher-Laufwerke. pseudo-device gif oder pseudo-device gif 4 # IPv6 and IPv4 tunneling Dieses Gerät tunnelt IPv6 über IPv4, IPv4 über IPv6, IPv4 über IPv4 oder IPv6 über IPv6. Ab FreeBSD 4.4 kann die Anzahl der benötigten Geräte vom System bestimmt werden, so dass Sie die erste Zeile (ohne eine Zahl hinter gif) verwenden sollten. Auf früheren Systemen ist die Angabe der Anzahl der Geräte verpflichtend. pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation) Dieses Pseudo-Gerät fängt zu ihm gesendete Pakete ab und leitet Sie zu einem Dæmon weiter, der Verkehr zwischen IPv4 und IPv6 vermittelt. # The `bpf' pseudo-device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! pseudo-device bpf # Berkeley packet filter Das ist der Berkeley Paketfilter. Dieses Pseudo-Gerät kann Netzwerkkarten in den promiscuous Modus setzen und erlaubt es damit, Pakete auf einem Broadcast Netzwerk (z.B. einem Ethernet) einzufangen. Die Pakete können auf der Festplatte gespeichert und mit &man.tcpdump.1; untersucht werden. Das bpf Pseudo-Gerät wird von &man.dhclient.8; genutzt, um die IP-Adresse des Default-Routers zu bekommen. Wenn Sie DHCP benutzen, lassen Sie diese Option bitte aktiviert. # USB support #device uhci # UHCI PCI->USB interface #device ohci # OHCI PCI->USB interface #device usb # USB Bus (required) #device ugen # Generic #device uhid # Human Interface Devices #device ukbd # Keyboard #device ulpt # Printer #device umass # Disks/Mass storage - Requires scbus and da #device ums # Mouse # USB Ethernet, requires mii #device aue # ADMtek USB ethernet #device cue # CATC USB ethernet #device kue # Kawasaki LSI USB ethernet Unterstützung für verschiedene USB Geräte. Mehr Informationen und weitere von FreeBSD unterstützte Geräte entnehmen Sie bitte /usr/src/sys/i386/conf/LINT. Gerätedateien erstellen Gerätedatei MAKEDEV Ab FreeBSD 5.0 werden die Gerätedateien automatisch von &man.devfs.5; erzeugt. Überspringen Sie diesen Abschnitt, wenn Sie FreeBSD 5.0 oder eine neuere Version benutzen. Zu fast jedem Gerät gehört eine Datei in /dev, die zwar wie eine reguläre Datei aussieht, tatsächlich aber eine Schnittstelle zum Kernel ist, die Programme benutzen, um Zugriff auf das Gerät zu erlangen. Das Shellskript /dev/MAKEDEV, das auch bei der Installation des Systems ausgeführt wird, erstellt fast alle unterstützten Gerätedateien. Es legt aber nicht alle Gerätedateien an, das heißt, wenn Sie im Kernel Unterstützung für ein neues Gerät hinzugefügt haben, sollten Sie überprüfen, ob die entsprechenden Einträge in dev vorhanden sind. Wenn nicht, dann legen Sie sie, wie im folgenden Beispiel einfach an. Angenommen, Sie wollen den Kernel um Unterstützung für IDE-CD-ROMs erweitern. Dann müssen Sie folgende Zeile in der Konfigurationsdatei einfügen: device acd0 Nun suchen Sie in /dev nach Dateien, die mit acd0 beginnen, möglicherweise mit c enden oder ein r vorgestellt haben (der Eintrag für das rohe Gerät). Wenn Sie die Einträge nicht finden, wechseln Sie in /dev und führen dort das folgende Kommando aus: MAKEDEV &prompt.root; sh MAKEDEV acd0 Nun sollten die Einträge acd0c und racd0c in /dev vorhanden sein. Das folgende Kommando legt die passenden Einträge für Soundkarten an: &prompt.root; sh MAKEDEV snd0 Wenn Sie Gerätedateien für Geräte wie Soundkarten erstellen und andere Leute Zugriff auf Ihren Rechner haben, wollen Sie vielleicht diese Geräte vor Zugriffen von außen schützen. Sie erreichen dies, in dem Sie das Gerät in /etc/fbtab aufnehmen. Weitere Informationen stellt &man.fbtab.5; zur Verfügung. Folgen Sie dieser Prozedur für alle Geräte, die nicht in GENERIC eingetragen sind. Da alle SCSI Controller die gleichen Einträge in /dev benutzen, brauchen Sie diese nicht erstellen. Weiterhin haben Netzwerkkarten sowie SLIP/PPP-Pseudo-Geräte keine Einträge in /dev. Wenn etwas schiefgeht Es gibt fünf Hauptfehlerquellen beim Erstellen eines angepassten Kernels: config verursacht Fehler: Wenn &man.config.8; misslingt, liegen Fehler in der Kernelkonfigurationsdatei vor. Zum Glück gibt &man.config.8; die die Zeilennummer der Fehlerstelle an, so dass Sie diese schnell in vi finden können. Beispielsweise könnten Sie folgende Fehlermeldung sehen: config: line 17: syntax error Im Befehlsmodus von vi können Sie sofort zur fraglichen Stelle springen, in dem Sie 17G eingeben. Überprüfen Sie dort durch Vergleichen mit GENERIC, ob das Schlüsselwort richtig geschrieben ist. make verursacht Fehler: Wenn make misslingt, liegen meistens ebenfalls Fehler in der Konfigurationsdatei vor, die aber so speziell sind, dass &man.config.8; sie nicht findet. Überprüfen Sie wiederum Ihre Konfiguration und wenn Sie keinen Fehler entdecken können, schicken Sie eine Mail mit Ihrer Kernelkonfiguration an die Mailingliste &a.de.questions;. Sie sollten dann schnell Hilfe erhalten. Der neue Kernel lässt sich nicht installieren: Wenn das Übersetzen des Kernels geklappt hat aber die Installation nicht, weil make install oder make installkernel fehlgeschlagen ist, sollten Sie zuerst überprüfen, ob Ihr System in der Sicherheitsstufe 1 (engl. secure level) läuft (siehe &man.init.8;). Ihr alter Kernel ist durch die Immutable Option vor Veränderungen geschützt und die Installationsprozedur versucht, diese Option vom alten Kernel zu entfernen und auf den neuen Kernel zu setzen. Da in der Sicherheitsstufe 1 die Immutable Option nicht gesetzt werden kann, muss die Installation des Kernels in der Sicherheitsstufe 0 oder einer niedrigeren stattfinden. Der Kernel bootet nicht: Wenn der Kernel nicht booten will, ist das noch lange kein Grund zur Panik. Denn FreeBSD besitzt exzellente Mechanismen zur Wiederherstellung nach dem Einsatz inkompatibler Kernel. Den Kernel, mit dem Sie booten wollen, können Sie sich im FreeBSD Boot Loader aussuchen. In den Loader gelangen Sie, in dem Sie einfach eine Taste außer Enter drücken, wenn das System von 10 herunterzählt. Geben Sie dann unload ein und mit boot kernel.old booten Sie den alten Kernel. Sie können hier natürlich auch den Dateinamen eines anderen Kernels, der sauber bootet angeben. Für alle Fälle sollten Sie immer einen Kernel, der garantiert bootet, bereit halten. Nun können Sie die Konfiguration noch einmal überprüfen und den Kernel neu kompilieren. Dazu ist /var/log/messages sehr nützlich, da hier sämtliche Kernelmeldungen von jedem erfolgreichen Bootvorgang gespeichert werden. &man.dmesg.8; gibt Ihnen die Kernelmeldungen vom letzten Bootvorgang aus. Heben Sie sich immer einen GENERIC oder einen anderen Kernel, der garantiert bootet, für den Fall, dass Sie Probleme bei dem Bau des Kernels bekommen, auf. Der Name dieses Kernels sollte so gewählt sein, dass er beim nächsten Bau nicht überschrieben wird. Sie können sich nicht auf kernel.old verlassen, da dieser Kernel durch den zuletzt installierten Kernel, der vielleicht schon kaputt war, ersetzt wird, wenn Sie installieren. Kopieren Sie einen laufenden Kernel so schnell wie möglich an die richtige Stelle (/kernel), oder Kommandos wie &man.ps.1; werden nicht richtig funktionieren. Um einen anderen Kernel an die richtige Stelle zu schieben, müssen Sie zuerst die Immutable Option von dem Kernel entfernen, den make installiert hat: &prompt.root; chflags noschg /kernel Wenn Sie den Befehl nicht ausführen können, befinden Sie sich in einer höheren Sicherheitsstufe als 0. Setzen Sie in /etc/rc.conf die Variable kern_securelevel auf -1 und booten Sie danach. Wenn der neue Kernel funktioniert, können Sie die Variable wieder auf Ihren alten Wert zurücksetzen. Wenn Sie den neuen Kernel, oder allgemein eine Datei, mit der Immutable Option versehen wollen, um sie vor Veränderungen zu schützen, führen Sie folgenden Befehl aus: &prompt.root; chflags schg /kernel Der Kernel ist in Ordnung, aber ps geht nicht mehr: Wenn Sie eine andere Version des Kernels installiert haben als die, mit der Ihre Systemwerkzeuge gebaut wurden (beispielsweise einen 4.X Kernel auf einem 3.X System), werden Programme wie &man.ps.1; und &man.vmstat.8; nicht mehr funktionieren. Sie müssen nun die libkvm und die entsprechenden Programme neu kompilieren. Das ist ein Grund dafür, warum man nie einen Kernel, der nicht zur Systemversion passt, benutzten sollte.