Zwei Kernel parallel installieren: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (Zweite Variante: openSUSE 11.1 ergänzt)
K (13.1 und Verweis auf GRUB 2-Artikel ergänzt.)
 
(8 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
{{Box Test||
 
{{Box Test||
* [[openSUSE]] 10.2, 11.0, 11.1
+
* [[openSUSE]] 10.2, 11.0, 11.1, 11.3, 11.4, 12.1, 12.3, 13.1
 
* SUSE Linux 10.0
 
* SUSE Linux 10.0
 
* SUSE Linux 9.3
 
* SUSE Linux 9.3
Zeile 6: Zeile 6:
 
Autor: oc2pus
 
Autor: oc2pus
  
Um mal mit einem kernel-of-the-day oder einem selbsterstellten Kernel rumzuspielen, sollte man sich einen kleinen Rettungsanker basteln. D.h. man hat mehrere Kernel zur Auswahl und kann im Falle eines Falles einen funktionsfähigen Kernel zum Booten verwenden.
+
Um mal mit einem kernel-of-the-day oder einem selbsterstellten [[Kernel]] rumzuspielen, sollte man sich einen kleinen Rettungsanker basteln. D.h. man hat mehrere Kernel zur Auswahl und kann im Falle eines Falles einen funktionsfähigen Kernel zum Booten verwenden.
  
Bis openSUSE 11.0 besteht der kompilierte Kernel aus einer *.rpm-Datei. Bei openSUSE 11.1 sind es mit Ausnahme des Vanilla-Kernel drei *.rpm-Dateien (kernel-xxx, kernel-xxx-base und kernel-xxx-extra, xxx steht für den Kernel-Typ, z.B. default), die als Einheit betrachtet werden sollen. Die Datei kernel-xxx-extra sollte nur dann weggelassen werden, wenn man ganz sicher ist, diese Module nicht zu benötigen.
+
Mit Ausnahme von openSUSE 11.1 besteht der kompilierte Kernel aus einer *.rpm-Datei. Bei openSUSE 11.1 sind es mit Ausnahme des Vanilla-Kernel drei *.rpm-Dateien (kernel-xxx, kernel-xxx-base und kernel-xxx-extra, xxx steht für den Kernel-Typ, z.B. default), die als Einheit betrachtet werden sollen; die Datei kernel-xxx-extra sollte nur dann weggelassen werden, wenn man ganz sicher ist, diese Module nicht zu benötigen. Ab openSUSE 11.2 ist das Paket kernel-xxx-base nur eine relativ kleine Teilmenge von kernel-xxx und für den normalen Anwender nicht zielführend.
  
== Erste Variante ==
+
== Bevorzugte Variante ==
 +
 
 +
Seit einigen openSUSE-Versionen ist es möglich, mit [[zypper]] (und damit auch mit YaST) mehrere Kernel desselben Typs zu installieren. Dazu muss in der Datei /etc/zypp/zypp.conf die Zeile
 +
multiversion = provides:multiversion(kernel)
 +
aktiviert werden.
 +
 
 +
Ab openSUSE 12.3 ist diese Einstellung standardmäßig aktiviert, die Anzahl der gleichzeitig installierten Kernel wird durch die Angabe
 +
multiversion.kernels = ...
 +
festgelegt, die möglichen Werte sind in der Datei /etc/zypp/zypp.conf angeführt.
 +
 
 +
== Früher notwendige Varianten ==
 +
 
 +
=== Erste Variante ===
  
 
Am einfachsten geht es, indem man ohne "den alten ohne Anker aus der rpm-db rauszuwerfen" (<code>--justdb</code> in der zweiten Variante), und einfach den neuen gewünschten Kernel installiert (Tip von j.engelh):
 
Am einfachsten geht es, indem man ohne "den alten ohne Anker aus der rpm-db rauszuwerfen" (<code>--justdb</code> in der zweiten Variante), und einfach den neuen gewünschten Kernel installiert (Tip von j.engelh):
Zeile 23: Zeile 35:
 
* [[Kernelbau]]
 
* [[Kernelbau]]
  
== Zweite Variante ==
+
=== Zweite Variante ===
  
Dazu wird zunächst der aktuelle Kernel aus der RPM-Datenbank entfernt.
+
Dazu wird zunächst der aktuelle Kernel aus der [[RPM]]-Datenbank entfernt.
  
 
  rpm -e --justdb kernel-default
 
  rpm -e --justdb kernel-default
Zeile 33: Zeile 45:
  
 
Nehmen wir an unser aktueller Kernel sei <code>kernel-2.6.5-7.104-default</code>.
 
Nehmen wir an unser aktueller Kernel sei <code>kernel-2.6.5-7.104-default</code>.
Da wir jetzt keinen RPM-Datenbank Eintrag mehr besitzen, können wir den neuen Kernel installieren. Entweder mit apt oder YaST oder via Kommandozeilen-Befehl <code>rpm -i kernel-default-2.6.x-y-default.i586.rpm</code>.
+
Da wir jetzt keinen RPM-Datenbank Eintrag mehr besitzen, können wir den neuen Kernel installieren. Entweder mit [[apt]] oder [[YaST]] oder via Kommandozeilen-Befehl <code>rpm -i kernel-default-2.6.x-y-default.i586.rpm</code>.
  
 
Unter openSUSE 11.1 ist diese Variante aufgrund von Abhängigkeitsproblem leider nicht mehr möglich.
 
Unter openSUSE 11.1 ist diese Variante aufgrund von Abhängigkeitsproblem leider nicht mehr möglich.
Zeile 68: Zeile 80:
 
  -rw-r--r--  1 root root 1556730 Dec  9 19:45 vmlinuz-2.6.8-20041209164842-default
 
  -rw-r--r--  1 root root 1556730 Dec  9 19:45 vmlinuz-2.6.8-20041209164842-default
  
Wichtig ist, zu kontrollieren, dass <code>vmlinuz</code> auf den neuesten installierten Kernel zeigt. Gleiches gilt für <code>initrd</code>.
+
Ab openSUSE 11.1 (und möglicherweise früher) genügt es jetzt im Normalfall zu überprüfen, ob der Kernel in <code>/boot/grub/menu.lst</code> richtig eingetragen wurde. Nur bei älteren Versionen ist es wichtig zu kontrollieren, dass <code>vmlinuz</code> auf den neuesten installierten Kernel zeigt. Gleiches gilt für <code>initrd</code>. Neuere openSUSE-Versionen schreiben nämlich nicht die Verknüpfung, sondern den vollständigen Dateinamen in die <code>/boot/grub/menu.lst</code>. Bei Bedarf muss darum zusätzlich zum vorhandenen Eintrag für den alten Kernel ein Eintrag für den neuen Kernel erstellt werden.  
  
Bei älteren (open)SUSE-Versionen wird die Verknüpfung verwendet, daher ist der Eintrag für den neuen Kernel (<code>vmlinuz</code>) in der Regel bereits in der <code>/boot/grub/menu.lst</code> enthalten. Damit unser alter Kernel aber ebenfalls im GRUB-Menü ausgewählt werden kann, ist eine kleine Änderung an der <code>/boot/grub/menu.lst</code> erforderlich. Es muss ein zusätzlicher Eintrag für den alten Kernel erstellt werden. Für unser Beispiel sollten die Einträge in der <code>/boot/grub/menu.lst</code> so aussehen:
+
Bei älteren (open)SUSE-Versionen wird die Verknüpfung verwendet, daher ist der Eintrag für den neuen Kernel (<code>vmlinuz</code>) in der Regel bereits in der <code>/boot/grub/menu.lst</code> enthalten. Damit unser alter Kernel aber ebenfalls im [[GRUB]]-Menü ausgewählt werden kann, ist eine kleine Änderung an der <code>/boot/grub/menu.lst</code> erforderlich. Es muss ein zusätzlicher Eintrag für den alten Kernel erstellt werden. Für unser Beispiel sollten die Einträge in der <code>/boot/grub/menu.lst</code> so aussehen:
  
 
  title linux-kernel-of-the-day
 
  title linux-kernel-of-the-day
Zeile 80: Zeile 92:
 
   initrd (hd0,0)/initrd-2.6.5-7.104-default
 
   initrd (hd0,0)/initrd-2.6.5-7.104-default
  
Neuere openSUSE-Versionen schreiben nicht die Verknüpfung, sondern den vollständigen Dateinamen in die <code>/boot/grub/menu.lst</code>, daher muss zusätzlich zum vorhandenen Eintrag für den alten Kernel ein Eintrag für den neuen Kernel erstellt werden.  
+
Hinsichtlich GRUB 2 sei auf den Artikel [[GRUB_2]] verwiesen.
 +
 
  
 
Nun kann man jederzeit einen neuen (experimentellen) Kernel installieren und hat den Kernel "SuSE-default" in der Hinterhand.
 
Nun kann man jederzeit einen neuen (experimentellen) Kernel installieren und hat den Kernel "SuSE-default" in der Hinterhand.
Zeile 86: Zeile 99:
 
[[Kernel|zurück zum Kernel]]
 
[[Kernel|zurück zum Kernel]]
  
[[Category:Kernel]]
+
[[Category:Kernel]] [[Category:Bootmanager]]

Aktuelle Version vom 23. Juni 2014, 20:18 Uhr

Diese Beschreibung wurde mit folgenden Distributionen getestet:
  • openSUSE 10.2, 11.0, 11.1, 11.3, 11.4, 12.1, 12.3, 13.1
  • SUSE Linux 10.0
  • SUSE Linux 9.3

Autor: oc2pus

Um mal mit einem kernel-of-the-day oder einem selbsterstellten Kernel rumzuspielen, sollte man sich einen kleinen Rettungsanker basteln. D.h. man hat mehrere Kernel zur Auswahl und kann im Falle eines Falles einen funktionsfähigen Kernel zum Booten verwenden.

Mit Ausnahme von openSUSE 11.1 besteht der kompilierte Kernel aus einer *.rpm-Datei. Bei openSUSE 11.1 sind es mit Ausnahme des Vanilla-Kernel drei *.rpm-Dateien (kernel-xxx, kernel-xxx-base und kernel-xxx-extra, xxx steht für den Kernel-Typ, z.B. default), die als Einheit betrachtet werden sollen; die Datei kernel-xxx-extra sollte nur dann weggelassen werden, wenn man ganz sicher ist, diese Module nicht zu benötigen. Ab openSUSE 11.2 ist das Paket kernel-xxx-base nur eine relativ kleine Teilmenge von kernel-xxx und für den normalen Anwender nicht zielführend.

Bevorzugte Variante

Seit einigen openSUSE-Versionen ist es möglich, mit zypper (und damit auch mit YaST) mehrere Kernel desselben Typs zu installieren. Dazu muss in der Datei /etc/zypp/zypp.conf die Zeile

multiversion = provides:multiversion(kernel)

aktiviert werden.

Ab openSUSE 12.3 ist diese Einstellung standardmäßig aktiviert, die Anzahl der gleichzeitig installierten Kernel wird durch die Angabe

multiversion.kernels = ...

festgelegt, die möglichen Werte sind in der Datei /etc/zypp/zypp.conf angeführt.

Früher notwendige Varianten

Erste Variante

Am einfachsten geht es, indem man ohne "den alten ohne Anker aus der rpm-db rauszuwerfen" (--justdb in der zweiten Variante), und einfach den neuen gewünschten Kernel installiert (Tip von j.engelh):

rpm -ihv kernel-default-2.6.18.6-jen43.i586.rpm

Wenn dieser Kernel beim nächsten Reboot funktioniert, dann kann man den anderen Kernel mit folgendem Befehl entfernen:

rpm -e kernel-default-2.6.18.2-34 

Und wer seinen Kernel selbst kompilieren will, der sollte sich das hervorragende HOWTO von gimpel anschauen:

Zweite Variante

Dazu wird zunächst der aktuelle Kernel aus der RPM-Datenbank entfernt.

rpm -e --justdb kernel-default

Die Dateien und Module des Kernels bleiben auf der Festplatte, nur der Datenbankeintrag verschwindet! Dies ist erforderlich, da sonst bei einem Kernel-Update genau dieses Dateien gelöscht würden und der neue Kernel installiert würde. Allerdings muss man den alten Kernel dann auch von Hand entfernen, wenn man diesen nicht mehr benötigt.

Nehmen wir an unser aktueller Kernel sei kernel-2.6.5-7.104-default. Da wir jetzt keinen RPM-Datenbank Eintrag mehr besitzen, können wir den neuen Kernel installieren. Entweder mit apt oder YaST oder via Kommandozeilen-Befehl rpm -i kernel-default-2.6.x-y-default.i586.rpm.

Unter openSUSE 11.1 ist diese Variante aufgrund von Abhängigkeitsproblem leider nicht mehr möglich.

Das Verzeichnis /boot

Durch die Installation werden die Links vmlinuz und initrd im Verzeichnis /boot angelegt. D.h der zuletzt installierte Kernel wird immer unter dem Namen vmlinuz zu finden sein.

Unser Verzeichnis /boot sollte nun so aussehen:

ls -al /boot
total 11246
drwxr-xr-x   4 root root    2048 Dec 10 07:03 .
drwxr-xr-x  22 root root     512 Dec 10 08:06 ..
-rw-r--r--   1 root root  115852 Jul 28 20:57 Kerntypes-2.6.5-7.104-default
-rw-r--r--   1 root root  741449 Jul 28 20:50 System.map-2.6.5-7.104-default
-rw-r--r--   1 root root  740002 Dec  9 19:45 System.map-2.6.8-20041209164842-default
lrwxrwxrwx   1 root root       1 Jun  7  2004 boot -> .
-rw-r--r--   1 root root   55554 Jul 28 20:57 config-2.6.5-7.104-default
-rw-r--r--   1 root root   57559 Dec  9 20:01 config-2.6.8-20041209164842-default
drwxr-xr-x   2 root root    1024 Oct 14 08:23 grub
lrwxrwxrwx   1 root root      35 Dec 10 07:03 initrd -> initrd-2.6.8-20041209164842-default
-rw-r--r--   1 root root 1383501 Aug  4 07:14 initrd-2.6.5-7.104-default
-rw-r--r--   1 root root 1385622 Dec 10 07:03 initrd-2.6.8-20041209164842-default
drwx------   2 root root   12288 Mar 11  2003 lost+found
-rw-r--r--   1 root root   84480 Jul 20 19:46 message
-rw-r--r--   1 root root   83147 Jul  2  2003 message.SuSEconfig.2003.07.09-14.54
-rw-r--r--   1 root root   79374 Jul 28 20:58 symvers-2.6.5-7.104-i386-default.gz
-rw-r--r--   1 root root   79146 Dec  9 20:03 symvers-2.6.8-20041209164842-i386-default.gz
-rw-r--r--   1 root root 1738635 Jul 28 20:57 vmlinux-2.6.5-7.104-default.gz
-rw-r--r--   1 root root 1856926 Dec  9 20:01 vmlinux-2.6.8-20041209164842-default.gz
lrwxrwxrwx   1 root root      36 Dec 10 07:00 vmlinuz -> vmlinuz-2.6.8-20041209164842-default
-rw-r--r--   1 root root 1469887 Jul 28 20:50 vmlinuz-2.6.5-7.104-default
-rw-r--r--   1 root root 1556730 Dec  9 19:45 vmlinuz-2.6.8-20041209164842-default

Ab openSUSE 11.1 (und möglicherweise früher) genügt es jetzt im Normalfall zu überprüfen, ob der Kernel in /boot/grub/menu.lst richtig eingetragen wurde. Nur bei älteren Versionen ist es wichtig zu kontrollieren, dass vmlinuz auf den neuesten installierten Kernel zeigt. Gleiches gilt für initrd. Neuere openSUSE-Versionen schreiben nämlich nicht die Verknüpfung, sondern den vollständigen Dateinamen in die /boot/grub/menu.lst. Bei Bedarf muss darum zusätzlich zum vorhandenen Eintrag für den alten Kernel ein Eintrag für den neuen Kernel erstellt werden.

Bei älteren (open)SUSE-Versionen wird die Verknüpfung verwendet, daher ist der Eintrag für den neuen Kernel (vmlinuz) in der Regel bereits in der /boot/grub/menu.lst enthalten. Damit unser alter Kernel aber ebenfalls im GRUB-Menü ausgewählt werden kann, ist eine kleine Änderung an der /boot/grub/menu.lst erforderlich. Es muss ein zusätzlicher Eintrag für den alten Kernel erstellt werden. Für unser Beispiel sollten die Einträge in der /boot/grub/menu.lst so aussehen:

title linux-kernel-of-the-day
  kernel (hd0,0)/vmlinuz root=/dev/sda7 vga=788
  initrd (hd0,0)/initrd
title linux-SuSE-default
  kernel (hd0,0)/vmlinuz-2.6.5-7.104-default root=/dev/sda7 vga=788
  initrd (hd0,0)/initrd-2.6.5-7.104-default

Hinsichtlich GRUB 2 sei auf den Artikel GRUB_2 verwiesen.


Nun kann man jederzeit einen neuen (experimentellen) Kernel installieren und hat den Kernel "SuSE-default" in der Hinterhand.


zurück zum Kernel