segunda-feira, 9 de novembro de 2009

Grub2

O Ubuntu 9.10 tem uma novidade. É o grub2.
Se você quiser alterar o menu do Grub2, o procedimento é diferente do Grub Legacy. O Grub2 já não tem o menu.lst.

Porque razão mudaram o Grub?

A Principal razão para isso, é a necessidade de adicionar novas funcionalidades.
Só que na opinião dos devenlopers, o Grub chegou a uma fase insustentável. Adicionar novas funcionalidades no Grub, é uma tarefa difícil de realizar por causa do código confuso, e por outras impossibilidades técnicas. Ou seja, para adicionar novos recursos no Grub, seria mais fácil escrever o código do zero.

Então quais as vantagens do Grub2?

Uma das principais vantagens do grub2 é que o conteúdo do menu, é automaticamente actualizado quando o kernel recebe updates.
Por exemplo:
No Ubuntu quando havia actualizações no kernel, após a "instalação" do novo kernel, aparece uma janela com algumas opções:
Usar o novo menu.lst?
Manter o menu menu.lst?
Ver diferenças entre os dois?
etc...
Se escolhermos a primeira opção ele adiciona um novo item no menu com o novo kernel, mas se você tiver outra distribuição Linux instalada , ele não consegue "ver", e não adiciona no novo menu.lst.
Se escolhermos a segunda opção ele mantém o menu.lst mas quando reiniciarmos a maquina ele vai continuar a dar boot no kernel antigo. A solução é editar manualmente o menu.lst.

Com o Grub2 esse problema fica resolvido. Porque o Grub irá adicionar ao menu a última versão do kernel que está disponível no seu sistema.
Mesmo que você escolha "manter a versão actualmente instalada" o update-grub vai listar o novo Kernel.


O /boot/grub/menu.lst é subistituido pelo /boot/grub/grub.cfg mas este não pode ser editado.

Então como editar o Grub2?


As alterações serão feitas no /etc/default/grub. Basicamente o que ele contém é um pouco parecido com o que se encontrava disponível na parte superior do arquivo /boot/grub/menu.lst. Sempre que o root editar o /etc/default/grub, é necessário executar o comando "update-grub" para que a nova configuração seja escrita no grub.cfg.

Estas são algumas opções que estão dentro do /etc/default/grub

GRUB_DEFAULT=0


Define qual a entrada "default" (por omisão). Tal como acontecia no "antigo" Grub, 0 (zero) é o primeiro item do menu, 1 será o segundo, etc..


GRUB_DEFAULT=saved


Esta opção serve para "guardar" a nossa última escolha no menu do Grub. Assim no proximo boot a ultima opção seleccionada passa a ser a "default" e assim sucessivamente.


GRUB_TIMEOUT=5


Já existia no Grub Legacy. A sua função se mantem. São os segundos em que o grub "espera" até carregar automaticamente entrada "default"
Se usar o valor -1 o Grub não da boot até que seja escolhida uma opção.

Para que serve a pasta /etc/grub.d/?

Os arquivos desta pasta serão lidos durante execução do comando "update-grub". Os scripts que estão nesta pasta são os responsáveis por escrever no arquivo /boot/grub/grub.cfg

Os ficheiros são executados por ordem crescente. Primeiro 00_ depois 05_ 10_ 40_ etc...
A ordem em que os scrips são executados vai definir a localização de cada item no menu.

Estes são os script que estão em /etc/grub.d/:

00_header

Este script é responsável por ler o que está escrito no /etc/default/grub.


05_debian_theme

A função deste scrip é configurar opções relacionadas com o aspecto do Grub (Imagem de fundo, cor do texto e temas)

10_hurd

Localiza kernels hurd.

10_linux

Localiza kernels Linux com base no comando "lsb_release -i -s" que retoma o nome da distribuição.

20_memtest86+

Se o arquivo /boot/memtest86+.bin existir, é adicionado como item do menu.

30_os-prober

Procura por outros OS's para adicionar no menu.


40_custom

É aqui que você deve adicionar novos itens no menu do Grub2. Não se esqueça de usar o comando update-grub após a alterações.

Vamos a um exemplo:

No Grub (antigo) eu adicionei uma distribuição com o nome de "Caixa Mágica"


title linux Caixa Magica 12
kernel (hd1,4)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/hdb5 resume=/dev/hda2 splash=silent vga=788
initrd (hd1,4)/boot/initrd.img

Veja como fica no Grub2. Abrimos o /etc/Grub.d/40_custom e adicionamos no final do arquivo:


menuentry "Caixa Mágica 12" {
set root=(hd1,5)
linux /boot/vmlinuz BOOT_IMAGE=linux root=/dev/hdb5 resume=/dev/hda2 splash=silent vga=788
initrd /boot/initrd.img
}

Repare que o Grub2 reconhece as partições de forma diferente. O hd1,4 passou a ser hd1,5.
Se for um hd0,2 passa a ser hd0,3 etc...

Com o grub2 é possível dar boot de uma imagem iso que esteja guardada no disco. Você pode usar o loopback no Grub2 para "montar" a imagem iso :)
Veja um exemplo para dar boot numa imagem ISO:


menuentry "Ubuntu Live - ubuntu.iso" {
set root=(hd1,7)
loopback loop /ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso --
initrd (loop)/casper/initrd.lz
}


Neste exemplo a imagem ISO do Ubuntu está na raiz ( / ) da partição hd1,7
E pronto! Feche o arquivo e para actualizar o Grub2 execute o comando update-grub.
No próximo boot as novas opções estarão disponíveis no Menu do Grub2.

Isto é apenas uma explicação básica, do Grub2.
Se quiser estudar mais a fundo o Grub2 recomendo a leitura das seguintes páginas:
https://help.ubuntu.com/community/Grub2
https://wiki.ubuntu.com/Grub2
Veja aqui uma lista de comandos do Grub Legacy, e do Grub2, e as suas diferenças:
http://grub.enbug.org/CommandList
Se você encontrou algum erro no texto, é só comentar para melhorar o texto :)

Nenhum comentário :