Instalação automatizada de servidores com kickstart

Imagine você, administrador de redes de uma determinada empresa, e seu chefe te avisa que os 200 novos servidores já chegaram da transportadora e precisam estar instalados e prontos até o final da semana. Entrou em pânico?! :) Já ligou para casa avisando que vai chegar mais tarde só porque precisa instalar 200 servidores em 4 dias?!?!

[ Hits: 14.125 ]

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


Instalação automatizada de servidores com kickstart



Imagine você, administrador de redes de uma determinada empresa, e seu chefe te avisa que os 200 novos servidores já chegaram da transportadora e precisam estar instalados e prontos até o final da semana. Entrou em pânico?! :) Já ligou para casa avisando que vai chegar mais tarde só porque precisa instalar 200 servidores em 4 dias?!?!

Se acalme caro leitor(a), com a utilização de kickstart podemos tornar essa missão simples e divertida! Para começarmos, precisamos entender no que consiste o termo kickstart. Se formos analisar ao pé da letra, kickstart pode ser pontapé inicial, início rápido, ponto de partida. Trazendo para o nosso contexto, kickstart nada mais é do que um arquivo que contém os passos para instalarmos nosso servidor de maneira automatizada, onde será informado: particionamento, pacotes a serem instalados, comandos para serem executados antes ou depois da instalação.

Praticamente tudo que fazemos na instalação através da interface gráfica no momento em que estamos instalando o nosso Linux (Fedora, Red Hat Enterprise Linux etc) podemos informar dentro do arquivo e passar como parâmetro para uma próxima instalação, tornando assim possível instalar um grande volume de servidores em um pequeno espaço de tempo.

Algumas distribuições como Fedora e Red Hat Enterprise Linux utilizam um instalador chamado de Anaconda. Por padrão, toda instalação gera dentro do diretório pessoal do usuário root, /root, um arquivo chamado "anaconda-ks.cfg" que contém todas as informações que foram passadas no momento da instalação desse determinado servidor. Esse arquivo por sua vez, pode ser copiado ou customizado e replicado para novas instalações, tornando assim o processo mais dinâmico e rápido.

Acredito que você já deve estar pensando:

- Já sei, vou instalar uma máquina, copiar esse arquivo e replicar as instalações!

E será exatamente isso que iremos fazer. Entretanto existe uma maneira mais ágil de criarmos esse arquivo de kickstart utilizando uma ferramenta disponível para Red Hat Enterprise Linux e Fedora chamada de system-config-kickstart.

Antes de começarmos a criação do nosso arquivo de kickstart, precisamos analisar a anatomia do arquivo.

%pre - nesta seção você pode adicionar comandos para serem executados logo após o parse do arquivo de kickstart e antes da instalação começar. As vezes é interessante executar algum backup como no exemplo abaixo.

#Backup da MBR
dd if=/dev/sda of=/tmp/mbr-sda.bak bs=1 count=512
tftp backup-server -c put /tmp/mbr-sda.bak mbr-sda-serverA.bak

%packages - nesta seção você pode adicionar pacotes, grupos de pacotes ou remover pacotes, por exemplo:

#Adicionar grupo de pacotes
@base
@Gnome Desktop Environment
# Adicionar pacotes individualmente
sysstat
vnc-server
vnc
system-config-network
# Remover grupo de pacotes
-@dns-server
-@Virtualization
# Remover pacotes individualmente
-mrtg
-openldap-server

%post - nesta seção você poderá inserir comandos para serem executados após a instalação. Na minha opinião, essa é a seção mais interessante do arquivo de kickstart, pois podemos criar usuários, baixar e instalar RPMs, descompactar arquivos ou criar arquivos de configuração de modo que depois de reboot do servidor, o mesmo já esteja pronto para uso.

Exemplos para seção %post:

useradd -c "Marcelo" -s /bin/bash marcelo
echo s3gr3d0 | passwd --stdin marcelo
ntpdate clock.redhat.com
wget http://servidor/arquivos/confs/hosts -O /etc/hosts
wget http://servidor/arquivos/confs/resolv.conf -O /etc/resolv.conf

Familiarizado com algumas seções do arquivo de kickstart, agora sim podemos executar o aplicativo system-config-kickstart para a criação do mesmo. Irei colocar algumas telas, uma vez que a ferramenta já é praticamente auto-explicativa. Porém se ainda existirem dúvidas, dentro do diretório /usr/share/doc/system-config-kickstart-* existe uma documentação completa sobre cada seção oferecida no arquivo de configuração.
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Linux: Instalação Automatizada de Servidores com Kickstart   Linux: Instalação Automatizada de Servidores com Kickstart
Como podemos observar, o aplicativo system-config-kickstart não permite a criação de volumes lógicos (LVM). Porém, se editarmos o arquivo podemos adicionar esses parâmetros manualmente. Abaixo temos o arquivo já editado, onde adicionei um VolumeGroup de 30G e um LogicalVolume de 10G formatado com EXT3 e montado no /home.

Visualizando tudo junto:

# cat meu-kickstart.cfg

#platform=x86, AMD64, or Intel EM64T
#version=F12
# Firewall configuration
firewall --enabled --ssh
# Install OS instead of upgrade
install
# Root password
rootpw --iscrypted $1$5P.8Fygb$0g0BUmfp2SHXHP7Mbj1Kv0
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System authorization information
auth --useshadow --passalgo=md5 --enableldap --enableldapauth --ldapserver=ldap.minhaempresa.com.br --ldapbasedn=dc=minhaempresa,dc=com,dc=br
# Use graphical install
graphical
# System keyboard
keyboard us-acentos
# System language
lang en_US
# SELinux configuration
selinux --enforcing
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Use CDROM installation media
cdrom
# Reboot after installation
reboot
# System timezone
timezone --isUtc America/Sao_Paulo
# System bootloader configuration
bootloader --location=mbr --md5pass="$1$.e9CsgvS$4VBnme22CqAC8ill0dnPN1"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="ext3" --ondisk=sda --size=200
part swap --asprimary --fstype="swap" --ondisk=sda --recommended
part /tmp --fstype="ext3" --ondisk=sda --size=1024
part raid.01 --fstype="raid" --ondisk=sda --size=2048
part /var --fstype="ext3" --ondisk=sda --size=5192
part raid.02 --fstype="raid" --ondisk=sdb --size=2048
raid / --device=md0 --fstype="ext3" --level=1 raid.01 raid.02
# Criação do PV
part pv.inst --size 30000
# Criação do VG
volgroup vg0 pv.inst
# Criação do LV
logvol /home --vgname=vg0 --size=10000 --name=lv.home
%pre
dd if=/dev/sda of=/tmp/mbr-sda.bak bs=1 count=512
tftp backup-server -c pub /tmp/mbr-sda.bak mbr-sda-serverA.bak
%end
%post
useradd -c "Marcelo" -s /bin/bash marcelo
echo s3gr3d0 | passwd --stdin marcelo
ntpdate clock.redhat.com
wget http://servidor/arquivos/confs/hosts -O /etc/hosts
wget http://servidor/arquivos/confs/resolv.conf -O /etc/resolv.conf
%end
%packages
@admin-tools
@dns-server
@editors
@system-tools
@text-internet
%end

Para validar a sintaxe do arquivo recém criado, pode-se utilizar o comando ksvalidator, como abaixo:

# ksvalidator meu-kickstart.cfg

Uma vez com o arquivo de kickstart pronto, podemos passá-lo como parâmetro para uma nova instalação usando a opção ks= na linha do prompt de comando no início do instalador. Por exemplo:

linux ksdevice=eth0 ks=http://meu-servidor-inst/ks/meu-kickstart.cfg

Maiores informações dentro do diretório /usr/share/doc/anaconda-*/command-line.txt. Segue um fragmento da documentação:

;ks
: Gives the location of the kickstart file to be used for installation. If only ks is given, the file is assumed to be on NFS. The ks parameter may take these other forms:
:*ks=cdrom:
:*ks=file: (path = 'fd0/ks.cfg', for example)
:*ks=ftp://
:*ks=hd:: (dev = 'hda1', for example)
:*ks=http:///
:*ks=nfs[:options]::

Espero no próximo artigo explicar como podemos criar um servidor PXE para inicializarmos uma nova instalação pela rede (livre de CD/DVD bootável) já passando por parâmetro o arquivo kickstart, tornando o início, meio e fim da instalação totalmente automatizado.

Uma dica interessante enquanto não criamos nosso servidor de instalação via rede é customizar a mídia de boot do Fedora/Red Hat inserindo os arquivos de kickstart e recriá-la com opção de bootável.

Grande abraço.

   

Páginas do artigo
   1. Instalação automatizada de servidores com kickstart
Outros artigos deste autor

Criando firewalls dinâmicos com Iptables Recent

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

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

Leitura recomendada

Horário de verão brasileiro até 2038

Apache + Virtual Host + DNS no Debian Lenny

Instalando o BIND 9 no CentOS 6

Como selecionar que processos serão iniciados ao boot - sysv-rc-conf

Dois monitores no Linux

  
Comentários
[1] Comentário enviado por removido em 10/02/2010 - 08:52h

Excelente Artigo! ;]

[]'s

[2] Comentário enviado por volcom em 10/02/2010 - 08:59h

Muito bom!

Mas isso só existe para as distribuições citadas?

Existe algum material fonte, site do projeto...?

Abraço e parabéns!

[3] Comentário enviado por volcom em 10/02/2010 - 09:01h

Não sei se redundante ou complemento:

http://www.vivaolinux.com.br/artigo/Instalacao-KickStart/

;)

[4] Comentário enviado por pitanga em 10/02/2010 - 17:00h

Eu prefiro usar muito o SystemImager e o Clonezzila.

Mas dependendo do caso o kickstart é uma boa solução.

[]'s

[5] Comentário enviado por tchello.mello em 10/02/2010 - 21:24h

Olá,

Concordo que a utilização de images ou clones poderia ser uma solução, entretanto pode ser uma solução um pouco engessada. Porque?!!

Com o kickstart, você tem uma instalação dinâmica e poderia fazer uma extensão no seu arquivo de kickstart na seção de %post baseada em alguma condição.

"se X condição for verdadeira ou se o ip da máquina for da rede XX, ou a RAM do server, baixar o script webserver.sh e executar senão baixar o dnsserver.sh"


%post
..... (continuação)
MEMORIA=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}')

if [ $MEMORIA -gt 2097152 ];
then
wget -O /usr/bin/install-dnsserver.sh http://server/arquivos/scripts/dnsserver.sh
bash /usr/bin/install-dnsserver.sh
else
wget -O /usr/bin/install-webserver.sh http://server/arquivos/scripts/webserver.sh
bash /usr/bin/install-webserver.sh
fi

Abraços

[6] Comentário enviado por chacal. em 10/02/2010 - 22:47h

Parabéns pelo artigo
muito bom mesmo pode ate ajuda na documentação.

[7] Comentário enviado por luizvieira em 15/02/2010 - 06:58h

Muito bom, facilita a vida dos administradores.!
[ ]'s


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts