Eu construí um kernel customizado em uma máquina Debian 8, e eu quero configurá-lo como padrão. Uma tarefa aparentemente simples, mas não consigo que funcione para a vida de mim.
Eu construí meu kernel usando o código-fonte oficial (via git), não usando o tarball do fornecedor fornecido pelo meu debian. Uma vez construído, instalei o kernel e os módulos com:
$ sudo make modules_install install
Isso instalou uma nova entrada de menu no grub, o que de fato funciona se você selecioná-lo manualmente no momento da inicialização. Então isso é bom.
Agora, para que isso ocorra por padrão, devo editar /etc/default/grub
e alterar GRUB_DEFAULT
. Na parte superior do arquivo, há um comentário apontando o usuário para uma página de informações, que diz:
'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'.
Primeiro, não está claro na prosa se um "id" é o mesmo que um "título". Além disso, parece que eu deveria usar a string após o --id
na configuração gerada do grub.
Então, make install
inseriu o seguinte em /boot/grub/grub.cfg
:
menuentry 'Debian GNU/Linux, with Linux 3.16.36krunsystickless+' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.36krunsystickless+-advanced-197f20c1-1808-41b5-831f-b85a40358757' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 197f20c1-1808-41b5
-831f-b85a40358757
else
search --no-floppy --fs-uuid --set=root 197f20c1-1808-41b5-831f-b85a40358757
fi
echo 'Loading Linux 3.16.36krunsystickless+ ...'
linux /boot/vmlinuz-3.16.36krunsystickless+ root=UUID=197f20c1-1808-41b5-831f-b85a40358757 ro quiet console=ttyS0,115200n8 intel_psta
te=disable
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.16.36krunsystickless+
}
Onde, anteriormente, no arquivo $menuentry_id_option
está definido:
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
Então, presumivelmente, devo definir GRUB_DEFAULT
em /etc/grub/default
para:
gnulinux-3.16.36krunsystickless+-advanced-197f20c1-1808-41b5-831f-b85a40358757
Em seguida, execute:
$ sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.36softdevnohzfullall
Found initrd image: /boot/initrd.img-3.16.36softdevnohzfullall
Found linux image: /boot/vmlinuz-3.16.36krunsystickless+
Found initrd image: /boot/initrd.img-3.16.36krunsystickless+
Found linux image: /boot/vmlinuz-3.16.36krunsystickless+.old
Found initrd image: /boot/initrd.img-3.16.36krunsystickless+
Found linux image: /boot/vmlinuz-3.16.0-4-amd64
Found initrd image: /boot/initrd.img-3.16.0-4-amd64
done
Antes de finalmente reinicializar.
Mas isso não parece funcionar. O mesmo kernel de antes é inicializado. Alguém sabe por quê?
Outras coisas que tentei:
- Índice numérico
GRUB_DEFAULTS
- parece não ter efeito.
- Escapando o sinal de mais no id do kernel.
-
grub-set-default
Eu vou olhar para feature_menuentry_id
agora, mas tenho a sensação de que será um arenque vermelho. Se alguém puder me livrar da minha miséria enquanto isso, ficarei muito grato.
Obrigado