Bueno, hace mucho tiempo expliqué en EcuaLUG cómo instalar CentOS-6 remotamente.
Para ello indicaba que se modificara el GRUB para que arrancara el kernel pxe, sin embargo esto traía a veces problemas inesperados: como la conexión era remota y no tenía normalmente el server a la mano, cualquier olvido, omisión, error, hacía que al reiniciar el servidor para que el grub arrancara el kernel pxe, fallara y el servidor se quedara esperando porque tu manualmente le corrigieras algo.
Al ser remoto el servidor eso suponía que tuviera que llamar al datacentro y pedirles que por favor escogieran otra opción de arranque del grub, de esa forma el server booteaba y yo podía corregir el error; no sin anter recibir un regaño de los canadienses por haber hecho mal el kernel de arranque, etc, etc.
Hoy quise instalar CentOS-7 remotamente. Se puede seguir el mismo howto de EcuaLUG sin embargo CentOS-7 viene con un grub nuevo “grub2” y cambia bastante la forma de configurar una entrada nueva para el kernel pxe en este caso.
Casi sabiendo que iba a cometer algún error, me puse a pensar en otra forma de bootear el kernel pxe, y la ha habido hace mucho tiempo lo que yo no la había usado para bootear un kernel pxe. Este sistema se llama kexec.
kexec es un comando que te permite programar un kernel con el que quieres arrancar, desde línea de comando, y efectivamente ejecutar ese kernel sin tener que pasar por el proceso de booteo tradicional.
Por ponerlo en simples palabras: se elimina el viejo kernel de la RAM y se inicia con el kernel que le programas. (En mi caso sería el kernel con las instrucciones para que bootee con pxe y se conecte a mi máquina por VNC).
Esto me ayuda bastante! pues si me falla algo (de hecho efectivamente me falló algo la primera vez que le intenté!!) pues simplemente mando a reiniciar el servidor via el servicio de APC que brinda el proveedor remoto. Al mandarle a reiniciar el equipo se apaga, borrándose la RAM y por tanto debe arrancar usando la información que no cambié del GRUB2, es decir, arrancando con el kernel anterior conque originalmente el server estaba.
El proceso es simple:
En mi equipo local instalo y arranco vncviewer y abro el puerto 5500 para que entre la sesión remota posteriormente:
yum install tigervnc
vncviewer –listen
Dejo vncviewer corriendo. Ahora voy al servidor:
Instalando kexec y wget
yum install kexec-tools wget
Bajo el kernel y la imagen de pxe hacia un directorio (por ejemplo /boot)
cd /boot
wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz
Ahora procedo a programar ejecutar kexec con este kernel. Insisto: esto no modifica grub, por lo que si algo sale mal, simplemente reiniciamos la máquina y vuelve a bootear el kernel original:
kexec -l /boot/vmlinuz –initrd=/boot/initrd.img –command-line=”vnc vncconnect=4.3.2.1 headless ip=1.2.3.4 netmask=255.255.255.0 gateway=1.2.3.1 dns=8.8.8.8 ksdevice=link method=http://mirror.centos.org/centos/7/os/x86_64/ lang=en_US keymap=us”
kexec -e
Descripción de los parámetros (los demás no deben cambiarse):
vncconnect -> ip de la máquina donde instalé el tigervnc. Donde está corriendo el vncviewer –listen
ip -> ip del servidor
netmask -> máscara de red del servidor
gateway -> puerta de enlace del servidor
dns -> dns que usará el servidor.
Listo, te pones a esperar, y si en efecto tienes el puerto 5500 abierto, dentro de unos segundos o minutos (en dependencia de cuán lenta sea la velocidad de conexión del servidor) aparecerá la pantalla de instalación en el equipo de vnc.
Al finalizar, cuando mandé a reiniciar la instalación esta se quedó colgada, tuve que quitarle y ponerle la corriente al servidor y ahí arrancó centos-7 normalmente.