In Grub den zu bootenden Kernel festlegen

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
izi
Beiträge: 181
Registriert: 09.02.2009 22:17:27

In Grub den zu bootenden Kernel festlegen

Beitrag von izi » 08.07.2015 16:03:47

Hallo!
Ich bin mir nicht sicher ob das hier der richtige Bereich für meine Frage ist, aber wohl noch der am besten geeignetste. Wenn ich mich irre bitte verschieben. Danke.

Ich möchte in Grub eine zu bootenden Kernelversion zum Standard machen. Diese Kernelversion soll also standardmässig immer gebootet werden, egal welche Kernelversionen als Update reinkommen.
Geht das und wenn ja, wie mache ich das (am besten wäre mit Beispiel der relevanten Zeile in der (nehme ich mal an) /etc/default/grub.

Vielen Dank!
Gruß
Michi
<a href="viewtopic.php?f=15&t=152656">Das (bin) ich</a>

niesommer
Beiträge: 2493
Registriert: 01.10.2006 13:19:37
Lizenz eigener Beiträge: GNU General Public License

Re: In Grub den zu bootenden Kernel festlegen

Beitrag von niesommer » 08.07.2015 16:18:51

Hallo,
/etc/default/grub
GRUB_DEFAULT=0
Gibt an, welcher Eintrag im Menü standardmäßig hervorgehoben wird. Dieser Eintrag wird geladen, falls keine andere Auswahl getroffen wird. Die Zählung beginnt mit 0. Der dritte Eintrag im Menü würde also durch eine 2 hervorgehoben. Diese Vorgabe ist statisch.
Quelle: https://wiki.ubuntuusers.de/grub_2/konfiguration

Das ist hier ganz gut erklärt, bitte beachte das es sich hier um ubuntu und nicht um debian handelt.
Gruß niesommer

Benutzeravatar
smutbert
Beiträge: 8343
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: In Grub den zu bootenden Kernel festlegen

Beitrag von smutbert » 08.07.2015 20:56:30

Was imho leider bedeutet, dass das…
izi hat geschrieben: Diese Kernelversion soll also standardmässig immer gebootet werden, egal welche Kernelversionen als Update reinkommen.
Geht das und […]
…nicht so ohne weiteres möglich ist, weil mit jeder neueren zusätzlich installierten Kernelversion alle älteren in der Nummerierung weiter nach hinten rutschen.

update-grub verwendet Skripte in /etc/grub.d um die grub.cfg zu schreiben. Mein Lösungsvorschlag wäre den default auf 0 zu setzen

Code: Alles auswählen

GRUB_DEFAULT=0
und versuchen mit einem frisch angelegten Skript/etc/grub.d/09_defaultkernel (ausführbar machen nicht vergessen) das einen unveränderlichen Booteintrag schreibt dafür zu sorgen, dass der gewünschte Kernel als zusätzlicher Booteintrag an Position 0 landet. Das Skript könnte dann etwa so aussehen

Code: Alles auswählen

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-abc' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod btrfs
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  …
        else
          search --no-floppy --fs-uuid --set=root …
        fi
        echo    'Loading Linux 3.16.0-4-amd64 ...'
        linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=… ro quiet 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-3.16.0-4-amd64
}
Die ersten Zeilen sind wichtig und im wesentlichen eine Kopie von /etc/grub.d/40_custom — wir hätten also auch 40_custom anpassen können, aber das wird erst später ausgeführt und daher landen die entsprechenden Booteinträge am Ende und haben keine vorhersagbare Nummer.
Die Zeilen danach sind einfach nur eine Kopie des Booteintrages für den gewünschten Kernel aus der /boot/grub/grub.cfg → also nicht einfach von meinem Beitrag herauskopieren sondern aus deiner grub.cfg.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: In Grub den zu bootenden Kernel festlegen

Beitrag von rendegast » 08.07.2015 22:43:49

Code: Alles auswählen

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
Damit wird in der grub.cfg die savedefault() verwendet,
was den gebooteten Eintrag in grubenv für den nächsten Start hinterlegt.

Code: Alles auswählen

grub-editenv list
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
smutbert
Beiträge: 8343
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: In Grub den zu bootenden Kernel festlegen

Beitrag von smutbert » 09.07.2015 09:33:43

rendegast hat mich wieder einmal dazu gebracht die Dokumentation zu lesen

Code: Alles auswählen

$ info grub
vor allem das Kapitel 'Simple configuration'

Code: Alles auswählen

$ info -f grub -n 'Simple configuration'
und da vor allem den Absatz über GRUB_DEFAULT:
[…]

'GRUB_DEFAULT'
The default menu entry. This may be a number, in which case it
identifies the Nth entry in the generated menu counted from zero,
or the title of a menu entry, or the special string 'saved'. Using
the id may be useful if you want to set a menu entry as the default
even though there may be a variable number of entries before it.
For example, if you have:
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
...
}
then you can make this the default using:
GRUB_DEFAULT=example-gnu-linux
Previously it was documented the way to use entry title. While
this still works it's not recommended since titles often contain
unstable device names and may be translated
If you set this to 'saved', then the default menu entry will be
that saved by 'GRUB_SAVEDEFAULT' or 'grub-set-default'. This
relies on the environment block, which may not be available in all
situations (*Note Environment block::).
The default is '0'.

[…]
Man kann also nicht nur die Nummern sondern auch den Titel des Menüeintrages, wovon allerdings abgeraten wird, und auch eine id zur Auswahl des Defaulteintrages verwenden. Speziell letzteres erscheint mir am sinnvollsten.
Nimmt man den hypothetischen Booteintrag aus meinem vorigen Beitrag müsste man also

Code: Alles auswählen

GRUB_DEFAULT=gnulinux-simple-abc
setzen (in den echten Booteinträgen wird statt abc eine etwas längere id stehen).


Egal wie du es zu lösen versuchst, vergiß

Code: Alles auswählen

# update-grub
nicht, damit die Änderungen auch in der /boot/grub/grub.cfg landen.

Antworten