Guia de referência do ISOLINUX - Parte 1

Atenção: o blog do AvmLinux foi movido para http://www.avmlinux.org/!
Experimente ler esse mesmo post no novo endereço!
O ISOLINUX é provavelmente o gerenciador de boot mais utilizado em LiveCDs, certamente pela grande quantidade de recursos que ele oferece para tornar o boot do LiveCD um processo mais amigável. Nesse artigo você verá como utilizá-lo em seu LiveCD, desde as configurações básicas até alguns recursos interessantes.

Introdução


Esse artigo, antes de mais nada, é uma ampliação do meu artigo anterior, Criando um LiveCD a partir de uma instalação do Debian Lenny, no qual apresentei alguns conceitos básicos sobre LiveCDs e ensinei a construir um LiveCD, tendo como ponto de partida uma instalação do Debian Lenny no disco rígido. Assim sendo, após a explicação sobre o ISOLINUX, passarei quais alterações devem ser feitas no passo-a-passo daquele artigo para que você possa criar um LiveCD utilizando o ISOLINUX como gerenciador de boot.

Quem leu o artigo citado viu que eu apresentei a estrutura básica de um LiveCD como sendo a seguinte:

(Raiz do CD)    
|-------+boot    
|       |-------+grub    
|       |       |-------menu.lst    
|       |       |-------stage2_eltorito    
|       |    
|       |-------vmlinuz    
|       |-------initrd.gz    
|       |-------memtest86+.bin    
|    
|-------+live    
|       |-------filesystem.squashfs    
|    
|--------md5sum.txt

Nesse LiveCD, no entanto, o GRUB é o gerenciador de boot. Vejamos então o que muda quando usamos o ISOLINUX como gerenciador de boot:

(Raiz do CD)    
|-------+boot    
|       |-------+isolinux
|       |       |-------isolinux.bin
|       |       |-------isolinux.cfg
|       |    
|       |-------vmlinuz    
|       |-------initrd.gz    
|       |-------memtest86
|    
|-------+live    
|       |-------filesystem.squashfs    
|    
|--------md5sum.txt

Na verdade, pouca coisa. Isso porque o ISOLINUX tem a mesma lógica de funcionamento do GRUB: durante a gravação do CD, o ISOLINUX, que está no arquivo "isolinux.bin", é inserido no setor de boot. Quando o CD é usado para iniciar o computador, o ISOLINUX é carregado e mostra ao usuário um menu de opções, permitindo que ele escolha diversas formas de como iniciar o sistema. Essas opções, assim como acontecia com o GRUB, estão armazenadas em um arquivo de configuração. No caso do ISOLINUX, esse arquivo é o "isolinux.cfg".

Como configurar o ISOLINUX para mostrar não só as opções de boot mas também um menu personalizado, com nossa imagem de fundo, nosso logotipo, nossos textos, entre outras coisas, é o assunto que veremos a partir de agora.

Configuração básica


Vejamos um exemplo de arquivo de configuração do ISOLINUX no qual são utilizadas somente as configurações básicas:

DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0

LABEL live
  MENU LABEL ^Iniciar o Linux em modo grafico
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash

LABEL text_only
  MENU LABEL Iniciar o Linux em modo ^texto
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet

LABEL memtest
  MENU LABEL Testar a ^memoria
  KERNEL /boot/memtest86
  APPEND -

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  LOCALBOOT 0x80
  APPEND -

As palavras em caixa alta no início de cada linha são utilizadas para definir opções ou seções do arquivo de configuração. Vou chamá-las de tags, assim como está na documentação do ISOLINUX, para facilitar minha explicação. O que vem logo após elas são os valores associados a elas, ou seja, seus parâmetros.

As tags se dividem em dois grupos: as gerais e as de menu. As tags gerais (global tags) configuram o menu do ISOLINUX como um todo, enquanto as tags de menu (per-menu tags) configuram uma entrada do menu específica.

Nesse exemplo então, as tags gerais são DEFAULT, TIMEOUT e PROMPT. As tags de menu são LABEL, MENU LABEL, KERNEL, APPEND e LOCALBOOT. Vejamos a sintaxe de cada uma delas.

Antes de começar, quero ressaltar que estou usando caixa alta nesse artigo para diferenciar as tags de seus parâmetros, mas o ISOLINUX não diferencia maiúsculas de minúsculas, ou seja, ele não é caso sensitivo. Assim, não é necessário que as tags no arquivo de configuração sejam escritas com todas as letras maiúsculas, como estou fazendo aqui.

Além disso, vale observar que, assim como qualquer outro arquivo de configuração, o do ISOLINUX pode ser comentado. Para isso, insira um caractere de jogo da velha (#) no início da linha em que deseja comentar. O conteúdo dessa linha será ignorado pelo ISOLINUX na hora em que ele for ler o arquivo de configuração.

DEFAULT command


Define a ação padrão a ser executada durante o boot. Possui um único parâmetro, que pode ser uma das opções de boot definidas no próprio arquivo de configuração, um kernel ou ainda uma das extensões do ISOLINUX, chamadas de COMBOOTs (nesses dois últimos casos, o arquivo deve ser referenciado pelo seu caminho relativo, se estiver na mesma pasta que o arquivo de configuração, ou pelo seu caminho absoluto a partir da raiz do CD, se estiver em outra pasta). Se o usuário não optar por nenhuma ação durante o boot (ou se você configurar o ISOLINUX de modo a fazer um boot automático) essa será a ação tomada.

Nesse arquivo de configuração do exemplo, como queremos exibir um menu gráfico através do qual o usuário possa interagir com o ISOLINUX, definimos seu valor como "vesamenu.c32". Pela observação que fiz acima, o LiveCD que possuir esse arquivo de configuração deve apresentar um arquivo "vesamenu.c32" na mesma pasta do arquivo "isolinux.cfg".

Observação: nessa primeira parte do artigo trabalharemos com menus (tais como os dos LiveCDs do Debian, do Ubuntu e do Slax) ao invés de deixar apenas o prompt "boot: " para que o usuário digite as opções de boot (como no LiveCD do Kurumin).

TIMEOUT timeout


Define quanto tempo o gerenciador de boot deve esperar por uma decisão do usuário antes de iniciar o boot. A contagem regressiva pode ser cancelada se o usuário apertar qualquer tecla. Se isso não acontecer, a ação especificada em DEFAULT ou no primeiro item do menu será executada.

Essa tag admite como parâmetro um número inteiro, que representa o tempo de espera em décimos de segundos. Se for especificado zero, a contagem regressiva é desabilitada e o menu de opções ficará na tela por tempo indeterminado até que o usuário escolha alguma opção (essa é, aliás, a configuração default, ou seja, a configuração que é adotada se seu arquivo de configuração não apresentar essa tag). O valor máximo possível é 35996, que corresponde a pouco menos de uma hora.

Nesse exemplo, adotamos um tempo limite de 30 segundos (por isso escrevemos 300 no arquivo de configuração).

PROMPT flag_val


Define se o prompt "boot: " deve ser exibido ou não. Admite como parâmetro os valores 0 ou 1. Se você definir 0, o prompt "boot: " será exibido apenas se o usuário pressionar as teclas Shift ou Alt ou se Caps Lock ou Scroll Lock estiverem ativadas (opção default). Se você definir 1, o prompt "boot: " será sempre exibido.

LABEL command


Define uma opção de boot, exigindo como parâmetro um nome para a mesma. Se um menu não for exibido (ou ainda que o menu tenha sido exibido e o usuário tenha optado por digitar a opção que ele deseja), o usuário deverá digitar esse nome no prompt "boot: " para que essa opção seja iniciada. Cada opção de boot deve conter um nome único e recomenda-se que não tenha pontos ou outros caracteres especiais.

Assim, nesse exemplo, para iniciar o LiveCD o usuário deve digitar "live" (sem as aspas, claro) no prompt "boot: ".

MENU LABEL label

(válido somente depois de uma tag LABEL)

Define o texto que será exibido no menu referente à opção de boot que se encontra associada. Equivale à tag TITLE do arquivo de configuração do GRUB. Se nenhum texto for definido aqui, o nome da opção (definido pela tag LABEL) será exibido no menu. Diferente das tags LABEL, não precisa ter valores únicos, mas ainda assim não reconhece caracteres especiais.

No menu definido pelo arquivo de configuração acima, ao invés de digitar "live" no prompt "boot: ", o usuário pode escolher a opção "Iniciar o Linux em modo grafico" no menu.

O acento circunflexo (^) é usado para definir como tecla de atalho para aquela opção do menu o caractere que vier logo em seguida. As teclas de atalho também devem ser únicas dentro de um menu. No menu, as teclas de atalho costumam vir destacadas de alguma forma (sublinhadas, em negrito, etc.).

KERNEL file


Define qual arquivo será lido pelo ISOLINUX se a opção de boot correspondente for solicitada pelo usuário. Não precisa ser necessariamente um kernel linux, pode ser também um setor de boot ou uma extensão do ISOLINUX (um COMBOOT, veremos adiante uma das formas de se utilizar isso). Novamente, cuidado com os caminhos relativos e absolutos.

As seguintes extensões são reconhecidas pelo ISOLINUX (retirado da documentação do ISOLINUX):

none or other   Linux kernel image
.0              PXE bootstrap program (NBP) [PXELINUX only]
.bin            "CD boot sector" [ISOLINUX only]
.bs             Boot sector [SYSLINUX only]
.bss            Boot sector, DOS superblock will be patched in [SYSLINUX only]
.c32            COM32 image (32-bit COMBOOT)
.cbt            COMBOOT image (not runnable from DOS)
.com            COMBOOT image (runnable from DOS)
.img            Disk image [ISOLINUX only]

É importante observar que o ISOLINUX distingue os arquivos pela sua extensão, não importando seu conteúdo. Assim, muito cuidado ao nomear o kernel do seu CD (evite, por exemplo "redhat-9.0"). É preferível que o kernel linux tenha um nome curto e não tenha extensão (como no exemplo que estamos estudando).

A tag KERNEL do arquivo de configuração do ISOLINUX não equivale à tag KERNEL do arquivo de configuração do GRUB porque essa recebe o caminho do kernel e os parâmetros a serem passados para ele, enquanto aquela recebe apenas o caminho do kernel como parâmetro. No arquivo de configuração do ISOLINUX, os parâmetros a serem passados para o kernel são escritos na tag APPEND, que será vista adiante.

INITRD initrd_file


Define qual arquivo initramfs deve ser carregado para a memória juntamente com o kernel. É equivalente à tag INITRD do arquivo de configuração do GRUB e tem o mesmo efeito que passar o parâmetro "initrd=initrd_file" na tag APPEND, que será vista a seguir. O parâmetro deve conter o caminho relativo para o arquivo, se este estiver na mesma pasta que o "isolinux.cfg", ou o caminho absoluto a partir da raiz do CD, se estiver em outra pasta.

APPEND options


Define quais parâmetros são passados para o kernel durante o boot. Se você não quiser passar nenhum parâmetro, você pode passar como parâmetro para essa tag um hífen apenas (-) ou simplesmente suprimi-la.

LOCALBOOT type


Usar essa tag em uma opção de boot no lugar da tag KERNEL define que o boot deve ser feito a partir de um disco local ao invés de um kernel presente no LiveCD. O parâmetro dessa tag especificará a partir de qual disco deve ser dado o boot: 0x00 equivale ao primeiro disquete, enquanto 0x80 equivale ao primeiro disco rígido. Também pode ser especificado o valor -1, que indica ao ISOLINUX que ele deve retornar um erro para a BIOS. Ela então procurará pelo sistema operacional no próximo dispositivo na sequência de boot. Isso não é recomendado pois somente algumas BIOS reagem dessa maneira a uma mensagem de erro enviada pelo gerenciador de boot.

Observação: se quisermos especificar uma opção padrão de menu, devemos usar uma tag diferente de DEFAULT:

MENU DEFAULT

(válido somente depois de uma tag LABEL)

Indica que a opção de boot à qual está associada é a opção padrão do menu. Se você não utilizar essa tag em nenhuma das opções do menu, a opção padrão será a primeira.

Veja o que poderia ser um exemplo de utilização dessa tag, supondo que você preferisse que a opção de boot padrão do seu LiveCD fosse iniciar em modo texto:

LABEL live
  MENU LABEL ^Start Linux in Graphical Mode
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash

LABEL text_only
  MENU LABEL Start Linux in ^Text Mode
  MENU DEFAULT
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet

Testando o ISOLINUX


Com as opções vistas no tópico anterior já é possível construir um menu funcional para ser exibido durante o boot. Os arquivos de configuração que você encontra nos LiveCDs que utilizam o ISOLINUX são variações do anterior, com algumas diferenças, que representam as funcionalidades adicionais que seus menus apresentam.

Vamos criar uma imagem ISO apenas com o ISOLINUX e seu arquivo de configuração só para podermos visualizar o menu daquele arquivo de configuração (e testar os que vierem a seguir como exemplo) em uma máquina virtual como o qemu ou o VirtualBox.

Não entrarei em detalhes quanto à instalação dos programas, visto que muda de distribuição para distribuição. No Debian e derivados, a minha especialidade, o comando a seguir é suficiente:

# apt-get install syslinux mkisofs qemu

Crie uma pasta temporária para a execução desse teste:

$ mkdir -p /home/vinicius/teste/boot/isolinux

Esse comando cria a pasta temporária já com todas as subpastas que necessitamos:

/home/vinicius/teste
/home/vinicius/teste/boot
/home/vinicius/teste/boot/isolinux

Copie os arquivos do ISOLINUX, que estão no seu sistema, para a pasta temporária:

# find /boot /usr/lib/syslinux/ -iname 'isolinux.bin' -exec cp -v {} /home/vinicius/teste/boot/isolinux \;

# find /boot /usr/lib/syslinux/ -iname 'vesamenu.c32' -exec cp -v {} /home/vinicius/teste/boot/isolinux \;

Agora vamos criar o arquivo "isolinux.cfg". Para isso, abra-o com o seu editor de texto favorito (no meu caso, escolhi abri-lo com o kedit):

$ kedit /home/vinicius/teste/boot/isolinux/isolinux.cfg

Em seguida, copie e cole o arquivo exibido no tópico anterior, salve o arquivo e saia do editor de texto.

Pronto, agora é só gerar a imagem ISO (o que deve levar apenas alguns segundos, visto que só temos três arquivos de alguns kB) e testá-la na máquina virtual:

# mkisofs -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "DEBIAN" -cache-inodes -r -J -l -o /home/vinicius/live-cd.iso /home/vinicius/teste

$ qemu -cdrom /home/vinicius/live-cd.iso -boot d


A partir de agora, quando eu introduzir uma nova funcionalidade nesse artigo, você pode acrescentá-la nesse arquivo "isolinux.cfg" e executar os dois comandos acima para verificar as alterações.

Inserindo uma imagem de fundo


Essa provavelmente é uma das personalizações do ISOLINUX que todo mundo deseja fazer em seu LiveCD. Felizmente, é bastante fácil configurá-la. Por isso comecei por ela.

A tag responsável pela imagem de fundo está apresentada a seguir com sua sintaxe. É importante observar que ela está definida no arquivo "vesamenu.c32", portanto só faz sentido utilizá-la se a linha "DEFAULT vesamenu.c32" estiver presente no início do arquivo de configuração.

MENU BACKGROUND background


O parâmetro que deve ser passado para essa tag é o nome do arquivo que contém a imagem de fundo, que deve ter tamanho 640x480 pixels e pode estar em formato PNG ou JPEG.

Experimente criar uma imagem em um editor de imagem qualquer e salvá-la com o nome "splash.png" dentro da pasta "boot/isolinux". Abra o arquivo "isolinux.cfg" e, no início do arquivo, acrescente a seguinte linha:

MENU BACKGROUND splash.png

Deixando seu começo assim:

DEFAULT vesamenu.c32
MENU BACKGROUND splash.png
TIMEOUT 300
PROMPT 0

Se você gerar novamente a imagem ISO e testá-la na máquina virtual, verá a imagem que você criou no fundo do menu.


Esta opção é usada no DVD de instalação do Debian e no LiveCD do Slax, por exemplo.



Organizando os elementos do menu


Há algumas tags que você pode empregar no arquivo de configuração do ISOLINUX para tornar seu menu mais organizado. A seguir, elas são apresentadas com suas respectivas sintaxes.

MENU TITLE title


Define um título para o menu. O título do menu é apresentado no topo do menu.

MENU SEPARATOR


Insere uma linha vazia no menu, que atua como um separador.

MENU DISABLE

(válido somente depois de uma tag LABEL)

Impede que uma entrada do menu seja selecionada. Permite que você crie uma seção no seu menu, com diferentes opções abaixo dela.

MENU INDENT count

(válido somente depois de uma tag LABEL)

Usada para indentar (recuar) uma entrada do menu. Recebe como parâmetro um número inteiro que diz em quantos espaços a entrada deve ser recuada. Permite que você crie uma hierarquia de opções.

Vejamos um exemplo para ilustrar essas tags:

DEFAULT vesamenu.c32
MENU BACKGROUND splash.png
TIMEOUT 300
PROMPT 0

MENU TITLE Bem vindo ao Linux

LABEL -
  MENU LABEL Opcoes mais usadas:
  MENU DISABLE

LABEL live
  MENU LABEL ^Iniciar o Linux em modo grafico
  MENU INDENT 5
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  MENU INDENT 5
  LOCALBOOT 0x80
  APPEND -

MENU SEPARATOR

LABEL -
  MENU LABEL Outras opcoes:
  MENU DISABLE

LABEL text_only
  MENU LABEL Iniciar o Linux em modo ^texto
  MENU INDENT 5
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet

LABEL memtest
  MENU LABEL Testar a ^memoria
  MENU INDENT 5
  KERNEL /boot/memtest86
  APPEND -


Você pode encontrar a tag MENU SEPARATOR sendo usada no LiveCD do Slax (ver imagem acima).

Definindo as posições e tamanhos dos elementos do menu


Vejamos agora como alterar as posições e tamanhos dos elementos do menu para que eles fiquem perfeitamente visíveis, sem conflitar com a imagem de fundo.

Todas as propriedades listadas a seguir possuem essa função. Todas elas recebem como parâmetro um valor inteiro. É importante observar que esses valores não são absolutos, ou seja, não são medições em pixels. Assim, o melhor a fazer para conhecer essas propriedades é alterá-las e ver o resultado das alterações.

Vale observar que as dimensões da tela para o ISOLINUX são relativas. A altura da tela é 28 (essa informação se encontra na documentação do ISOLINUX) A largura, se minhas observações estiverem corretas, é algo entre 90 e 100.

MENU WIDTH integer


Define a largura do menu.

MENU MARGIN integer


Define a margem do menu, distância entre as “bordas” e os “limites” do menu, limites esses definidos pela tag MENU WIDTH.

MENU ROWS integer


Define a altura do menu.

MENU TABMSGROW integer


Define a altura em que aparece a mensagem "Pressione TAB para alterar as opções de boot".

MENU CMDLINEROW integer


Define a altura em que aparece a linha com o prompt "boot: ", que nos permite digitar a opções de boot.

MENU TIMEOUTROW integer


Define a altura em que aparece a linha com a contagem regressiva do tempo (TIMEOUT).

MENU HELPMSGROW integer
MENU HELPMSGENDROW integer


Juntas, definem o tamanho da caixa do texto de ajuda (será visto mais adiante). A primeira define a altura em que começa e a segunda define a altura em que termina.

MENU HSHIFT integer


Define o deslocamento horizontal do menu. Desloca o menu para a esquerda, se o valor inteiro fornecido como parâmetro for negativo, ou para a direita, se for positivo. É importante observar que, por padrão, o menu fica no centro da tela.

MENU VSHIFT integer


Define o deslocamento vertical do menu. Desloca o menu de cima para baixo, se o valor inteiro fornecido como parâmetro for positivo, ou de baixo para cima, se for negativo (não recomendável).

Os valores padrão do ISOLINUX para essas opções são:

MENU WIDTH 80
MENU MARGIN 10
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU TIMEOUTROW 20
MENU HELPMSGROW 22
MENU HELPMSGENDROW -1
MENU HSHIFT 0
MENU VSHIFT 0

Para os valores que você não especificar no arquivo de configuração, serão adotados os valores padrão mostrados acima.

Com a configuração a seguir eu consegui fazer um menu que ocupe quase toda a tela em largura, com dimensões parecidas com as do menu do GRUB:

MENU WIDTH 77
MENU MARGIN 0
MENU HSHIFT -35


No LiveCD do Slax, essas tags são configuradas com os seguintes valores:

MENU WIDTH 36
MENU MARGIN 0
MENU ROWS 8
MENU HELPMSGROW 14
MENU TIMEOUTROW 22
MENU TABMSGROW 24
MENU CMDLINEROW 24
MENU HSHIFT 40
MENU VSHIFT 2

No DVD de instalação do Debian, resolvendo os vários includes que ele possui, temos:

menu hshift 13
menu width 49
menu vshift 12
menu rows 10
menu helpmsgrow 15
menu cmdlinerow 16
menu timeoutrow 16
menu tabmsgrow 18

Essas não são todas as opções disponíveis, mas como vocês podem ver pelos exemplos acima, parecem ser as mais utilizadas. Vocês podem encontrar outras na documentação do ISOLINUX.

Aplicando cores aos elementos do menu


Para definir a cor de qualquer elemento do menu, você usa a tag MENU COLOR. A sintaxe dela é a seguinte:

MENU COLOR element ansi foreground background shadow


Onde:

  • element é o elemento do menu que está sendo configurado pela tag;
  • ansi é um ou mais valores numéricos que aplicam ao elemento alguma característica (a lista dos possíveis valores numéricos e as características que eles atribuem ao elemento encontra-se abaixo). Quando for utilizado nesse parâmetro mais de um valor numérico, deve-se separar os valores numéricos por ponto-e-vírgula (;);
  • foreground é a cor do plano de frente, expressa no formato #AARRGGBB – opacidade (alpha), vermelho (red), verde (green) e azul (blue), respectivamente. Varia de #00000000, que representa total transparência, até #ffffffff, que representa o branco opaco;
  • background é a cor de fundo, também expressa no formato #AARRGGBB; e
  • shadow é a sombra que é aplicada ao elemento. Os valores possíveis aqui são: "none" (nenhuma sombra), "std" ou "standard" (sombra comum – os pixels do plano de frente estão "levantados"), "all" (tanto o plano de frente quando o plano de fundo estão "levantados") e "rev" ou "reverse" (os pixels do plano de fundo estão "levantados")

Não é obrigatório especificar os cinco parâmetros. Se você quiser que determinado parâmetro assuma o valor padrão, você pode digitar * no lugar reservado a ele. Omitir um parâmetro também fará com que seja assumido seu valor padrão, mas, nesse caso, nenhum valor após ele (se houver) não poderá ser especificado. Você pode, por exemplo, especificar "element ansi" e deixar os outros valores omitidos. O que você não pode fazer é, por exemplo, especificar "element ansi shadow".

Eis a lista dos elementos que podem ser passados como parâmetro:

screen          Rest of the screen
border          Border area
title           Title bar
unsel           Unselected menu item
hotkey          Unselected hotkey
sel             Selection bar
hotsel          Selected hotkey
disabled        Disabled menu item
scrollbar       Scroll bar
tabmsg          Press [Tab] message
cmdmark         Command line marker
cmdline         Command line
pwdborder       Password box border
pwdheader       Password box header
pwdentry        Password box contents
timeout_msg     Timeout message
timeout         Timeout counter
help            Help text
msgXX           Message (F-key) file attribute XX

... where XX is two hexadecimal digits (the "plain text" is 07).

E estes são os possíveis valores ansi que podem ser passados como parâmetro:

0     reset all attributes to their defaults
1     set bold
4     set underscore (simulated with color on a color display)
5     set blink
7     set reverse video
22    set normal intensity
24    underline off
25    blink off
27    reverse video off
30    set black foreground
31    set red foreground
32    set green foreground
33    set brown foreground
34    set blue foreground
35    set magenta foreground
36    set cyan foreground
37    set white foreground
38    set underscore on, set default foreground color
39    set underscore off, set default foreground color
40    set black background
41    set red background
42    set green background
43    set brown background
44    set blue background
45    set magenta background
46    set cyan background
47    set white background
49    set default background color

Os valores padrão do ISOLINUX para essas opções são:

menu color screen       37;40      #80ffffff #00000000 std
menu color border       30;44      #40000000 #00000000 std
menu color title        1;36;44    #c00090f0 #00000000 std
menu color unsel        37;44      #90ffffff #00000000 std
menu color hotkey       1;37;44    #ffffffff #00000000 std
menu color sel          7;37;40    #e0000000 #20ff8000 all
menu color hotsel       1;7;37;40  #e0400000 #20ff8000 all
menu color disabled     1;30;44    #60cccccc #00000000 std
menu color scrollbar    30;44      #40000000 #00000000 std
menu color tabmsg       31;40      #90ffff00 #00000000 std
menu color cmdmark      1;36;40    #c000ffff #00000000 std
menu color cmdline      37;40      #c0ffffff #00000000 std
menu color pwdborder    30;47      #80ffffff #20ffffff std
menu color pwdheader    31;47      #80ff8080 #20ffffff std
menu color pwdentry     30;47      #80ffffff #20ffffff std
menu color timeout_msg  37;40      #80ffffff #00000000 std
menu color timeout      1;37;40    #c0ffffff #00000000 std
menu color help         37;40      #c0ffffff #00000000 std
menu color msg07        37;40      #90ffffff #00000000 std

No LiveCD do Slax, temos:

menu color screen       37;40      #00000000 #00000000 none
menu color border       30;44      #00000000 #00000000 none
menu color title        1;36;44    #00000000 #00000000 none
menu color unsel        37;44      #ff60CA00 #00000000 none
menu color hotkey       1;37;44    #ff60CA00 #00000000 none
menu color sel          7;37;40    #ffffffff #ff60CA00 none
menu color hotsel       1;7;37;40  #ff808080 #ff60CA00 none
menu color scrollbar    30;44      #00000000 #00000000 none

menu color tabmsg       31;40      #aaaaaaaa #00000000 none
menu color cmdmark      1;36;40    #ffff0000 #00000000 none
menu color cmdline      37;40      #aaaaaaaa #00000000 none
menu color pwdborder    30;47      #ffff0000 #00000000 std
menu color pwdheader    31;47      #ffff0000 #00000000 std
menu color pwdentry     30;47      #ffff0000 #00000000 std
menu color timeout_msg  37;40      #aaaaaaaa #00000000 none
menu color timeout      1;37;40    #ffaaaaff #00000000 none
menu color help         37;40      #aaaaaa00 #00000000 none
menu color msg07        37;40      #90ffffff #00000000 std

Observe que o autor do LiveCD do Slax na verdade alterou apenas as cores e as sombras (foreground, background e shadow), mantendo os atributos (ansi) iguais aos valores padrão.

No DVD de instalação do Debian, temos:

menu color title        * #FFFFFFFF *
menu color border       * #00000000 #00000000 none
menu color sel          * #ffffffff #76a1d0ff *
menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
menu color tabmsg       * #ffffffff #00000000 *
menu color help         37;40 #ffdddd00 #00000000 none

Alterando as mensagens de boot automático e de prompt


Uma vez que já determinamos os itens que aparecem no menu, para traduzi-lo completamente falta apenas alterar as mensagens "Automatic boot in XX seconds..." e "Press [Tab] to edit options". Podemos fazer isso através dessas duas tags:

MENU AUTOBOOT message


Define uma nova mensagem de contagem regressiva para o boot automático. Inserimos um jogo da velha (#) onde desejamos exibir os segundos. Podemos também especificar sentenças diferentes conforme falte um ou mais segundos, usando uma expressão do tipo "{singular,plural}". Por exemplo: "Boot automático em # segundo{,s}...".

MENU TABMSG message


Define uma nova mensagem para informar que a tecla TAB pode ser usada para acessar o prompt "boot: ".

Veja como poderíamos empregar essas duas tags no nosso arquivo de configuração:

DEFAULT vesamenu.c32
MENU BACKGROUND splash.png
TIMEOUT 300
PROMPT 0

LABEL live
  MENU LABEL ^Iniciar o Linux em modo grafico
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash

LABEL text_only
  MENU LABEL Iniciar o Linux em modo ^texto
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet

LABEL memtest
  MENU LABEL Testar a ^memoria
  KERNEL /boot/memtest86
  APPEND -

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  LOCALBOOT 0x80
  APPEND -

MENU AUTOBOOT Iniciando a primeira opcao em # segundo{,s}...
MENU TABMSG Pressione ENTER para iniciar ou TAB para editar as opcoes de boot


Inserindo textos de descrição


Textos contendo rápidas descrições das opções de menu são de leitura muito mais rápida para o usuário que textos de ajuda à parte, apesar de estes últimos serem mais comuns.

Podemos associar uma descrição a cada opção do menu usando as tags a seguir:

TEXT HELP help text ENDTEXT

(válido somente depois de uma tag LABEL)

Passamos como parâmetro para essas tags o texto que queremos que apareça na tela quando o usuário selecionar a opção de menu ao qual ele está associado. Esse texto não precisa estar necessariamente dentro de uma única linha.

Veja como poderíamos empregar textos de descrição no nosso arquivo de configuração:

DEFAULT vesamenu.c32
MENU BACKGROUND splash.png
TIMEOUT 300
PROMPT 0

LABEL live
  MENU LABEL ^Iniciar o Linux em modo grafico
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live nopersistent rw quiet splash
  TEXT HELP
Mais informacoes sobre a opcao selecionada:

Inicia o Linux normalmente, em modo grafico. Essa e a melhor forma de 
utilizar o Linux. Configure sua placa de video e experimente utilizar
a maior resolucao possivel.
  ENDTEXT

LABEL text_only
  MENU LABEL Iniciar o Linux em modo ^texto
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live nopersistent textonly rw quiet
  TEXT HELP
Mais informacoes sobre a opcao selecionada:

Inicia o Linux em modo texto. Escolhendo essa opcao, voce pode entrar
diretamente no console do Linux, sem ter que passar pelo ambiente 
grafico. Para iniciar o ambiente grafico a partir do console, basta 
executar o comando startx.
  ENDTEXT

LABEL memtest
  MENU LABEL Testar a ^memoria
  KERNEL /boot/memtest86
  APPEND -
  TEXT HELP
Mais informacoes sobre a opcao selecionada:

Nao inicia o Linux. Ao inves disso, inicia o MEMTEST86, um utilitario de
teste de memoria que diagnosticara erros na memoria do seu computador.
  ENDTEXT

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  LOCALBOOT 0x80
  APPEND -
  TEXT HELP
Mais informacoes sobre a opcao selecionada:

Nao inicia o Linux. Ao inves disso, inicia o sistema operacional instalado
no primeiro disco-rigido do seu computador.
  ENDTEXT

MENU AUTOBOOT Iniciando a primeira opcao em # segundo{,s}...
MENU TABMSG Pressione ENTER para iniciar ou TAB para editar as opcoes de boot.


Esta opção é usada no LiveCD do Slax.

Criando um LiveCD usando o ISOLINUX como gerenciador de boot


Agora que já terminei a explicação sobre o ISOLINUX, passarei quais as alterações que devem ser feitas no passo-a-passo do artigo Criando um LiveCD a partir de uma instalação do Debian Lenny para que você tenha no final do processo um LiveCD com ISOLINUX como gerenciador de boot.

Um LiveCD que utiliza o ISOLINUX como gerenciador de boot apresenta uma estrutura básica similar a essa:

(Raiz do CD)    
|-------+boot    
|       |-------+isolinux
|       |       |-------isolinux.bin
|       |       |-------isolinux.cfg
|       |    
|       |-------vmlinuz    
|       |-------initrd.gz    
|       |-------memtest86
|    
|-------+live    
|       |-------filesystem.squashfs    
|    
|--------md5sum.txt

A única diferença entre essa estrutura e a apresentada no artigo anterior, onde o GRUB era usado como gerenciador de boot, é a presença da pasta "boot/isolinux" no lugar da pasta "boot/grub". Algumas distribuições preferem colocar a pasta "isolinux" na raiz do CD ao invés de dentro de uma pasta boot, mas isso é questão de organização e fica a critério de quem faz o LiveCD.

Vejamos resumidamente o que são cada um desses arquivos (para informações mais detalhadas, veja o artigo anterior):

  • "boot/isolinux/isolinux.bin": esse arquivo contém o ISOLINUX. Como sabemos, ele é o gerenciador de boot. Logo, é o primeiro componente do LiveCD a ser carregado para a memória. Você vai ler várias vezes nesse artigo o nome ISOLINUX, mas o arquivo que mais nos interessa não é esse, é o “isolinux.cfg”.
  • "boot/isolinux/isolinux.cfg": esse é o arquivo de configuração do ISOLINUX e o que mais nos interessa nesse artigo. Ele contém não somente as opções do menu que aparece durante o boot do LiveCD, como também suas personalizações (cor de fundo, layout, textos de ajuda, opções avançadas, etc).
  • "boot/vmlinuz": esse arquivo é o kernel, que durante a inicialização do LiveCD é o segundo componente a ser carregado para a memória. Isso acontece assim que escolhemos uma das opções mostradas no menu de boot.
  • "boot/initrd.gz": esse arquivo é o initramfs, que contém os módulos e scripts necessários para inicializar o LiveCD. Ele é carregado durante a inicialização do LiveCD logo após o kernel.
  • "boot/memtest86": esse arquivo na verdade é opcional, mas está presente na quase totalidade dos LiveCDs. Trata-se de um programa usado para testar a memória RAM do computador.
  • "live/filesystem.squashfs": esta é a imagem compactada SquashFS que contém o sistema operacional em si.
  • "md5sum.txt": esse arquivo também é opcional. Contém o MD5 de cada arquivo do CD e pode ser usado após a gravação do CD (ou o download da imagem ISO) para verificar sua a integridade.

Se você executou o passo-a-passo do artigo anterior, pode copiar o conteúdo do seu LiveCD para o disco rígido e apagar a pasta "boot/grub". Você vai recomeçar o passo-a-passo a partir do final da etapa E (eu direi qual será seu primeiro comando). Os que não o fizeram, se desejarem, podem seguir o passo-a-passo aplicando as mudanças que eu passarei a seguir.

A maior parte das mudanças por conta da troca de gerenciador de boot ocorre na etapa E (Preparar a estrutura de diretórios do LiveCD). As etapas B (Copiar o sistema para a pasta de trabalho) e D (Fazer as modificações necessárias no sistema de trabalho) do passo-a-passo permanecem inalteradas. As demais possuem pequenas alterações em um ou dois comandos que listarei a seguir.

Antes de tudo, obviamente, você deve ter o ISOLINUX instalado no seu computador. Você pode instala-lo via apt-get ou usando outro método de sua preferência. Isso deve ser feito na etapa A do passo-a-passo (Preparar o ambiente de trabalho), cuja única mudança é a instalação do pacote syslinux no lugar do pacote grub. Evidentemente, não há problema algum se seu sistema já possuir o GRUB instalado.

# apt-get install syslinux

O comando para a instalação de todos os pacotes utilizados no passo-a-passo fica então assim:

# apt-get install rsync squashfs-tools squashfs-modules-$(uname -r) syslinux mkisofs x11-xserver-utils xnest qemu cdrecord dvd+rw-tools

Ainda na etapa A, a pasta "boot/grub" também não será criada. Ao invés dela, criaremos a pasta "boot/isolinux". Assim, para criar todas as pastas que você vai necessitar, execute esses três comandos no terminal (lembre-se de alterar os comandos para adaptá-los ao seu computador):

$ mkdir -p /home/vinicius/debian-live/cd/live    

$ mkdir -p /home/vinicius/debian-live/cd/boot/isolinux

$ mkdir -p /home/vinicius/debian-live/work/rootfs

Durante a etapa C (Fazer as modificações desejadas no sistema de trabalho), que também permanece inalterada, exceto pelas sugestões que vou dar agora, você pode remover o GRUB do sistema que vai para o LiveCD (caso seu sistema já apresentava o GRUB antes da cópia de arquivos na etapa B), uma vez que ele não será útil no LiveCD (a menos que você pretenda usar esse LiveCD para recuperação ou pretenda torna-lo instalável):

# apt-get install grub

Você pode também remover o pacote syslinux e suas dependências, que não terão nenhuma utilidade dentro do LiveCD (isso trará uma economia de uns 2 MB):

# apt-get remove syslinux

# apt-get autoremove

Como a etapa E (Preparar a estrutura de diretórios do LiveCD) sofre muitas alterações, vou preferir reescrever seus passos a seguir.

Comece copiando o kernel, o initrd e o memtest que foram criados na etapa anterior para a pasta temporária que contém os arquivos do LiveCD:

# cp -vp /home/vinicius/debian-live/work/rootfs/boot/vmlinuz-$(uname -r) /home/vinicius/debian-live/cd/boot/vmlinuz    

# cp -vp /home/vinicius/debian-live/work/rootfs/boot/initrd.img-$(uname -r) /home/vinicius/debian-live/cd/boot/initrd.gz    

# cp -vp /home/vinicius/debian-live/work/rootfs/boot/memtest86+.bin /home/vinicius/debian-live/cd/boot/memtest86

Para finalizar, converta a pasta de trabalho em uma imagem SquashFS:

# mksquashfs /home/vinicius/debian-live/work/rootfs /home/vinicius/debian-live/cd/live/filesystem.squashfs

Se os arquivos da pasta "/home/vinicius/debian-live/cd" cabem no disco (CD ou DVD) no qual você pretende armazenar o sistema, você já pode apagar a pasta de trabalho, uma vez que não precisaremos de mais nenhum arquivo do sistema de trabalho (isso também representa uma boa quantidade de espaço em disco liberado, que poderá ser usado na criação do CD ou DVD):

# rm -rf /home/vinicius/debian-live/work

Agora chegou a parte em que quem aproveitou o LiveCD já pronto também entra na ação.

Copie o gerenciador de boot ISOLINUX, que está no seu sistema, para a pasta temporária:

# find /boot /usr/lib/syslinux/ -iname 'isolinux.bin' -exec cp -v {} /home/vinicius/debian-live/cd/boot/isolinux \;

# find /boot /usr/lib/syslinux/ -iname 'vesamenu.c32' -exec cp -v {} /home/vinicius/debian-live/cd/boot/isolinux \;

Agora vamos criar o arquivo "isolinux.cfg". Para isso, abra-o com o seu editor de texto favorito (no meu caso, escolhi abri-lo com o kedit):

$ kedit /home/vinicius/debian-live/cd/boot/isolinux/isolinux.cfg

Copie e cole o que vier a seguir no editor de texto, salve o arquivo e saia do editor de texto:

DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0

LABEL live
  MENU LABEL ^Start Linux in Graphical Mode
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live nopersistent rw quiet splash

LABEL safe
  MENU LABEL Start Linux in Safe ^Graphical Mode
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live xforcevesa rw quiet splash

LABEL text_only
  MENU LABEL Start Linux in ^Text Mode
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live nopersistent textonly rw quiet

LABEL persistent
  MENU LABEL Start ^Persistent Live CD
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live persistent rw quiet splash

LABEL from_ram
  MENU LABEL Start Linux Graphical Mode from ^RAM
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live toram nopersistent rw quiet splash

LABEL memtest
  MENU LABEL ^Memory test
  KERNEL /boot/memtest86
  APPEND -

LABEL hd
  MENU LABEL Boot from first ^hard disk
  LOCALBOOT 0x80
  APPEND -

O comando a seguir não é necessário para a criação do LiveCD, mas usualmente é executado. Ele calcula o MD5, que permite verificar posteriormente a integridade dos arquivos contidos no LiveCD.

# cd /home/vinicius/debian-live/cd && find . -type f -print0 | xargs -0 md5sum | tee /home/vinicius/debian-live/cd/md5sum.txt

Pronto, encerrada a etapa E, podemos prosseguir à Etapa F (Criar o LiveCD), cuja única alteração consiste no primeiro comando, onde devemos passar os caminhos referentes aos arquivos do ISOLINUX:

# mkisofs -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "DEBIAN" -cache-inodes -r -J -l -o /home/vinicius/live-cd.iso /home/vinicius/debian-live/cd

Encerrada a lista de alterações, o restante do passo-a-passo pode ser seguido sem problemas.

Nessa primeira parte do artigo, aprendemos a criar um menu básico, a colocar uma imagem de fundo, a organizar, definir as posições, os tamanhos e as cores dos itens do menu, aprendemos também a traduzir as mensagens que são exibidas na tela e a adicionar descrições a cada item do menu. Na segunda parte, que virá em breve, continuaremos a trabalhar com menus, vendo como podemos incrementá-los ainda mais, e aprenderemos também a fazer uma tela de boot igual à do LiveCD do Kurumin, deixando apenas o prompt "boot: ", para que o usuário selecione manualmente as opções de boot.

Um abraço a todos e até a próxima.

Fontes


3 comentários:

Antônio Vinícius disse...

Artigo publicado no Viva o Linux:

http://www.vivaolinux.com.br/artigo/Guia-de-referencia-do-ISOLINUX-(parte-1)/

Antônio Vinícius disse...

Guia de referência do ISOLINUX - Parte 2:

http://avmlinux.blogspot.com/2010/03/guia-de-referencia-do-isolinux-parte-2.html

Anônimo disse...

Oi Antônio, muito bom seu artigo. Vc sabe dizer se para sa versões atuais do Ubuntu (LTS 12.04) a tela de entrada Welcome (Try/Install) é um menu customizado?

Tela que fiz referência nesse link:
http://upload.wikimedia.org/wikipedia/commons/d/d5/Ubuntu_Desktop_11.04_Live_CD_-_Welcome_screen.png

Obrigado,
Mauro

Postar um comentário