Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Einleitung
1 Was ist Ubuntu?
2 Die Versionen im Detail
3 Die Shell
4 Migration und Synchronisation
5 Die Installation
6 Erste Schritte
7 Ubuntu mobil
8 Derivate
9 Internet und E-Mail
10 Office
11 Grafik und Bildbearbeitung
12 Multimedia und Spiele
13 Programmierung und Design
14 Hardware-Konfiguration
15 Software- und Paketverwaltung
16 Architektur
17 Backup und Sicherheit
18 Server-Installation
19 Datei- und FTP-Server
20 Weitere Server-Dienste
21 Kontrolle und Monitoring
22 Desktop-Virtualisierung
23 Server-Virtualisierung mit KVM
24 Server-Virtualisierung mit Xen
25 Hilfe
26 Befehlsreferenz Ubuntu Linux
A Übersicht: Software für (K)Ubuntu
B Mark Shuttleworth
C Glossar
D Häufig gestellte Fragen
Stichwort
Download: - ZIP, ca. 36,6 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / Ubuntu | vor >>
Ubuntu GNU/Linux von Marcus Fischer Das umfassende Handbuch, aktuell zu Ubuntu 9.04 - Jaunty Jackalope
Ubuntu GNU/Linux 4., aktualisierte und erweiterte Auflage, geb. 1.120 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1439-1 |
| 16 Architektur
|  | 16.1 Betriebssysteme
|  | 16.2 Details des Boot-Vorgangs
|  | 16.3 GRUB
|  |  | 16.3.1 Reguläre Installation
|  |  | 16.3.2 Wiederherstellung
|  | 16.4 Start- und Stoppskripte
|  | 16.5 Dienste
|  | 16.6 Initialisierung
|  |  | 16.6.1 Runlevel
|  |  | 16.6.2 init
|  |  | 16.6.3 Upstart
|  | 16.7 Den Startvorgang beschleunigen
|  |  | 16.7.1 Das Boot-Menü schneller ausblenden
|  |  | 16.7.2 Boot-Skripte parallel ausführen
|  |  | 16.7.3 Eigenes Boot-Profil erstellen
|  |  | 16.7.4 Nicht benötigte Dienste und Startprogramme deaktivieren
|  | 16.8 Dateisystem
|  |  | 16.8.1 Datenträger
|  |  | 16.8.2 Die fstab
|  |  | 16.8.3 Swap
|  |  | 16.8.4 Der Verzeichnisbaum
|  |  | 16.8.5 Beschädigte Dateisysteme reparieren
|  | 16.9 Kernel und Module
|  |  | 16.9.1 Kernel-Historie
|  |  | 16.9.2 Module
|  |  | 16.9.3 Einen eigenen Kernel bauen
## 16.9 Kernel und Module Der wichtigste Baustein eines Betriebssystems ist der Kernel. Dieser Kernel heißt Linux, die meisten anderen Bestandteile des Betriebssystems stammen aus GNU-Projekten. Deswegen ist die Bezeichnung »Linux« für dieses Betriebssystem streng genommen falsch; man müsste korrekterweise von einem GNU/Linux-System sprechen. Der Kernel eines Betriebssystems ist sein grundlegender Kern. Er steuert elementare Aufgaben wie die Speicher- und Prozessverwaltung. Eine andere grundlegende Aufgabe, die dem Kernel obliegt, ist die Steuerung der Hardware. Für einige spezielle Hardware-Komponenten kann es nötig sein, sich seinen eigenen Kernel zu »bauen« (kompilieren). Der Linux-Kernel hat mittlerweile einen Umfang von mehreren Millionen Zeilen Code erreicht. #### GNU und Linux Linux, also der Kernel, stellt dementsprechend für sich allein kein funktionierendes Betriebssystem dar. Erst die Kombination mit den Programmen aus der GNU-Welt macht dieses System zu einem runden Ganzen. Den Kernel von Linux können Sie sich kostenlos von der Webseite www.kernel.org herunterladen. Auch Microsoft Windows hat einen Kernel. Im Gegensatz zu Linux ist dieser aber nicht frei, geschweige denn offen. Der Windows-Kernel wird, wie der gesamte Quellcode von Windows, gehütet wie ein Staatsgeheimnis. Im Gegensatz zu Linux, wo jeder Benutzer eingeladen ist, Sicherheitslücken zu suchen, werden diese Lücken bei Windows versteckt. Diese Offenheit von Linux führt allerdings prinzipbedingt zu einem sichereren System. Die Hauptaufgaben des Kernels sind: Schnittstelle Der Kernel bildet die Schnittstelle zur Hardware, z. B. Geräte, Speicher und Prozessor(en). Prozessverwaltung Sie gewährleistet das problemlose (unter anderem auch parallele) Laufen verschiedener Applikationen. Im Rahmen der Prozessverwaltung eines Betriebssystems dient der »Dispatcher« dazu, bei einem Prozesswechsel dem derzeit aktiven Prozess die CPU zu entziehen und anschließend dem Prozessor den nächsten Prozess zuzuteilen. Die Entscheidung, welcher Prozess der nächste ist, wird vom »Scheduler« im Rahmen der Warteschlangenorganisation getroffen. Werden auf einem Computer mehrere Prozesse gleichzeitig ausgeführt, so muss das Betriebssystem durch den »Scheduler« die vorhandenen Ressourcen auf die verschiedenen Prozesse aufteilen. Dieses Verhalten ist typisch für ein Multitasking-System. Hauptspeicherverwaltung Die Speicherverwaltung ist derjenige Teil des Kernels, der einen effizienten und komfortablen Zugriff auf den physikalischen Arbeitsspeicher eines Computers ermöglicht. Je nach Einsatzbereich des Computers werden unterschiedliche Speicherverwaltungsmechanismen verwendet. Bei UNIX-artigen Systemen wird der Speicher in zwei getrennten Bereichen verwaltet. Anwendungen benutzen den Userspace, während der Kernel selbst und einige Treiber den Kernelspace nutzen. Diese Trennung hat sicherheitsrelevante Gründe, damit potenzielle Fehler in Anwendungen oder auch Viren keinen Zugriff auf den Kernelspace haben und damit die Stabilität des Grundsystems nicht gefährden können. Der\ Kernel steuert nicht nur den Zugriff auf den physikalischen Teil des Speichers, denn dies hätte den Nachteil, dass die aktiven Prozesse selbst niemals mehr Speicherplatz belegen dürften, als physikalisch zur Verfügung steht. Um dieses durch immer komplexere Programme entstandene Problem zu lösen, wurde das Prinzip der »virtuellen Speicherverwaltung« entwickelt. Dabei verwenden Prozesse nur noch virtuelle und keine physikalischen Adressen mehr. Die Umsetzung der virtuellen Adresse in eine physikalische Adresse übernimmt die »Memory Management Unit«. Die virtuelle Speicherverwaltung ist heute in beinahe jedem modernen Betriebssystem (u. a. in UNIX) verwirklicht. Dateiverwaltung Im Dateisystem sind die externen Daten eines Computers in Form von Dateien gespeichert. Das Dateisystem selbst ist ein Ordnungs- und Zugriffssystem für diese Daten. Zugriffsroutinen für Dateisysteme sind ebenfalls Bestandteil des Kernels. Dies soll mit dem Begriff »Dateiverwaltung« beschrieben werden. Die Leistungsfähigkeit von UNIX hängt im Wesentlichen von der Implementierung dieser grundlegenden Funktionen ab. An diesem Beispiel kann man erkennen, wie wichtig es manchmal sein kann, sich seinen eigenen Kernel zu kompilieren.
Verschiedene Kernel
Wenn alle diese eben beschriebenen Funktionen im Kernel selbst vorhanden sind, spricht man von einem »monolithischen Kernel«. Bei einem »Mikro-Kernel« finden wesentliche Teile in getrennten Prozessen statt. Daneben bzw. zwischen den beiden liegend gibt es noch den sogenannten »Makro-Kernel«. Er stellt einen Kompromiss zwischen den beiden anderen Kernel-Arten dar und vereint deren Vorteile. Ein »Makro-Kernel« ist nicht so fehleranfällig wie ein »monolithischer Kernel« und schneller als ein »Mikrokernel«.
Stets außerhalb des Kernels laufen die Anwenderprozesse, die sich der vom Kernel angebotenen Funktionen bedienen, um mit der Maschine zu kommunizieren. #### Kernel für Entwickler Wenn man sich detaillierter mit Kerneln beschäftigt, dann stolpert man zuerst über die Bezeichnung durch Versionsnummern. Wie allgemein in der Programmiererwelt üblich, bezeichnen ungerade Versionsnummern (2.1.x, 2.3.x, ...) die teilweise noch instabilen Entwicklerversionen. Mit geraden Versionsnummern hingegen werden die stabilen Anwender-Kernel bezeichnet (2.2.x, 2.4.x, ...). Normalerweise haben Sie als Einsteiger auf diesem Gebiet nichts mit den ungeraden Kerneln zu tun. In der aktuellen Ubuntu-Version befindet sich z. B. der Kernel 2.6.x, also zum Glück eine gerade und damit sehr stabile Kernel-Version. Lassen Sie sich zu Beginn bitte nicht von dem Zahlenspiel verwirren; unter Linux hat fast jedes Programm eine Versionsnummer. Es ist hierbei meistens nicht nötig, den aktuellsten Updates hinterherzulaufen, wenn diese nicht gerade Sicherheitsupdates implementieren. Die Ubuntu-Version »Hardy Heron« besitzt den Kernel 2.6.24. Sie können die aktuelle Versionsnummer Ihres Kernels erfahren, wenn Sie in der Konsole uname -r eintippen. ### 16.9.1 Kernel-Historie Wie gesagt bezeichnet man als Linux eigentlich nur den Kern des Betriebssystems. Wenn jemand davon spricht, dass er Linux 2.6 benutzt, dann meint er, dass er ein Betriebssystem mit dem (Linux-)Kernel 2.6 verwendet. Man findet auch oft Aussagen wie »Ich benutze Linux 10.1«. Hier verwechselt der Betreffende die Versionsnummer von Linux mit der von SUSE und outet sich somit als SUSE-Nutzer. Solche Aussagen begegnen einem oft im deutschsprachigen Raum, da hier SUSE die meistverbreitete Distribution ist. Ich möchte im Folgenden eine kurze Darstellung der Geschichte von Linux geben. Hierbei orientiere ich mich an den Kernel-Veröffentlichungen. 1991 Als erster genauer Termin für die erstmalige Erwähnung des neuen Betriebssystems steht der 3. Juli 1991 fest. Linus Torvalds implementiert einige Gerätetreiber sowie den Festplattentreiber und einige User-Level-Funktionen. Linus veröffentlicht am 17. September 1991 die Version 0.01 des Kernels mit einem bescheidenen Umfang von 10.239 Zeilen Code für einige Interessenten aus dem Usenet. Dieses Datum wird oftmals als die Geburtsstunde von Linux angesehen. 2008 wurde Linux somit 17 Jahre alt. Herzlichen Glückwunsch! Die erste »offizielle« Version des Linux-Kernels (0.02) erscheint am 05. Oktober 1991. Mit dieser Version laufen bereits die bash, gcc, gnu-make, gnu-sed und compress. Am 19. Dezember 1991 läuft die erste Version (0.11), die ohne die Hilfe eines anderen Betriebssystems lauffähig ist, allerdings ohne grafische Oberfläche. Es gibt keinen SCSI-Support, sodass eine AT-Bus-Festplatte Voraussetzung ist. 1992 Bereits am 5. Januar kommt die erste Version (0.12) heraus, die mehr Funktionen hat als unbedingt benötigt werden. Mit dieser Version wird der Kernel unter die GPL gestellt. Die ältere Lizenz, unter der der Kernel steht, ist in vielen Punkten deutlich strenger. Linus Torvalds verteilt diese Version per Anonymous-FTP im Internet, was zu einem sprunghaften Anstieg der Testerzahl führt. Da dieser Anstieg so groß wird, dass die nötige Kommunikation nicht mehr per E-Mail zu bewältigen ist, wird im Usenet die Gruppe alt.os.linux geschaffen. Das Interesse an Linux wächst stetig und wird von Linus Torvalds koordiniert. Um die Entwicklung voranzutreiben, erhöht Linus Torvalds im März 1992 die Entwicklungsnummer auf Version 0.95. Die im April folgende Version 0.96 ist die erste Version, mit der es möglich ist, das X-Window-System zu betreiben. Man schätzt die Zahl der Anwender auf circa 1000. 1993 Die Zahl aller Programmierer steigt auf circa 100. Fünf von ihnen arbeiten mit Torvalds zusammen. Die Anwenderzahl beläuft sich auf etwa 20.000. Durch Anpassung des Linux-Kernels an die GNU-Umgebung der Free Software Foundation (FSF) wachsen die Möglichkeiten von Linux erneut stark an, da man nun auf eine große Sammlung an vorhandener Software und Tools zurückgreifen kann. 1994 Mit der ersten stabilen Linux-Version (1.00) im März 1994 wird der Kernel netzwerkfähig, und die Zahl der Anwender steigt auf 100.000 an. Gleichzeitig wächst der Kernel auf eine Größe von 176.250 Zeilen Code. Linus Torvalds stellt nun den Quelltext desLinux-Kernels offiziell unter die GPL. Ein weiterer wichtiger Schritt ist die Adaption eines Graphical User Interfaces (GUI), des X-Window-Systems. Dieses wird von nun an von dem Xfree86-Projekt beigesteuert. 1995 Im März 1995 wird das sogenannte Modulkonzept eingeführt. Hiermit werden Treiber u. Ä. als Module realisiert, die einzeln in den Kernel integriert werden können. Linux läuft nun auch auf DEC- und Sun-Sparc-Prozessoren. Schätzungen belaufen sich auf rund eine halbe Million Anwender. 1996 Mit der neuen Version 2.0 des Linux-Kernels können mehrere Prozessoren gleichzeitig angesteuert werden. Linux verliert langsam seinen Bastlerstatus und wird zu einer ernst zu nehmenden Alternative für Firmen. Das K Desktop Environment (KDE) wird gestartet. Die Anwenderzahl erhöht sich auf rund 1,5 Millionen. 1997 Neue Linux-Versionen erscheinen fast wöchentlich. In verschiedenen Ländern existieren bereits Linux-Magazine. Die Anwenderzahl ist auf 3,5 Millionen gestiegen. Verschiedene namhafte Firmen beginnen, ihre Software auf Linux zu portieren: Netscape ihren Webbrowser, Applixware ihre Office-Anwendung und die Software AG ihre DatenbankAdabas D. Damit gibt es auch professionelle Software für Linux. GNOME wird als Antwort auf KDE initiiert. 1998 Man schätzt die Anzahl der Programmierer von Linux auf 10.000 und die Anzahl der Anwender auf 7,5 Millionen. 1999 Man tippt auf ungefähr 10 Millionen Anwender. Linus Torvalds kündigt den »Angriff« auf Windows an. Der Kernel 2.2 wird freigegeben und besitzt einen Umfang von 1.800.847 Zeilen Code. 2001 Im Januar 2001 wird der Kernel 2.4 veröffentlicht. Seine Größe wächst auf 3.377.902 Zeilen Code. 2003 Im Dezember 2003 erscheint der Kernel 2.6 mit einem Umfang von 5.929.913 Zeilen Code. Das Soundsystem ALSA löst das veraltete OSS ab (siehe Abschnitt »Audio« auf Seite ). #### Linux heute Linus Torvalds koordiniert nach wie vor die Arbeit am Linux-Kernel. Inzwischen (Stand 2009) ist Linux 18 Jahre alt. Aus dem anfangs sehr rudimentären System, das nur von eingefleischten UNIX-Anhängern verstanden und geschätzt wurde, hat sich eine ganze Kultur rund um Linux entwickelt. So listet die Internetseite distrowatch.com zurzeit mehr als 350 Linux-Distributionen auf. Manche dieser Distributionen entstanden schon Anfang der 1990er-Jahre und blicken somit auf eine lange Geschichte zurück. Ubuntu gehört, wie bereits erwähnt, zu den jüngsten Distributionen. Umso erstaunlicher ist der überwältigende Erfolg von Ubuntu. Es gibt heute circa 29 Millionen Linux-Benutzer weltweit. Die Zahlen schwanken sehr, eine Vorstellung von der Größenordnung gewinnt man aber anhand der Webseite LinuxCounter (http://counter.li.org/). Dort können Sie sich ebenfalls als Linux-Benutzer registrieren. #### Wo bleibt der Kernel 2.8? 2003 erschien der Kernel 2.6. Inzwischen sind fünf Jahre vergangen, ohne dass eine große Revision des Kernels erschien. Dies bedeutet aber nicht, dass die Entwicklung von Linux ins Stocken geraten wäre oder langsamer verliefe. So hatte die Kernel-Version 2.6.0 im Jahr 2003 einen Umfang von 5.929.913 Zeilen Code. Im Vergleich dazu umfasst die zum Zeitpunkt der Drucklegung aktuelle Version 2.6.25 über 30 % mehr – genau 9.232.484 Zeilen Code. Auf Kernel 2.8 werden wir trotzdem noch länger warten müssen, da ein solcher Sprung in der Bezeichnung laut der Entwickler (hauptsächlich natürlich Linus Torvalds) nur bei sehr großen strukturellen Veränderungen gerechtfertig ist. Die aktuelle 2.6er-Reihe ist dermaßen stabil und ausgereift, dass manche Entwickler sogar bezweifeln, dass es jemals einen 2.8er-Kernel geben wird. ### 16.9.2 Module Ein Betriebssystem ist also die Basis, damit überhaupt irgendwelche anderen Programme auf Ihrem Computer funktionieren können. Zu der Kernaufgabe eines Betriebssystems gehört zweifellos die Kommunikation zwischen Ihnen und der Hardware, die mittels Software erfolgt. Damit ein Betriebssystem sich gut mit der Hardware »versteht«, braucht es gute Kontakte. Diese Kontakte werden mithilfe von sogenannten Treibern aufgebaut. Treiber sind also die Schnittstellen zwischen Hardware und Betriebssystem. Sie sorgen dafür, dass das Betriebssystem die Hardware korrekt erkennt und im Folgenden der Software, die Sie installieren, sämtliche Funktionalitäten der Hardware zur Verfügung stellt. Die Arbeit an Treibern für Linux wird oftmals von Freiwilligen vorangetrieben, da viele Hardware-Hersteller nur eine sehr mangelhafte Unterstützung für Linux anbieten. Dies ist der Grund, warum es oftmals mehrere Monate dauert, bis ein Treiber für die neueste Hardware entwickelt wird. Die Entwickler sind hierbei auf Ihr Feedback angewiesen, da der Umfang an verfügbarer Hardware unüberschaubar ist. #### Mangelhafte Unterstützung Unter Linux hat man oftmals mit dem Problem zu kämpfen, dass viele der kommerziell ausgerichteten Firmen keine Treiber für Linux anbieten. Die Gründe hierfür sind vielfältig – zum einen ist die Anzahl der Linux-Benutzer und damit die Nachfrage noch zu gering, andererseits lässt sich mit diesen Treibern in der Welt von Freiheit und Open Source nur sehr schwer Geld verdienen. Zum Glück gibt es aber in der weltumspannenden Gemeinde der Linux-Anwender jede Menge gescheite Entwickler, die für fast jede Hardware unentgeltlich Treiber entwickeln. Aufgrund der Zeitverzögerung bei einer solchen freiwilligen Leistung kann es aber teilweise zu mehrmonatigen Verspätungen kommen, bis ein Treiber entwickelt ist. Daher lautet mein Rat an Sie: Kaufen Sie niemals die allerneueste Hardware, wenn Sie Linux als Betriebssystem einsetzen möchten. Warten Sie ruhig ein paar Monate ab, und üben Sie sich ein wenig in Geduld. So vermeiden Sie überflüssigen Ärger. Wenn Sie »auf Nummer sicher« gehen wollen, dann informieren Sie sich vor dem Kauf Ihrer Hardware, ob die Geräte auch anstandslos ihren Dienst unter Linux verrichten. Für Ubuntu befinden sich gute Anlaufstellen im englischen Wiki auf www.ubuntu.com und in der Hardware-Datenbank der Ubuntu-Anwender unter wiki.ubuntuusers.de. #### Module Im März 1995 erschien der Kernel in der Version 1.2. Der Umfang stieg nicht nur auf rund 300.000 Zeilen Quellcode, erstmals ließ sich Linux nun auch auf den Architekturen Alpha und Sparc installieren und nutzen. Die PCI-Erweiterungen erreichten die Marktreife, und ganz nebenbei wurde für die Nutzer ein System im Kernel eingeführt, das vorher nur in kommerziellen UNIX-Systemen zum Einsatz kam: die Module. Unter Linux ist die überwiegende Anzahl der Treiber in Modulen realisiert. Früher mussten z. B. sämtliche Treiber fest in den Kernel kompiliert werden, ob man sie nun brauchte oder nicht. Denn dieser Kernel sollte ja auf sehr vielen verschiedenen Hardware-Plattformen laufen und sämtliche Eventualitäten abdecken. Allerdings wurde der Kernel wegen des erhöhten Speicherbedarfs sehr groß und langsam. Es war und ist nahezu unmöglich, einen Universal-Kernel zu generieren, der alle Möglichkeiten an verschiedener Hardware abdeckt und für jedes noch so seltene Gerät einen Treiber integriert hat. Dies führte dazu, dass eine Installation von Linux fast immer mit einer anschließenden Kernelkompilation endete. Dies erzeugte insbesondere bei Anfängern den Ruf, Linux sei ein schwer zu konfigurierendes System. Mit Erscheinen der Kernel-Version 1.2 wurde das Konzept der Module eingeführt. Es wurde nun möglich, Treiber (aber auch andere Komponenten), die während des Bootens nicht zwingend notwendig sind, in separate Einheiten – die Module – auszulagern. Module lassen sich zur Laufzeit, d. h., wenn der Kernel eine bestimmte Eigenschaft benötigt, zu diesem hinzufügen. Umgekehrt kann man aber auch, wenn ein Treiber temporär oder dauerhaft nicht mehr benötigt wird, diesen wieder aus der aktuellen Kernel-Konfiguration entfernen. Die ersten Module mussten allerdings noch per Hand ge- oder entladen werden. Dieser Prozess wurde später automatisiert. Der Kernel konnte durch dieses Prinzip der Modularisierung relativ klein und schnell bleiben. Das modulare Design erlaubt nun automatisches Erkennen von Hardware und ein dynamisches Hinzufügen von benötigten Treibern. Die Treiber werden hierfür separat als ein Modul kompiliert: Ein langwieriges Kompilieren des gesamten Kernels entfällt somit. Sie werden sich vielleicht fragen, warum nicht gleich alle Treiber im Kernel integriert sind? Das liegt zum einen daran, dass zusätzliche Treiber auch immer Sicherheitsrisiken für das gesamte System darstellen, wenn sie fest in den Kernel integriert sind. Zum anderen würde eine komplette Integration sämtlicher Treiber den Kernel riesig werden lassen – er würde in der Folge immer mehr Platz beanspruchen, und seine Arbeitsweise würde sich erheblich verlangsamen. #### Restricted Modules Nun brauchen Sie keine Angst zu haben, dass Sie Ihre Hardware nur zum Funktionieren bringen, wenn Sie eigenständig und manuell Module in den Kernel kompilieren. Normalerweise erledigt das Betriebssystem diese Aufgabe von allein. Es erkennt bei der Installation die zur Verfügung stehende Hardware und bindet die nötigen Module ein. Oftmals fällt das Integrieren zusätzlicher Module aber auch sehr einfach aus, wenn Sie z. B. die 3D-beschleunigten Treiber von NVIDIA für Ihre Grafikkarte nutzen wollen oder ein ISDN-Modem von AVM Ihr Eigen nennen. In vielen Fällen brauchen Sie dann nur das Meta-Paket linux-restricted-modules zu installieren, und diese Module werden dann automatisch in den Kernel eingebunden. Meta-Pakete sind Zusammenfassungen mehrerer kleiner Pakete. Inzwischen ist die Installation der 3D-beschleunigten Treiber sehr viel einfacher geworden. Ubuntu bietet hierfür einen einfachen Dialog an. Ich werde in Kapitel »Hardware-Konfiguration« ab Seite unter anderem detailliert auf die Installation von Grafikkarten und ISDN-Modems eingehen. Dort finden Sie auch Informationen über die Verwendung des Meta-Pakets linux-restricted-modules. Dies hat natürlich für den Einsteiger sehr große Vorteile in Bezug auf die Bequemlichkeit, da er nun sehr viele Module auf einen Schlag in den Kernel integriert hat. Fortgeschrittene User werden sich wahrscheinlich eher den einzelnen Treiber z. B. von NVIDIA herunterladen und ihn manuell in den Kernel integrieren, da sie nicht sämtliche Module des oben genannten Pakets brauchen (Stichwort »Sicherheit«). Für welche Variante Sie sich auch entscheiden: Der Umgang mit den Modulen ist deutlich einfacher, als der erste Eindruck vermuten lässt. Ich werde im folgenden Abschnitt detailliert auf das Kompilieren eines eigenen Kernels eingehen. Dort finden Sie auch weitere Informationen über die Verwendung von Modulen. ### 16.9.3 Einen eigenen Kernel bauen Manchmal benötigt man einen angepassten Kernel mit zusätzlichen Features, oder ein bestimmter Treiber soll fest eingebaut werden. In diesen Fällen müssen Sie sich einen eigenen Kernel aus den Quellen kompilieren. Wir werden im Folgenden den typischen Weg zum Kernel-Bauen unter Ubuntu für den Kernel 2.6.x beschreiten. Hierzu sind mehrere Schritte nötig, die wir nachfolgend einzeln abhaken werden. Die Anleitung richtet sich an fortgeschrittene Anwender. Dies bedeutet, dass Sie im Normalfall schon über einige Erfahrung verfügen sollten, bevor Sie sich an das Kernel-Bauen heranwagen. Sie machen hierbei eine Operation »am offenen Herzen« Ihres Systems. Zuerst sollten Sie ein paar grundsätzliche Dinge beachten: Behalten Sie stets eine Sicherungskopie Ihres alten und funktionierenden Kernels. Falls etwas schiefgeht, kann man das System immer noch benutzen und muss nicht mit einer Rettungs-CD arbeiten. Also seien Sie grundsätzlich vorsichtig, wenn es um das Thema Löschen geht. Sie sollten, bevor Sie überhaupt an das Selberbauen des Kernels herangehen, herausfinden, welche Hardware im Rechner verbaut ist. Sie erfahren sehr viele Details über die verbaute Hardware mithilfe einiger Kommandos, die ich in Abschnitt ab Seite näher erörtern werde. Lesen Sie bitte die Hilfebeschreibungen zu den Kernel-Optionen durch. Wenn Sie bei irgendeiner Option unsicher sind, was Sie tun sollten, dann geben Sie dies auch offen zu und tippen bei der entsprechenden Abfrage Yes. Alle Module und Optionen, die man nicht unbedingt benötigt, kann man abwählen. Wenn Sie z. B. keinen SCSI-Adapter haben, brauchen Sie auch keine Module dafür einbinden. Alles, was Sie nicht oft benötigen werden, sollte als Modul eingebunden werden, z. B. USB-Geräte. Möchten Sie allerdings das System später von einem USB-Stick booten, so kann hier das feste Einbinden in den Kernel notwendig sein. Das Dateisystem für die Root-Partition ist fest in den Kernel einzubinden. Alle anderen Dateisysteme, die man sonst noch benötigt, können als Modul eingebunden werden. Das erspart Ihnen das Erstellen einer »Initial Ramdisk«. Die zugehörige Option können Sie dann getrost abwählen. Wer eine USB-Tastatur und/oder Maus besitzt, sollte den Treiber für das USB-Subsystem, den Treiber für seinen USB-Baustein und die Treiber für HID-Geräte fest einbinden. Eventuell können Sie dann die Treiber für den PS/2-Anschluss weglassen. Dies hätte den Vorteil, dass ein so getunter Kernel viel weniger Platz benötigt und das Hotplug viel weniger Zeit beim Starten braucht. #### Vorbereitungen Kontrollieren Sie bitte zuerst, ob folgende Pakete installiert sind: build-essential kernel-package Je nachdem, in welcher Umgebung Sie die Kernel-Konfiguration vornehmen möchten, sollten die folgenden Pakete installiert werden: libncurses5-dev für eine ncurses-basierte Oberfläche zur Konfiguration innerhalb einer Konsole libgtk2.0-dev, libglib2.0-dev und libglade2-dev, falls Sie eine GTK-Oberfläche zur Kernel-Konfiguration bevorzugen libqt3-mt-dev sollten KDE-Anwender bevorzugen. Dadurch lässt sich der Kernel in einer QtOberfläche anpassen. Wenn Ihnen eines der obigen Pakete fehlen sollte, dann installieren Sie dieses bitte per apt-get nach. #### Kernel-Quellen Als Nächstes werden die Quellen des Ubuntu-Kernels benötigt. Diese Quellen sind als Paket erhältlich und können mit apt-get oder Synaptic installiert werden. Sie erkennen dieses Paket an der Bezeichnung »linux-source-x.x.x«. Die beste Basis ist das Quellpaket, dessen Versionsnummer dem derzeit benutzten Kernel entspricht. Sie erhalten die aktuelle Versionsnummer, wenn Sie im Terminal
    uname -r
eingeben. Was zählt, sind die ersten drei Zahlen, also im obigen Fall 2.6.24. Die Quellen dieses Kernels würden bei der aktuellen Version in jedem Fall installiert, wenn Sie Folgendes in einer Konsole eingeben:
    sudo apt-get install linux-source-2.6.24
In den Ubuntu-Quellen sind auch etliche Ubuntu-spezifische Patches enthalten. Es steht Ihnen natürlich frei, sich einen Original-(Vanilla-)Kernel von www.kernel.org zu beschaffen. #### Optional: Kernel-Patches herunterladen Meist werden Sie den Kernel patchen wollen, um gewisse Funktionalitäten in den Kernel zu integrieren, die im Standard-Kernel (noch) nicht enthalten sind. In diesem Fall wissen Sie wahrscheinlich, welchen Patch Sie benötigen. Besonders komfortabel ist es natürlich, wenn der benötigte Patch in einem Repository zu bekommen ist. Einige Patches finden sich beispielsweise im Universe-Repository. Achten Sie hierbei wie bei allen Patches auf die richtige Versionsnummer. Für jeden Kernel gibt es einen passenden Patch. #### Kernel-Quellen auspacken Die Kernel-Quellen befinden sich nach der Installation als tar.bz2-Archiv im Verzeichnis /usr/src. Mit
    sudo tar -xjf linux-source-<Versionsnummer>
und durch cd linux-source-<Versionsnummer> entpacken Sie die Kernel-Quellen und wechseln ins Quellverzeichnis. #### Optional: Kernel patchen Patches, die über das Paketmanagement installiert wurden, befinden sich in einem Unterverzeichnis von /usr/src/kernel-patches/diffs. Sie liegen üblicherweise als gz- oder bz2-komprimierte Diff-Datei vor (*.diff.gz oder *.diff.bz2). Sie lassen sich mit folgendem Befehl einbauen:
    gunzip -c /usr/src/kernel-patches/diffs/\
    <Patchverzeichnis>/<Patchdatei> | sudo patch -p1
Bei bz2-Kompression ist gunzip durch bunzip2 zu ersetzen. #### Kernel konfigurieren Die Konfiguration des Kernels wird im aktuellen Kernel-Quellverzeichnis in der Datei .config gespeichert. Es ist stets ratsam, von der aktuellen Kernel-Konfiguration auszugehen. Diese findet man im Verzeichnis /boot/config. Sie wird folgendermaßen kopiert:
    sudo cp /boot/config-<Kernelversion> .config
Alternativ kann die Konfiguration des laufenden Kernels meist auch aus einer komprimierten Datei in /proc gelesen werden. Dies ist im Standard-Kernel von Ubuntu nicht aktiviert, bei einem selbst kompilierten Kernel kann man dieses Feature aber aktivieren:
    sudo zcat /proc/config.gz > .config
Auf der Basis dieser Konfiguration kann man nun eigene Einstellungen vornehmen. Wenn Sie eine minimale Standardkonfiguration erzeugen möchten, wählen Sie einfach
    sudo make defconfig
Beim Wechsel auf eine neue Kernel-Version kann die Datei .config aus dem alten Kernel-Verzeichnis in das neue kopiert werden. Nach dem Wechsel in dieses neue Verzeichnis können Sie
    sudo make oldconfig
aufrufen, worauf dann nur die Einstellungen für die neuen Kernel-Features abgefragt werden. #### Kernel kompilieren Nach Abschluss der obigen Konfiguration muss der Kernel kompiliert werden. Mit dem folgenden Befehl erzeugen Sie auch gleich einfach installierbare .deb-Pakete für das Kernel-Image, die Kernel-Header, das Kernel-Doc und die Kernel-Source:
    sudo make-kpkg ---initrd ---revision <meineVersion> binary
Der Parameter binary sorgt für die Erstellung der genannten *.deb-Pakete. Wenn Sie nur ein Kernel-Image-Paket benötigen, können Sie binary durch kernel_image ersetzen. Bei Angabe des optionalen Parameters revision müssen Sie darauf achten, dass die Bezeichnung sich nicht mit einem im System vorhandenen Kernel überschneidet. Weitere Möglichkeiten sind in der Manpage von make-kpkg aufgeführt.
Den Kernel schrittweise übersetzen
Sollte es während des Laufs von make-kpkg zu einer Fehlermeldung kommen, so können Sie versuchen, den Kernel in folgenden einzelnen Schritten zu übersetzen, um den Fehler genauer zu lokalisieren:
sudo make clean bzImage sudo make-kpkg --initrd kernel_image sudo make sudo make-kpkg --initrd binary
#### Einige Anmerkungen Eine Initial-Ramdisk ist nicht notwendig, wenn Sie Ihre Hardware kennen (und das sollten Sie, wenn Sie Ihren eigenen Kernel kompilieren!). In diesem Falle deaktivieren Sie in der Konfigurationsphase die Unterstützung für initrd und binden die Treiber für das RootLaufwerk (das sind meist die ATAPI/IDE-Treiber für die Festplatte) fest und nicht als Modul ein. Hilfreich ist auch das feste Einbinden von USB, wenn man eine USB-Tastatur und/oder -Maus benutzt. Möchte man eine externe Firewire-Festplatte schon beim Booten einbinden, so müssen auch die Firewire-Treiber fest in den Kernel kompiliert werden. Danach starten Sie das Kompilieren mit:
    sudo make-kpkg binary
Nach einer Änderung der Konfiguration kann es nötig sein, vor einem erneuten make-kpkg einmal sudo make auszuführen. Wird der Kernel nochmals gepatcht, so sollten bereits übersetzte Teile aufgeräumt werden. Nur dann wird beim nächsten Mal alles neu kompiliert:
    sudo make clean
Wurde der Kernel mittels make-kpkg kompiliert, so ist es auch empfehlenswert, alle Teile mit
    sudo make-kpkg clean
aufzuräumen. Dadurch werden zum Beispiel auch die Stamp-Dateien gelöscht. #### Kernel installieren und booten Das erzeugte Kernel-Paket können Sie nun ganz einfach mit dem Befehl
    sudo dpkg -i ../kernel-image-<neueVersion>.deb
installieren. Nach einem Neustart des Systems lässt sich der neue Kernel im Boot-Menü auswählen. Sollte sich der neue Kernel nach einer Erprobungsphase bewährt haben, können Sie den alten Kernel mit folgendem Befehl aus dem System entfernen:
    sudo dpkg -r kernel-image-<alteVersion>
Für den Anfang empfiehlt es sich jedoch, den alten Kernel parallel zum neuen beizubehalten, um sich nicht einer wichtigen Rettungsmöglichkeit zu berauben.
Grafische Kernel-Konfiguration
Je nach den am Anfang installierten Bibliotheken ist ein grafische Kernel-Konfiguration z. B. für die GTK-Umgebung möglich:
sudo make gconfig
Die entsprechenden Aufrufe für die Konsole bzw. die QT-Oberfläche lauten:
sudo make menuconfig
bzw.:
sudo make xconfig
Die Konfiguration des Kernels innerhalb der grafischen Oberfläche (Abbildung) erfolgt nun durch einfaches (xconfig) bzw. doppeltes (gconfig) Anklicken der entsprechenden Optionen. Nach dem Fertigstellen der Konfiguration dürfen Sie nicht vergessen, die Änderungen zu sichern (Save in Abbildung).
Hier klicken, um das Bild zu vergrößern Abbildung 16.13 Konfiguration des Kernels mit gconfig ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Ubuntu GNU/Linux Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| Linux
| IT-Handbuch für Fachinformatiker
| Webserver einrichten und administrieren
| Xen
| VirtualBox
| LPIC-1
| Einstieg in Ubuntu 8.10 »Intrepid Ibex«
| Einstieg in Ubuntu Linux - Videotraining
| Debian GNU/Linux
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de