Diskussion:Zwei Kernel parallel installieren

Aus Linupedia.org
Version vom 25. November 2013, 11:42 Uhr von Gehrke (Diskussion | Beiträge) (Kategorie 'BootManager')
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

eigenen Kernel aus dem Quellcode bauen

Einen eigenen Kernel aus dem Quelltext selbst bauen ist eigentlich für einen etwas Linuxerfahrenen überhaupt kein Problem, nur das System insbesondere Grub sollte eben sauber konfiguriert sein, damit Suse dann hinterner nicht ins schleudern kommt. Problematischer ist es spezielle Konfigurationen im Kernel einzustellen, hier sollte man wirklich genau wissen was man warum macht. Ich zeige hier mal anhand von Konsolausgaben wie das prinziell funktioniert. Beutzt wird eines Suse 11.1 (2.6.27.25-0.1-pae). Auf Spezialitäten und Hintergründe wird nicht eingegangen. Aber es sollte davor gewarnt werden, oft funktioniert mit einem solchem Kernel alles, was Hardware betrifft gelegentlich auch etwas mehr wie vorher, manchmal aber auch nicht, es ist und bleibt für dein SuseSystem ein instabiles Gebilde und gedacht mal für Tests oder spezielle Optionen oÄ. Der orignal-Susekernel sollte im Normalfall das sein, mit dem du arbeitest. Je größer der Versionssprung im Kernel, desdo größer die Wahrscheinlichkeit, das einige Programme nicht mehr funktionieren. Voraussetzungen zum kopilieren sind natürlich genügend Platz auf der Platte und die üblichen Entwicklertools wie gcc make usw installiert.


Downloadquelle für den Quellcode nutze ich http://www.de.kernel.org/pub/linux/kernel/v2.6/ also (aktuell ist heute) http://www.de.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.5.tar.gz downloaden sollten so etwas mehr als 70MB sein. Wo du ihn hinspeicherst ist egal, bei mir kommt er unter ~/Desktop/ an.

rob@dhcppc3:~/Desktop> su -
Passwort:
dhcppc3:~ # cd /usr/src
dhcppc3:/usr/src # ls
linux  linux-2.6.27.25-0.1  linux-2.6.27.25-0.1-obj  linux-obj  packages
dhcppc3:/usr/src # tar -xzf /home/rob/Desktop/linux-2.6.30.5.tar.gz
dhcppc3:/usr/src # ls
linux  linux-2.6.27.25-0.1  linux-2.6.27.25-0.1-obj  linux-2.6.30.5  linux-obj  packages
dhcppc3:/usr/src # cd linux-2.6.30.5/
dhcppc3:/usr/src/linux-2.6.30.5 # zcat /proc/config.gz > ./config
dhcppc3:/usr/src/linux-2.6.30.5 # make oldconfig 

damit habe ich jetzt folgendes gemacht, ich habe das Tar-Archiv nach /usr/src/ ausgepackt und habe die Orginalkonfiguration des derzeitigen Susekernels dort abgespeichert. Das downgeloadete Tar-Archiv kannst dann schon löschen, das brauchst du dann wahrscheinlich nicht mehr. Das "make oldconfig" macht jetzt die Konfiguration neu, dabei wird es alles Alte übernehmen und nur nach gefragt, wenn was Neues im Kernel ist,Das dürfte bei diesem Kernelsprung eine ganze Menge sein, einfach mal staunen was der Neue jetzt alles kann und einfach mit ENTER jeweils das default übernehmen.

Jetzt kannst du an deinem neuem Kernel noch einstellen was du gerne hättest, Am besten geht das mit mit "make xconfig" dazu musst du aber wahrscheinlich einiges nachinstallieren, zB qt3-devel und das wiederum hat eine Rattenschwanz Abhängigkeiten die es mitinstalliert.

dhcppc3:/usr/src/linux-2.6.30.5 # make xconfig

Wenn du weißt, warum du einen neuen Kernel brauchst, dann solltest du auch finden was du hier an geänderten Konfigurationen einstellen musst. Nur zum ausprobieren brauchst du auch nichts ändern. Ändern bzw einstellen solltest du aber auf jeden Fall unter "General setup" -> "Local version -append do kernel release:" einfach doppelt anklicken, ich setze mal jetzt einfach "-0.1-pae" dort in der EingabeZeile (erscheint wahrscheinlich in der Mitte). Was du hier einträgst wird Bestantteil des eindeutigen Kernelnamens am Ende

Danach "File"-> "save as" als ".config" speichern und Konfiguration ist fertig. Mit "quit" verlassen

Da ich hier im Moment eine 2 Prozessormaschine habe und auch mit 2 Prozessoren kompilieren will

dhcppc3:/usr/src/linux-2.6.30.5 # export MAKE="make -j2"
dhcppc3:/usr/src/linux-2.6.30.5 # make -j2

Wenn du mehr Prozessoren hast, dann eben hier statt der 2 eben 4 oder wieviel logische Prozessoren du eben hast, (mit 16 CPUs und überreichlich Speicher macht das richtig Spass;-) ) es geht aber auch mit einem Porzessor nur mit "make" auch, nur dauert es eben etwas länger. jetzt kannst du in aller Seelen Ruhe einen Kaffee trinken gehen ( bei einem langsamen Prozessor auch ein paar mehr, das dauert dann eventuell ein paar Stunden), oder zusehen wie hier einige tausend Zeilen durchlaufen.

Du kannst hier mit "make rpm" auch ein Paket bauen, hat aber den Nachteil, wenn du das installierst, dann steht es in der Datenbank und erzeugt eventuell Konflikte mit den Standardpaketen. Wenn du deinen eigene Kerneli ohne Paket installiert später wieder loshaben willst, musst ihn eben per Hand löschen. Verzeichnisse /usr/src/KERNEL/ ; /lib/modules/KERNEL-NAME/ sowie die Dateien /boot/*KERNEL-NAME und die Eintragungen in der /boot/grub/menu.lst . Wobei du dabei natürlich den richtigen KERNEL-NAMEN erwischen solltest.


Eventuell bricht das Kompilieren mit folgenden Fehler ab.

internal compiler error: Segmentation fault

Dann hast du eventuell einen Speicherfehler oder einen ECC-Error in der CPU gehabt, Einfach nochmal make starten, dann geht das dann genau an dieser Stelle weiter, ist bei PC-Hardware längere Zeit unter permanenter Vollast immer mal drin, das da was zu warm wird. Erst wenn der Fehler immer wieder an der selben Stelle auftreten sollte, bist du entweder auf einen Kernelbug oder eine Fehlkonfiguration gestoßen.

Fertig ist der Kompilierlauf dann irgendwann, wenn er ohne Errormeldung beendet.

Jetzt kommt als nächstes

dhcppc3:/usr/src/linux-2.6.30.5 # make modules_install

damit werden jetzt die Module installiert und die Modulkonfiguration gemacht.

danach kommt

dhcppc3:/usr/src/linux-2.6.30.5 # make install

damit wird jetzt eine initrd gebaut der Kernel installiert und die menu.lst konfiguriert. Es werden für den neuen Kernel jeweils 2 neue Menüpunkte dazufügt. Die /boot/grub/menu.lst sollten wir uns auf jeden Fall vor dem Reboot noch einmal anschauen, insbesondere was er jetzt als default booten will oder soll.

Jetzt kommt der Reboot. wir starten im Grubmenu natürlich jetzt unseren Kernel. Nach dem reboot und der richtigen Auswahl im Grub sollte jetzt wenn alles funktioniert hat der neue Kernel laufen

dhcppc3:~ # uname -r
2.6.30.5-0.1-pae

Haben wir einen speziellen Grafiktreiber, vmware oder sonstiges, dann müsste dort noch einiges gemacht werden damit auch diese Module jetzt neu für den neuen Kernel erstellt werden, aber ansonsten können wir den neuen Kernel testen.

Muss die Konfiguration des Kernels jetzt noch mal geändert werden, weil irgendwas nicht dem entspricht was man will und umkonfiguriert werden soll, dann

cd /usr/src/linux-2.6.30.5
make clean
make xconfig
make
make modules_install
make install 

und der Kernel wird nochmal gebaut, wird der Kernelnamen geändert, gibt es einen neuen Kernel mit eigenen Modulen und Eintragungen in der menu.lst geben, ansonsten werden die schon vorhandenen überschrieben.

Kategorie 'BootManager'

Ich habe mir erlaubt, die Kategorie 'BootManager' hinzuzufügen. Zwar geht es hier nicht unmittelbar um GRUB und Co., aber für Leute die Probleme mit vollgelaufenen /boot-Devices haben könnte das evtl. bei der Recherche hilfreich sein (Navigation über Kategorien). Entfernt das einfach wieder, falls das Unsinn ist... --Gehrke (Diskussion) 12:42, 25. Nov. 2013 (CET)