Instalação automatizada de servidores com Kickstart (parte 2)

Nesse artigo entenderemos como montar um servidor de instalação utilizando o PXE (Pre-boot eXecution Environment) e integrando-o com os kickstarts já criados. Dividiremos esse post em 3 etapas, que na verdade são os 3 sub-sistemas envolvidos na configuração de um servidor de instalação PXE: DHCP, TFTP-SERVER, FILE SHARE.

[ Hits: 22.297 ]

Por: Marcelo Moreira de Mello em 07/04/2010 | Blog: http://tchellomello.blogspot.com


Configurando TFTP Server



Uma vez configurado nosso servidor DHCP, precisamos agora preparar nosso servidor TFTP para enviar o bootloader (pxelinux.0) pela rede e os demais arquivos que serão utilizados no startup de instalação da máquina inst-automatico.

O Trivial File Transfer Protocol é o escolhido para esse serviço por basear suas conexões sem a necessidade de autenticação e por utilizar o protocolo UDP. Outro detalhe sobre o TFTP é que ele é um serviço baseado no SuperDaemon XINETD, isto é, precisamos do xinetd para executar o TFTP. Para habilitarmos o serviço, basta:

# rpm -q tftp-server
tftp-server-0.49-5.fc12.x86_64

# rpm -q xinetd
xinetd-2.3.14-29.fc12.x86_64

# chkconfig xinetd on
# chkconfig tftp on
# cat /etc/xinetd.d/tftp | grep -v ^#


service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}

# service xinetd start

Na arquivo acima podemos observar como é fácil a configuração do TFTP no sistema. Não será necessário nenhuma customização no serviço por enquanto. Um detalhe imprescindível na configuração é o parâmetro server_args = -s /var/lib/tftpboot, que cria uma espécie de chroot para o serviço. Desta forma, nossos arquivos de configuração irão se localizar dentro do diretório proposto.

Para continuarmos de forma segura e termos certeza que tudo que configuração até o momento está funcionando, podemos copiar um arquivo qualquer para dentro do diretório /var/lib/tftpboot e baixá-lo via tftp, a fim de testar o serviço. Caso o comando tftp não esteja disponível no sistema, instale o pacote tftp.

# rpm -q tftp
tftp-0.49-5.fc12.x86_64 # cp /etc/hosts /var/lib/tftpboot/
# ls -la /var/lib/tftpboot/

total 12
drwxr-xr-x. 2 root root 4096 2010-04-04 03:31 .
drwxr-xr-x. 30 root root 4096 2010-04-04 03:22 ..
-rw-r--r--. 1 root root 264 2010-04-04 03:31 hosts

# tftp 192.168.240.10 -c get hosts
# ls -la hosts

-rw-r--r--. 1 root root 264 2010-04-04 03:31 hosts

Se você conseguiu fazer o download do arquivo utilizando um cliente TFTP, estamos indo muito bem. Nosso próximo passo será copiar para o diretório /var/lib/tftpboot o bootloader chamado de pxelinux.0. Para fazer uso do PXE, sua máquina cliente deve ter esse suporte na placa de rede que às vezes deve ser habilitado na própria placa ou no caso de placas on-board, na BIOS do cliente com uma opção geralmente identificada como "Boot Onboard Lan Support" ou "PXE Onboard Support".

O processo de boot via PXE consiste em inicializar o cliente pela placa de rede sem a necessidade de ter um sistema operacional instalado localmente, pois o cliente irá solicitar um endereço IP via DHCP (já temos o servidor DHCP configurado) e utilizará o parâmetro next-server 192.168.240.10 para solicitar o bootloader, que é informado pelo parâmetro filename "pxelinux.0", ambos no arquivo dhcpd.conf. A transferência do bootloader será dada sob o protocolo TFTP.

Por conta disto devemos então colocar o arquivo pxelinux.0 dentro do diretório /var/lib/tftpboot. Para isso:

# rpm -q syslinux
syslinux-3.75-4.fc12.x86_64

# rpm -ql syslinux | grep pxelinux.0
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0

# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# ls -la /var/lib/tftpboot/

total 28
drwxr-xr-x. 2 root root 4096 2010-04-04 03:43 .
drwxr-xr-x. 30 root root 4096 2010-04-04 03:22 ..
-rw-r--r--. 1 root root 264 2010-04-04 03:31 hosts
-rw-r--r--. 1 root root 15702 2010-04-04 03:43 pxelinux.0

Está ficando bonito! O que precisamos entender agora é o funcionamento do bootloader pxelinux.0.

Por padrão o pxelinux.0 irá procurar um arquivo de configuração dentro de um diretório chamado pxelinux.cfg. O bootloader irá procurar os arquivos de configuração nessa ordem, onde no match de alguns deles o próximo não será consultado.

1. MAC Address: como primeira etapa, o pxelinux.0 irá procurar o arquivo nomeado com o MAC Address do cliente;

2. IP em Hexadecimal: irá procurar o arquivo convertendo o IP do cliente para hexadecimal e irá decrementar sempre um caractere da direita a fim de encontrar alguma configuração do cliente ou da subnet informada. Para a conversão do IP para hexadecimal, podemos utilizar o utilitário gethostip.

3. Default: por fim, se não for localizado nenhum arquivo acima, o bootloader procurará um arquivo chamado default.

Abaixo segue um exemplo retirado do arquivo de documentação do projeto:

/mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/mybootdir/pxelinux.cfg/C000025B
/mybootdir/pxelinux.cfg/C000025
/mybootdir/pxelinux.cfg/C00002
/mybootdir/pxelinux.cfg/C0000
/mybootdir/pxelinux.cfg/C000
/mybootdir/pxelinux.cfg/C00
/mybootdir/pxelinux.cfg/C0
/mybootdir/pxelinux.cfg/C
/mybootdir/pxelinux.cfg/default

Nesses arquivos teremos as configurações de qual kernel, initrd e kickstart iremos utilizar para a instalação do cliente.

# pwd
/var/lib/tftpboot

# mkdir pxelinux.cfg
# cd pxelinux.cfg/
# pwd

/var/lib/tftpboot/pxelinux.cfg
# gethostip -x 192.168.240.49
C0A8F031
# touch C0A8F031

Como nosso arquivo C0A8F031 ainda não possui conteúdo, uma boa dica é utilizar um cdrom de boot para utilizar alguns arquivos como exemplos, bem como para copiarmos o kernel e o initrd do sistema que queremos instalar. Irei instalar um cliente com o Fedora 12. Esses arquivos podem ser encontrados dentro do DVD ou CD bootável do sistema.

# mount -o loop fedora12-x86_64.iso /mnt
# cd /mnt
# ls

EFI images
media.repo repodata
RPM-GPG-KEY-fedora-12-primary
RPM-GPG-KEY-fedora-ppc
RPM-GPG-KEY-fedora-x86_64
GPL
isolinux
Packages
RPM-GPG-KEY-fedora
RPM-GPG-KEY-fedora-i386
RPM-GPG-KEY-fedora-ppc64
TRANS.TBL
# cd images/pxeboot/
# ls

initrd.img
README
TRANS.TBL
vmlinuz
# cp vmlinuz initrd.img /var/lib/tftpboot/
# cd ../../isolinux/
# ls

boot.cat
boot.msg
grub.conf
initrd.img
isolinux.bin
isolinux.cfg
memtest
splash.jpg
TRANS.TBL
vesamenu.c32
vmlinuz
# cp boot.msg /var/lib/tftpboot/
# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/C0A8F031

cp: overwrite `/var/lib/tftpboot/pxelinux.cfg/C0A8F031'? y

# cd /var/lib/tftpboot/
# pwd

/var/lib/tftpboot
# ls
boot.msg
hosts
initrd.img
pxelinux.0
pxelinux.cfg
vmlinuz
# cat boot.msg

Para instalar o Fedora 12, digite: fedora12

# cat pxelinux.cfg/C0A8F031

prompt 1
timeout 600
display boot.msg
default fedora12

label fedora12
  kernel vmlinuz
  append initrd=initrd.img network ksdevice=eth0 ks=http://192.168.240.10/kickstart-fedora12.cfg

Alterado os arquivos como segue o exemplo acima, nosso servidor PXE já esta pronto! No arquivo C0A8F031 configuramos para exibir o menu para o usuário (prompt 1, display boot.msg) por 60 segundos (timeout 600) e caso o usuário não escreva a opção informada (boot.msg) o padrão será bootar com o fedora12 (default fedora12).

Na configuração do label, informamos o kernel, o initrd e o kickstart que será utilizado para a instalação do servidor.

Para maiores informações, consulte os arquivos no diretório /usr/share/doc/syslinux*.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Configurando TFTP Server
   3. Configurando File Share
Outros artigos deste autor

Instalação automatizada de servidores com kickstart

Transportando dados com segurança - encripte seu pendrive em 5 passos

Criando firewalls dinâmicos com Iptables Recent

Leitura recomendada

Linux em um pendrive

Linux no pendrive com DSL e QEMU

Os Caminhos Para Certificação LPI1

Afrescalhando o Slackware

APTonCD: Ubuntu Linux sem dependência de internet

  
Comentários
[1] Comentário enviado por grandmaster em 07/04/2010 - 18:58h

Uso processos automatizados para os servidores e desktops/laptios windows.

testarei esse.
--
Renato de Castro Henriques
ITILv3 Foundation Certified
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br


[2] Comentário enviado por gostt em 10/04/2010 - 11:15h

Muito bom seu artigo, vou testa-lo!
Renato o que processos automatizados voce esta usando para os servidores e desktops/laptios windows?

Abraços

[3] Comentário enviado por vinigusto em 26/10/2010 - 22:51h

Olá, gostaria de saber se este tutorial se aplica a distribuição do Debian Lenny. Estou num projeto em que precisa fazer a comunicação entre cliente (terminal burro) e o servidor (debian, virtualizado com xen). Onde o cliente faz o requisito ao master e este envia o so.
Obrigado


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts