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
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:
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.