Guia de referência do ISOLINUX - Parte 2

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. Essa é a segunda parte do artigo que explica a sua configuração. Nessa parte, destaque para a criação de submenus e de um menu de ajuda.

Na primeira parte do artigo, aprendemos a criar um menu básico, a inserir 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. Finalmente, vimos como criar um LiveCD utilizando o ISOLINUX como gerenciador de boot.

Continuaremos, agora na segunda parte, a trabalhar com menus, vendo como podemos incrementá-los ainda mais. 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. Finalizando o artigo, veremos como criar um menu de ajuda para auxiliar o usuário a escolher entre as opções de boot disponíveis.

Criando submenus


Quando você possui uma grande quantidade de opções de boot disponíveis, pode ser interessante distribui-las através de submenus acessíveis por um menu principal. Nesse tópico veremos com quais tags podemos definir submenus.

MENU BEGIN [tagname]
MENU END


Essas tags indicam o início e término da definição um submenu, respectivamente. Entre elas, podemos utilizar todas as tags que já vimos. Os submenus herdam as propriedades do menu principal, mas podem também apresentar suas próprias propriedades (seu próprio título, seu próprio fundo, sua própria formatação, etc.).

A tag MENU BEGIN aceita um parâmetro, mas não é obrigatório. Esse parâmetro serve para dar um nome do submenu.

MENU EXIT [tagname]

(válido somente depois de uma tag LABEL dentro de um submenu)

Define que a opção de menu à qual está associada será usada para sair do submenu e voltar ao menu principal. Aceita um parâmetro, mas não é obrigatório. Se for informado, o retorno será feito não para o menu principal, mas para o menu com o nome passado como parâmetro.

Na primeira parte do artigo, vimos um exemplo de arquivo de configuração básico:

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 -

Vamos colocar todas as opções do menu com exceção da primeira e da última dentro de um submenu e vamos chamar esse submenu de "Opções avançadas":

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 boot=live nopersistent rw quiet splash

MENU BEGIN advanced

  MENU LABEL Opcoes ^avancadas

  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

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

  LABEL mainmenu
    MENU LABEL < ^Voltar
    MENU exit

MENU END

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

Se você testar essa configuração (veja como fazer isso na primeira parte do artigo), verá isso:



Outras formas de fazer submenus


Nesse tópico veremos duas outras formas de se fazer um submenu, colocando desta vez os menus em arquivos de configuração separados.

Uma delas é usando a tag CONFIG:

CONFIG filename

(válido somente depois de uma tag LABEL)

Carrega o arquivo de configuração passado como parâmetro.

Vejamos como ficaria a mesma estrutura de menus do tópico anterior definida utilizando a tag CONFIG. Para isso, vamos criar dois arquivos:
  • isolinux.cfg:
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 boot=live nopersistent rw quiet splash

LABEL advanced
  MENU LABEL Opcoes ^avancadas
  CONFIG avancadas.cfg

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  LOCALBOOT 0x80
  APPEND -
  • avancadas.cfg:
DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0

MENU TITLE Opcoes avancadas

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

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

LABEL mainmenu
  MENU LABEL < ^Voltar
  CONFIG isolinux.cfg

O resultado visual e funcional das duas formas já apresentadas de criar submenus é praticamente o mesmo. Abordei a tag CONFIG aqui na verdade mais por ser uma das formas possíveis de se criar submenus, mas veremos um uso mais interessante para essa tag mais adiante, quando tratarmos sobre o menu de ajuda.

No tópico Configuração básica, na primeira parte do artigo, vimos que a tag KERNEL aceita como parâmetro uma extensão do ISOLINUX (um COMBOOT). Se criarmos uma entrada de menu passando como parâmetro à tag KERNEL o arquivo vesamenu.c32 e como parâmetro à tag APPEND um arquivo de configuração, durante a execução, ao escolher essa opção, o usuário terá acesso a outro menu, definido por esse arquivo de configuração.

Em resumo, teríamos, no "isolinux.cfg", algo parecido com isto:

LABEL outro_menu
  MENU LABEL Outro menu
  KERNEL vesamenu.c32
  APPEND outra_configuracao.conf

Vejamos então como criar submenus dessa forma. Vamos criar um menu principal e dois menus secundários. No menu principal, o usuário escolherá o idioma, e nos menus secundários, ele verá as opções traduzidas para o idioma dele. Para isso, vamos criar três arquivos:
  • isolinux.cfg:
DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0

LABEL menu_ptbr
  menu label Portugues brasileiro
  kernel vesamenu.c32
  append menu_ptbr.cfg

LABEL menu_en
  menu label English
  kernel vesamenu.c32
  append menu_en.cfg
  • menu_ptbr.cfg:
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 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 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 -

LABEL back
  menu label < ^Voltar
  kernel vesamenu.c32
  append isolinux.cfg
  • menu_en.cfg:
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 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 memtest
  menu label Memory ^Test
  kernel /boot/memtest86
  append -

LABEL hd
  menu label Boot from first ^hard disk
  localboot 0x80
  append -

LABEL back
  menu label < ^Back
  kernel vesamenu.c32
  append isolinux.cfg




Observe que em ambas as formas de se criar submenus mostradas acima é possível a partir de qualquer menu chamar o menu principal, especificando o arquivo "isolinux.cfg". Aliás, como os menus são independentes um do outro (a idéia é a de produzir submenus, mas na verdade estamos criando menus novos), é possível chamar qualquer menu a partir de qualquer menu, bastando para isso especificar o arquivo de configuração que define o menu que desejamos exibir. É possível também definir para cada menu aparências diferentes, visto que são na verdade menus completamente independentes.

Finalmente, convém observar que o resultado visual e funcional de todas as formas mostradas acima é o mesmo. Cabe a você escolher uma das formas apresentadas e montar sua estrutura de menus.

Dividindo o arquivo de configuração em partes


Você pode dividir o arquivo "isolinux.cfg" em arquivos menores para tornar sua configuração do ISOLINUX mais organizada. Isso é útil principalmente se o menu que você pretende criar possui muitas opções ou se você pretende manter em arquivos separados as definições de menus e as definições de formatação.

A tag usada para isso é a tag INCLUDE, cuja sintaxe e descrição encontra-se a seguir.

INCLUDE filename [tagname]


Inclui no local em que está inserida o conteúdo do arquivo especificado como parâmetro. Admite um segundo parâmetro, não obrigatório, que pode ser preenchido com um nome. Se esse parâmetro for passado, então o conteúdo do arquivo é tratado como se fosse um submenu.

Aproveitando o exemplo do submenu visto anteriormente, vamos ver como poderíamos colocar o submenu dentro de um arquivo à parte para reduzir o tamanho do arquivo "isolinux.cfg" (observe que o que faremos a seguir não alterará nem a funcionalidade, nem a visualização dos menus, mas apenas a organização dos arquivos).

Podemos fazer isso usando a tag INCLUDE com apenas um parâmetro:
  • isolinux.cfg:
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 boot=live nopersistent rw quiet splash

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

MENU BEGIN advanced  
  INCLUDE avancadas.cfg
MENU END
  • avancadas.cfg:
MENU LABEL Opcoes ^avancadas

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

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

LABEL mainmenu
  MENU LABEL ^Voltar
  MENU exit

Ou usando a tag INCLUDE com dois parâmetros, reduzindo ainda mais o arquivo "isolinux.cfg":
  • isolinux.cfg:
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 boot=live nopersistent rw quiet splash

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

INCLUDE advanced.cfg advanced
  • advanced.cfg:
MENU LABEL Opcoes ^avancadas

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

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

LABEL mainmenu
  MENU LABEL ^Voltar
  MENU exit

Exibindo apenas o prompt "boot: "


Há pessoas que preferem exibir em seu LiveCD apenas o prompt "boot: ", assim como fez o Carlos Morimoto no LiveCD do Kurumin, deixando o usuário livre para digitar as opções de boot que ele deseja ativar ou apenas pressionar ENTER (ou mesmo aguardar) para acionar o boot do LiveCD com as opções padrão.


Nesse caso, o arquivo "isolinux.cfg" apresentará algumas alterações com relação aos arquivos exemplo que estamos vendo até agora.

Vejamos, por exemplo, o arquivo "isolinux.cfg" do LiveCD do Kurumin:

DEFAULT linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=791 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix
TIMEOUT 200
PROMPT 1

DISPLAY boot.msg

F1 boot.msg
F2 f2
F3 f3

LABEL knoppix
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=791 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix

LABEL kurumin
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=791 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix

LABEL linux
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=normal initrd=minirt.gz nomce apm=power-off BOOT_IMAGE=knoppix

LABEL memtest
KERNEL memtest
APPEND initrd=

LABEL expert
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us acpi=off vga=791 initrd=minirt.gz nomce apm=power-off BOOT_IMAGE=expert

LABEL fb1024x768
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=791 xmodule=vesa screen=1024x768 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix

LABEL fb800x600
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=788 xmodule=vesa screen=800x600 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix

LABEL fb640x480
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=785 xmodule=vesa screen=640x480 initrd=minirt.gz nomce quiet apm=power-off BOOT_IMAGE=knoppix

LABEL failsafe
KERNEL linux26
APPEND ramdisk_size=100000 init=/etc/init lang=us vga=normal atapicd nosound acpi=off noapic noscsi nodma noapm nousb nopcmcia nofirewire noagp nocups noalsa nomce nodhcp xmodule=vesa initrd=minirt.gz BOOT_IMAGE=knoppix

LABEL userdef
KERNEL linux26
APPEND

Observemos primeiramente que a tag DEFAULT especifica uma das opções de boot, e não mais o arquivo "vesamenu.c32", o que significa dizer que não teremos um menu.

Em segundo lugar, o valor da tag PROMPT foi configurado como 1, dizendo que o prompt "boot: " sempre deve ser exibido. Se fosse definido como 0, como não há um menu de boot, a opção padrão seria acionada assim que o ISOLINUX fosse carregado, não dando tempo ao usuário de escolher outra opção.

Perceba, além disso, que aparecem quatro novas tags antes das definições das opções de boot. Essas são, provavelmente, as únicas personalizações que podemos fazer quando queremos exibir apenas o prompt "boot: ". Vou explicá-las nos tópicos a seguir.

Além dessas, você pode utilizar a tag SAY, quando não quiser exibir o conteúdo de um arquivo de texto inteiro, mas apenas uma mensagem.

SAY message


Exibe na tela a mensagem passada como parâmetro.

Veja a seguir um exemplo de utilização da tag SAY:

DEFAULT live
TIMEOUT 300
PROMPT 1

SAY Bem vindo ao Linux. 
SAY Digite a opcao de boot a seguir ou pressione ENTER para a opcao padrao.

LABEL live
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash

LABEL text_only
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet

LABEL memtest
  KERNEL /boot/memtest86
  APPEND -

LABEL hd
  LOCALBOOT 0x80
  APPEND -


A tag DISPLAY


Reservei um tópico somente para essa tag porque ela possui diversas aplicações dentro do ISOLINUX. Sua sintaxe básica é a seguinte:

DISPLAY filename


Exibe na tela o conteúdo do arquivo de texto passado como parâmetro.

É importante observar que este arquivo pode estar tanto no formato DOS quanto no formato UNIX e que alguns caracteres ASCII não-imprimíveis (são caracteres especiais, que não são visualizados na tela) podem ser usados para acrescentar ao conteúdo desse arquivo alguma funcionalidade ou formatação. Esse tópico será dedicado a falar desses caracteres.

Não tratarei todos os caracteres possíveis aqui, mas apenas os que, a julgar pelos exemplos em arquivos de configuração que encontrei, achei mais importantes. Se quiser saber todos os caracteres ASCII que são reconhecidos pelo ISOLINUX, consulte a documentação do ISOLINUX.

Caractere EM

  • Código decimal: 25
  • Código hexadecimal: 19
  • Código octal: 031
  • Combinação de teclas para o vim: CTRL + Y
Se estiver no modo gráfico, retorna ao modo texto.

Para inserir no arquivo de texto esse e os outros caracteres ASCII que vierem a seguir, você tem duas opções:

A primeira delas é utilizar um dos comandos a seguir, que insere o caractere ASCII no final do arquivo que é lhe passado como parâmetro:

$ printf "\xNN" >> arquivo

$ printf "\NNN" >> arquivo

onde NN é o código hexadecimal e NNN é o código octal do caractere ASCII em questão.

Assim, poderíamos inserir o caractere EM em um arquivo de texto usando um dos comandos:

$ printf "\x19" >> arquivo

$ printf "\031" >> arquivo

Uma dica é executar esse comando para inserir o caractere em um arquivo temporário, abrir esse arquivo com o kwrite, abrir o arquivo no qual você deseja inserir o caractere em outra janela do kwrite e finalmente copiar e colar o caractere de um arquivo para o outro.

A segunda opção é utilizar o vi, o vim (editores de texto de linha de comando) ou o gvim (versão do vim para GNOME) para escrever o arquivo de texto. Para quem não tem intimidade com linha de comando, eu recomendo este último (foi o que eu utilizei), que você pode instalar usando o comando a seguir:

# apt-get install vim-gnome

Abra o arquivo utilizando um dos editores acima mencionados (o vi, o vim ou o gvim), pressione a tecla i para entrar no modo de inserção de texto, posicione o cursor na posição onde você deseja inserir o caractere, pressione CTRL + V e, finalmente, pressione a combinação de teclas fornecida para formar aquele caractere (que, no caso do caractere EM, seria CTRL + Y). Observe que isso não funciona em outros editores de texto, como o nano, o kedit ou mesmo o kwrite.

Não entrarei em mais detalhes sobre a utilização desses editores de texto pois não é o foco deste artigo explicar seu funcionamento. Quem desejar obter mais informações, pode acessar esta página.

Não se preocupe se alguns desses caracteres não apresentarem aplicação imediata, como esse que acabamos de ver. Voltaremos a falar deles no próximo tópico.

Caractere FF

  • Código decimal: 12
  • Código hexadecimal: 0C
  • Código octal: 014
  • Combinação de teclas para o vim: CTRL + L
Limpa a tela, colocando o cursor na posição inicial. É importante observar que isso não altera as cores de frente e de fundo definidas anteriormente.

Caractere SI

  • Código decimal: 15
  • Código hexadecimal: 0F
  • Código octal: 017
  • Combinação de teclas para o vim: CTRL + O
Configura as cores de fundo e de frente. A sintaxe de uso desse caractere é a seguinte:

SIbgfg

onde bg e fg são números hexadecimais que definem, respectivamente, a cor de fundo e a cor de frente. Os possíveis números que são aceitos nesses campos estão listados a seguir junto com as cores que determinam:

0 = black               8 = dark grey
1 = dark blue           9 = bright blue
2 = dark green          a = bright green
3 = dark cyan           b = bright cyan
4 = dark red            c = bright red
5 = dark purple         d = bright purple
6 = brown               e = yellow
7 = light grey          f = white

Caractere CAN

  • Código decimal: 24
  • Código hexadecimal: 18
  • Código octal: 030
  • Combinação de teclas para o vim: CTRL + X
Exibe uma imagem na tela. Sua sintaxe é a seguinte:

CANfilenameNOVA_LINHA

Onde filename é o nome do arquivo que contém a imagem a ser exibida, com extensão ".rle".

Para criar uma imagem com essa extensão, você precisará utilizar um script que vem com o ISOLINUX.

Primeiramente, crie uma imagem no GIMP com largura 640 pixels e altura menor que 480 pixels (200 a 300 pixels seria a altura ideal), converta-a para 15 pixels, indexada e salve-a como "splash.bmp". Em seguida, execute os dois comandos a seguir no terminal:

$ bmptoppm splash.bmp > splash.ppm

$ ppmtolss16 '#ffffff=7' < splash.ppm > splash.rle

Se você não conseguir executar o primeiro comando, instale o pacote netbpm e tente novamente:

# apt-get install netbpm

Não entrarei em muitos detalhes aqui a respeito disso. Eu já apresentei na primeira parte do artigo uma forma muito mais prática de se colocar uma imagem de fundo (bem verdade, no entanto, que isso requer a exibição de um menu). Quem quiser saber mais informações sobre como exibir uma imagem de fundo por esse método pode consultar uma das seguintes páginas:


Voltando ao arquivo de configuração do ISOLINUX encontrado no LiveCD do Kurumin, que foi exibido no tópico anterior, observe que a tag DISPLAY ordena que seja exibido o conteúdo do arquivo "boot.msg".

Se você tiver acesso ao LiveCD do Kurumin e tiver a curiosidade de abrir esse arquivo, verá que ele contém apenas uma linha (para facilitar a visualização e a compreensão desse artigo, colocarei os caracteres ASCII não-imprimíveis entre sinais de asterisco):

*SI*17*FF**CAN*logo.16

O arquivo "logo.16" provavelmente é a imagem de fundo que vemos na tela de boot do LiveCD. A única utilidade do arquivo "boot.msg" então é exibir essa imagem e definir a cor do prompt "boot: ", já que nenhuma outra coisa é exibida na tela de boot do LiveCD do Kurumin.

No LiveCD do Ubuntu, há um arquivo "isolinux.txt" com o seguinte conteúdo:

*CAN*splash.rle

This is the Ubuntu Live CD.
Press *DC3*F1*DC4*control and F then 1*ETB* for help and advanced options.

For the default live system, press ENTER.

Se você tiver a curiosidade de copiar esse arquivo "isolinux.txt", juntamente com o arquivo "splash.rle" nele referenciado, para a pasta de testes, criar um arquivo "isolinux.cfg" com o conteúdo a seguir, só para fins de teste mesmo, verá a imagem a seguir na tela da sua máquina virtual.

DEFAULT live
TIMEOUT 0
PROMPT 1

DISPLAY isolinux.txt

LABEL live
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND BOOT=live boot=live nopersistent rw quiet splash


Vale observar que eu só consegui identificar os caracteres nos arquivos citados nesse tópico porque eu utilizei o gvim. Se você tentar abri-los utilizando qualquer outro editor de texto, como o kwrite, por exemplo, verá no lugar dos caracteres ASCII símbolos estranhos.

Exibindo textos na tela, uso das teclas F1 a F12


As teclas F1 a F12 no ISOLINUX possuem a função de exibir textos na tela. Configurando seu uso, nós podemos implementar em nosso LiveCD um sistema de ajuda de boot. A maioria dos LiveCDs costuma associar a essas teclas textos que informam ao usuário as opções de boot e os parâmetros que podem ser passados para o kernel.

No arquivo de configuração do ISOLINUX, as tags responsáveis pela configuração das teclas F1 a F12 apresentam a seguinte sintaxe básica:

F[1-12] filename


Exibe na tela o conteúdo do arquivo passado como parâmetro toda vez que a tecla em questão for pressionada. Tem funcionamento semelhante à tag DISPLAY.

Vejamos como podemos montar um menu de ajuda bastante interessante, como o que encontramos no DVD de instalação do Debian. Para isso, na pasta de teste, crie os arquivos que mostrarei a seguir (explicações serão dadas mais adiante):
  • isolinux.cfg:
DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0
INCLUDE menu.cfg
  • menu.cfg:
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 -

LABEL help
  MENU LABEL ^Ajuda
  CONFIG ajuda.cfg
  • ajuda.cfg:
PROMPT 1
DISPLAY f1.txt
TIMEOUT 0
INCLUDE menu.cfg

LABEL menu
  CONFIG isolinux.cfg

F1 f1.txt
F2 f2.txt
F3 f3.txt

Nos arquivos a seguir são utilizados os caracteres ASCII não-imprimíveis explicados no tópico anterior. Ao gerar esses arquivos, você deve gerar esses caracteres por um dos métodos já explicados.


  • f1.txt:
*EM**FF**SI*0fAJUDA DE BOOT

*SI*07Este e o menu de ajuda. Abaixo, voce ve a lista de topicos tratados nesta ajuda.
Para acessar um dos topicos, pressione a tecla de funcao correspondente.

A qualquer momento voce pode iniciar o sistema, digitando no prompt "boot: " as
opcoes de boot e pressionando ENTER. Se desejar retornar ao menu principal,
digite menu e pressione ENTER.

*SI*0fIndice

Tecla    Topico

*SI*09F1*SI*07       Esta pagina, o indice da ajuda
*SI*09F2*SI*07       Pre-requisitos para executar o LiveCD
*SI*09F3*SI*07       Opcoes de boot para utilizar este LiveCD

  • f2.txt:
*EM**FF**SI*0fPRE-REQUISITOS PARA EXECUTAR O LIVECD

Configuracao minima:

  *SI*07Processador Intel Pentium II 266 MHz ou equivalente
  Memoria RAM de 196 MB

*SI*0fConfiguracao recomendada:

  *SI*07Processador AMD Athlon 1.0 GHz ou equivalente
  Memoria RAM de 512 MB

*SI*0fPressione *SI*09F1*SI*0f para voltar ao indice da ajuda ou digite a opcao de boot desejada epressione ENTER para inicia-la.

  • f3.txt:
*EM**FF**SI*0fOPCOES DE BOOT PARA UTILIZAR ESTE LIVECD

live
  *SI*07Inicia o Linux normalmente, em modo grafico. Essa e a melhor forma de utilizar  o Linux e tambem a opcao padrao deste LiveCD.
*SI*0ftext_only
  *SI*07Inicia 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.
*SI*0fmemtest
  *SI*07Nao inicia o Linux. Ao inves disso, inicia o MEMTEST86, um utilitario de
  teste de memoria que diagnosticara erros na memoria do seu computador.
*SI*0fhd
  *SI*07Nao inicia o Linux. Ao inves disso, inicia o sistema operacional instalado no
  primeiro disco-rigido do seu computador.

*SI*0fPara usar uma dessas opcoes de boot, digite-a no prompt "boot: " e pressione
ENTER, como no exemplo a seguir.
  *SI*07boot: text_only

*SI*0fPressione *SI*09F1*SI*0f para voltar ao indice da ajuda ou digite a opcao de boot desejada epressione ENTER para inicia-la.


Vou explicar agora o que fizemos com esses arquivos.

Em primeiro lugar, separamos as opções de boot em um arquivo a parte ("menu.cfg") para que pudéssemos reutiliza-las. Observe que a linha "INCLUDE menu.cfg" aparece tanto no arquivo "isolinux.cfg" quanto no arquivo "ajuda.cfg". Com isso, o usuário pode, do menu de ajuda, acionar qualquer uma das opções definidas para o menu principal.

No arquivo "ajuda.cfg" definimos o menu de ajuda. Nele não aparecem as opções do menu principal, apenas textos de ajuda e o prompt "boot: ", como você verá nas figuras a seguir. Então, se o usuário quiser acionar uma das opções definidas para o menu principal, deverá digitar o nome da opção no prompt "boot: " e apertar ENTER.

Observe que nesse arquivo foi definida uma nova opção de boot, "menu", que permite ao usuário, se acionada, voltar ao menu principal. Ela utiliza o mesmo mecanismo de submenus, explicado em um dos tópicos anteriores.

Observe também que a tag PROMPT está definida como 1, indicando que o prompt "boot: " deve ser sempre mostrado, e que a tag TIMEOUT está definida como 0, desabilitando a contagem regressiva para a execução da ação padrão.

Há, finalmente, a tag DISPLAY, indicando que deve ser exibido o conteúdo do arquivo "f1.txt" assim que for exibido o menu e as tags F1, F2 e F3, informando que devem ser exibidos os conteúdos dos arquivos "f1.txt", "f2.txt" e "f3.txt", quando forem pressionadas as teclas F1, F2 e F3, respectivamente.

Para entender melhor o funcionamento desse modelo de menu de ajuda que apresentei aqui, recomendo que você crie esses arquivos e teste o menu em uma máquina virtual. O resultado deve ser este:




Como eu havia dito em um artigo anterior, no qual expliquei os passos gerais para a criação de um LiveCD, a criação de LiveCDs é um assunto muito vasto. Nos artigos seguintes, focarei individualmente em cada aspecto da criação de um LiveCD. Nesse artigo, que foi dividido em duas partes, dada a sua extensão, vimos de quantas maneiras podemos personalizar o gerenciador de boot. Espero que tenham gostado e que possam tirar proveito desse artigo na construção de seus próprios LiveCDs.

Ainda não decidi o tema do próximo artigo, mas assim que decidir colocarei a mão na massa.

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

Fontes


1 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-2)/

Postar um comentário