Kickstart: instalaciones automatizadas para anaconda
Cómo configurar el instalador de Red Hat, CentOS, Fedora e incluso Debian (progeny)Domingo 11 de mayo de 2008
Última actualización: Lunes 5 de mayo de 2008Instalar linux
Hoy en día todas las distribuciones suelen disponer de un instalador gráfico que mediante un sencillo asistente permiten particionar el sistema, seleccionar los paquetes, instalarlos y configurarlos.
El problema viene cuando en lugar de instalar un PC en 40 minutos, tenemos que instalar 20, cada uno de esos pc’s, aunque podamos ir con varios discos a la vez, nos va a llevar más de 40 minutos hacer la instalación, por tener que ir siguiendo el asistente, escogiendo opciones, paquetes, configurando cosas, etc.
Anaconda
Anaconda es un instalador basado en Python que incorpora en su base, un instalador en modo texto, y uno gráfico que entre sus muchas funcionalidades, incorpora la instalación en base a guiones llamados kickstart.
El archivo kickstart
Un archivo kickstart es un fichero de texto plano, que puede se le proporciona a Anaconda, como tal, puede ser un archivo que tengamos grabado en el disco de instalación, en otro medio de almacenamiento, o incluso en un servidor remoto.
El hecho de que se albergue en un servidor remoto, abre nuevas posibilidades, como que por ejemplo, el archivo kickstart se genere dinámicamente para cada equipo, en base a perfiles de equipo, parámetros opcionales, etc.
Estructura
La estructura de un kickstart podría ser:
## Queremos instalar un sistema install ## Queremos reiniciarlo al acabar la instalación reboot ## Queremos utilizar como idioma Español lang es_ES.UTF-8 ## nivel de registro logging —level=info ## Autoconfigurar la red por dhcp sin soporte IPV6 y con nombre de host equipo network —bootproto=dhcp —onboot=on —noipv6 —hostname=equipo ## teclado en español keyboard es ## Zona horaria CET/CEST timezone Europe/Madrid ## Utilizar shadow passwords y soporte md5 auth —useshadow —enablemd5 ## Activar cortafuegos y permitir conexiones ssh externas firewall —enabled —ssh ## Desactivar asistente tras la instalación (creación de cuentas de usuario, tarjeta de sonido, etc) firstboot —disable ## Iniciar en modo activo Security Enhanced Linux selinux —enforcing # Instalar desde esta url (puede ser también un cdrom, ftp, nfs, etc) url —url=http://1.1.1.1/cblr/links/CentOS51-i386 # Configurar el entorno gráfico del siguiente modo: Gnome a 1024x768 con 16 millones de colores y arrancarlo al iniciar el sistema xconfig —defaultdesktop=GNOME —depth=24 —resolution=1024x768 —startxonboot #Establecer la contraseña de root rootpw —iscrypted $1$BljcG$Qz6eMZghIDmf8E7starqui. #Activar una contraseña para grub bootloader —location=mbr —md5pass=$1$BljcG$Qz6eMZghIDmf8E7staqUx. #Activar estos servicios al iniciar en caso de no estarlo de forma predeterminada services —enabled=setroubleshoot,funcd,smolt,NetworkManager #Establecer un repositorio adicional para actualizaciones, paquetes extra, etc repo —name=CentOS-updates —baseurl=http://1.1.1.1/cobbler/repo_mirror/CentOS-updates#Particiones #Borrar todas e inicializar etiquetas en hda (primer disco ide) clearpart —all —initlabel —drives=hda
#Crear una partición para arranque de 100 mb de tipo ext3 part /boot —fstype ext3 —size=100 —ondisk=hda
#Crear un grupo de volúmenes en hda y llamarlo «Casa» part pv.100000 —size=1 —grow —ondisk=hda volgroup Casa —pesize=32768 pv.100000 #Crear una partición de Swap de 1Gb en el grupo Casa logvol swap —fstype swap —name=Swap —vgname=Casa —size=1024 #Crear el volumen raíz de 4Gb logvol / —fstype ext3 —name=root —vgname=Casa —size=4096 #Crear un volumen para el home de 1 Gb logvol /home —fstype ext3 —name=home —vgname=Casa —size=1024
#Paquetes a instalar %packages @ Base @ gnome-desktop openssh-server openssh screen mc joe
Con esta estructura, el sistema quedará instalado y configurado de forma automática, se habrá detectado el hardware y cargado su soporte en caso de ser detectado y disponer los controladores apropiados.
Dándole una vuelta de tuerca al kickstart
Scripts de Pre y Post instalación
Además de la información mostrada anteriormente, un fichero kickstart puede contener scripts que se ejecuten antes de comenzar la instalación (con el hardware y red ya operativos) y scripts que se ejecuten tras la instalación.
Un uso típico es determinar dinámicamente la estructura de discos en base al tamaño del mismo, o incluso establecer configuraciones RAID si se detecta más de un disco duro en el sistema, o mayor de cierta capacidad.
Pre instalación
Por ejemplo, la forma típica sería crear el esquema de particiones como hemos hecho arriba, pero utilizando comandos «echo», por ejemplo:
%pre #Obtener el primer disco del sistema y el total de discos set $(list-harddrives) let numd=$#/2 # Numero de discos d1=$1 # Dispositivo del primer disco S1=$2 # Tamanyo del primer disco (y sucesivamente)Se obtendrán los datos de los discos detectados por anaconda y se irá escribiendo esa información a un fichero temporal que luego, lo incluiremos, reemplazando la parte del perfil donde antes definíamos las particiones por :DISCO=$d1 ORGANIZACION="Casa"
echo «clearpart —drives=$DISCO —all —initlabel» >> /tmp/part-include echo «part /boot —fstype ext3 —size=100 —ondisk=$DISCO» >> /tmp/part-include echo «part pv.100000 —size=1 —grow —ondisk=$DISCO» >> /tmp/part-include echo «volgroup $ORGANIZATION —pesize=32768 pv.100000» >> /tmp/part-include echo «logvol swap —fstype swap —name=Swap —vgname=$ORGANIZATION —size=1024» >> /tmp/part-include echo «logvol / —fstype ext3 —name=root —vgname=$ORGANIZATION —size=4096» >> /tmp/part-include echo «logvol /home —fstype ext3 —size=1024 —name=home —vgname=$ORGANIZATION» >> /tmp/part-include
%include /tmp/part-include
Así, para cada sistema podemos definir una organización basada en valores como la IP obtenida, etc y que sería procesador por un script, por ejemplo en PHP en el servidor.
Post instalación
Un script de instalación tiene una ventaja sobre un script de pre instalación, y es que podemos ejecutarlo sobre el sistema instalado o sobre el entorno de instalación, de forma que podemos copiar archivos generados en el pre (como los logs), copiar archivos del medio de instalación si es un CD, NFS, etc y luego actuar sobre nuestro sistema, por ejemplo:
%post #Sincronizar hora del sistema echo «Sincronizar hora del sistema» ntpdate pool.ntp.org hwclock —systohc
Generación dinámica
Dada la potencia de Linux y la habilidad de ejecutar scripts de pre instalación y post instalación, podemos configurar un sistema mediante estos scripts de la misma forma que lo haríamos en un sistema de forma manual, podemos dejar un sistema perfectamente configurado. Cierto es que a priori, nos llevará más tiempo ponerlo en marcha mediante este sistema que utilizando cuatro o cinco opciones en un menú, pero una vez hecho, tardaremos el mismo tiempo en instalar 1 sistema que 1000 con la ventaja de que ya no tendremos que estar delante para verificar toda la operación.
Si tomamos como generador un script en php, albergado en nuestro servidor web, podemos hacer que una máquina al instalarse, envíe información de la MAC que está utilizando para instalarse con el parámetro «kssendmac» de anaconda y en base a ella, generar distintos perfiles según esa máquina esté pensada para servidor web, para estación de trabajo, para servidor de correo, o para cluster de almacenamiento, permitiendo que en cualquier momento la reaprovisionemos a un nuevo con la mínima inversión de tiempo por nuestra parte.
Existen diversos sistemas que facilitan estas tareas y permiten llevar un control de las máquinas que instalamos, etc que comentaremos más adelante.
Información adicional
Hasta que nos familiaricemos con la sintaxis, es conveniente recordar que en los sistemas basados en Fedora o Red Hat, existe la utilidad system-config-kickstart que es un editor gráfico de archivos kickstart que nos puede servir de punto de inicio para empezar a modificarlos con nuestros scripts y adaptaciones personales.
Documentos adjuntos
-
Kickstart de ejemplo (texte - 7.3 KB)
Este es el kickstart que utilizo para instalar máquinas de prueba, los enlaces de repositorios y url deberás adaptarlos en caso de que quisieras utilizarlo


Digg
Fresqui
Menéame