Kickstart Methods - usando Virtualbox¶
Table of Contents
Descripción de la documentación: Método de instalación de un SO basado en Red Hat Enterprise Linux usando VirtualBox y un archivo ISO como medio de instalación. Este procedimiento sirve como un escenario de pruebas fácil de implementar, con el fin de probar archivos Kickstart que automaticen la instalación del SO.
Creación de VM en VirtualBox¶
- En VirtualBox, crear una nueva VM haciendo clic en el botón New:
- Nombrar el nombre de la VM y seleccionar el SO que deseemos instalar; en este caso, es un SO basado em Red Hat:
- Elegir la cantidad de memoria RAM que deseemos asignarle a nuestra VM:
- Seleccionar la opción Create a virtual hard disk now:
- Seleccionar como tipo de disco duro VDI (VirtualBox Disk Image):
- Para el provisionamiento de espacio en el disco elegir la opción Dynamically Allocated:
- Determinar la ubicación y tamaño del disco:
Finalmente, clic en el botón Create.
Configuración de VM en VirtualBox¶
- Clic en el botón Settings para configurar la VM:
- Seleccionar la pestaña System cambiar el orden de arranque, poniendo primero Hard Disk y luego Optical:
- Seleccionar la pestaña Storage y clic sobre el ícono de disco con nombre Empty:
El método de instalación del sistema operativo usando en esta guía será a través un archivo ISO de CentOS 7 que contiene el medio de instalación.
Previamente debemos haber descargado el instalador de CentOS 7 en formato .iso
de alguno de los Mirrors oficiales de imágenes ISO de CentOS 7:
- Clic el botón con ícono de disco en la parte derecha y seleccionar la opción Choose Virtual Optical Disk File…:
- En el navegador de archivos, elegir el archivo ISO que servirá como medio de instalación del SO:
- Verificar que el archivo ISO se haya cargado en el controlador IDE. Luego clic en OK
- Iniciar la VM haciendo clic en la opción Start:
- Una vez cargue la página principal del instalador del SO, debemos presionar en el teclado la tecla Esc para ingresar a la opciones de boot:
Referencia: Editing boot options
- Verificar que cargue la siguiente pantalla con el prompt de
boot:
:
Important
Pasar el archivo Kickstart por el prompt de boot:
es una forma equivalente a editar las opciones de arranque del instalador definidas en sus respectivos archivos. Para pasar un archivo Kickstart en el prompt de boot:
escribiríamos linux ks=...
. En el archivo de instalación de un sistema Legacy usaríamos ks=...
y en un sistema UEFI usaríamos inst.ks=...
Formas de pasar el archivo kickstart¶
Existen distintas formas de pasar el archivo Kickstart al medio de instalación con el fin de automatizar el proceso de instalación.
En el prompt de boot:
podemos emplear el parámetro ks=
e indicar a través de qué medio se pasará el archivo kickstart. Entre los métodos soportados para pasar el archivo kickstart están NFS (nfs
), HTTP (http
), Diskette (floppy
), disco montado (hd
), file system sin montar (file
) y CD-ROM (cdrom
).
Referencia 1: Starting a Kickstart installation
Referencia 2: Fuentes de archivo kickstart
Archivo Kickstart pasado por HTTP¶
Note
Este método es recomendable usarlo cuando el servidor al cual vamos a instalar el sistema operativo tiene un servidor DHCP con una configuración para salir a Internet. Esto, con el fin de obtener el archivo Kickstart de forma remota.
En este método obtenemos el archivo kickstart de un servidor a través de HTTP. Para esto, pasamos la URL de la página que tiene el archivo kickstart como en el siguiente ejemplo:
boot: linux ks=http://raw.githubusercontent.com/mogago/kickstart/master/ks1.cfg
Important
La página que contiene el archivo kickstart no debe tener ningún tipo de etiquetas HTML ni formatos extra, solo debe contener el archivo kickstart en texto plano. Comprobar esto usando wget
con la página web en un terminal de comandos.
Note
Opcionalmente, podemos usar ks=https:
en lugar de ks=http:
, si la página tiene habilitado el protocolo HTTPS o en caso el servidor web no redirija automáticamente las solicitudes HTTP a HTTPS.
En este ejemplo se está usando GitHub como repositorio de los archivos Kickstart:
Pero para obtener el archivo Kickstart en texto plano debemos seleccionar el botón Raw en la página anterior, lo cual nos redirigirá a otra URL:
Ya que en esta página solo obtenemos el archivo Kickstart en texto plano, podremos emplear esta dirección URL como parámetro de ks=http://
.
Important
Este método requiere conexión al servidor web remoto que proporcione el archivo Kickstart. En caso el archivo Kickstart se encuentre en la web, podemos tener una interfaz conectada a una red con un servidor DHCP y obtener una IP y salida a Internet. Por ejemplo, en VirtualBox podemos usar una red NAT o Bridged.
Archivo Kickstart pasado por el mismo ISO de instalación (custom ISO image)¶
Note
Este método es recomendable usarlo cuando queremos tener un medio de instalación con el archivo de Kickstart pre-cargado. Tenemos la opción de almacenar múltiples archivos Kickstart dentro de archivo ISO.
En este método obtendremos el archivo kickstart del mismo archivo ISO usado para obtener el medio de instalación (kernel, repos, etc.). Para lograr, esto deberemos modificar un imagen ISO oficial, agregarle nuestro archivo kickstart y volver a generar una imagen ISO modficada (también llamada custom ISO image). A este método de volver a generar una imagen ISO con ciertas modificaciones personalizadas se le llama Repackaging de un Linux Install ISO.
Para esto, primero crearemos nuestra imagen ISO personalizada a través de los siguientes pasos:
- Crear un directorio para montar nuestro fuente ISO:
sudo -i
mkdir /tmp/bootiso
- Hacer un loop mount de nuestra imagen ISO oficial (CentOS/RedHat) que modificaremos:
mount -o loop ~/images/ISOS/CentOS-7-x86_64-Minimal-1908.iso /tmp/bootiso
- Crear un directorio de trabajo para nuestro medio personalizado:
mkdir /tmp/bootisoks
- Copiar la fuente de medios al directorio de trabajo:
cp -r /tmp/bootiso/* /tmp/bootisoks/
- Desmontar la fuente ISO y eliminar el directorio:
umount /tmp/bootiso
rmdir /tmp/bootiso
- Cambiar los permisos en el directorio de trabajo:
chmod -R u+w /tmp/bootisoks
- Copiar nuestro archivo kickstart personalizado en el directorio de trabajo, bajo el directorio
isolinux/
:
cp /path/to/someks.cfg /tmp/bootisoks/isolinux/ks1.cfg
cat /tmp/bootisoks/isolinux/ks1.cfg
# install
# cdrom
# bootloader --location=mbr
# keyboard --vckeymap=latam --xlayouts='latam','us'
# rootpw --iscrypted $1$WUDGBrnr$Bq8p.jk4ikcEr2JYJRMwE0
# lang en_US.UTF-8 --addsupport=es_US.UTF-8
# clearpart --all --initlabel
# part / --fstype="ext4" --grow --ondisk=sda --size=1
# timezone America/Lima
# reboot
# %packages
# %end
- (Opcional) Copiar cualquier RPM adicional a la estructura de directorio y actualizar la metadata:
cp /path/to/*.rpm /tmp/bootisoks/Packages/.
cd /tmp/bootisoks/Packages && createrepo -dpo .. .
- (Opcional) Para que las opciones de instalación del menú inicial arranquen usen el archivo Kickstart debemos modificar las opciones de boot en el archivo
isolinux.cfg
:
sed -i 's/append\ initrd\=initrd.img/append initrd=initrd.img\ ks\=cdrom:\/ks1.cfg/' /tmp/bootisoks/isolinux/isolinux.cfg
- Crear el nuevo archivo ISO personalizado y conceder permisos al usuario:
cd /tmp/bootisoks
mkisofs -o /tmp/boot.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "CentOS 7 x86_64" -R -J -v -T isolinux/. .
chown mogago:mogago /tmp/boot.iso
- (Opcional) Usar
isohybrid
si queremos aplicardd
sobre el archivo ISO en un dispositivo USB booteable:
isohybrid /tmp/boot.iso
- (Opcional) Añadir un MD5 checksum para permitir realizar pruebas con el medio:
implantisomd5 /tmp/boot.iso
Ahora debemos cambiar la imagen ISO de CentOS por la que acabamos de crear en la interfaz de VirtualBox:
Al momento de arrancar el medio de instalación, si no hemos usado el paso 9 para editar el archivo isolinux/isolinux.cfg
y se agregue el archivo Kickstart a las opciones de instalación del menú inicial, deberemos entrar al prompt de boot:
(tecla Esc al cargar el medio de instalación). Aquí, escribiremos:
boot: linux ks=cdrom:/ks1.cfg
- Referencia 1: How to create a custom ISO image in CentOS
- Referencia 2: mkisofs - Repackaging a Linux Install ISO
- Referencia 3: Mkisofs Wiki
Archivo Kickstart pasado por imagen de disco¶
Note
Este método es recomendable usarlo cuando tenemos un disco duro o USB con el archivo Kickstart que podamos conectar al servidor donde instalaremos el sistema operativo (o un Virtual Hard Disk en una VM). Además, lo podemos usar si no deseamos modificar la imagen ISO con el medio de instalación, a diferencia del método por cdrom
.
En este método obtendremos el archivo kickstart mediante una imagen de disco. Para el caso de VirtualBox usaremos almacenaremos el archivo Kickstart en una images de disco tipo vdi
. Sin embargo, en servidores físicas podemos usar imágenes con formato raw (.img
).
Siguiendo la guía Creando un disco virtual:, usaremos las herramientas dd
, mkfs
y mount
para crear nuestro disco virtual (Virtual Hard Disk o VHD) y agregarle el contenido deseado. Luego lo desmontaremos con umount
y lo converterimos de raw
a vdi
usado qemu-img
.
- Crear una imagen que contenga el volumen virtual con
dd
:
sudo -i
dd if=/dev/zero of=/media/disk1.img bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0,0962088 s, 1,1 GB/s
- Formatear el archivo de la imagen VHD con
mkfs
, por ejemplo conext4
:
mkfs -t ext4 /media/disk1.img
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 102400 1k blocks and 25688 inodes
Filesystem UUID: c08e1aa7-8aff-45ed-a913-6aba75bbed9d
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
- Crear un directorio y montar nuestra imagen de disco formateada:
mkdir /mnt/vhd
mount -t auto -o loop /media/disk1.img /mnt/vhd/
- Revisar qué loop tiene el punto de montado
lsblk | grep /mnt/vhd
loop12 7:12 0 100M 0 loop /mnt/vhd
- Asignar un LABEL a nuestra imagen de disco:
e2label /dev/loop12 USBKS
Para comprobar que tiene el label asignado:
lsblk -o name,mountpoint,label,size,uuid,type
- Copiar el archivo Kickstart al directorio donde está montado el disco:
cp /path/to/ks1.cfg /mnt/vhd/ks1.cfg
- Desmontar el disco:
umount /mnt/vhd
- Para VirtualBox, usando
qemu-img
convertiremos la imagen de raw (.img
) aVDI
(formato especial para imágenes de discos de VirtualBox). Además cambiar de dueño y grupo del archivo para que VirtualBox pueda acceder:
qemu-img convert -f raw -O vdi /media/disk1.img /home/mogago/Downloads/disk1.vdi
chown mogago:mogago /home/mogago/Downloads/disk1.vdi
- Revisar el UUID de la imagen de disco generada:
virt-filesystems -a /home/mogago/Downloads/disk1.vdi --all --long --uuid -h
Name Type VFS Label MBR Size Parent UUID
/dev/sda filesystem ext4 USBKS - 100M - 456b92c7-7c4e-424d-8bcc-5f13618d52ac
/dev/sda device - - - 100M - -
- Referencia 1: Convert images with qemu-img convert
- Referencia 2: Check image UUID
- Referencia 3: Changing label of ext2 ext3 and ext4 type partitions
- Referencia 4: VBoxManage list vms
Una vez que tengamos la imagen de disco preparada podemos conectarlo en la máquina virtual:
Al momento de arrancar el medio de instalación debemos presionar la tecla Esc para pasar la dirección del archivo Kickstart como parámetro en el momento de arranque (boot:
).
Usando el nombre sdX
de la imagen de disco¶
Podemos indicar el dispositivo de la imagen de disco que contiene el archivo Kickstart usando su nombre sdX
. El dispositivo puede llamarse sda
, sdb
, sdc
, etc. dependiendo de la cantidad de dispositivos que tengamos conectados al sistema y el nombre arbitrario que se le haya asignado:
boot: linux ks=hd:sdb:/ks1.cfg
La máquina virtual tiene conectada dos discos (/dev/sda
y /dev/sdb
). Si bien hemos obtenido correctamente el archivo Kickstart del diso sdb
, en otras ocasiones el disco que contenga el archivo Kickstart podría ser el disco sda
. En el caso que elijamos el disco sin nuestro archivo Kickstart, obtendremos el siguiente log de fallo:
Una vez instalado el sistema operativo podemos comprobar que el tamaño virtual asignado a los discos sigue siendo identificable:
Usando el LABEL
de la imagen de disco¶
El método de selección de la imagen de disco por su sdX
puede resultar en fallo si es que no sabemos exactamente el nombre que el sistema le ha asignado a nuestro disco con el archivo Kickstart. Sin embargo, usar el LABEL
o UUID
del disco puede resultar más específico y evitar errores. Para usar el LABEL
como parámetro de arranque usamos la siguiente forma:
boot: linux ks=hd:LABEL=USBKS:/ks1.cfg
Note
En el paso 5 del procedimiento de creación de una imagen de disco, le asignamos una LABEL a nuestro disco. En el paso 5 y el paso 10 comprobamos el nombre del LABEL asignado.
- Referencia: Testcase Kickstart Hd Device Path Ks Cfg
Usando el UUID
de la imagen de disco¶
Al igual que la selección de la imagen de disco por su LABEL
, la elección del disco por su UUID
es un método más exacto y menos sujeto a errores. Para usar el UUID
como parámetro de arranque usamos la siguiente forma:
boot: linux ks=hd:UUID=456b92c7-7c4e-424d-8bcc-5f13618d52ac:/ks1.cfg
Note
En el paso 10 del procedimiento de creación de una imagen de disco comprobamos el UUID.
Instalación de CentOS 7¶
- Inmediatamente luego de presionar el botón Enter en el prompt de
boot:
comenzará el proceso de instalación automatizado con el archivo Kickstart que hemos pasado. Dependiendo de la configuración de Kickstart, una instalación en modo gráfico o en modo texto, obtendremos una de las siguientes dos pantallas:
- Una vez acabada la instalación desatentidada del SO, la VM se reiniciará automáticamente y cargará desde el disco instalado:
- Finalmente, iniciará el SO CentOS instalado automáticamente con Kickstart: