Como vencer o GRUB2 na submissão?

1

Eu tentei o GRUB2 em diferentes versões do Ubuntu (12.04 e 13.04) em várias máquinas e não importa o que eu faça, não consigo fazer com que ele se comporte. Parece uma ótima idéia (abstrair os arquivos de configuração através de uma CLI), mas realmente não funciona para mim.

Aqui está um exemplo simples:

$ grub-set-default 'Ubuntu, with Linux 3.5.0-45-generic'
$ grub-editenv list
saved_entry=Ubuntu, with Linux 3.5.0-45-generic
$ update-grub && reboot
#.... wait for reboot....
$ uname -r
3.8.0-29-generic

Eu tentei editar /etc/default/grub , bem como grub-reboot , e adicionando GRUB_DEFAULT=saved , mas sem sucesso. Eu normalmente acabo embaralhando a ordem dos arquivos de configuração em /etc/grub.d para fazer o que eu preciso. Obviamente, editando um menu.lst foi muito preferido para este shenanigans.

Alguém já teve algum desses recursos funcionando? Levou algum truque? Eu acho difícil acreditar que isso possa ser quebrado tão horrivelmente e eu sinto que estou claramente perdendo algo.

    
por zje 03.02.2014 / 18:05

2 respostas

4

Eu nunca tive muita sorte com as configurações abstratas, principalmente devido a minha configuração lvm + mdadm e não atualizando meu kernel como "distro way". Felizmente, você pode largar tudo isso e rolar seu próprio grub.cfg muito similar a como menu.lst funcionou.

Uma amostra grub.cfg que é extraída da minha é:

set timeout=15

menuentry 'Linux 3.10.17 (sde) kernel-3.10.17-g' {
  root=hd0,1
  linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
  initrd /boot/initrd-3.10.17-g
}

menuentry 'Linux 3.10.17 (sdf) kernel-3.10.17-g' {
  root=hd1,1
  linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
  initrd /boot/initrd-3.10.17-g
}

As maiores diferenças do grub-legacy são como root= é especificado, a menuentry specification e a palavra-chave mudam de kernel para linux para especificar o kernel. Se você tem um menu.lst que funciona para você, você pode facilmente adaptá-lo para funcionar como grub.cfg , abordando essas alterações. Se você precisar de alguma funcionalidade extra do grub2 (carregando módulos grub, etc), você pode pegar linhas relevantes dos scripts de distro e adicioná-las ao seu arquivo.

    
por 03.02.2014 / 18:45
0

@ A resposta de casey me inspirou a criar essa solução com base no arquivo /etc/grub.d/40_custom vazio (a única diferença é que meu arquivo tem como prefixo o primeiro):

$ cat /etc/grub.d/06_zje
#!/bin/sh
exec tail -n +3 $0
#Copied this idea from 40_custom
menuentry 'Ubuntu 12.04.3, with Linux 3.5.0-45-generic' --class ubuntu --class gnu-linux --class gnu --class os {
  recordfail
  gfxmode $linux_gfx_mode
  insmod gzio
  insmod part_msdos
  insmod ext2
  linux /boot/vmlinuz-3.5.0-45-generic root=UUID=be201df4-2268-419a-92ea-fd123a5acdef ro
  initrd  /boot/initrd.img-3.5.0-45-generic
}

É total hackery, mas eu posso mudar minha ordem de inicialização programaticamente usando um script que executa estes comandos:

ln -sf /etc/grub.d/06_zje /etc/grub.d/01_first && update-grub

Para diferentes sistemas operacionais, criei arquivos diferentes em /etc/grub.d , por exemplo. /etc/grub.d/07_xen

    
por 03.02.2014 / 21:55