Por: @jonasc Publicado em: 2019-08-16

Build da ISO Kickstart KS iTFLEX

Pacotes necessários

O ambiente de build requer o mesmo sistema operacional da ISO gerada. Exemplo: Para uma ISO baseada em CentOS 8, crie o ambiente de build em uma VM do CentOS 8. OBS: Em outra distro (como Fedora, por exemplo) pode ocorrer problemas de boot da ISO (kernel panic ou outro problema).

# yum groupinstall "Development Tools"
# yum install p7zip p7zip-plugins mkisofs xorriso syslinux

Instalação

Para facilitar a construção da ISO, o projeto itflex no Git possui um Makefile com as instruções de build. Para este lab será usado o padrão do itflex/server, conforme abaixo.

mkdir ~/git
cd ~/git
git clone git@git.itflex.com.br:itflex/itflex.git
cd itflex/
git pull

No diretório acima consta o arquivo Makefile que será usado para construção da ISO.

Configuração

Configuração do Makefile

Copie o diretório server/iso/ para o ambiente de build.

cd ~/git/itflex/
scp -r server/iso/ root@172.28.60.73:/root/iso/

Na seção download do Makefile é feito download da ISO especificada. Na seção iso contém as instruções para extrair, customizar a ISO e montar ISO personalizada.

Para fazer o download da ISO, acesse o ambiente de build e execute o comando de download:

ssh root@172.28.60.73
cd iso/
make download

Em seguida, execute o comando para realizar build da ISO:

make iso

No fim do processo, estará disponível o arquivo itflex-centos-8.iso no diretório build.

Observações importantes:

  • No Makefile acima estamos colocando o Minimal em vez do Netinstall (ISO maior)
    • Antes o produto usava o Netinstall, atualmente usa ISO maior.
  • A opção -V “ITFLEX” define o nome do DVD ou LABEL do pendrive quando for gravado
    • Inicialmente produto colocava “iTFLEX CentOS 8” como label
    • Com o suporte a pendrive, obrigatoriamente esse nome precisa ser o nome do pendrive
    • Problema: Algumas versões do Windows só aceitam caixa alta e um limite menor de caracteres
    • Ficou “ITFLEX” para evitar problemas e simplificar
  • Foi adicionado 3 novas opções com suporte a VNC (somente tela remota)

Explicação sobre as ferramentas:

  • mkisofs constrói a ISO
  • Isohybrid (pacote syslinux) torna a ISO bootável oara funcionar com pendrive
  • Xorriso cria a partição sda2 para funcionar o EFI

Configuração do GRUB customizado

Para adicionar novas opções de BOOT, é necessário modificar o arquivo isolinux.cfg (boot modo legacy) e o arquivo grub.cfg (boot modo UEFI).

Exemplo da configuração do isolinux.cfg:

label linux
  menu label ^Install iTFLEX Base
  text help
    Instalacao do iTFLEX Base sem configuracao de RAID.
    Usado para servidores com um disco ou RAID via Controladora.
  endtext
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=ITFLEX inst.ks=hd:LABEL=ITFLEX:/ks.cfg

Exemplo da configuração do grub.cfg:

menuentry 'Install iTFLEX Base' --class fedora --class gnu-linux --class gnu --class os {
	linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=ITFLEX inst.ks=hd:LABEL=ITFLEX:/ks.cfg
	initrdefi /images/pxeboot/initrd.img
}

1 Observações importantes:

  • Não realizar alterações manuais no arquivo, build e publicação no site sem passar pelo processo de desenvolvimento e testes adequados
  • Utilize sempre os arquivos que estão no projeto do git (alterações necessárias devem passar pelo desenvolvimento)
  • Estamos usando LABEL acima para funcionar tanto DVD quanto pendrive
  • Adicionamos novas opções no GRUB direcionando para novos arquivos do KS

Configurado do Kickstart

  • Adicionamos uma nova seção %pre que realiza algumas verificações antes de processar o arquivo KS
    • Descobre o device do pendrive e faz exclude para não destruir no particionamento
    • Descobre se o boot é legacy ou UEFI e configura os comandos de particionamento corretos
  • As 3 opções do GRUB requerem acesso à internet
    • ISO Offline funciona, mas o KS não pede para configurar rede (setar IP da LAN)
    • Porque não tem rede, o pós-instalação falha no yum install -y itflex-core
    • Funcionaria somente com KS configurado em modo DHCP, mas fica ruim, pois o cliente não sabe o IP

Caso queira fazer CentOS offline, basta remover todas as linhas de repo do ks, que ele irá buscar os pacotes da ISO automaticamente.

Para configurar um repo local (offline) adicional, basta configurar:

repo --name="itflex-core" --baseurl=file:///run/install/repo/itflex-core

O diretório /run/install/repo/ é onde a ISO / pendrive está montado durante a instalação. A pasta itflex-core acima está na raiz da ISO e é uma pasta comum de repo local do CentOS (com repodata, etc).

Testes das funcionalidades

  • Testar ISO em VM.
  • Gravar ISO em DVD e testar em servidor físico.
  • Gravar ISO em pendrive e testar em servidor físico.