Pular para o conteúdo principal

GRUB 2



Esse post é um mega artigo sobre o GRUB 2, será uma pequena introdução sobre as novidades e também como instalar, atualizar entre outras coisas.
Algumas informações desse artigo foram tiradas de um tópico do fórum do ubuntu. Foi editado pelo Leonardo Goretti com ajuda do Sérgio, um aluno da Training Tecnologia.

Conhecendo o GRUB 2

O GRUB 2 foi introduzido no Ubuntu a partir da versão 9.10 (Karmic Koala). É um software Open Source. Ele é descendente do GRUB (GRand Unified Bootloader). Foi completamente reescrito para dar ao usuário flexibilidade e performance significativamente aumentadas. O GRUB anterior passa a ser referido como GRUB legacy.

Melhorias do GRUB 2

As melhorias em relação ao GRUB incluem :
- apoio de scripts
- módulo de carregamento dinâmico
- modo de recuperação
- menus personalizados
- temas
- suporte ao menu gráfico
- imagens iso de Live CD de boot diretamente do disco rígido
- nova estrutura de arquivos de configuração
- suporte universal a UUIDs (não apenas o Ubuntu)

Instalação do Grub 2

Para saber a versão instalada no seu sistema, digite no terminal :
grub-install -v

O GRUB 2 vem instalado por padrão no Ubuntu a partir da versão 9.10 (Karmic Koala).
O pacote do GRUB 2 é o grub-pc. O pacote grub-common também será instalado.
grub2 é um pacote simulado de transição, pode ser seguramente removido e é mostrado no Synaptic como não instalado.

Upgrade para GRUB 2

A atualização para GRUB 2 a partir do GRUB comum é relativamente fácil.
Os desenvolvedores decidiram não usar uma atualização automática para o GRUB 2 como padrão em instalações de atualização.
Quem fizer upgrade para o Ubuntu 9.10 pode continuar usando o GRUB legacy se desejar,
Para fazer a atualização para GRUB 2 :Upgrade para GRUB 2
Lembrando que o Grub2 do ubuntu, se difere em alguns setup’ s do Grub2 do Debian.

Estrutura de arquivos do GRUB 2

GRUB 2 incorpora um diretório totalmente revisado e uma hierarquia de arquivos.

Hierarquia de arquivos e diretórios

1-Arquivo /boot/grub/grub.cfg
É o que mais se assemelha ao /boot/grub/menu.lst do GRUB mas diferentemente desse o grub.cfg não se destina a ser editado.
Cada seção é claramente delimitada com “(### BEGIN)” e a referência do arquivo na pasta /etc/grub.d a partir da qual a informação foi gerada.
grub.cfg é atualizado executando o comando sudo update-grub e é automaticamente modificado quando há uma atualização ou instalação/remoção de kernel.
Por padrão, e sempre que o comando update-grub é executado, este arquivo é feito “somente leitura”. Isto porque a intenção é que o arquivo não seja editado manualmente.
O usuário também verá uma infinidade de arquivos *. mod na pasta /boot/grub . Esses arquivos são da natureza modular do GRUB 2 e são carregados necessariamente pelo GRUB 2.

2-Arquivo /etc/default/grub
Esse arquivo pode ser editado e configurado. Detalhes da configuração estão mais adiante em Configurando GRUB 2.

3-Diretório /etc/grub.d/
Os arquivos nessa pasta são lidos durante a execução do comando sudo update-grub e suas instruções são incorporadas ao/boot/grub/grub.cfg.
Os arquivos default nesta pasta são :
- 00_header : suas configurações normalmente são importadas de informações do /etc/default/grub e os usuários não precisam mudar esse arquivo.
- 05_debian_theme : configura splash image, cor do texto, cor de realce e tema. Na ausência de splash image esse arquivo configura um tema monocromático.
- 10_hurd : não usada.
- 10_linux : localiza os kernels para o sistema operacional em uso. Leva essa informação e estabelece os nomes apresentados no menu para estes kernels.
- 20_linux_xen : estabelece opção de maquinas em sistema de virtualização xen
- 20_memtest86+ : procura por /boot/memtest86+.bin e o inclue como opção no menu do GRUB 2.
- 30_os-prober : procura por Linux e outros sistemas operacionais. Resultados são colocados no grub.cfg baseando-se nos scripts desse arquivo.
- 40_custom : para adicionar entradas de menu personalizado que serão inseridas no grub.cfg depois de update-grub.

Configuração do GRUB 2

Alterações na configuração são normalmente feitas em /etc/defaul/grub e nos arquivos da pasta /etc/grub.d.
O arquivo /boot/grub/grub.cfg não deve ser editado pelo usuário; mudanças nesse arquivo são feitas pelos scripts de configuração.

Arquivo /etc/default/grub
É o principal arquivo de configuração para alterar as configurações padrão.
- GRUB_DEFAULT=0
Configura a entrada default pela posição. Como no GRUB a primeira entrada é zero, a segunda 1, etc,
- GRUB_DEFAULT=saved
Define a entrada de menu padrão com o que foi selecionado anteriormente (a última seleção).
- GRUB_DEFAULT=”xxxx”
Neste caso, a localização no menu não importa.
Exemplo: GRUB_DEFAULT=”Ubuntu, Linux 2.6.31-9-generic”
- GRUB_TIMEOUT= 5
Configura o tempo.
-GRUB_HIDDEN_TIMEOUT=0
O menu ficará oculto.
# GRUB_HIDDEN_TIMEOUT=0
O menu não será oculto
- GRUB_HIDDEN_TIMEOUT_QUIET=true
true = nenhuma contagem regressiva é exibida. A tela ficará em branco.
false = Um contador será exibido numa tela em branco durante o tempo do GRUB_HIDDEN_TIMEOUT.
#GRUB_GFXMODE=640×480
Descomente essa linha para mudar a resolução. Ela fornece resoluções suportadas pela placa de vídeo do usuário (640×480,
800×600, 1280×1024, etc). Aplica-se apenas a resolução do menu de boot.
Dica: Definindo a mesma resolução do sistema operacional o tempo de inicialização diminuirá ligeiramente.
- #GRUB_DISABLE_LINUX_RECOVERY=true
Descomente essa linha se não desejar o “Recovery” mode no menu.
“Recovery mode” para apenas um kernel, fazer uma entrada especial em/etc/grub/40_custom.
Diretório /etc/grub.d/

Entradas personalizadas no GRUB 2

O GRUB 2 permite criar menus personalizados que serão automaticamente adicionados ao menu principal quando o comando sudo update-grub é executado. Um arquivo 40_custom vazio está disponível para uso ou para servir de exemplo para criar menus personalizados. Aqui estão algumas considerações para menus personalizados:
- o nome do arquivo determina a ordem das seleções no menu. Nomes numérico são executados primeiro, seguido por nomes alfabéticos – entrada 10_linux aparecerá antes de 30_os prober, que será colocado antes de 40_custom, que irá preceder entrada-personalizada.
- todos os arquivos desse diretório são feitos executáveis para gerar entradas para o grub.cfg e os arquivos recém criados devem também ser feitos
executáveis :
sudo chmod +x /etc/grub.d/nome do arquivo. (40_custom)
- o conteúdo desse arquivo é adiconado ao grub.cfg sem alterações quando o comando sudo update-grub é executado.
- ao contrário do grub.cfg, arquivos personalizados podem ser editados a qualquer momento, não são só leitura, e podem ser propriedade do usuário, se ele desejar.
- o conteúdo não será alterado, depois de atualização ou quando novos kernels são adicionados ou removidos.
Caso você tenha atualização de kernel, deve-se voltar o grub2 ao estado original, e somente após a atualização, você voltará a personalização.

Criando menus personalizados no GRUB 2

Pode ser editado o arquivo /etc/grub.d/40_custom ou criado um novo. A maneira mais fácil de criar o conteúdo de um menu personalizado é copiar uma ou as entradas que o grub.cfg colheu de informações dos scripts. Depois de copiado, o conteúdo do 40_custom ou do novo arquivo criado pode ser adaptado a vontade.
De acordo com o arquivo personalizado padrão da amostra (etc/grub.d/40_custom/) as duas primeiras linhas de um arquivo personalizado em /etc/grub.d devem ser:
#!/bin/sh
exec tail -n +3 $0
Em todos os exemplos a seguir será usado o arquivo /etc/grub.d/40_custom.
Na prática podemos usar menus personalizados para, por exemplo :
1- Mudança nos títulos dos sistemas instalados.
As entradas de menu dos títulos derivam dos arquivos /etc/grub.d/10_linux para o Ubuntu e /etc/grub.d/30_os-prober para Windows e outros Linux. Menus personalizados funcionam como se fossem o menu.lst do GRUB legacy mas é preciso retirar o modo executável dos dois arquivos acima descritos depois de feita a alteração :
Código:
desabilitando os scripts
$sudo chmod -x /etc/grub.d/10_linux /etc/grub.d20_memtest /etc/grub.d/30_os-prober
Como as alterações de kernel são muito frequentes no Ubuntu, será preciso tornar o arquivo /etc/grub.d/10_linux novamente executável nessas alterações, para que a mudança seja incluida no grub.cfg; o processo de mudança no título deve então ser refeito. O mesmo se aplica para para alterações de Windows e outros Linux.
Depois de toda e qualquer alteração é preciso executar sudo update-grub para surtir efeito.
A-Alteração nos títulos do Ubuntu e Windows.
I- Abrir o arquivo /boot/grub/grub.cfg em Locais > Computador > Sistema de Arquivos > boot > grub > grub.cfg.
Ou editar pelo Terminal : sudo gedit /boot/grub/grub.cfg.
II- Para o Ubuntu copiar a primeira entrada do kernel no início do arquivo /etc/grub.d/10_linux.
Para o Windows copiar a entrada correspondente ao início do arquivo /etc/grub.d/30_os-prober.
Ubuntu (copiar) :
### BEGIN /etc/grub.d/10_linux ###
menuentry ‘Ubuntu, com Linux 2.6.32-22-generic’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root=’(hd0,3)’
search –no-floppy –fs-uuid –set e0e87629-8a5a-49a6-b7c6-d90f93fbcf5d
linux /boot/vmlinuz-2.6.32-22-generic root=UUID=e0e87629-8a5a-49a6-b7c6-d90f93fbcf5d ro quiet splash
initrd /boot/initrd.img-2.6.32-22-generic
}
Windows (copiar) :
### BEGIN /etc/grub.d/30_os-prober ###
menuentry “Windows 7 (loader) (on /dev/sda1)” {
insmod ntfs
set root=’(hd0,1)’
search –no-floppy –fs-uuid –set bc1c7d2e1c7ce534
chainloader +1
}
III- Editar o arquivo /etc/grub.d/40_custom
Código:
sudo gedit /etc/grub.d/40_custom
colar as entradas copiadas do grub.cfg e fazer a mudança dos títulos :
#!/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.
## BEGIN /etc/grub.d/10_linux ###
menuentry “Debian” –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root=’ (hd0,2) ‘
search –no-floppy –fs-uuid –set a4d801dd-55fd-4971-b64b-c9914d1cb468
echo Carregando Linux false …
linux /boot/vmlinuz-2.6.32-16-generic root=UUID=a4d801dd-55fd-4971-b64b-c9914d1cb468 ro quiet
echo Carregando ramdisk inicial …
initrd /boot/initrd.img-2.6.32-16-generic

}
### BEGIN /etc/grub.d/30_os-prober ###
menuentry “Windows 7″ {
insmod ntfs
set root=’ (hd0,1) ‘
search –no-floppy –fs-uuid –set bc1c7d2e1c7ce534
chainloader +1
}
Salvar as alterações.

Outros Linux = mesmo modo.
Lembrando :
Nas atualizações de kernel do Ubuntu/Debian será preciso tornar o arquivo /etc/grub.d/10_linux novamente executável, para que a alteração seja incluida no grub.cfg (o mesmo se aplica para o arquivo /etc/grub.d/30_os-prober na troca de Windows ou outro Linux); o processo de mudança no título deve então ser refeito.
Depois de toda e qualquer alteração é preciso executar
#sudo update-grub.
Considerações sobre arquivos personalizados e edição do arquivo /boot/grub/grub.cfg.
O arquivo grub.cfg pode também ser editado e modificado desde que seja dada permissão para isso.
Para poder modificar : sudo chmod +w /boot/grub/grub.cfg.
Para editar : sudo vim /boot/grub/grub.cfg.
Seria simples como mudar o menu.lst do GRUB legacy se essa permissão fosse estável e o grub.cfg não fosse sobrescrito mas não é isso que acontece.
Por padrão, e sempre que o comando update-grub é executado, o arquivo grub.cfg é feito “somente leitura” e é sobrescrito sempre que houver uma atualização, um kernel for adicionado/removido ou o usuário executar update-grub.
Dá menos trabalho criar um arquivo personalizado que, a não ser que haja intervenção do usuário, não será sobrescrito e será sempre executável. As alterações devem ser feitas no arquivo /etc/default/grub e nos arquivos do diretório /etc/grub.d/40_custom

Colocando imagens no grub2

ATENÇÃO: As configurações diferem em relação Ubuntu e Debian.
GRUB 2 Splash Images
Instale o pacote padrão GRUB 2 splash images :
Código:
# apt-get install grub2-splashimages
A localização padrão para essas imagens é /usr/share/images/grub.

Configurando splash images

No Debian 6

#vim /usr/share/desktop-base/grub_background.sh, nele edite o caminho da imagem e as cores. No grub_background.sh verá 3 linhas de comando edite o endereço da imagem desejado, logo abaixo edite as cores do grub….como exemplo segue abaixo:
WALLPAPER =/usr/share/images/grub/imagem_escolhida.extensão
COLOR_NORMAL=light-gray/black
COLOR_HIGHLIGHT=white/black
Nestas linha você poderá alterar endereço de imagem e tipo de cores conforme sua vondade
salve saia
#update-grub

No ubuntu

As splash images do GRUB 2 são controladas pelo arquivo /etc/grub.d/05_debian_theme
# vim /etc/grub.d/05_debian_theme
dentro do aquivo sete o endereço da imagem que deseja, assim ao reiniciar o grub estará com sua imagem.
Não se esqueça de trabalhar as cores do menu.
Lembre-se de que você pode escolher qualquer imagem, basta você colocar o enderço desejado, ou copiar para /usr/share/images/grub, assim sete no arquivo o endereço, salve , saia e atualize o grub: #update-grub

Escalando privilégios pelo Grub2

Aqui nós vamos ver como invadir o sistema, escalando privilégios de root no grub2. Vamos lá:
Ao iniciar o sistema, pare o tempo de contagem regressiva do grub2, leia atentamente o que o menu inferior lhe diz. Tecle ‘e’ para edição de linha do grub. Pronto, assim você estará tendo totais condições de alterar dados de configuração do grub. Mas lembre-se que as alterações estão em memória cache.
Procure a linha de comando da imagem do kernel como exemplo abaixo:

menuentry ‘Ubuntu, com Linux 2.6.32-22-generic’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root=’(hd0,3)’
search –no-floppy –fs-uuid –set e0e87629-8a5a-49a6-b7c6-d90f93fbcf5d
linux /boot/vmlinuz-2.6.32-22-generic root=UUID=e0e87629-8a5a-49a6-b7c6-d90f93fbcf5d ro quiet splash
initrd /boot/initrd.img-2.6.32-22-generic
}

Nesta linha você apagará o ‘ ro quiet splash’ e incluirá rw init=/bin/bash. Vamos as explicações:
‘ro’ declara que o usuário acessará o sistema somente com read only, ou seja, teria que logar no sistema com usuário e senha para se tornar root.
Trocamos para ‘rw’ read and writer….ou seja já teriamos condições de ler e executar certos diretórios e, por assim chamaria o comando init=/bin/bash, ou seja, o init, será inicializado chamando o bash, assim já estaria em situação root.
Note que, ao entrar no sistema você está como root@none.

Protegendo o grub com usuário e senha

Rode o comando:
#grub-mkpasswd-pbkdf2 >> /etc/grub.d/00_header
Coloque a senha “ não aparecerá nada”
Repita a senha “ não aparecerá nada”

Vamos às explicações:

O ‘>>’, faz com que todas as informações sejam acrescidas ao final do arquivo setado. No caso o 00_header
após isso, edite o 00_header, verá a senha ao final desse arquivo, apague o que for necessário deixando da forma abaixo, incluindo e apagando o que for preciso.
cat << EOF
set superusers=”testuser”
password_pbkdf2 testuser grub.pbkdf2.sha512.10000.706A070CD168B759801D2790C6D48D5C3842B9165CF08600918CD9A496B6BFF9CD9BB8F7C99DEC431DF3AD0D466709ECE041FC00C5C1B58F00A879E0322959B7.6FC5058001DFFC1CD6B35F9A5DA66ED6C8745E4999E064E712C9BF302E8F2547CD0B591C33A340F229FD79D2252E23CFC41410C9A3300537E54C9CE6F7008100
EOF
Onde testeuser é o usuário que você escolher.
Acima as linha não foram formatadas de forma igual ao do arquivo, mas após testuser grub-mkpasswd-pbkdf2……………..

Lembre-se de rodar
#update-grub
Ao reiniciar o sistema verá que se solicitar a tecla de edição “e” será solicitado usuário e senha.

Entradas para boot de imagem ISO do Ubuntu.

A- Imagem ISO do Live CD

menuentry “10.04 on /dev/sda5″ {
loopback loop (hd0,5)/ubuntu-10.04-desktop-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-10.04-desktop-amd64.iso noprompt
initrd (loop)/casper/initrd.lz
}

Essa entrada é para o Live CD do Ubuntu 10.04 numa partição NTFS em /dev/sda5.
B- Imagem ISO do Alternate CD

menuentry “Lucid Altenate on /dev/sdb,1″ {
loopback loop (hd1,1)/lucid-alternate-amd64.iso
linux (loop)/install/vmlinuz boot=install iso-scan/filename=/lucid-alternate-amd64.iso noprompt
initrd (loop)/install/netboot/ubuntu-installer/amd64/initrd.gz
}

Essa entrada é para o Alternate CD do Ubuntu 10.04 no segundo HD (/dev/sdb,1).
Essas entradas são para instalação do Ubuntu direto da imagem ISO no HD.
Quem quiser experimentar consulte :
Instalação do Ubuntu sem CD ou Pen-Drive.

Retirando Entradas do GRUB 2

Retirando Kernel(s) antigo(s)

No Synaptic em Procurar digite o kernel, ex.: 2.6.31-14-generic.
Marque para remover as citações desse kernel (linux-headers e linux-image).

Retirando Recovery mode

Código:
sudo gedit /etc/default/grub
GRUB_DISABLE_LINUX_RECOVERY=”true” (retira)
#GRUB_DISABLE_LINUX_RECOVERY=”true” (adiciona)

Retirando Memtest86+

Código:
sudo chmod -x /etc/grub.d/20_memtest86+

Criando CD de boot do GRUB 2

CD de Boot simples do GRUB 2

Com o Ubuntu funcionando normal abra um Terminal e digite :
Código:
grub-mkrescue grub2.iso
(para o 9.10)
Código:
grub-mkrescue –output=grub2.iso
(para o 10.04)
Pode mudar grub2.iso por outro (cdboot.iso, por exemplo).
A imagem ISO gerada vai para a sua pasta pessoal (Locais > Pasta pessoal).
Grave a imagem iso em CD.

CD multiboot do GRUB 2

Com o Ubuntu inicializado e funcionando normal entre no Terminal e digite :

Código:
sudo apt-get install grub-rescue-pc

A imagem ISO vai para /usr/lib/grub-rescue. Grave a imagem ISO em CD.
Por hoje é só pessoal, em breve teremos novos posts. Gostou do artigo? Comente!

Comentários