En este post veremos como configurar un arranque de clonezilla mediante PXE en un aula con ordenadores de sobremesa para los alumnos (workstations o infolabs). De esta manera no nos hará falta un pendrive o CD para arrancar el clonezilla para un uso normal.
Ojo,
esto no es para clonado multicast: en el caso de que pongamos a clonar varios equipos esto sería una clonación unicast, por lo que cada PC se clonaría independientemente de los demás. Esto implica que el clonado será más lento cuantos mas equipos haya clonando ya que la red se comparte entre todos.
Para poder poner esta configuración tambien es necesario tener una red privada en el aula, con su propio espacio de direcciones 192.168.X.Y y su propio servidor dhcp.
1. Instalación del servidor dhcp y tftp.
En el ordenador del profesor instalamos, si no está ya, isc-dhcp-server. Si dentro del aula hay otro hardware que hace de servidor dhdcp (por ejemplo un punto de acceso wifi), lo desactivamos.
Configuración del servidor dhcp (cambia eth0 por la tarjeta de red que está conectada a la red interna):
# cat /etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0"
Otro fichero con la configuración para decir al arranque PXE donde está el fichero pxelinux.0:
# cat /etc/dhcp/dhcpd.conf
# TFPT server for PXE boot
option domain-name-servers 172.25.231.2;
default-lease-time 86400;
max-lease-time 604800;
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.250;
filename "/var/lib/tftpboot/pxelinux.0";
next-server 192.168.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.254;
}
Cambia 172.25.231.2 por la IP de tu servidor ldap, 192.168.0.254 por la dirección dentro de la red del aula del PC del profesor y 192.168.0.X por tu espacio de direcciones del aula (en el caso de que uses otro).
A veces la configuración del servicio dhcp no está en /etc/dhcp/dhcpd.conf sino en /etc/ltsp/dhcpd.conf. Esto sucede cuando hemos instalado antes el servicio ltsp-server-standalone. En ese caso habría que modificar este último fichero.
El otro paquete a instalar es el servidor tftpd-hpa. Su configuración es:
# cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS=""
No olvidemos meter en el mayhave de pkgsync ambos paquetes si no no queremos que se desinstalen.
2. Configuración menú PXE.
Todo el menú está en /var/lib/tftpboot:
# ls -l /var/lib/tftpboot
total 344
-rw-rw-rw- 1 root root 68306 may 25 02:11 bg.png
-rw-rw-rw- 1 root root 20704 jun 21 13:19 chain.c32
drwxrwxrwx 9 root root 4096 jun 21 13:44 clonezilla
-rw-rw-rw- 1 root root 55012 jun 21 13:19 menu.c32
-rw-rw-rw- 1 root root 26720 jun 21 13:20 pxelinux.0
drwxrwxrwx 2 root root 4096 jun 21 13:25 pxelinux.cfg
-rw-rw-rw- 1 root root 152976 jun 21 13:19 vesamenu.c32
Los ficheros chain.c32, menu.c32, vesamenu.c32 y pxelinux.0 los sacamos de /usr/lib/syslinux/ tras instalar el paquete syslinux-common. El fichero bg.png es un fondo de pantalla cualquiera.
Creamos el directorio clonezilla visto en el listado anterior, entramos en el y descargamos
clonezilla-live-2.5.5-38-amd64.zip, descomprimiéndolo dentro. Debe quedar:
# ls -l /var/lib/tftpboot/clonezilla/
total 262160
drwxrwxrwx 3 root root 4096 mar 29 21:38 boot
-rw-rw-rw- 1 root root 239003081 mar 29 15:38 clonezilla-live-2.5.5-38-amd64.zip
-rw-rw-rw- 1 root root 160 mar 29 21:38 Clonezilla-Live-Version
drwxrwxrwx 3 root root 4096 mar 29 21:35 EFI
-rw-rw-rw- 1 root root 18092 ago 11 2015 GPL
drwxrwxrwx 3 root root 4096 mar 29 21:38 home
-rw-rw-rw- 1 root root 24470488 jun 21 13:44 initrd.img
drwxrwxrwx 2 root root 4096 mar 29 21:38 live
drwxrwxrwx 2 root root 4096 mar 29 21:38 syslinux
drwxrwxrwx 6 root root 4096 mar 29 21:38 utils
-rw-rw-rw- 1 root root 4921104 jun 21 13:43 vmlinuz
Los ficheros vmlinuz e initrd.img no están inicialmente, pero los copiamos del directorio /var/lib/tftpboot/clonezilla/live a /var/lib/tftpboot/clonezilla.
Creamos el directorio pxelinux.cfg y dentro el fichero default:
# cat /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 50 # 5 segundos
TOTALTIMEOUT 3000
ONTIMEOUT clonezilla
#MENU HIDDEN Solo muestra la cuenta atrás, si se pulsa una tecla aparece el menú.
# Menu Configuration
MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 15
MENU TABMSGROW 20
MENU CMDLINEROW 20
MENU ENDROW 24
MENU PASSWORDROW 20
MENU TIMEOUTROW 24
MENU TITLE Menu de Arranque de Sistema
MENU MASTER PASSWD $1$xyBSCMrw$FbRbg76bC8fVXL9JjQctC.
MENU PASSPROMPT Introduzca Password:
MENU BACKGROUND bg.png
MENU COLOR TITLE 1;36;44 #c00090f0 #00000000 std
NOESCAPE 1
ALLOWOPTIONS 0
LABEL bootfromdisk
MENU LABEL Arranque desde Disco duro
localboot
LABEL clonezilla
MENU DEFAULT
MENU LABEL Clonezilla
kernel clonezilla/vmlinuz
append initrd=clonezilla/initrd.img boot=live union=overlay username=user config components quiet noswap edd=on nomodeset nodmraid locales="es_ES.UTF-8" keyboard-layouts=es fetch=tftp://192.168.0.254/var/lib/tftpboot/clonezilla/live/filesystem.squashfs ocs_daemonon="ssh" ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin" ocs_live_batch=no vga=788 ip=frommedia net.ifnames=0 nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 keeppxe
Recordemos cambiar las dos ocurrencias de 192.168.0.254 por la IP que tuviera el PC del profesor en tu aula.
Tal como queda, los clientes conecatados la VLAN del aula al arrancar por PXE cargarán un sistema clonezilla completo, como cuando arrancamos con CD o pendrive. Es conveniente automatizar en el arranque la parte en que se monta /home/partimag (el directorio donde estarán las imágenes) para no tener que hacerlo luego a mano nosotros cada vez que clonemos. Eso se hace utilizando el parámetro oc_prerun en la carga del clonezilla vista en el menú anterior.
En mi caso tengo las imágenes en el directorio /mnt del PC del profesor y accedo a ellas montándolas por sshfs. Aquí cada cual puede poner el sistema que quiera: montaje por NFS, por
Samba, etc. Lo que si es conveniente, para reducir el tráfico hacia la red externa, es que las imágenes que cargamos estén ubicadas en el PC del profesor, dentro de la red privada del aula.
Esta es mi secuencia de comandos de montaje en /home/partimag:
ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin"
Evidentemente, hay que cambiar "passwordroot" por tu contraseña de root o bien usar un usuario no root con permisos sobre /mnt para hacer el montaje.
Por último, como es costumbre de buen sysadmin no viene mal automatizar toda la ristra de cuestiones que nos hace clonezilla: tipo de restauración, nombre de la imagen, disco destino, etc. Esto lo hacemos añadiendo ocs_live_run a la linea de arranque del menú, de una forma similar a como lo hacemos con los pendrives automáticos de Clonezilla:
ocs_live_run="ocs-sr -g auto -e1 auto -e2 -r -j2 -k1 -scr -p poweroff restoredisk nombreImagen sdX" ocs_live_extra_param="" ocs_postrun=""
Siendo nombreImagen el nombre del directorio donde está la imagen en /home/partimag y sdX el disco o discos donde clonar.
De esta manera basta con arrancar el/los clientes por PXE y marcharnos, ya que el resto del proceso se haría de forma automática.
3. Configuración arranque PXE en clientes.
Por último, para configurar el arranque PXE en clientes podemos usar su BIOS o bien instalar el paquete ipxe, que añade al Grub /boot/grub.cfg) una entrada que permite elegir ese tipo de arranque, mas o o menos:
### BEGIN /etc/grub.d/20_ipxe ###
menuentry "Network boot (iPXE)" --users "" --class network {
insmod part_msdos
insmod ext2
set root='hd0,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 3e9a285d-eb53-4ff8-a31e-af7be11035d2
else
search --no-floppy --fs-uuid --set=root 3e9a285d-eb53-4ff8-a31e-af7be11035d2
fi
linux16 /boot/ipxe.lkrn
}
4. Sirviendo el clonezilla por NFS en lugar de por TFTP.
En el apartado 2 vimos como el sistema operativo clonezilla se sirve a los clientes durante el arranque por TFTP, con el parámetro:
fetch=tftp://192.168.0.254/var/lib/tftpboot/clonezilla/live/filesystem.squashfs
Esto hace que para iniciar el sistema clonezilla en el cliente PXE primero tenga que transmitirse todo el fichero .squashfs completo, lo cual puede llevar unos minutos en función de la saturación de la red.
Otra opción mas ligera consiste en servir el sistema de ficheros donde está clonezilla mediante NFS. Para ello instalamos el nfs-kernel-server y creamos el fichero para compartir:
# cat /etc/exports
/var/lib/tftpboot/clonezilla *(ro,sync,no_subtree_check)
El menú PXE será:
LABEL clonezilla-nfs
MENU DEFAULT
MENU LABEL Clonezilla-nfs
kernel clonezilla/vmlinuz
append initrd=clonezilla/initrd.img boot=live union=overlay username=user config components quiet noswap edd=on nomodeset nodmraid locales="es_ES.UTF-8" keyboard-layouts=es netboot=nfs nfsroot=192.168.0.254:/var/lib/tftpboot/clonezilla ocs_daemonon="ssh" ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin" ocs_live_batch=no vga=788 ip=frommedia net.ifnames=0 nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 keeppxe
En esta solución el sistema cargado en initrd monta y accede desde el primer momento a filesystem.squashfs y comienza el arranque de forma inmediata, lo cual hace el proceso mas rápido y vistoso. La parte clave es:
netboot=nfs nfsroot=192.168.0.254:/var/lib/tftpboot/clonezilla