Este apunte está dedicado a la instalación de Gentoo Linux (3.18.7 – 64 bits – systemd) sobre ESXi. Se trata de mi primera VM y la voy a ejecutar en mi ESXi casero. Echa un ojo a este apunte sobre VMWare ESXi 5.5 en un servidor casero.

D54250WYK-ESX-Gentoo
 

Crear la VM

Inicio la creación de la nueva VM, desde el vSphere Client (en Windows) selecciono el Host y la opción “Create a new virtual machine”.

Como datastore uso un NAS casero vía NFS, donde he reservado un directorio especial para las máquinas virtuales (y los ISO’s de arranque).

ESXi-Create

Recorro todas las opciones para configurar una nueva máquina virtual con estos parámetros que muestro a continuación, 2GB de RAM y 10GB de disco, una tarjeta de red E1000 y LSI Logic:

ESXi-Create2

NOTA: Asigno 4 virtual cpu’s para acortar los tiempos de compilación, una vez que tenga la máquina lista reduciré este número en los clones que genere en el futuro.


 

Antes de arrancar, descargo desde los mirrors de Gentoo el ISO install-amd64-minimal-<fecha del último>.iso y lo coloco en /Apps/iso (un directorio que está en mi NAS a la que accedo vía NFS):

  • Directorio donde está el stage3-amd64-minimal-<fecha-último>.tar.bz2 en los Mirrors (ejemplo en un mirror de España):
    • /mirror/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal

Entro en “Edit Settings” y conecto el ISO que acabo de bajarme y dejé en el directorio del NAS. Dicho ISO debe conectarse al DVD de esta máquina virtual para hacer boot desde él. Aunque es opcional a mi me gusta hacerlo, entro en Network adapter y me apunto la dirección MAC (o le asigno una manual). Pongo dicha MAC en mi DHCP Server para que al arrancar reciba una IP concreta estática.

ESXi-Create3

Selecciono la VM, su lengüeta “Console” y hago el “Power On”. Al hacer click en la Consola podremos controlar el proceso de arranque (Ctrl+Alt o Fn+Ctrl+Alt para salir). Pulso Intro para que arranque, “13” para el teclado Español, Intro para continuar hasta el prompt de Gentoo. A partir de aquí iniciamos el proceso de instalación estándar (bueno, con la particularidad de que estamos instalando en un Host ESXi).

ESXi-Create4
 

Instalación de Gentoo

Continuamos vía SSHD

Ya estamos listos para continuar, deberíamos tener “red” (ifconfig) y así poder arrancar “SSHD”, cambiar la contraseña de root y a partir de ahora serguir desde otro terminal (vía ssh). Es mucho más cómodo que usar la consola del cliente vSphere:

ESXi-GentooInstall-1
 

Disco, stage3, portage

Desde un Terminal (vía ssh) configuro el disco duro, creo una partición única con /boot de 50M, partición 2 Swap de 512M y el resto del disco para la Partición 3 (root)

Cambiar la Fecha

Este paso es importante, cambia la fecha al equipo y asegúrate de poner la actual (no la del ejemplo :-))

Descargar y descomprimir Stage3 y Portage

Descargo en /mnt/gentoo desde uno de los mirrors de gentoo el fichero “stage3” y el fichero “portage”, los últimos disponibles para x86_64. Utilizo “links” para descargar desde los mirrors de Gentoo. Conecta desde tu navegador con www.gentoo.org, click en Mirrors, apunta la URL de tu mirror preferido (busca por Spain) que vas a usar a continuación.

Entrar en el nuevo entorno

A partir de ahora entro ya directamente en el nuevo entorno con chroot, por lo tanto “/” (root) apuntará al nuevo disco que acabamos de formatear y donde hemos descomprimido todo el software. Importante copiar el resolv.conf 🙂

Modificamos el fichero make.conf:

Leemos todas las “News”

Establecemos la Zona horaria

Preparo el /etc/fstab

Instalo v86d

Instalo DHCP Cliente

Para el futuro arranque tras el primer boot, mejor instalar ahora el paquete cliente de DHCP

Descargo y compilo el último Kernel

Primero nos bajamos los fuentes del Kernel con el comando siguiente:

Los fuentes quedan instalados en /usr/src/linux (realmente es un link simbólico), a continuación tendrías que parametrizarlo con “make menuconfig” y luego compilarlo.

Si tienes experiencia en parametrizar el kernel, adelante con ello. Si lo prefieres, para facilitarte el trabajo, empieza por un kernel ya parametrizado. Puedes usar un “.config ya probado” para esta versión concreta de kernel. Este que comparto a continuación tiene soporte para ejecutarse en ESXi, para iptables (por si quieres hacerte un firewall) y para Docker (por si quieres dockerizar aplicaciones). Lo dejo en mi repositorio de GitHub, en concreto tienes que bajarte el fichero 2015-03-19-config-3.18.7-Gentoo_VM_ESXi.txt y copiarlo como /usr/src/linux/.config. Luego compilas e instalas el kernel.

 

Instalación de “systemd”

Selecciono el Perfil systemd

Voy a configurar esta VM con systemd, así que selecciono el perfil adecuado:

Adapto Portage

Antes de actualizar el sistema (tras el cambio de profile) hay que preparar los diferentes ficheros de Portage:

Recompilo con el nuevo Profile systemd

Una vez que se selecciona un Profile distinto lo que ocurre es que cambias los valores USE de por defecto del sistema y esto significa que tenemos que “recompilarlo” por completo, así que lo siguiente que vamos a hacer es un emerge que actualice “world” :

NOTA: El proceso re-compila más de 150 paquetes y es normal que tarde varias horas (2 en mi caso), por eso asigné 4 virtual cpu’s a esta VM, para acortar este tiempo al máximo.


 
Hostname
Con systemd se deja de usar /etc/conf.d/hostname, así que voy a editar a mano directamente los dos ficheros que emplea systemd:

Contraseña de root

Antes de hacer boot, es fundamental cambiar la contraseña de root

Herramientas indispensables al trabajar con Gentoo

Preparo el mtab

Es necesario realizar un link simbólico especial:

Grub 2

Necesitamos un “boot loader” y nada mejor que Grub2.

Instalamos el boot loader en el disco

Modifico el fichero de configuración de Grub /etc/default/grub, la siguientes son las líneas importantes:

GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd quiet rootfstype=ext4"
GRUB_TERMINAL=console
GRUB_DISABLE_LINUX_UUID=true

Ah!, en el futuro, cuando te sientas confortable, cambia el timeout del menu que muestra Grub a “0”, de modo que ganarás 5 segundos en cada rearranque de tu servidor Gentoo desde vSphere Client 🙂

GRUB_TIMEOUT=0

Cada vez que se modifica el fichero /etc/default/grub hay que ejecutar el programa grub2-mkconfig -o /boot/grub/grub.cfg porque es él el que crea la versión correcta del fichero de configuración de Grub: /boot/grub/grub.cfg.

Nota, si en el futuro tienes que modificar el Kernel, no olvides ejecutar grub2-mkconfig tras la compilación (y posterior copiado a /boot) del kernel, tampoco te olvides de haber montado /boot (mount /boot) previamente.

 

Reboot

Salgo del chroot, desmonto y rearranco el equipo…

Un par de scripts

Dejo aquí un par de scripts que te pueden servir de ayuda, se llaman “compila.sh” e “instala.sh”

 

Configuración importante

Una vez que el equipo rearranca tenemos que volver a la consola del ESXi, tras el primer boot nos faltan piezas muy importantes, de hecho estás con el teclado en inglés, no te funciona la red, no tienes locales, etc. Vamos a arreglarlo empezando por lo básico.. el teclado 🙂

Teclado y Locale

Parametrizo con systemd el teclado y los locales ejecutando los tres comandos siguientes:

El primer comando modifica /etc/vconsole.conf

El siguiente modifica /etc/X11/xorg.conf.d/00-keyboard.conf

El siguiente modifica /etc/locale.conf

El ultimo simplemente para comprobar

Preparo el fichero locale.gen

Compilo los “locales”

La red

Vamos a “contectar”, instalo, habilito y arranco DHCP. Los servicios en “systemd” se programan para futuros arranques con “systemctl enable” y se pueden arrancar o parar con “systemctl start/stop”.

Aquí tienes un ejemplo de cómo hacer una configuración de dirección IP fija (manual).

Si todo falla siempre puedes asignar una IP fija mientras solucionas el problema. Averigua cómo se llama el interfaz, un ejemplo:

Activo SSHD

Otro indispensable, habilito y arranco el daemon de SSH para poder conectar con esta VM vía ssh. Si en el futuro quieres poder hacer forward de X11 recuerda poner X11Forwarding yes en el fichero /etc/ssh/sshd_config

Vixie-cron

Instalo, habilito y arranco el cron

Fecha y hora

Para configurar fecha/hora debe utilizarse “timedatectl”. No te pierdas este apunte sobre cómo montar además el servicio NTP.

 

Actualizo portage

Lo primero es hacer un “perl-cleaner” y luego un update completo.

Usuario y rearranque

Desde una shell añado un usuario normal y por último rearranco el equipo. Mira un ejemplo:

Rearranco de nuevo…

 

VMWare Tools

Nos falta un último paso,

Open-VM

Instalo las tools de VMWare, la versión open source, para ello editamos el fichero package.use y package.accept_keywords. Es muy importante que no olvides la opción “-modules” para que se pueda instalar sin problemas.

A continuación programamos que el servicio de VMWare tools arranque durante el boot y de paso lo activamos:

Ya deberías poder ven cómo el cliente vSphere detecta que las vmware tools se han activado en tu VM

Gentoo-VMWare-Tools
 

Aplicaciones extra y acabamos…

Antes de apagar y clonar, voy a personalizar esta máquina virtual con ciertas aplicaciones que a mi me gusta tener siempre por defecto, digamos que es un Linux “base” con preferencias personales:

Instalo LVM2, lo necesito para docker…

sigo con nfs-utils para montar volúmenes remotos desde mi NAS,

Ejemplo de fichero fstab para acceder a recursos remotos NFS

continúo con Docker,

Ya hemos terminado, te recomiendo que apagues la VM y guardes una copia (a contiuación explico cómo se hace).

 
barra_separadora
 

Unos cuantos trucos

A continuación dejo algunos trucos que pueden servirte de ayuda.

 

Clonar VM: mediante plantilla OVF/OVA

La primera opción es crear una plantilla en formato OVF (varios ficheros) o bien OVA (un único fichero)

  • IMPORTANTE: Para la máquina virtual desde vSphere Client.

  • Creo la plantilla
    esxi-cloneOVA1

  • A partir de ahora puedes usar dicha plantilla para crear VM’s nuevas

newVM

 

Clonar VM: copia manual

Otra opción es clonar manualmente (fuente):

  • IMPORTANTE: Para la máquina virtual desde vSphere Client.

  • Clonamos el disco contectando con el ESXi vía SSH

  • Desde el vSphere Client crear una nueva máquina virtual tal como describo en este artículo pero esta vez al llegar a la parte del disco duro utiliza “Use an existing virtual disk”

esxi-cloneVM1
esxi-cloneVM3
esxi-cloneVM2

Boot desde el ISO de Instalación

Una vez que terminas la instalación la VM siempre hará boot desde el disco duro, por lo tanto si necesitas hacer boot desde el ISO de instalación (por ejemplo para resolver algún problema), es tan sencillo como meterse en la BIOS de la maquina virtual y alterar el orden de arranque. Selecciono la VM, botón derecho: “edit virtual machine settings” -> “options” -> “settings” -> “Boot Options” y activo “Force BIOS Setup”. En el próximo boot entramos en la BIOS y podremos cambiar el orden de arranque.

Montar un disco VMDK desde Linux

Si necesitas montar un disco VMDK desde un equipo externo (windows o linux) tienes que instalar una herramienta llamada vmware-mount que es parte del (vSphere 5 Disk Development Kit). En mi caso he desacargado la versión para LINUX y encontré dicho programa en la versión 5.1 (no en la 5.5) de dicho Kit VDDK, disponible en el sitio de desarrolladores de VMWare en la sección vSphere Disk Development Kit. A continuación muestro un ejemplo donde monto un VMDK desde un Linux (no usar Nombre-flat.vmdk, sino Nombre.vmdk)

Recompilar el Kernel de Gentoo

Si necesitas modificar alguno de los parámetros del fichero .config que dejé arriba tendrás que seguir los pasos siguietnes para cambiarlo y recompilar e instalar de nuevo el kernel:

Systemd: Enlace simbólico – Boot en modo Consola

En este apunte uso el modo consola, pero si lo has cambiado y quieres volver a boot en modo consola (en vez de gráfico) te dejo cómo hacerlo con Systemd

Systemd: Mensaje “WRITE SAME failed”

Este tema me costó encontralo en el pasado y solo porque probe a activar X11 (que no es el caso de este apunte). Si ves dicho error durante el boot, justo antes de arrancar X11, la forma de resolverlo es:

Trabajar con Systemd

Ubicación de los servicios: /usr/lib64/systemd/system

Arrancar en boot: systemctl enable nombre.service
Quitar del boot: systemctl disable nombre.service
Arrancar ahora: systemctl start nombre.service
Re-arrancar ahora: systemctl restart nombre.service
Parar ahora: systemctl stop nombre.service
Ver el estado actual: systemctl status nombre.service

Mostrar las “units” cargadas en el sistema: systemctl list-units

Logging con Systemd

Dejo aquí algunos comandos útiles:

Ver el log: journalctl
Ver el log de forma contínua: journalctl -f
Ver el log del último boot: journalctl -b
Log de boot, solo ERROR o superior: journalctl -b -p err
Log disco sda: journalctl /dev/sda
Log entre fechas: journalctl --since=2014-01-15 --until="2014-01-20 23:59:59
Desde ayer: journalctl --since=yesterday
Log de “ábaco”: journalctl /bin/abaco
Log de “ábaco” y además “curl”: journalctl /bin/abaco /bin/curl
Log de Apache: journalctl -u httpd --since=07:30 --until=08:30
Log de sshd de forma contínua: journalctl -f /usr/sbin/sshd

 

Mantenimiento

Gentoo es una “distro” que está en actualización continua, todos los días suele haber algún “paquete” upstream que ha sido actualizado a una versión más moderna. Por lo tanto es muy conveniente que de vez en cuando (cada semana o cada mes) compruebes si deberías actualizar tu Gentoo y dejarlo a la última.

¿qué hago yo?, cuando tengo el sistema estable y funcionando al 100% no necesito actualizarlo cada dos por tres sino que lo actualizo una vez al año o cuando hay algún fallo de seguridad grave. Estoy suscrito a la lista gentoo-announce@gentoo.org y cuando veo que el tema es preocupante pues hago una Actualización.

Actualizar tu Gentoo

La teoría es que es muy sencillo, la práctica es que a veces, sobre todo si llevas mucho tiempo sin actualizar, se puede complicar bastante. Si estás empezando con Gentoo te recomiendo que actualices una vez por semana durante un par de meses, luego una vez al mes durante un año y luego pases a una vez al año. ¿Porqué?, pues porque a veces hay “conflictos” entre los paquetes a instalar y si eres nuevo puede ser un dolor de cabeza, así que empieza a actualizar de forma frecuente para perder el miedo y sobre todo ganar en práctica. Si alguna vez tienes problemas encontrarás la solución casi seguro en el Foro de Gentoo, no dejes de visitarlo.

Estos son los pasos:

  • Sincronizamos “portage”: # emerge --sync
  • Comprobamos qué se va a actualizar: # emerge -DuvNp system world
  • Actualizamos: # emerge -DuvN system world
  • Actualizamos EIX: # eix-update
  • Actualizamos los ficheros en /etc: # etc-update

A continuación tienes un ejemplo donde compruebo qué tengo que actualizar, fíjate en cuantos paquetes y solo han pasado 10 días desde que hice la primera instalación.

emergeUpdate

AVISO: Cuidado con el comando etc-update, te recomiendo que entiendas bien qué es Portage y qué hace este comando en concreto.


 
Portage

Portage es la herramienta que gestiona el software en Gentoo y lo hace a través del comando emerge

Actualizar el Kernel

Al actualizar Gentoo resulta que uno de los paquetes es el “Kernel”, ¿qué hago?. Puedes hacer dos cosas, la primera es ignorarlo y seguir con tu Kernel actual y la segunda es actualizar también el Kernel. Mi consejo es que si tienes tu sistema estable y no necesitas nada del Kernel nuevo (un hardware nuevo o un update de seguridad), ni lo toques, deja el que tenías.

Enseño a continuación cómo suelo hacerlo por si insistes 🙂 . Te recomiendo que leas el artículo de Gentoo sobre actualización del Kernel. Veamos este caso concreto, notarás en la captura anterior que en mi caso se ha bajado un kernel nuevo.

emergeKernel

Si miro en el directorio /usr/src veo que ahora hay dos kernels, el que está activo ( 3.18.7) y el nuevo ( 3.18.9).

nuevoKernel

Para actualizarlo ejecuto lo siguiente:

 

Ahorrar espacio en disco

Si vas a utilizar esta imagen como fuente para clonar, te recomiendo que limpies al menos el directorio donde se bajan los paquetes de software durante su instalación # rm -fr /usr/portage/distfiles/*

 

Enlaces