1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

HowTo: Neuen Kernel für Debian (Squeeze) einspielen

Dieses Thema im Forum "Archiv "inaktive"" wurde erstellt von Cpt.Spock, 12. August 2011.

  1. Cpt.Spock
    Offline

    Cpt.Spock Newbie

    Registriert:
    1. Februar 2011
    Beiträge:
    11
    Zustimmungen:
    6
    Punkte für Erfolge:
    3
    Hallo zusammen!

    Grundvoraussetzung für das Kompilieren eines neuen Linux Kernels in Debian, sind die Quellen. Man kann entweder auf die offiziellen Linux Kernel zurückgreifen, welche auf

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?

    heruntergeladen werden können, oder die für Debian angepassten Quellen im Online Repository. In der Debian Variante sind in der Regel bereits einige an die Distribution angepassten Patches enthalten, so dass man auf diese zurückgreifen sollte, sobald diese Quellen verfügbar sind.

    Um auf einer aktuellen Debian Distro den Kernel von 2.6.32-5 auf x.38 oder x.39 zu heben geht man am besten so vor:

    Kernel Quellen und notwendige Pakete installieren

    Installiere zunächst die notwendigen Pakete, welche für das Bauen eines neuen Kernels notwendig sind. Das Paket "bin86" ist nur auf einer "i386" Maschine notwendig:

    Code:
    [B]# aptitude install gcc make libc6-dev binutils gawk build-essential bzip2 fakeroot initramfs-tools kernel-package libncurses5-dev[/B]
    Laden der gewünschten Kernel Quellen:
    Code:
    [B]# aptitude install linux-source-2.6.38[/B]
    Die Kernel Sources für das Release 2.6.38 und höher sind noch nicht im normalen Stable Archiv verfügbar, können aber derzeit über das "Testing" Archiv bereits geladen werden. Erweitere deine "/etc/apt/sources.list" dafür wie folgt mit der Zeile "deb

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?

    testing main contrib non-free" und führe ein "aptitude update" aus:


    Code:
    [B]/etc/apt/sources.list[/B]
    # deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main
    # deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main
    
    deb http://ftp.de.debian.org/debian/ squeeze main
    deb-src http://ftp.de.debian.org/debian/ squeeze main
    
    deb http://security.debian.org/ squeeze/updates main
    deb-src http://security.debian.org/ squeeze/updates main
    
    # squeeze-updates, previously known as 'volatile'
    deb http://ftp.de.debian.org/debian/ squeeze-updates main
    deb-src http://ftp.de.debian.org/debian/ squeeze-updates main
    
    #- - - - -
    # neuer Kernel
    # hat fuer 2.6.38 gerade nicht funktioniert
    deb http://ftp.debian.org/debian/ testing main contrib non-free
    # funktioniert fuer 2.6.38/39
    deb http://backports.debian.org/debian-backports squeeze-backports main
    #
    # Fuer Firmware usw.
    # Debian Squeeze
    deb http://ftp.de.debian.org/debian/ squeeze main non-free contrib 
    deb-src http://ftp.de.debian.org/debian/ squeeze main non-free contrib  
    #
    # Debian Squeeze Non-US
    deb http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free  
    deb-src http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
    #
    # Debian Squeeze Security
    deb http://security.debian.org/ squeeze/updates main contrib non-free
    # - - - -
    
    ^^
    Die Testing und backports Quellen musst du nach dem Download unbedingt wieder deaktivieren!!
    Ansonsten gehts rund und beim nächsten Update werden ALLE Pakete getauscht! Nix gut - ist mir scho passiert
    :D

    Der neue Kernel wurde nach /usr/src gespeichert:

    Code:
    [B]# cd /usr/src
    /usr/src # tar -xvjf linux-source-2.6.38.tar.bz2[/B]
    Das Kernel-Quellverzeichnis sollte immer "/usr/src/linux" heißen und die Kernel-Quellen des aktuellen Kernels enthalten. Vor allem, wenn die Quellen mehrerer Kernel dort liegen achte darauf, dass die Verzeichnisse der Kernel-Quellen der einzelnen Kernel-Versionen eindeutig benannt sind (z.B. linux-source-2.6.32-5-686). Lege einen Symlink auf die Quellen des zukünftigen Kernels an:

    Code:
    [B]/usr/src # ln -s linux-source-2.6.38 linux[/B]
    
    Wechsel anschließend in das Verzeichnis "/usr/src/linux"
    
    [B]/usr/src # cd linux[/B]

    Current Minimal Requirements


    Die Datei "./Documentation/Changes" zeigt eine Liste, in welchen Versionen notwendige Programme mindestens vorliegen müssen, um Konflikte zu vermeiden. Diese Liste bedeutet aber nicht, dass diese Pakete auch zwingend benötigt werden:

    Code:
    [B]/usr/src/linux/Documentation/Changes[/B]
    
    Current Minimal Requirements
    ======================
    
    Upgrade to at *least* these software revisions before thinking you've
    encountered a bug!  If you're unsure what version you're currently
    running, the suggested command should tell you.
    
    Again, keep in mind that this list assumes you are already
    functionally running a Linux 2.4 kernel.  Also, not all tools are
    necessary on all systems; obviously, if you don't have any ISDN
    hardware, for example, you probably needn't concern yourself with
    isdn4k-utils.
    
    o  Gnu C                  3.2                     # gcc --version
    o  Gnu make               3.80                    # make --version
    o  binutils               2.12                    # ld -v
    o  util-linux             2.10o                   # fdformat --version
    o  module-init-tools      0.9.10                  # depmod -V
    o  e2fsprogs              1.41.4                  # e2fsck -V
    o  jfsutils               1.1.3                   # fsck.jfs -V
    o  reiserfsprogs          3.6.3                   # reiserfsck -V 2>&1|grep reiserfsprogs
    o  xfsprogs               2.6.0                   # xfs_db -V
    o  squashfs-tools         4.0                     # mksquashfs -version
    o  btrfs-progs            0.18                    # btrfsck
    o  pcmciautils            004                     # pccardctl -V
    o  quota-tools            3.09                    # quota -V
    o  PPP                    2.4.0                   # pppd --version
    o  isdn4k-utils           3.1pre1                 # isdnctrl 2>&1|grep version
    o  nfs-utils              1.0.5                   # showmount --version
    o  procps                 3.2.0                   # ps --version
    o  oprofile               0.9                     # oprofiled --version
    o  udev                   081                     # udevinfo -V
    o  grub                   0.93                    # grub --version
    o  mcelog                 0.6
    o  iptables               1.4.2                   # iptables -V
    Du kannst das Skript "./scripts/ver_linux" aufrufen, um die aktuellen Versionen der Pakete auf dem System abzurufen:

    Code:
    [B]/usr/src/linux# ./scripts/ver_linux [/B]
    If some fields are empty or look unusual you may have an old version.
    Compare to the current minimal requirements in Documentation/Changes.
     
    Linux debian-6-1 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux
     
    Gnu C                  4.4.5
    Gnu make               3.81
    binutils               2.20.1
    util-linux             2.17.2
    mount                  support
    module-init-tools      3.12
    e2fsprogs              1.41.12
    Linux C Library        2.11.2
    Dynamic linker (ldd)   2.11.2
    Procps                 3.2.8
    Net-tools              1.60
    Kbd                    1.15.2
    Sh-utils               8.5
    Modules Loaded         vmblock vsock vmmemctl vmhgfs pvscsi acpiphp loop snd_ens1371 gameport snd_rawmidi snd_seq_device snd_ac97_codec ac97_bus snd_pcm evdev snd_timer snd soundcore parport_pc parport psmouse serio_raw shpchp snd_page_alloc i2c_piix4 pcspkr vmci pci_hotplug i2c_core button container processor ac ext3 jbd mbcache sg sr_mod cdrom ata_generic sd_mod crc_t10dif pcnet32 vmxnet ata_piix mptspi uhci_hcd floppy libata ehci_hcd mptscsih mptbase scsi_transport_spi mii usbcore nls_base scsi_mod thermal thermal_sys
    In der Regel sind hier keine Probleme zu erwarten, wenn du die Kernel Quellen aus dem Debian-Archiv "Stable" oder "Testing" verwendest. Wenn man Kernel-Quellen aus dem Debian-Archiv "Unstable" verwendet, sollte hier eine Weile mit dem Abgleichen der Programmversionen verbringen.

    Kernel konfigurieren

    Der Kernel kann vor dem Kompilieren mit sehr umfangreichen Konfigurationen seinen bestimmten Bedürfnissen konfiguriert werden. Am einfachsten ist es jedoch erst mal die aktuelle Konfiguration als Grundlage zu verwenden und ggf auf dieser Basis aufbauend, die weiterführenden Konfigurationen vorzunehmen. Kopiere hierfür die Konfigurationsdatei des aktuellen Kernels in das Verzeichnis "/usr/src/linux" und benenne sie ".config". Die aktuelle Kernelkonfiguration findest du in »/boot« und heißt in meinem Fall "config-2.6.32-5-686". Sie trägt die Versionsnummer des aktuellen Kernels im Namen:

    Code:
    [B]/usr/src/linux # cp /boot/config-$(uname -r) .config[/B]
    Starte nun einen Konfigurationshelfer wie z.B. "make menuconfig". Hier wird ein Konfigurationsinterface aufgerufen, welches die Möglichkeit gibt, den Kernel neu zu konfigurieren:

    Code:
    [B]/usr/src/linux # make menuconfig[/B]
    Du kannst im Konfigurationseditor mit der Space-Taste eine Option an- oder abwählen ([ ] → abgewählt;
    [*] → angewählt) oder als Modul auswählen ([M]); mit der ?-Taste die Hilfe dazu einblenden und mit der /-Taste, gefolgt vom Suchstring nach bestimmten Optionen suchen.

    Um die aktuelle Konfiguration in den Editor zu laden, wähle die Option "load an alternative configuration file" und wähle die Konfigurationsdatei ".config", welche du eben schon in das Quellverzeichnis des zu kompilierenden Kernels kopiert hast.

    Wenn die Konfiguration abgeschlossen ist, bestätige den Konfigurationseditor mit "Exit" und bestätige ebenfalls das Speichern der neuen Konfiguration.

    In diesem Zusammenhang ist es meist sinnvoll den neuen Kernel für dein System zu optimieren. Normal werden Systeme erst mal mit einem pre-compiled Kernel installiert. Dieser enthält Hardware Support für Hardware die du niemals haben wirst und Sprachpakete für Sprachen, die du nie benötigst. Du kannst jetzt deinen neuen Kernel eine Diät verpassen und alles was du nicht brauchst raus werfen. Wenn du dir aber nicht sicher bist, lass es wie es ist. Dieser Schritt ist rein kosmetisch, beeinflusst nur die Performance etwas positiv.

    Kernel und Debian Paket bauen

    Das Paket "kernel-package" bringt das Programm "make-kpkg" mit, welches unter Debian anstelle der Linux üblichen Kommandos "make menuconfig; make dep; make bzImage; make modules" verwendet werden kann. "make-kpkg" bedient nun das Debian Paketmanagement (dpkg) adäquat und kompiliert den neuen Kernel, erzeugt je nach verwendeter Optionen ein über das Paketmanagement installierbares deb-Paket, welches neben dem Kernel auch gleich die Initial-RAM-Disk enthält, erteilt Revisionsnummern für das Paket-Management etc.

    Führe aber zuerst das Kommando "make-kpkg clean" aus, um die Verzeichnishirachie der Kernel-Quellen aufzuräumen und die "kernel -package" Parameter zurückzusetzen. Dadurch wird zwar eine vollständige Neukompilierung des Kernels veranlasst, was je nach inkludierter Optionen und abhängig von der Leistungsfähigkeit des Rechners ca. eine Stunde bis hin zu mehreren Stunden dauern kann aber zB bei der Angabe einer neuen Kernelrevision notwendig sein wird:

    Code:
    [B]/usr/src/linux # make-kpkg clean[/B]
    Anschließend kompiliere den Kernel, baue das Debian Paket und erstelle zugleich die Initial-Ramdisk:

    Code:
    [B]/usr/src/linux # make-kpkg --rootcmd fakeroot kernel_image --revision deine-version.1 --initrd[/B]
    Die Optionen "--rootcmd" und "fakeroot" sind nur notwendig, wenn der User, welcher das Kommando ausführt nicht "root" ist.
    Die Option "kernel_image" ein Debian Paket mit dem Linux-Kernel, der aus dem Quellcode übersetzt wird und aller konfigurierten Module.
    Die Option "--revision deine-version.1" erzeugt eine Revisionsnummer (deine-version.1) für das Debian Paket und wird eigentlich nur vom Paket-Management verwendet.
    Die Option "--initrd" ruft alle zusätzlichen Aktionen auf, welche notwendig sind, eine passende Init-RAM-Disk zu erzeugen.

    Das fertige Paket liegt anschließend in "/usr/src" und kann mit dem Befehl "dpkg -i [Paketname].deb" installiert werden:

    Code:
    [B]# dpkg -i [Paketname].deb[/B]
    An dieser Stelle wird automatisch "depmod" aufgerufen, was die Modulliste aktualisiert. Ferner wird die Initial Ramdisk automatisch erstellt ("mkinitramfs-kpkg") und der Bootloader Grub2 wird aktualisiert. Beim nächsten reboot, sollte dein System automatisch mit dem neuen Kernel starten.

    Code:
    [B]# reboot[/B]
    Viel Spaß!
     
    Zuletzt bearbeitet: 12. August 2011
    #1

Diese Seite empfehlen