Skip to content
Snippets Groups Projects
Commit 97a51a2f authored by Odair M.'s avatar Odair M.
Browse files

feat(Baremetals): improve grub documentation

parent e18951c2
No related branches found
No related tags found
No related merge requests found
Baremetals
##########
Configuração básica de uma servidora.
##########
Introdução
......@@ -560,11 +561,251 @@ defini parametros para que:
Configuração do boot
********************
Multi boot com grub
===================
A ideia central é ter um *GRUB* que chame outros *GRUBS*. Para isso temos que
criar nosso proprio ``grub.cfg``, em vez de gerar automáticamente. Vamos
dividir o arquivo ``grub.cfg`` em partes e depois montamos ele inteiro:
.. contents:: Etapas
:local:
:depth: 1
Menu e escolha padrão
----------------------------------------------------------------------
A primeira etapa é fazer o menu e escolha padrão:
.. code:: cfg
# configuracao para boot padrao
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
O código serve para que sempre selecione uma entrada como padrão e use, caso
contrário o grub fica esperando o usuário escolher manualmente.
Configuração de video
---------------------
A configuração de video serve para mostrar na tela as opções do grub. Ela se dá
por carregar módulos de videos e por mostrar também na porta serial.
Faz o load dos módulos de videos
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: cfg
# configuracao de video
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
# Ativa o serial, util para o IPMI
serial --unit=0 --speed=115200
.. note::
Porta serial:
O códio ``serial --unit=0 --speed=115200`` indica que o grub imprimirá o
output na porta serial 0 com velocidade de 115k.
Carrega a fonte:
^^^^^^^^^^^^^^^^
Outro ponto do video é o carregamento das fontes que será utilizado, isso é
feito com o código abaixo:
.. code:: cfg
# Procura pela fonte,
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod part_gpt
insmod mdraid09
insmod lvm
insmod ext2
set root='mduuid/bbb4a32abcf8eb415241990451489ef3' # Alterado Odair
# alterado por odair
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/bbb4a32abcf8eb415241990451489ef3' f8e0f46a-e650-422e-a4ce-b286cd8010c9
else
search --no-floppy --fs-uuid --set=root f8e0f46a-e650-422e-a4ce-b286cd8010c9
fi
font="/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=C
insmod gettext
fi
.. note::
Simplificação:
Talvez seja possível simplificar o código assumindo que a fonte sempre está
em ``/boot/grub/unicode.pf2``, o que é verdade, visto que nós que estamos
gerenciando o grub manualmente.
Redirecionando input e output
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A próxima etapa é fazer o redirecionamento do input e output.
.. code:: cfg
# aceita input tanto do console quanto do IPMI
terminal_input console serial
# Saída tanto em video quanto no serial para IPMI
terminal_output gfxterm serial
Basicamente fazemos o redirecionamento para video e para o serial.
Configuração de timeout
-----------------------
A função dessa parte é desenhar o timeout até que a opção padrão seja escolhida.
.. code:: cfg
# Configuração de timeout
if [ "${recordfail}" = 1 ] ; then
set timeout=30
else
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
fi
GFXMODE:
--------
Eu não tenho certeza se esse fragmento de código é realmente necessário. Por
enquanto estou mantendo, mas é necessário pesquisar sobre o que o *gfxmode* faz
e se é necessário para o que estamos fazemos.
.. code:: cfg
# ------------- Talvez remover essa parte ----------------
function gfxmode {
set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
Opção no menu:
--------------
O template a ser seguido segue o código abaixo:
.. code:: cfg
menuentry 'TEMPLATE' --class TEMPLATE.DISTRO --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-TEMPLATE-f940644b-e20b-4086-b916-8d57afd80bfb' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod part_gpt
insmod diskfilter
insmod mdraid09
insmod ext2
insmod chain
set root='mduuid/bbb4a32abcf8eb415241990451489ef3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/bbb4a32abcf8eb415241990451489ef3' f8e0f46a-e650-422e-a4ce-b286cd8010c9
else
search --no-floppy --fs-uuid --set=root f8e0f46a-e650-422e-a4ce-b286cd8010c9
fi
configfile /TEMPLATE/grub/grub.cfg
}
O que está tudo em *uppercase* deve ser subtituído pela informação da entrada.
ou seja:
* `<TEMPLATE>`: nome da entrada.
* `<TEMPLATE.DISTRO>`: nome da distribuíção, por exemplo, **debian**
Deve ter um diretório chamado com o nome do TEMPLATE dentro do diretório do
boot, por exemplo: **recover** com configrações de boot para fazer linkar com
outro grub.
.. note::
mduuid:
O *mduuid* é o UUID do volume raid boot, é possível obter com o comando
``lsblk -o NAME,SIZE,UUID`` e dever remover os ``-``.
.. note::
UUID:
O uuid: ``f8e0f46a-e650-422e-a4ce-b286cd8010c9`` é o UUID do sistema de
arquivo do /boot, também obtido via ``lsblk -o NAME,SIZE,UUID``.
Configuração de layout de boot
==============================
A ideia é montar a partição de boot fazer os *bind* necessários para que seja feito o chain loader
corretamente. Os passos são:
.. contents:: Passos:
:local:
:depth: 1
Monte o array:
--------------
.. code:: shell
......@@ -591,12 +832,11 @@ Crie o arquivo ``/boot_alt/grub/grub.cfg`` com o conteúdo:
.. code:: cfg
# variavel do grubenv
# configuracao para boot padrao
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
# opção default
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
......@@ -628,6 +868,7 @@ Crie o arquivo ``/boot_alt/grub/grub.cfg`` com o conteúdo:
save_env saved_entry
fi
}
# configuracao de video
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
......@@ -641,33 +882,48 @@ Crie o arquivo ``/boot_alt/grub/grub.cfg`` com o conteúdo:
insmod video_cirrus
fi
}
# Ativa o serial, util para o IPMI
serial --unit=0 --speed=115200
# Procura pela fonte,
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_msdos
insmod part_msdos
insmod diskfilter
insmod mdraid1x
insmod part_gpt
insmod part_gpt
insmod mdraid09
insmod lvm
insmod ext2
set root='mduuid/580c789518a82e6edb8f4f6ef3e533b5'
set root='mduuid/bbb4a32abcf8eb415241990451489ef3' # Alterado Odair
# alterado por odair
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/580c789518a82e6edb8f4f6ef3e533b5' 47d567cb-4401-41b1-93ab-16e8096071ff
search --no-floppy --fs-uuid --set=root --hint='mduuid/bbb4a32abcf8eb415241990451489ef3' f8e0f46a-e650-422e-a4ce-b286cd8010c9
else
search --no-floppy --fs-uuid --set=root 47d567cb-4401-41b1-93ab-16e8096071ff
search --no-floppy --fs-uuid --set=root f8e0f46a-e650-422e-a4ce-b286cd8010c9
fi
font="/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=pt_BR
set lang=C
insmod gettext
fi
terminal_output gfxterm
# aceita input tanto do console quanto do IPMI
terminal_input console serial
# Saída tanto em video quanto no serial para IPMI
terminal_output gfxterm serial
# Configuração de timeout
if [ "${recordfail}" = 1 ] ; then
set timeout=30
else
......@@ -681,38 +937,61 @@ Crie o arquivo ``/boot_alt/grub/grub.cfg`` com o conteúdo:
fi
fi
#--class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-be7d7025-4b62-461a-addf-17505b8dc2b4'
menuentry 'Template' $menuentry_id_option 'gnulinux-simple-template-47d567cb-4401-41b1-93ab-16e8096071ff' {
# ------------- Talvez remover essa parte ----------------
function gfxmode {
set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
# -----------------------------------------------------------
# Aqui vai cada entrada, o template é:
# menuentry 'TEMPLATE' --class TEMPLATE.DISTRO --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-TEMPLATE-f940644b-e20b-4086-b916-8d57afd80bfb' {
# load_video
# insmod gzio
# if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
# insmod part_gpt
# insmod part_gpt
# insmod diskfilter
# insmod mdraid09
# insmod ext2
# insmod chain
# set root='mduuid/bbb4a32abcf8eb415241990451489ef3'
# if [ x$feature_platform_search_hint = xy ]; then
# search --no-floppy --fs-uuid --set=root --hint='mduuid/bbb4a32abcf8eb415241990451489ef3' f8e0f46a-e650-422e-a4ce-b286cd8010c9
# else
# search --no-floppy --fs-uuid --set=root f8e0f46a-e650-422e-a4ce-b286cd8010c9
# fi
# configfile /TEMPLATE/grub/grub.cfg
# }
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f940644b-e20b-4086-b916-8d57afd80bfb' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
insmod part_msdos
insmod part_msdos
insmod part_gpt
insmod diskfilter
insmod mdraid1x
set root='mduuid/580c789518a82e6edb8f4f6ef3e533b5' # MUDAR
insmod mdraid09
insmod ext2
insmod chain
set root='mduuid/bbb4a32abcf8eb415241990451489ef3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/580c789518a82e6edb8f4f6ef3e533b5' 47d567cb-4401-41b1-93ab-16e8096071ff
search --no-floppy --fs-uuid --set=root --hint='mduuid/bbb4a32abcf8eb415241990451489ef3' f8e0f46a-e650-422e-a4ce-b286cd8010c9
else
search --no-floppy --fs-uuid --set=root 47d567cb-4401-41b1-93ab-16e8096071ff
search --no-floppy --fs-uuid --set=root f8e0f46a-e650-422e-a4ce-b286cd8010c9
fi
chain /boot/template/grub/grub.cfg
configfile /recover/grub/grub.cfg
}
pegue o *MDUUID* do array boot:
.. code:: cfg
mduuid=580c789518a82e6edb8f4f6ef3e533b5
.. tip::
Para achar o UUID do do boot use ``lsblk -o NAME,SIZE,UUID``
Instale o grub:
---------------
.. code:: shell
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment