Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Leitfaden
1 Die Wurzeln von Ubuntu
2 Was ist Ubuntu?
3 Die Versionen im Detail
4 Die Möglichkeiten der beiliegenden DVDs
5 Daten aus Windows sichern
6 Die Installation
7 Erste Schritte
8 Kubuntu und Xubuntu
9 Ubuntu mobil
10 Programme und Pakete installieren
11 Internet und E-Mail
12 Office
13 Grafik und Bildbearbeitung
14 Multimedia
15 Das Terminal
16 Programmierung und Design
17 Einrichtung der grundlegenden Hardware
18 Software- und Paketverwaltung
19 Architektur
20 Backup und Sicherheit
21 Desktop-Virtualisierung
22 Server-Installation
23 Sicherheit und Monitoring
24 Netzwerke
25 Server im Heim- und Firmennetzwerk
26 Der Server im Internet
27 Server-Virtualisierung mit KVM
28 Server-Virtualisierung mit Xen
29 Hilfe
30 Befehlsreferenz
Mark Shuttleworth
Glossar
Stichwort

Download:
- ZIP, ca. 34,8 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Ubuntu GNU/Linux von Marcus Fischer
Das umfassende Handbuch, aktuell zu Ubuntu 10.04 LTS "Lucid Lynx"
Buch: Ubuntu GNU/Linux

Ubuntu GNU/Linux
5., aktualisierte und erweiterte Auflage, gebunden, mit 2 DVDs
1.104 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1654-8
Pfeil 19 Architektur
Pfeil 19.1 Betriebssysteme
Pfeil 19.2 Details des Boot-Vorgangs
Pfeil 19.3 GRUB
Pfeil 19.3.1 Aufbau
Pfeil 19.3.2 GRUB editieren
Pfeil 19.3.3 Wiederherstellung
Pfeil 19.4 Start- und Stoppskripte
Pfeil 19.5 Dienste
Pfeil 19.6 Initialisierung
Pfeil 19.6.1 Runlevel
Pfeil 19.6.2 init
Pfeil 19.6.3 Upstart
Pfeil 19.7 Plymouth
Pfeil 19.8 Dateisystem
Pfeil 19.8.1 Aufbau moderner Software-Strukturen
Pfeil 19.8.2 Datenträger
Pfeil 19.8.3 Die fstab
Pfeil 19.8.4 Swap
Pfeil 19.8.5 Der Verzeichnisbaum
Pfeil 19.8.6 Beschädigte Dateisysteme reparieren
Pfeil 19.9 Kernel und Module
Pfeil 19.9.1 Kernel-Historie
Pfeil 19.9.2 Module
Pfeil 19.9.3 Einen eigenen Kernel bauen
Pfeil 19.10 64-Bit: ja oder nein?
Pfeil 19.10.1 Installation von Ubuntu 64
Pfeil 19.10.2 Paralleles Arbeiten mit 32-Bit-Software


Galileo Computing - Zum Seitenanfang

19.9 Kernel und Module Zur nächsten ÜberschriftZur vorigen Überschrift

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 prinzipbedingt zu einem sichereren System.

Die Hauptaufgaben des Kernels sind:

  • Schnittstelle
    Der Kernel bildet die Schnittstelle zur Hardware, z. B. zu Geräten, zum Speichern und zu(m) 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 können Sie erkennen, wie wichtig es manchmal sein kann, sich einen 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 »MakroKernel« ist nicht so fehleranfällig wie ein »monolithischer Kernel« und schneller als ein »Mikro-Kernel«.

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 Sicherheits-Updates implementieren.

Sie können die aktuelle Versionsnummer Ihres Kernels erfahren, wenn Sie in der Konsole uname -r eintippen.


Galileo Computing - Zum Seitenanfang

19.9.1 Kernel-Historie Zur nächsten ÜberschriftZur vorigen Überschrift

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 kurz die Geschichte von Linux anhand der Kernel-Veröffentlichungen beschreiben:

  • 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. 2010 wurde Linux somit 19 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 des Linux-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 und Ähnliches 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 veröffentlicht. 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 seinen Webbrowser, Applixware seine Office-Anwendung und die Software AG ihre Datenbank Adabas 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. Er 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 14.3, »Audio«).

Linux heute

Linus Torvalds koordiniert nach wie vor die Arbeit am Linux-Kernel. Inzwischen (Stand 2010) ist Linux 19 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 sieben 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.


Galileo Computing - Zum Seitenanfang

19.9.2 Module Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Betriebssystem ist also die Basis, damit alle anderen Programme überhaupt 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 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 oft von Freiwilligen vorangetrieben, da viele HardwareHersteller 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.

Zweck von Modulen

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 Eindruck, Linux sei ein schwer zu konfigurierendes System.

Hinzufügen während der Laufzeit

Mit dem 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 ein 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.

Sicherheitsrisiken

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.

Inzwischen ist die Installation der 3D-beschleunigten Treiber sehr viel einfacher geworden. Ubuntu bietet hierfür einen einfachen Dialog an. Ich gehe in Kapitel 17, »Einrichting der grundlegenden Hardware«, unter anderem detailliert auf die Installation von Grafikkarten und weiterer Hardware ein. 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.


Galileo Computing - Zum Seitenanfang

19.9.3 Einen eigenen Kernel bauen topZur vorigen Überschrift

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 Kernelbauen 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 Bauen eines eigenen Kernels 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.
  • Lesen Sie bitte die Hilfebeschreibungen zu den Kerneloptionen durch. Wenn Sie bei irgendeiner Option unsicher sind, was Sie tun sollten, dann geben Sie dies auch offen zu, und tippen Sie 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 einzubinden.
  • 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 Sie sonst noch benötigen, 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, der 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

Wenn Ihnen eines der obigen Pakete fehlen sollte, dann installieren Sie dieses bitte per apt-get nach.

Kernel-Quellen

Als Nächstes benötigen Sie die Quellen des Ubuntu-Kernels. 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.


Kernel-Version herausfinden

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 Quellen befinden sich nach 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 Kernelversion kann die Datei .config aus dem alten Kernelverzeichnis 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 dem Abschluss der obigen Konfiguration muss der Kernel kompiliert werden. Mit den folgenden beiden Befehlen 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 clean

und:

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 Root-Laufwerk (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 Sie eine USB-Tastatur und/oder -Maus benutzen. Möchten Sie 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 Sie bereits übersetzte Teile aufräumen. 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 Kernelpaket 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 Kernelkonfiguration

Je nach den am Anfang installierten Bibliotheken ist eine grafische Kernelkonfiguration 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 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.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Ubuntu GNU/Linux

Ubuntu GNU/Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux






 Linux


Zum Katalog: OpenVPN






 OpenVPN


Zum Katalog: LPIC-1






 LPIC-1


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Webserver einrichten und administrieren






 Webserver einrichten
 und administrieren


Zum Katalog: VirtualBox






 VirtualBox


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2010
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