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.