Mini-Howto Dual boot para terminais leves (tsp e freedos)
Colaboração: Marco Sinhoreli
Data de Publicação: 23 de Abril de 2004
Em: 25/03/2004 Distribuição utilizada: Debian Woody
Introdução:
A idéia é providenciar na inicialização do terminal leve usando GNU/Etherboot e o GNU/Grub um menu para boot do Linux via ltsp ou do GNU/Freedos. Não entrarei em detalhes de como configurar o ltsp pois o projeto já se encontrabem documentado (www.ltsp.org).
Ferramentas necessárias:
- ltsp_initrd_kit (http://www.ltsp.org).
- mknbi (www.mknbi.org).
- fontes do Grub 0.93 (http://ruslug.rutgers.edu/~mcgrof/grub-images/grub-debian-sources).
- Roms para placa de rede e para o grub (http://www.romomatic.net).
- Instale o mknbi.
- Baixe do site www.ltsp.org na sessão downloads o ltsp_initrd_kit.
- Baixe os fontes do Grub:
$ cd /usr/src $ mkdir grub-src $ cd grub-src $ wget http://ruslug.rutgers.edu/~mcgrof/grub-images/grub-debian-sources/grub_0.93+cvs20030224.orig.tar.gz $ wget http://ruslug.rutgers.edu/~mcgrof/grub-images/grub-debian-sources/grub_0.93+cvs20030224-2.diff.gz $ tar zxvf grub_0.93+cvs20030224.orig.tar.gz $ gunzip grub_0.93+cvs20030224-2.diff.gz $ patch -p0 < grub_0.93+cvs20030224-2.diff $ cd grub-0.93+cvs20030224
- Altere as linhas do código fonte dos arquivos:
$ cd stage2 fsys_reiserfs.c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ De: __u32 long j_mount_id; Para: /* __u32 long j_mount_id; */ De: || desc.j_trans_id != next_trans_id || desc.j_mount_id != header.j_mount_id) Para: || desc.j_trans_id != next_trans_id) /* || desc.j_mount_id != header.j_mount_id) */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
disk_io.c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ De: {"reiserfs", reiserfs_mount, reiserfs_read, reiserfs_dir, 0 reiserfs_embed}, Para: {"reiserfs", reiserfs_read, reiserfs_dir, 0, reiserfs_embed}, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Após alterado os fontes, verifique os parametros para o configure dos fontes em /usr/src/grub-src/grub-0.93+cvs20030224/netboot/README.netboot O exemplo é para o nic rtl8139 e para que seja disponibilizado os arquivos nbgrub e pxegrub (--enable-diskless) e desabilidado reiserfs (desabilitei devido a problemas ao compilar com make):$ ./configure --enable-rtl8139 --enable-diskless --disable-reiserfs $ make
- Copie os arquivos binários nbgrub e pxegrub para o diretório do tftp:
$ mkdir /tftpboot/grub $ cp stage2/nbgrub /tftpboot/grub/nbgrub.rtl8139 $ cp stage2/pxegrub /tftpboot/grub/pxegrub.rtl8139
- Baixe do site do freedos a imagem para diquete.
- Monte a imagem do freedos no mnt por exemplo:
$ mount -o loop -t vfat freedos.img /mnt
- Vamos agora preparar a imagem do freedos para ser inicializavel pelo Eherboot:
$ mknbi-fdos /mnt/kernel.sys freedos.img > netfreedos.img $ cp netfreedos.img /tftpboot/boot
- No site www.romomatic.net, selecione a versão 5.3.3 para o boot do GNU/Freedos. O motivo para o uso de uma versão da ROM do Etherboot em desenvolvimento é para que se tenha a variável "vendor-class-identifier" diferente da utilizada para o boot inicial. O dhcp identifica a variável enviada pela rom na requisição do serviço e carrega a ação explicita no dhcpd.conf. Como o freedos.img não pode ser carregado pelo nbgrub via tftp, a idéia é que o nbgrub descarregue outra ROM via tftp e que esta ao solicitar novamente as informações do dhcp o dhcp verifica novamente a variavel "vendor-class-identifier" enviada pela ROM e envia o freedos.img.
- Selecione a rom da sua placa de rede e o formato de saída "LILO Bootable ROM (.zlilo) Image" (para o boot pelo grub).
- Clique em Configure e na área "ASK_BOOT:" deixe o campo em branco.
- Clique no botão "Get Rom" e salve o arquivo.
- Copie o arquivo salvo para /tftpboot/roms:
$ mkdir /tftpboot/roms $ cp eb-5.3.3-rtl8139b.zlilo /tftpboot/roms/rtl8139b.zlilo
Neste exemplo estou usando a rom para rtl8139 e deixei o nome mais sugestivo :o) - Crie os diretório para os arquivos do grub, o kernel, o initrd e a imagem do freedos.
$ mkdir -p /tftpboot/boot/grub
- Descompacte o pacote ltsp_initrd_kit e copie os arquivos bzImage-2.4.xx-ltsp-1 e initrd-2.4.xx-ltsp-1.gz para /tftpboot/boot.
- Crie um arquivo /tftpboot/grub/menu.lst:
### Inicio do /tftpboot/grub/menu.lst default = 0 timeout = 15 tftpserver 192.168.20.6 color magenta/blue black/magenta splashimage /boot/grub/splash.xpm.gz title = GNU/Linux (LTSP) root (nd) kernel /boot/bzImage-2.4.xx-ltsp-1 init=/linuxrc rw root=/dev/ram0 initrd /boot/initrd-2.4.xx-ltsp-1.gz title GNU/Freedos kernel /boot/rtl8139b.zlilo ### Fim do /tftpboot/grub/menu.lst 16- Configurando o dhcpd.conf ### Inicio do dhcpd.conf default-lease-time 21600; max-lease-time 21600; ddns-update-style none; allow booting; allow bootp; option subnet-mask 255.255.255.0; option option-128 code 128 = string; option option-129 code 129 = text; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 200.204.0.10; option domain-name "ltsp"; use-host-decl-names on; shared-network WORKSTATIONS { subnet 192.168.20.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.0.10 192.168.0.100; option root-path "192.168.0.1:/opt/ltsp"; if substring (option vendor-class-identifier, 0, 13) = "Etherboot-5.3" { filename "/boot/netfreedos.img"; } else { filename "/nbgrub/nbgrub.rtl8139"; } } } ### Fim do dhcpd.conf
- Para a sua eprom etherboot ou diquete com a rom utilize versões diferentes (5.2.4 por exemplo) da sugerida para o boot do freedos.
Happy Hacking :)