Automatizar instalaciones de CentOS con Kickstart

CentOSKickstart/Anaconda permite realizar instalaciones desatendidas de sistemas CentOS (y por ende Red Hat y derivados) de modo que podamos instalar y configurar todos los equipos que queramos sin realizar la instalación uno a uno. Además podemos añadir tareas pre y post instalación para instalar software extra, realizar configuraciones, etc. Por supuesto esto es extremadamente útil para instalaciones masivas de sistemas.

Básicamente se tiene que crear un fichero (ks.cfg) en el cual se especifican las ordenes que tienen que realizarse en la instalación, esto incluye tanto los pasos de particionado como de configuración de red, paquetes, método de instalación, etc. Para aprender en profundidad las opciones que nos ofrece Anaconda y el fichero Kickstart os recomiendo encarecidamente leer la documentación oficial de Red Hat ya que aquí vamos a tratarlo por encima por ser demasiado extenso (hay incluso una GUI para hacerlo de forma gráfica que vamos a ver a continuación).

Si necesitáis un fichero ks.cfg base, sabed que en cualquier sistema RHEL, CentOS cuando se termina la instalación automáticamente se guarda un fichero en /root/anaconda-ks.cfg que muestra como sería el fichero ks.cfg si quisieramos hacer una instalación igual de forma desatendida.

Para los más vagos o que no quieran aprender la sintaxis de kickstart pueden utilizar la herramienta gráfica, que además se puede instarlar en otras distros como Debian:

$ apt-cache search kickstart
system-config-kickstart - graphical tool for creating Kickstart files
$ sudo apt-get install kickstart

En RHEL, CentOS y demás el RPM es igualmente «system-config-kickstart» y la podemos ejecutar directamente con el comando:

$ /usr/sbin/system-config-kickstart
kickstart GUI

En este caso vamos a utilizar el siguiente ks.cfg, de nuevo os recomiendo leer la documentación de Red Hat citada anteriormente para saber personalizarlo al máximo:

NOTA: el artículo lo publiqué originalmente en el año 2011, por eso la instalación es de CentOS 5.6 ;-)

install
cdrom
url --url http://ftp.udl.es/pub/centos/5.6/os/i386
lang en_US.UTF-8
keyboard es
network --device eth0 --bootproto static --ip 192.168.0.157 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 80.58.0.33 --hostname pruebacentos.com
rootpw --iscrypted $1$OarXPadVzGFPz3wjA0GwkkW3dp/ad/
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Europe/Madrid
bootloader --location=mbr --driveorder=hda

clearpart --linux --drives=hda
part /boot --fstype ext3 --size=100 --ondisk=hda
part pv.2 --size=0 --grow --ondisk=hda
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%packages
@core
%post
/usr/bin/yum -y update

Alguna particularidad de este ejemplo es que:

  • Usamos la instalación desde un cdrom
  • Se trata de un netinstall y descargamos la imagen desde FTP
  • Asignamos una IP estática
  • La contraseña de root la indicamos cifrada, el cifrado se puede generar con OpenSSL:
$ openssl passwd -1 "mipassword"
$1$iRyJW00v$lwWrIJLwZekhX7tF51WJ80
  • Para el particionado, creamos la partición /boot de forma independiente y el resto con LVM
  • La instalación de paquetes es la base (@core)
  • Tras finalizar la instalación actualizamos el sistema con yum

Existen varias formas de decirle al instalador que tiene que usar Kickstart para la instalación desatendida, ya sea desde un Diskette, CD-ROM o desde la red. Esto podemos especificarlo en el momento del boot del instalador (boot prompt) 

Una vez que tenemos la ISO, procedemos a comenzar la instalación de CentOS, y en el momento que aparece la pantalla de inicio de instalación, pulsamos [TAB] para modificar las opciones de arranque de kernel e indicar que debe usar el kickstart antes de proseguir con la instalación:

instalacion centos 7 parte 1

Instalación desde Diskette

linux ks=hd:fd0:/ks.cfg

Instalación desde CD

Especificamos la ruta directa en el CD al fichero Kickstart

linux ks=cdrom:/ks.cfg

Instalación desde red/url

En este caso tendríamos que tener un servidor DHCP que le asignara IP al equipo para poder acceder a la URL

linux ks=http://192.168.0.111/ks.cfg

Evitar tener que especificar el KS manualmente

Con estos métodos todavía hay intervención manual , tenemos que manualmente especificar la ruta al Kickstart en el boot prompt. El paso final para evitar esto y automatizar completamente la instalación es modificar la ISO de CentOS y especificar en el boot config la configuración del kickstart, de modo que no requiera intervención por nuestra parte en ningún punto.

Para ello, descargamos la ISO, en mi caso del NetInstall y la montamos como si fuera una ruta local:

# sudo mount -o loop -t iso9660 CentOS-5.6-i386-netinstall.iso /media/iso_centos

Ahora tenemos que modificar el fichero isolinux.cfg y modificar el boot así que copiamos todo a otra ruta (el CD se monta como solo lectura) y modificamos este fichero:

# cp -R /media/iso_centos/ /home/foo/

Ahora modificamos el fichero isolinux/isolinux.cfg y modificamos:

Antes:

label linux
  kernel vmlinuz
  append initrd=initrd.img

Después:

label linux
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg

En este caso copiaremos el fichero ks.cfg en la carpeta «isolinux», y como luego lo quemaremos en un CD usamos la opción de cdrom. Si fuerais a cogerlo desde la red, en vez de cdrom ponéis la url del ks.cfg y solucionado.

Ahora solo nos quedaría hacer una nueva iso con nuestro netinstall modificado, podemos usar el comando mkisofs. Debemos especificarle el boot para que cree una ISO booteable:

cd /home/foo/iso_centos/ && mkisofs -o /home/foo/centos_5.6_kickstart.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-info-table -boot-load-size 4 -R -J -T .

Una vez que tenemos la iso creada solo falta grabarla a CD y arrancar con ella el servidor/PC, toda la instalación se debería hacer de forma automática y desatendida.

3 comentarios en “Automatizar instalaciones de CentOS con Kickstart

  1. El tutoríal es muy bueno. Pero me genera un problema. Si quiero hacer una instalación desatendida desde un USB, cómo lo hago? La documentación de Red Hat dice que si lo hago desde un usb el ks.cfg tiene que estar en un medio separado del de instalación. ¿Por qué? ¿Y cómo debería tratar a la unidad del ks, como CD o como HD?

Comments are closed.