GRUB_DEFAULT parece ser ineficaz ao tentar inicializar um kernel personalizado por ID no Debian 8

4

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

    
por Edd Barrett 24.07.2017 / 10:55

1 resposta

2

No final, consegui inicializar meu kernel com a seguinte linha em /etc/default/grub :

GRUB_DEFAULT=gnulinux-advanced-197f20c1-1808-41b5-831f-b85a40‌​358757>gnulinux-3.16‌​.36krunsystickless+-‌​advanced-197f20c1-18‌​08-41b5-831f-b85a403‌​58757

A documentação é enganosa. Você não pode simplesmente colocar o ID em GRUB_DEFAULT se houver um submenu envolvido. Você tem que pensar em termos de navegar pelo menu do grub usando (potencialmente muitos) ids. O > acima (que eu não encontrei nos documentos btw) significa "entrar neste submenu".

Espero que isso ajude os outros a se confundirem com esse mesmo problema.

Felicidades

    
por 27.07.2017 / 14:33