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
http://syslinux.zytor.com/wiki/index.php/ISOLINUX
http://syslinux.zytor.com/wiki/index.php/SYSLINUX
http://syslinux.zytor.com/wiki/index.php/Menu
http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32
http://syslinux.zytor.com/wiki/index.php/Common_Problems
https://help.ubuntu.com/community/LiveCDCustomizationFromScratch
3 comentários:
Artigo publicado no Viva o Linux:
http://www.vivaolinux.com.br/artigo/Guia-de-referencia-do-ISOLINUX-(parte-1)/
Guia de referência do ISOLINUX - Parte 2:
http://avmlinux.blogspot.com/2010/03/guia-de-referencia-do-isolinux-parte-2.html
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