Ergebnis 1 bis 12 von 12

Thema: Howto: Ein neuer Kernel unter Debian

  1. #1
    Colonel Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard Howto: Ein neuer Kernel unter Debian

    Ein neuer Kernel unter Debian


    1) Einführung

    Der letzte offizielle Release zum Zeitpunkt der Erstellung dieses Tutorials ist vom Jahr 2005 mit dem Projektnamen Sarge. Sarge kommt von Haus aus mit der Kernelversion 2.4.x, man kann ihn zudem mit einem Kernel 2.6.8 installieren. Der derzeitige Stand der Kernelentwicklung beläuft sich auf Version 2.6.16 (Mai 2006). Hierbei sind einige wichtige Neuerungen im Kernel integriert die auch sicherheitstechnisch von hoher Relevanz sind. Deshalb kann es ratsam sein, seinen Kernel auf die letzte Version zu bringen.
    Ab der Kernelversion 2.6.15 findet kein Support mehr für das devfs System sondern es wurde komplett auf das UDEV System umgestellt. Dieses ist dafür zuständig, neue Geräte in das System dynamisch einzubinden. Hierbei arbeitet UDEV wesentlich flexibler als das devfs. Weitere Hinweise zum Thema UDEV finden sich hier: http://de.wikipedia.org/wiki/Udev
    Das Problem ist nun, dass man somit nicht ohne größere Arbeit von einem 2.6.8er Kernel auf einem Kernel > 2.6.14 patchen kann. Hier bleiben somit drei Möglichkeiten:

    a) Nicht höher als Version 2.6.14 patchen
    b) Manuell das System auf UDEV umstellen und devfs entfernen
    c) Sarge via distupgrade auf eine unstable Version bringen
    d) Eine aktuelle unstable Debian Version installieren


    a) Nicht höher als Version 2.6.14 patchen


    Dies halte ich für die unglücklichste Lösung, denn wir wollen unser System immer aktuell halten. Deshalb sollten wir einen anderen Weg finden, einen aktuellen Kernel auf unser System zu bringen

    b) Manuell auf das UDEV umstellen

    Das ist eine Möglichkeit, die sicherlich funktioniert. dennoch muss hierzu tief in die Systemkonfiguration eingegriffen werden. Zudem ist aber auch nach erfolgreicher Umstellung nicht immer gewährleistet, dass das System auch in allen Bereichen wie gewünscht funktioniert. Eine Anleitung zur Umstellung erspare ich mir allerdings und verweise hierzu auf eine gute Anleitung auf der Wiki der archlinux.org:
    http://wiki.archlinux.org/index.php/DevFS_to_Udev
    Hier kann man sehr schön sehen, was bei der Umstellung notwendig ist.

    c) Sarge via distupgrade auf eine unstable Version bringen

    Eine elegante Lösung, nur hatte ich in meinen Fall bis jetzt weniger Glück. Es werden hierbei sehr viele Pakete ausgetauscht und leider blieb bei mir das System an manchen Stellen hängen. Zudem sollte man aufpassen, einige Paket in bestimmter Reihenfolge zu installieren, da man dabei schnell in eine Sackgasse geraten kann. Von einer Minimalinstallation ausgehend könnte der Weg von Erfolg gekrönt sein, aber dann kann man eventuell gleich auf Version d) zurückgreifen:

    d) Eine aktuelle unstable Debian Version installieren

    Hierzu zieht man sich ein kleines Netinstall-Image von folgender URL:
    http://www.debian.de/devel/debian-installer/
    Hierzu kann man sich für sein system einen passenden Installer aussuchen (in der Regel wird es das i386 für 32bit Maschinen sein oder das amd64 für die 64bit Athlons). Dieser wird auf CD gebrannt und die Kiste damit gestartet. Nachdem ein minimales Installationssystem auf die Platte gebracht wird zieht der Installer alle weiteren Pakete aus dem Netz. Gut gemeinter Ratschlag: Hierbei sollte eine DSL Leitung verwendet werden. Praktisch hierbei ist, wenn der Rechner via Netzwerkkarte an einem Router hängt, der mit DHCP läuft. So erspart man sich eine oftmals komplizierte Einrichtung des Onlineverbindung, denn dies erledigt dann der Router und Debian selbst. Da einige Daten aus dem Netz gezogen werden gilt auch hier die Devise bei der DSL Verbindung: Je schneller, desto gut

    Eine Anleitung zur Debianinstallation erfolgt an der Stelle nicht, das würde am Thema vorbei führen. Die Installationsanleitung für einen neuen Kernel sollte sowohl für die 2.4er Kernelversion als auch für alle 2.6er Versionen funktionieren.

    Ich verwende in meinem Beispiel die Version 2.6.16.10 auf einem AMD64 System. Solltet Ihr eine andere Kernelversion verwenden, so ist die Versionsnummer in den hier aufgeführten Befehlen entsprechend abzuändern.

    2) Vorbereitung

    Nachdem wir nun einlauffähiges System haben (Hinweis: UDEV bei höheren Kernelversionen nicht vergessen!) benötigen wir als nächstes ein paar Standardpakete zum Installieren.
    Hierzu binden wir noch entsprechend eine Quelle in der /etc/sources.list mit ein:
    Code:
    deb ftp://ftp.de.debian.org/debian/ unstable main
    Diese wird sich vermutlich schon in der Liste befinden, wenn wir einen unstable-Install gemacht haben.

    Per apt benötigte Pakete:
    Code:
    apt-get install kernel-package
    apt-get install libncurses5-dev
    apt-get install build-essential
    apt-get install initrd-tools
    Ebenso ist es ratsam, den Gnu-Kompiler auf eine Version > 4.0ß zu bringen. Wer die unstable Version installiert hat ist hierbei auf der sicheren Seite, denn das sit damit schon erledigt.

    3) Der neue Kernel auf die Platte

    Nun holen wir uns einen neuen Vanilla Kernel direkt von der Kernel.org ab. Entweder macht Ihr das über Eueren Webbrowser und kopiert die Kernelsourcen als tar.bz2 nach
    /usr/src
    oder Ihr bleibt in der Konsole und zieht den Kernel als Root mittels wget. Hierbei müsst Ihr Euch bereits im Verzeichnis /usr/src/ befinden. Für den kernel 2.6.16.10 lautet der Befehl dann beispielsweise:

    Code:
    wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.10.tar.bz2
    Jetzt können wir das Teil auspacken (bitte den Code gemäß der jeweiligen Version abändern):

    Code:
    tar xvfj linux-2.6.16.10.tar.bz2
    Jetzt müssen wir einen Symlink auf die entpackten Kernelquellen legen, der auf das Verzeichnis /usr/src/linux zeigt. Sollte bereits ein Symlink darauf bestehen, so muss dieser vorher mit rm entfernt werden:
    Code:
    rm linux
    Dann den neuen Symlink anlegen:
    Code:
    ln -s linux-2.6.16.10 linux
    Damit sind die Vorbereitungen abgeschlossen.




    4) Kernel übersetzen


    Zuerst stellen wir sicher, dass alles aufgeräumt ist (sollte auch gemacht werden, wenn bereits kompiliert wurde und man den Vorgang auf sauberer Basis wiederholen möchte). Hierzu in das Verzeichnis /usr/src/linux wechseln und folgenden Befehl absetzen:

    Code:
    make mrproper
    Danach wird die Konfigurationsdatei angelegt. Wir übernehmen diese einfach aus der vorhergehenden Version (die Kernekonfiguration muss dabei unter /boot vorhanden sein, was auch für Gewöhnlich der Fall ist):

    Code:
    make oldconfig
    Wenn neue Optionen hinzugekommen sind, wird der Vorgang danach fragen, ob diese aktiviert werden soll oder nicht. Sind die Versionssprünge gering, werden es nicht allzu viele Neuerungen sein. Sollten es mehrere sein, dann kann das einige Zeit in Anspruch nehmen, sofern man sich erstmal jede neue Funktion etwas genauer ansieht.

    Optional:
    Sollten weitere Änderung gewünscht sein, oder wollt Ihr die eine oder andere Einstellung kontrollieren, kann man auch ein Konfigurationsmenü zusätzlich aufrufen:
    Code:
    make menuconfig
    Hier erledigt Ihr dann zusätzliche Einstellungen und speichert diese ab.

    Jetzt bauen wir den Kernel. Hierbei wollen wir das alles gleich als installierbares Debian Paket verarbeiten. Der Vorteil dabei ist, dass man seinen gebauten Kernel auch auf ein anderes System transferieren kann.
    Code:
    make-kpkg kernel_image --revision KernelRebuild.01
    Nach der Option --revision gebt Ihr dann einen persönlichen Namen ein. Das wird später dem Debian-Paket angefügt und Ihr habt dann den besseren Überblick über verschiedene Compile-Versuche.

    Der Vorgang kann nun einwenig dauern, je nachdem wie schnell Euer Rechner ist. Wenn fertig, dann findet Ihr das fertige Debianpaket unter /usr/src.
    Wechselt nun in das Verzeichnis /usr/src und isnatlliert den neuen Kernel mit folgendem Befehl:
    Code:
    dpkg -i kernel-image-2.6.16.10_KernelRebuild.01_i386.deb
    Der Output sollte ungefähr so aussehen:
    Code:
    (Lese Datenbank ... 144757 Dateien und Verzeichnisse sind derzeit installiert.)
    Entpacke linux-image-2.6.16.10 (aus linux-image-2.6.16.10_KernelRebuild.01_amd64.deb) ...
    Done.
    Richte linux-image-2.6.16.10 ein (KernelRebuild.01) ...
    Running depmod.
    Running postinst hook /sbin/update-grub.
    Searching for GRUB installation directory ... found: /boot/grub
    Testing for an existing GRUB menu.list file ... found: /boot/grub/menu.lst
    Searching for splash image ... none found, skipping ...
    Found kernel: /boot/vmlinuz-2.6.16.10
    Found kernel: /boot/vmlinuz-2.6.15-1-amd64-generic
    Updating /boot/grub/menu.lst ... done
    Wollt Ihr aus irgendeinem Grund den Kernel nochmals backen, dann wird es vermutlich eine Fehlermeldung bezüglich der bereits vorhandenen Revision geben. Diese setzt Ihr dann damit zurück:

    Code:
    make-kpkg clean


    5) Ramdisk und booten

    Über den Installationsvorgang wurde der Kernel normal auch in das Startsystem eingebunden. Ich beschreibe den weiteren Vorgang für den im Moment weitgehend allgemein gebräuchlichen Bootmanager GRUB.

    Zuerst wird eine neue Ramdisk gebaut:
    Code:
    mkinitrd -o /boot/initrd.img-2.6.16.10 2.6.16.10
    diese wird dann als initrd.img-2.6.16.10 nach initrd.img-2.6.16.10 automatisch kopiert. Sollten hier Fehlermeldungen erscheinen ist das ein sicherer Hinweis, dass was beim Kompilieren des Kernels falsch gelaufen ist. Testet zuerst, ob der Kernel dennoch startet. Falls nicht, muss die Konfiguration dem Fehler entsprechend überarbeitet werden. Danach muss die Ramdisk auch noch in die Datei /boot/grub/menu.lst eingetragen werden.
    Sucht dazu den Abschnitt, der nun neu für Eueren neuen Kernel bereits integriert wurde. z.B.:
    Code:
    root            (hd0,0)
    kernel          /boot/vmlinuz-2.6.16.10 root=/dev/sda1 ro
    savedefault
    boot
    Hier fügt nun die Zeile initrd /boot/initrd.img-2.6.16.10 ein:
    Code:
    root            (hd0,0)
    kernel          /boot/vmlinuz-2.6.16.10 root=/dev/sda1 ro
    initrd          /boot/initrd.img-2.6.16.10
    savedefault
    boot
    Speichert das nun ab. Jetzt wird der neue Kernel in Euerem Bootmanager Startmenü zur Auswahl stehen.

    Bootet nun Eueren neuen Kernel.


    5) Pimp my Kernel!

    Um einwenig mehr Performance aus dem Kernel zu quetschen gibt es die Möglichkeit, diesen in der Performance mit Hilfe einiger Patche zu trimmen. Hierbei gibt es einen Spezialisten, der dafür entsprechenden Patches zu den aktuellen Kernel schreibt. Kon Kolivas Overloaded Kernel dürften ziemlich bekannt sein. Das wollen wir nun auch in unseren Kernel einbauen.

    Legt dazu erstmal neue Kernelquellen unter /usr/src an. Verwendet dazu den ungepatchten Kernel 2.6.16 . Mittels den CKO Patches werden auch die aktuellen Patche eingespielt, die in höheren Versionsnummern zu finden sind (derzeit der Kernel 2.6.16.11). Das Verzeichnis linux-2.6.16, das nach dem Entpacken der Quellen entstanden ist benenne ich jetzt einfach in linux-2.6.16.ck8-gargi um. Legt jetzt einen Symlink auf /usr/src/linux wie oben beschrieben an. Damit dann auch alles schön personalisiert wird und der eigene Name später als Kernel-Name mittels uname abrufbar ist, editieren wir noch schnell das Makefile:

    Code:
    vi /usr/src/linux/Makefile
    und ändern die Zeile EXTRAVERSION gleich am Anfang dieser Datei ab. Bei mir steht hier nun ".ck8-gargi" gemäß meines Verzeichnisses der Kernelquelle ändere. Speichert diese nun ab.

    Ladet Euch nun den COK Patch für Eueren Kernel von folgender Seite herunter:

    http://members.optusnet.com.au/ckolivas/kernel/

    Achtet dabei auf die korrekte Version für Eueren Kernel!

    In meinen Fall wäre das für die Konsolenfans folgender Befehl:

    Code:
    wget http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck8/patch-2.6.16-ck8.bz2
    Bei mir landet der Patch in das Verzeichnis /usr/src . Jetzt wechselt in Euer Quelverzeichnis /usr/src/linux und spielt den Patch von dort aus mit folgendem Befehl ein:

    Code:
    bzcat /usr/src/patch-2.6.16-ck8.bz2 | patch -p1
    Wechselt also nun in Euer Quellverzeichnis und bereitet wie bereits beschrieben den Kernel zum Kompilieren vor. Wenn Ihr den make oldconfig absetzt werden einige neue Optionen auftauchen. Ich persönlich übernehme immer erstmal alles, wie vorgeschlagen. Ihr werdet hierbei nach der Timer Frequenzy zusätzlich gefragt. Stellt diese auf "1000" ein.
    Wenn das Script durch ist ruft auf jeden Fall nochmal den make menuconfig auf. Hier stellen wir nun ein, dass richtig Druck gemacht wird. Geht dazu bitte in das Untermenü "Processor Type and Features" -> "Preemption Model" und wählt "Preemptible Kernel (low latency desktop)" aus. Verlasst das Untermenü. Direkt darunter steht dann noch die Option "Preempt the big Kernel Lock" . Diese bitte ebenso auswählen und als festen Bestandteil (nicht als Modul) in den Kernel kompilieren! Dies sollte dann wie folgt aussehen:
    menuconfig - Howto: Ein neuer Kernel unter Debian

    Speichert nun Euere neue Konfiguration ab und kompiliert Eueren Kernel wie in diesem Howto bereits beschrieben. Die Installation des Kernels erfolgt dann ebenso wie beim ungepatchten Kernel.

    Viel Spaß beim Kernelbauen!

    Literatur:
    Frank Ronneburg: Debian GNU/Linux Anwenderhandbuch (Verlag: Addison-Wesley)
    Nicholas Petreley & Jono Bacon: Linux Desktop Hacks (Verlag: O'Reilly)

    Danksagung:
    "Administrator" und Andy von der Mindfactory (http://www.mindfactory.de) aus dem Mindfactory-Forum für verschiedene Korrekturhinweise.
    Fruby aus dem Cinefacts Forum für seinen steten Antrieb.
    SethOS aus dem Cinefacts Forum, der mich über den ICQ oft ruhig gestellt hat
    Danke Euch Mädels!

    cu
    Gargi

  2. #2
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    Hierzu binden wir noch entsprechend eine Quelle in der /etc/sources.list mit ein:
    hmmm sicher das es nicht /etc/apt/sources.list ist ?

    und danach erstmal noch nen update
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  3. #3
    Colonel
    Themenstarter
    Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard

    Zitat Zitat von BigWhoop
    hmmm sicher das es nicht /etc/apt/sources.list ist ?

    und danach erstmal noch nen update
    Huch ja! Stimmt, ändere ich gleich. Ich überarbeite das Howto sowieso im Internen gerade und mache noch was größeres draus. Ich ändere das gleich ab, danke Dir!

    cu
    Gargi

  4. #4
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    Kein Problem Ich dachte ich schau mal ob das so hinhaut wie du es geschrieben hast und bis auf diese beiden kleinigkeiten ist alles paletti imo er läd gerade den neuen kern ... wenn mir noch was auffällt schreibe ich es hier ^^
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  5. #5
    Colonel
    Themenstarter
    Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard

    Ah okay. Machst Du das unter Sarge oder gleich Etch?

    Zudem stoß mal den Kompile mit dem Parameter initrd an. dann ersparste die Sache mit dem Grub und der Initrd, das macht der in einem Rutsch dann

    Code:
    make-kpkg kernel_image --initrd --revision KernelRebuild.01
    cu
    Gargi

  6. #6
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    nein ich wollte das alles in einem Rutsch machen Etch läuft seit gestern auf dem Test System

    danach wollte ich mich auch an den Bootsplash machen *g* mal schauen !
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  7. #7
    Colonel
    Themenstarter
    Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard

    Zitat Zitat von BigWhoop
    nein ich wollte das alles in einem Rutsch machen Etch läuft seit gestern auf dem Test System

    danach wollte ich mich auch an den Bootsplash machen *g* mal schauen !
    Ja... da weißte ja jetzt, wie der geht Wenn Du den Bootsplash machst, schau Dir mal den Statusbalken an ( aktiviert in der menu.lst beim neuen Kerneleintrag hinter vga=xyz mit splash=silent) Du wirst sehen, dass der Ladebalken eigentlich nicht zeitgerecht läuft. Da gibts aber einen Trick über die /etc/init.d/rc das sauber zu steuern. Ich habe aber dafür keine wirklich praktikable Lösung gefunden. Vielleicht findest Du was raus. Ich persönlich lasse mir beim Splasher dennoch die Kernelmeldungen anzeigen, ist aber jetzt in nen schönen blauen Rahmen mit 1024x768er Auflösung.

    cu
    Gargi

  8. #8
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    Zitat Zitat von Gargi
    Code:
    make-kpkg kernel_image --initrd --revision KernelRebuild.01
    cu
    Gargi
    danke dafür aber ich wollte es wirklich mal genau so machen wie du es beschrieben hast Schmeisst du oben das grub und initd gedöns dann raus oder machst du 2 lösungswege ? :P
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  9. #9
    Colonel
    Themenstarter
    Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard

    Also ich mache später nicht das mit dem initrd Zeugs, und editiere nicht in der menu.lst die Zeile initrd = ... rein, sondern nehme gleich den vorhin geposteten Befehl her. Daraufhin erzeugt der Make bereits die relevanten Konfigurationsdateien, die dann durch das dpkg -i ... erzeugt werden und korrekt in die menu.lst eingetragen wird. Für den Bootsplash musste dann die menu.lst zumindest durch den vga=xyz (791 für 1024x768) ergänzen, das ist klar.

    cu
    Gargi

  10. #10
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    Ja so dachte ich mir das ....

    So packet ist fertig nun gehts ans installieren :P
    bzw. ins GRub einfügen *g*
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  11. #11
    Lieutenant General Avatar von BigWhoop
    Registriert seit
    14.10.2006
    Ort
    Bielefeld
    Beiträge
    30.047

    Standard

    So ich nochmal Wenn ich wie oben beschrieben den Kern installiere muss ich danach erst wieder zu "linux" rein damit ich:

    Wollt Ihr aus irgendeinem Grund den Kernel nochmals backen, dann wird es vermutlich eine Fehlermeldung bezüglich der bereits vorhandenen Revision geben. Diese setzt Ihr dann damit zurück:


    Code:
    make-kpkg clean
    machen kann.

    Edit: Bitte Posts zusammenlegen

    Last login: Thu Nov 23 17:51:00 2006
    Linux Etch 2.6.18.3 #1 Thu Nov 23 15:09:50 CET 2006 i686
    hehe
    2.00000000 + 2.000000000 = 3.999998456

    hwmartikel - Howto: Ein neuer Kernel unter Debian

  12. #12
    Colonel
    Themenstarter
    Avatar von Gargi
    Registriert seit
    20.01.2006
    Beiträge
    11.618

    Standard

    Sehr schön! Up and running. So muss das sein

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Howto: Suse 10.0 OSS multimedial erweitern
    Von Gargi im Forum Linux & Mac OS
    Antworten: 1
    Letzter Beitrag: 30.03.2006, 07:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •