Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Instalación de Sun Solaris en un hosting OVH

Última Actualización: 15 de Junio de 2009 - Lunes

Mi sistema operativo de elección, por infinidad de razones (incluyendo ZFS y DTrace), es Solaris. El problema es que la mayoría de los hostings no soportan Solaris de forma nativa. Ello no sería un problema grave si se dispusiese de capacidad para KVM+DVD/USB remoto, pero tampoco suele ser el caso.

Veamos OVH, por ejemplo: no soportan Solaris de forma nativa, su KVM es una máquina virtual con muchos problemas de compatibilidad y sin capacidad para acceder a ningún medio de instalación por red, y en el modo "rescue" arranca un linux.

Tras darle muchas vueltas al asunto, veo tres opciones:

  1. Instalar un Linux y conformarse con él... Mala opción para mí.

  2. Instalar un Linux mínimo, una máquina virtual Solaris sobre él y meter todos los servicios sobre dicha máquina virtual. Ésta es una buena opción, porque si hay problemas con el Solaris, tenemos el Linux por debajo, al que podemos conectar para examinar qué ocurre con ella. Otra ventaja importante es que nos desentendemos de problemas de drivers con Solaris. Como desventajas fundamentales, tenemos problemas de rendimiento (por ejemplo, los servidores baratos de OVH no soportan las instrucciones de virtualización hardware de las CPUs modernas, así que tenemos que meter un kernel Solaris en 32 bits, y tampoco podemos asignarle toda la memoria a la máquina virtual) y que si el Linux subyacente tiene problemas de seguridad o falla en una actualización, estamos bien jodidos. Además, los kernel OVH no nos sirven.

  3. Otra opción es tener un sistema con arranque dual. En modo normal, arranca Solaris. Si hay problemas entramos por el KVM virtual y configuramos el sistema para que arranque Linux. Una vez arrancado Linux, podemos arrancar la partición de Solaris... dentro de la máquina virtual, para ver qué le duele, solucionarlo y, luego arrancar de nuevo de forma nativa. La ventaja es rendimiento nativo. La desventaja es la mayor complejidad y los posibles problemas de compatibilidad hardware.

En este documento explico las pruebas realizadas y sus resultados, en mayo de 2009:

  • Alquiler de una máquina OVH "SuperPlan BestOF", 4 gigas de memoria, 2 discos duros de 750 gigabytes, Intel Core2Duo 2.66Ghz.

  • Instalación de Ubuntu Server 8.04 LTS 64 bits. Utilizo esta versión porque es un LTS (Long Time Support).

  • En los servidores baratos de OVH el servicio vKVM, que es una máquina virtual, no funciona si el sistema instalado es de 64 bits. Por tanto, una vez instalado el sistema, usamos el panel de control de OVH para arrancar el equipo de forma virtualizada y comprobar así si tenemos acceso vKVM.

    Me apena decir que es el caso también con las máquinas caras. Osea, no podemos usar un kernel 64 bits si esperamos poder usar vKVM cuando tengamos una crisis. El error es:

    This kernel requires an X86-64 CPU, but only detected an i686 CPU.
    Unable to boot - Please use a kernel appropiate for your CPU.
    

  • Dado el punto anterior, el siguiente paso es reinstalar el sistema, con un kernel 32 bits. Elijo Ubuntu Server 8.04 LTS 32 bits, por las razones expuestas. Afortunadamente es una operación relativamente rápida (unos 15 minutos).

    En este caso todo funciona perfectamente... salvo por unos errores muy sospechosos de disco duro.

    Durante el proceso observo que hay un checkbox para arrancar un vKVM en 64 bits... Uhmmm.

  • Debido a los errores de disco que estoy viendo en modo virtual, arranco el sistema de forma nativa y hago un chequeo de ambos discos duros con "badblocks". Son discos de 750 gigas, así que este proceso es bastante lento. Paciencia...

  • En el modo vKVM es posible arrancar una imagen ISO remota (accesible vía FTP). Según ésto sería posible arrancar un disco de instalación de Solaris, realizar una instalación nativa, utilizar la máquina nativa y volver a arrancar a través del ISO remoto, si surgen problemas serios.

    El problema es que la imagen ISO mide más de 2 gigabytes, lo que requiere tener una máquina en la misma LAN que el servidor problemático, para que el arranque se realice a una velocidad razonable. Además, no parece funcionar correctamente; el servidor carga la imagen ISO, pero no parece hacer nada con ella. Dada la situación, y considerando que esta funcionalidad debe estar disponible en momentos de crisis, no podemos jugárnosla.

    Si funcionase correctamente, sería la mejor opción, siempre que la máquina no tenga problemas de drivers con Solaris.

  • Vuelvo a instalar la versión de 64 bits. Compruebo si funciona el modo vKVM, marcando el "checkbox" de 64 bits. Con ésto, parece funcionar correctamente.

    Aprovecho para configurar el RAID 1 (Mirror) para la partición de arranque de Linux: Creo una partición de sistema de 10 gigas, un swap de dos gigabytes (uno en cada disco; es curioso que el swap no se proteja) y 5 gigabytes en "/SolarisDVD", que es donde dejaremos las imágenes ISO del sistema Solaris.

  • Actualizo el sistema a la última versión, a través de "apt-get update", "apt-get upgrade" y "apt-get dist-upgrade". Reiniciamos para asegurarnos de que todo funciona.

  • La distribución Linux instalada por OVH tiene sus propias modificaciones. Lo primero que hago es eliminar las claves SSH de OVH para "root", y la línea de "rtm" en el "/etc/crontab". De esta forma OVH pierde la capacidad para entrar en mi máquina.

  • OVH utiliza LILO como gestor de arranque. A mí me interesa usar GRUB. Hacemos los siguiente:

    • "apt-get install grub".

    • "mkdir /boot/grub".

    • "update-grub".

    • "cat /boot/grub/menu.lst".
      title UBUNTU 8.04 (Kernel OVH)
        root (hd0,0)
        kernel /boot/bzImage-2.6.27.10-xxxx-grs-ipv4-64 root=/dev/md1
      

    • "apt-get install mdadm". Ésto es necesario porque tenemos la partición raíz protegida en RAID 1 (mirror).

    • "grub-install /dev/sda".

    • "grub-install /dev/sdb".

    Ahora reiniciamos con vKVM y comprobamos que el arranque va con GRUB.

    Si ésto tiene éxito, reiniciamos en modo normal y seguimos.

  • El kernel OVH está modificado. No permite, por ejemplo, instalar módulos dinámicos. Ésto lo necesito para poder ejecutar VirtualBox. Lo que me interesa es instalar el kernel nativo de Ubuntu, no la versión modificada por OVH.

    • "apt-get install linux-image". Este comando ya actualiza el "menu.lst" de configuración de arranque del GRUB.

    • Reiniciamos y comprobamos que todo va bien y arranca el kernel correcto, con el comando "cat /proc/version".

  • A continuación instalamos VirtualBox:

    • "apt-get install dkms". Este paquete es necesario para recompilar el módulo Kernel de VirtualBox si actualizamos el kernel del sistema.

    • "dpkg -i virtualbox-2.2_2.2.2-46594_Ubuntu_hardy_amd64.deb". La instalación de este paquete fallará porque necesitamos satisfacer dependencias. Las resolvemos usando "apt-get install" con cada una de ellas, y volvemos a intentar instalar VirtualBox. También podemos hacer un "apt-get install -f", para resolver todas las dependencias pendientes de forma automática.

  • Ahora intentamos instalar Solaris dentro de la máquina virtual:

    • El primer paso es utilizar el espacio libre en los discos duros para asignárselo a Solaris. Para ello empleamos la utilidad "fdisk", tanto en "/dev/sda" como en "/dev/sdb". Las definimos de tipo "bf", es decir, Solaris. Ésto no tiene ninguna importancia si estamos trabajando con máquinas virtuales, pero sirve también como documentación.

    • A continuación debemos definir ambas particiones como discos VirtualBox

      • "VBoxManage internalcommands createrawvmdk -filename /root/.VirtualBox/SolarisA -rawdisk /dev/sda4 -register". ¡¡Mucho cuidado con equivocarnos de partición!!.

      • "VBoxManage internalcommands createrawvmdk -filename /root/.VirtualBox/SolarisB -rawdisk /dev/sdb4 -register".

    • "VBoxManage createvm -name Solaris10 -register".

    • Comprobamos que tenemos soporte de virtualización por hardware escribiendo "cat /proc/cpuinfo" y buscando las extensiones "vmx" y/o "smx".

    • "VBoxManage modifyvm Solaris10 -memory 3500M -acpi on -vrdp off -dvd /SolarisDVD/sol-10-u7-ga-x86-dvd.iso --ostype Solaris --vram 32MB --ioapic on --hwvirtex on --nestedpaging on --vtxvpid on --hda /root/.VirtualBox/SolarisA --hdb /root/.VirtualBox/SolarisB --sata on".

    • "VBoxHeadless --startvm Solaris10 --vrdp on". Con esto arrancamos la máquina virtual. En nuestra máquina local debemos lanzar un cliente VRDP, como "rdesktop" o similar (en Linux), y conectarnos a la máquina remota.

      Es importante recordar que por defecto el servicio VRDP permite conexiones desde cualquier IP y sin autentificación, así que debemos ser rápidos para conectarnos a ella (solo se permite una conexión simultanea, así que el primero gana). En un entorno real habría que configurar el cortafuegos del Linux subyacente para permitir conexiones exclusivamente desde IPs bajo nuestro control. De todas formas, con la máquina virtual en producción no vamos a tener activado VRDP, así que ésto no es problema. Solo activaremos VRDP en caso de problemas, mediante "VBoxManage controlvm Solaris10 vrdp on".

      También hay que recordar que la conexión no va cifrada, así que cuidado con pasar claves a través de ella. Probablemente lo mejor sería activar el servidor VRDP exclusivamente en la IP 127.0.0.1 y canalizar la conexión a través de un túnel SSH o similar.

      VirtualBox dispone de capacidad tanto para autentificar como para cifrar la conexión VRDP, pero no nos preocupamos de ello de momento, ya que esta funcionalidad sólo se usará de forma muy esporádica, ante emergencias.

    • Tras completar la instalación, desactivamos el DVD virtual con "VBoxManage modifyvm Solaris10 --dvd none".

    • Tras instalar el sistema hay que comprobar algunas cosas:

      • Soporte de red. Hay varias formas para configurarla. No voy a entrar en detalles en este documento.

      • Kernel 64 bits y soporte de virtualización. Para ello usamos los comandos "isainfo -v" de Solaris.

      • Comprobamos que vemos los dos cores de la CPU, con el comando "psrinfo" de Solaris... No es el caso, solo vemos uno. Se trata de una limitación de VirtualBox.

      • Un detalle MUY importante de ZFS es que es crítico que los discos duros obedezcan los comandos de control de caché. En caso contrario podemos tener problemas muy serios.

        Una posibilidad para comprobar ésto es ejecutar el siguiente programa en python:

        import os, time
        syncs = 10000
        f = open("zz","w")
        t = time.time()
        for i in xrange(syncs) :
            f.write("a")
            f.flush()
            os.fsync(f)
        print "Realizamos %d transacciones por segundo" %(syncs/(time.time()-t))
        

        Ejecutando este programa en el Linux, obtenemos 558 transacciones por segundo. Esta cifra es muy alta para los discos duros que estamos usando, así que se está utilizando la caché de escritura de los discos duros, lo que es muy peligroso si se va la luz a la máquina, etc. Desactivando la caché de escritura, mediante el comando "hdparm", obtenemos 30 transacciones por segundo, que es una cifra mucho más razonable para discos de 7200RPM y ext3.

        Haciendo la misma prueba dentro de la máquina virtual, obtenemos unas 300 transacciones por segundo en un caso y unas 100 en el otro. La segunda cifra es razonable bajo ZFS y este hardware.

        Por tanto, antes de lanzar la máquina virtual hay que desactivar la caché de escritura de los discos duros, mediante el comando "hdparm". En caso contrario, nos arriesgamos a perder el sistema.

  • Ahora intentamos montar un arranque dual entre Linux y Solaris. Dado que el GRUB de Linux está en el arranque del disco duro, arrancaremos con él. Como es incapaz de arrancar un sistema Solaris con ZFS de forma nativa, el GRUB de Linux debe ejecutar el GRUB de Solaris, que reside en la partición 4, en nuestra configuración.
    title SOLARIS10
      rootnoverify (hd0,3)
      chainloader +1
    

  • A continuación arrancamos con vKVM e intentamos lanzar Solaris. El lanzamiento falla con un error "bad pbr sig". Tras investigar el asunto online, parece que el problema es que cuando instalamos el sistema bajo una máquina virtual, con arranque ZFS, Solaris está viendo la partición como si fuese un disco completo. En ese caso Solaris creará etiquetas EFI en el disco. Debemos evitarlo. Además, está creando una tabla de particiones dentro de una partición, lo que podría tener sentido su fuese una partición lógica, pero no es así.

  • Una posible solución sería instalar Solaris sobre el disco de Linux. El disco duro COMPLETO. Es decir, en vez de decirle a Solaris que una partición del disco duro es un disco duro completo, le doy el disco duro completo y le digo que use la partición correspondiente. Esto debería funcionar, salvo, tal vez, porque no quiero que el GRUB de Solaris se instale en el arranque del sistema, sobre el GRUB de Linux.

    Hay que tener muchísimo cuidado con una cosa: Si montamos el disco duro entero para VirtualBox, cuando arranquemos VirtualBox va a intentar arrancar el disco... que con mi configuración actual supone arrancar Linux dentro de la máquina virtual. Esto supone que ambos Linux, el real y el virtual, están accediendo a las mismas particiones a la vez, lo que es receta segura para tener corrupción de datos de forma instantanea.

    Éste es un problema muy grave, que me preocuparé de solucionar luego.

    De momento lo que hacemos es recrear la configuración de la máquina virtual, pero esta vez indicándole los discos duros enteros. Osea, hacemos:

    • "VBoxManage internalcommands createrawvmdk -filename /root/.VirtualBox/SolarisA -rawdisk /dev/sda -register".

    • "VBoxManage internalcommands createrawvmdk -filename /root/.VirtualBox/SolarisB -rawdisk /dev/sdb -register".

    Lamentablemente no consigo afinar bien el sistema, y corrompo el Linux subyacente, así que tengo que reinstalarlo de nuevo. Probablemente insistiendo un poco pueda solucionar el problema, pero cada prueba requiere instalar dos sistemas operativos, etc., lo que es un proceso lento, aburrido y proclive a errores.

  • Otra vía posible es, ya que esta máquina tiene dos discos duros, utilizar una partición Linux en el primer disco, que es el que arranca, e instalar Solaris en el segundo disco. A priori eso debería funcionar bien, encadenando los sectores de arranque. Una vez en producción sería posible añadir el espacio libre del primer disco como una extensión (RAID 0) o un "mirror" (RAID 1) del ZFS de Solaris, a elegir.

    Los pasos serían los mismos, salvo que:

    • Cuando instalamos el GRUB de Linux, el "root" en "menu.lst" debe ser "/dev/sda1", en lugar de "/dev/md1".

    • A la hora de instalar el GRUB en el sector de arranque de Linux, lo instalamos en el primer disco, pero NO en el segundo disco, donde va a ir el arranque de Solaris.

    • El particionado de ambos discos duros debe ser comparable, para poder usarlos como "mirror" (RAID 1)

    • A la hora de crear la máquina virtual, mapeamos solo el segundo disco. De esta forma evitamos meter la pata y cargarnos en linux del primer disco. Pero en este caso es importante que si usamos el primer disco también para Solaris, que lo añadamos como "mirror" (RAID 1). De esta forma podremos trabajar sin problemas, y ZFS se encargará de resincronizar el "mirror" cuando volvamos a arrancar en modo nativo.

  • Una vez instalada la máquina virtual, y comprobando que arranca correctamente, añadimos lo siguiente al GRUB del Linux:
    title SOLARIS10
      rootnoverify (hd1,0)
      chainloader +1
    

    Seguidamente hay que arrancar desde vKVM y comprobar que arranca Solaris si elegimos esa opción en el GRUB. Pero... vKVM NO soporta dos discos duros, así que no podemos arrancar el Solaris. ¡¡Todo son problemas!!.

    Dios, qué chapuza...

    Intentar poner a andar ésto sin soporte vKVM es arriesgado porque, por ejemplo, tenemos que localizar exactamente el driver de la tarjeta de red que debemos configurar para tener la máquina accesible desde el exterior. Algo que no es trivial si no podemos ver la pantalla...

  • Vuelvo a la opción de instalar Solaris en el primer disco, en otra partición.

    • Hago una instalación normal de Solaris. Ésto instalará su GRUB en el sector de arranque.

    • Seguidamente, en el Linux, reinstalo su arranque GRUB, mediante "grub-install".

    • Edito el GRUB de Linux con
      title SOLARIS10
        rootnoverify (hd0,3)
        chainloader +1
      

    • Arrancando la máquina virtual intentará arrancar el GRUB normal (cuidado con arrancar una segunda sesión del Linux, porque será corrupción segura del disco duro). Seleccionando la entrada Solaris obtenemos... nada. No funciona. Solo muestra "GRUB" y se para. Aparentemente ejecuta el GRUB de Solaris, pero éste no es capaz de continuar (posiblemente no encuentra los stage 1.5 o 2).

      Tras investigar el asunto durante un par de horas me doy cuenta de una cosa... ¡¡¡¡¡¡¡Solaris está instalando su GRUB en la partición de SWAP de Linux!!!!!!!. Esto es así porque su código de partición se solapa con la de Solaris. Es decir, Solaris la reconoce como una partición propia. Naturalmente ésto no funciona, porque la partición de Swap, aunque la máquina esté aburrida, tiene una pequeña actividad que va corrompiendo cualquier cosa que se grabe en ella.

      ¿Podría ser ésto el origen de todos mis males?. Tal vez la corrupción del punto anterior se debiese a este problema (Solaris sobreescribe la partición de Swap de Linux, y éste se comportará de forma errática cuando intente volver a cargar en memoria sus datos, que han sido sobreescritos).

      Hago algunas pruebas eliminado el SWAP de Linux, y todo parece funcionar como debe. Pero, curiosamente, el instalador de Ubuntu no me deja desactivar la partición de Swap a la hora de formatear el sistema... ¡Qué cosas!.

      Tal vez si la primera partición Solaris estuviese en el disco antes que el Swap, la usaría primero... Aún así, el tema parece un pelín frágil para arriesgarse. Las cosas podrían cambiar en una actualización futura y mordernos el culo. Tal vez sea más inteligente o desactivar el swap a las bravas, una vez instalado en Linux, o desactivarlo puntualmente cuando se toquen cosas relacionadas en Solaris. Éste último paso parece proclive a errores. Hay que meditarlo un poco.

  • Con todo lo anterior, procedo a reinstalar de nuevo el Linux desde cero, con las particiones en RAID, a actualizarlo, etc. Es obligatorio definir partición de SWAP, así que lo hago.

  • Debido a los problemas con el Swap Linux al instalar Solaris, desactivo temporalmente la memoria virtual en el Linux, con el comando "swapoff", elimino las dos particiones (una en cada disco duro), creo las particiones que albergarán Solaris y nuevas particiones de Swap tras ellas (al final del disco duro), y reactivo el Swap.

    Es muy importante actualizar el "/etc/fstab" para reflejar la posición del nuevo Swap. También es importante inicializar las areas de Swap de Linux con el comando "mkswap".

    Reinicio la máquina para asegurarme de que todo funciona.

  • A la hora de instalar el Solaris, creo los dos discos virtuales cubriendo los dos discos duros reales.

  • No hay que olvidar, tras instalar Solaris, que la instalación configura el arranque para arrancar Solaris. Debemos reinstalar el arranque GRUB de Linux mediante el comando "grub-install", como ya se ha descrito. También actualizamos el "menu.lst" para añadir una entrada para arrancar el Solaris, como se ha descrito también (apuntando a la partición correcta). Con estos cambios, hay que tener mucho cuidado al reiniciar la máquina virtual, porque intentará arrancar, por defecto, una instancia virtualizada de Linux sobre la misma partición que está funcionando, lo que corromperá el disco irremediablemente. Hay que tener mucho cuidado para ser rápidos y seleccionar Solaris antes del "timeout".

    Tras ésto, reiniciamos la máquina virtual, para comprobar que todo funciona. Mucho cuidado con seleccionar rápido Solaris en el menú Grub, para no cargarnos nada.

  • Para tener una mejor integración en el Solaris 10 virtualizado es necesario instalar las "Guest Additions". Realmente no nos interesa tener red cuando estamos virtualizados, porque esta instalación va a funcionar en modo nativo, pero puede ser interesante si tenemos problemas y necesitamos algo.

    • Tenemos el ISO en "/usr/share/virtualbox/VBoxGuestAdditions.iso", así que creo un enlace simbólico dentro de mi directorio "/SolarisDVD" para tenerlo todo juntito.

    • Ahora le pasamos el DVD a la máquina virtual con "VBoxManage controlvm Solaris10 dvdattach /SolarisDVD/VBoxGuestAdditions.iso".

    • El disco nos aparecerá en la máquina virtual Solaris (podemos verlo con "df -k"). Nos vamos a ese directorio e instalamos las extensiones con el comando "pkgadd -d ./VBoxSolarisAdditions.pkg". Hacemos un "touch /reconfigure" (para que el kernel Solaris escanee dispositivos) y reiniciamos.

    • Se me olvidó activar los interfaces de red en la máquina virtual a la hora de crearla, así que la paramos y escribirmos "VBoxManage modifyvm Solaris10 --nic1 nat". Hay que hacer un nuevo "touch /reconfigure" y reiniciar la máquina virtual de nuevo.

    • La interfaz de red es "pcn0". Identificamos la interfaz mirando "/var/adm/messages", y buscando notificaciones de direcciones Ethernet, o mensajes sobre la velocidad de la interfaz.

    • El problema es que tengo que configurar toda la red desde cero, lo que es un coñazo. Por ello opto por reinstalar el sistema una vez más, esta vez con una interfaz de red instalada en el ordenador.

      Con ésto todo funciona. Tengo red.

    • Tomo nota de los datos de red:

      • Interfaz: "pcn0"

      • IP: 10.0.2.15

      • Ruta por defecto: 10.0.2.2

      • DNS: 213.186.33.99 (OVH: domain "ovh.net")

      La idea es realizar una instalación "buena" y poder poner estos datos si arrancamos a través de máquina virtual, y necesitamos la red.

  • Ahora volvemos a desactivar la red de la máquina virtual y hacemos otra instalación desde cero. Ésta debe ser la definitiva, con suerte. Desactivamos la red durante la instalación porque no queremos que nos quede basurilla de la máquina virtual en la configuración de red. Si necesitamos la red desde la máquina virtual, echamos mano de los datos recopilados hace un momento.

  • Una vez que todo funciona bien, activamos la red de nuevo, reinciamos y comprobamos que activando las configuraciones de red de forma manual, la red nos funciona. Recordemos que es conveniente hacer un "touch /reconfigure", antes de reiniciar, por si las moscas.

  • Ahora necesitamos saber cual es el driver de red que debemos usar para Solaris, cuando arranca en modo nativo. Como en dicho modo perdemos el acceso por red, mientras no la configuremos correctamente, y el vKVM no nos sirve porque arranca una máquina virtual, tenemos que recurrir al siguiente truco:

    • Hacemos un "touch /reconfigure" en el Solaris, solo para asegurarnos.

    • Nos aseguramos de que el Grub que toma el control es el del Linux. Cambiamos la configuración de su "menu.lst" para que arranque el Solaris.

    • Reiniciamos la máquina. Se deberá arrancar el Solaris. Como no tiene configurada la red, no funcionará nada. Ésto es normal.

    • Esperamos 10 minutos y configuramos el arranque en modo "rescue", vía el panel de control OVH. También le decimos que reinicie el servidor "a saco". Esperamos a que nos llegue los datos de acceso "rescue" por correo electrónico.

    • Una vez que tenemos los datos de acceso, entramos en el equipo, montamos el disco del sistema y cambiamos su "menu.lst" para que arranque el Linux normal. Reconfiguramos el panel de control OVH y reiniciamos la máquina.

      ATENCIÓN: A la hora de montar la partición, hay que recordar montar "/dev/md1", ya que es un RAID 1 (mirror). No cometer el error de montar las particiones individuales.

    • Una vez que tenemos el Linux funcionando de nuevo, lanzamos el Solaris en la máquina virtual y revisamos el "/var/adm/messages", buscando indicaciones que nos den una pista sobre la tarjeta Ethernet.

    • Una vez localizado el driver, configuramos el sistema para que ponga la IP de la máquina a través de dicho driver, y la máquina debería responder a los "pings" y estar accesible vía SSH.

      Ésto es la teoría. En la práctica... no funciona. Y no funciona por motivos muy misteriosos.

  • Activo el arranque por vKVM... y no funciona. No funciona en absoluto. Incluso intentando arrancar el Linux... Esto empieza a ser un misterio del copón...

  • Pruebo a cambiar la partición activa, que era la de Solaris, a Linux. A ver si así vKVM funciona. Pero nada, sigue sin funcionar. Está claro que en algún momento del camino he hecho algo que no le ha gustado.

  • Nuevamente volvemos a empezar desde el principio, con la experiencia ganada. Reinstalamos el sistema desde cero de nuevo.

  • Tras investigar el asunto con detalle, el problema está en vKVM. OVH ha debido tocar algo, y no funciona, o funciona de forma esporádica, o funciona dependiendo de qué kernel se esté usando. En pocas palabras, no podemos contar con la funcionalidad vKVM, porque su funcionamiento es irregular y poco confiable.

  • Con esta experiencia desastrosa, vuelvo a realizar la instalación completa desde cero, hasta el punto de poder arrancar el Solaris en modo nativo.

  • Nada, no hay forma de arrancar Solaris en modo nativo, aunque funcione perfectamente bajo emulación. Como no tengo acceso a la pantalla, no tengo ni idea de cual puede ser el problema. Abandono... por ahora.

En caso de que no hubiera habido problema, lo único que quedaría por hacer sería reconfigurar la máquina virtual para que use un ISO de arranque por defecto con un GRUB que arranque el Solaris, para evitar el riesgo de arrancar la máquina virtual y que se inicie Linux de forma inadvertida, lo que corrompería nuestros discos duros de forma inmediata e irremediable.

Pruebas de instalación bajo VMWARE

Visto que no es posible realizar una instalación nativa, solo queda probar a fondo qué tal funciona Solaris 10 bajo virtualización. Mi primera elección sería probarlo bajo VirtualBox, por muchos motivos (por ejemplo, que es lo que mejor conozco y lo que más uso, y que es gratuito y puedo tocar el código fuente), pero el no poder aprovechar los dos "cores" de la CPU me duele. Podría instalar dos máquinas virtuales Solaris y repartir los servicios, pero queda el problema de repartir el disco duro, la memoria, etc. Es decir, una máquina virtual se pasará de recursos y la otra se quedará corta... y el reparto óptimo variaría constantemente.

OVH dispone de varias distribuciones listas para usar virtualización, si la plataforma hardware utilizada lo permite, que es mi caso.

  • Virtuozzo: Esta tecnología es semejante a las "Zonas" Solaris. Es lo más eficiente, pero requiere un kernel Linux, que no es lo que quiero.

  • XEN: Las versiones iniciales de XEN requerían que el sistema operativo virtualizado estuviese modificado para "colaborar" con el virtualizador. Ésto no es el caso con Solaris 10 (sí con OpenSolaris), así que tampoco es una opción. Las versiones modernas permiten virtualizar un sistema operativo no colaborador, si tu hardware lo permite (es el caso), pero la versión Xen de OVH es un poco vieja y la declaran como en "preproducción".

  • VMWARE: Es la opción realmente soportada por OVH. Permite virtualizar Solaris 10 aunque no colabore, y permite también utilizar los dos cores de la CPU, aparentemente (tengo que probarlo bien). Como puntos negativos, personalmente no me gusta mucho y, sobre todo, requiere utilizar un cliente específico para acceder y controlar la instalación. Afortunadamente ya dispongo de dicho cliente en mi máquina, por temas laborales, aunque me disgusta pensar qué puede pasar si estoy de vacaciones y surge una emergencia sin mi máquina habitual a mano, en un ordenador prestado, etc.

Los pasos son los siguientes:

  • Instalo la distribución VMWARE de OVH. Es un kernel de 32 bits, pero teóricamente es capaz de ejecutar mi Solaris 10 en 64 bits. Veremos...

  • Entro en la máquina. Como antes, elimino el acceso OVH a la máquina.

  • "apt-get update", "apt-get upgrade", "apt-get dist-upgrade".

  • Es curioso que siendo una distribución pensada para virtualizar, no deje ningún espacio libre en el disco duro. Elimino la partición "/home", que la emplearé para Solaris. Quito el "/home", actualizo el "/etc/fstab" y marco apropiadamente las particiones con "fdisk". Reinicio para asegurarme de que todo funciona.

    En el "/home" reside el "home" de VMWARE, que muevo apropiadamente a su nuevo sitio antes de reutilizar las particiones. Hay que parar también el servicio VMWARE, que arranca por defecto.

    Las nuevas particiones no usarán RAID de LINUX; emplearé redundancia ZFS sobre ellas.

    Nuevamente me parece muy curioso que el espacio SWAP no se proteja...

  • A la hora de crear los discos virtuales, es importante que lo hagamos indicando que son "independientes", fuera de snapshots VMWARE y similares. Sino no nos dejará alterar su tabla de particiones, amén de que, en teoría, es más eficiente. En teoría se puede cambiar una vez instalado el disco virtual, pero en la versión de VMWare que usa OVH ésto no parece funcionar.

  • A diferencia de Virtualbox, con VMWARE la máquina virtual ve todo el disco, pero solo puede escribir en la partición asignada. Es decir, la tabla de particiones debe configurarse con el "fdisk" de Linux. Hay que afinar un poco, ya que no todas configuraciones de las tablas de particiones son aceptadas por Solaris.

  • Creo un directorio en el que residirá el medio de instalación Solaris, etc.

  • Es necesario pedir una licencia a VMWARE para crear las máquinas virtuales. La licencia es gratuita, pero no deja de ser un incordio tener que pasar por el aro, al margen de ir dejando tus datos por ahí... Pido diez licencias, para curarme en salud.

  • Utilizamos el "VMware Server Console" para crear una nueva máquina virtual, 64 bits. Le doy las dos particiones en los dos discos duros. Le damos dos procesadores (solo tenemos dos Cores; si tuviésemos más estaríamos en las mismas, ya que VMWare solo soporta una o dos CPUs virtuales). Le doy 3.6 gigas de memoria. En red, configuro "host-only networking".

  • Para poder utilizar la red como dios manda (osea, acceso bidireccional, etc) es preciso disponer de IPs "failover" de OVH. Dichas IPs no se corresponden a un servidor físico concreto, sino que se pueden mapear a bocas de los switches arbitrarias, de forma que, en la práctica, podemos mover dichas IPs de una máquina a otra. Ésto es perfecto para poder montar servicios sobre dichas IPs y, si tenemos los ordenadores duplicados, simplemente mover la IP a otro ordenador configurado de forma idéntica en caso de problemas con el original.

    En este caso se usan las IPs "failover" para poder dar servicio de red a las máquinas virtuales. No es mala solución, si podemos mover las máquinas virtuales a otra máquina física. El problema es que solo podemos instalar tantas máquinas virtuales como IPs failover tengamos. La otra opción es usar NAT, pero no es buena idea si nuestra máquina virtual va a estar accesible como servidor en Internet.

  • Hay que configurar la red del HOST tal y como se describe, para que la instalación de la máquina virtual sea lo más indolora posible. Si no se hace así, la instalación detectará IPs duplicadas (debido al "Proxy ARP").

  • Ahora procedemos a la instalación del sistema Solaris 10 virtualizado.

    A la hora de configurar la red, debemos seguir los pasos del manual ya descrito. En la parte de Solaris, hay que configurar la ruta por defecto con el comando "route -p add default IPfailover -interface"

  • Comprobaciones varias en el Solaris virtualizado:

    • Usando el comando "isainfo" compruebo que estamos ejecutando el kernel en modo 64 bits.

    • Usando el comando "mpstat", veo que, efectivamente, veo dos CPUs. No estoy seguro de que sean CPUs reales (es decir, que estén mapeadas a los dos cores), así que creo dos bucles infinitos para comprobar que ambas CPUs se saturan tanto en el host como en el guest. Efectivamente es el caso.

    • Comprobamos que cuando hacemos "flush" a disco realmente se graba en la superficie magnética del disco duro, y no su caché interna. Para ello usamos el programa python ya indicado con anterioridad.

      • Sin hacer nada especial, me salen 608 transacciones por segundo. Esta cifra es demasiado alta e indica que estamos grabando en caché, no en el disco físico.

      • Desactivamos la caché de disco mediante "hdparm" en el Host. Ahora tenemos 543 transacciones por segundo.

      • VMWare permite activar y desactivar su caché de disco duro local. La desactivo. Aparentemente es necesario dar de baja los discos duros y darlos de alta de nuevo, para que la opción tenga efecto.

        Lamentablemente al hacerlo perdemos la instalación Solaris, y hay que repetir todo el proceso.

      • Tras insistir bastante parece que consigo desactivar la caché de escritura de VMWARE. Debe tratarse de un bug de la interfaz; hay que cambiar también la configuración de persistencia para que almacene el cambio en el estado de la caché de escritura. Cositas...

      • Ahora, con la caché de escritura de VMWARE desactivada y la caché de disco activada tenemos 346 transacciones por segundo.

      • Con la caché de escritura de disco desactivada, y la caché de escritura de VMWare desactivada también, tenemos 93 transacciones por segundo. Esta cifra es un pelín baja, pero acorde al hardware que tenemos, y me da confianza en que no se está usando la caché de escritura para nada, así que no vamos a dañar el ZFS virtualizado en caso de cortes de luz, reinicios súbitos, cuelgues del sistema, etc.

  • Con la experiencia previa, añado un script en el arranque de la máquina Linux para que desactive la caché de escritura de los discos duros antes de arrancar VMWare. Reinicio y compruebo que se realiza correctamente.

  • Configuro VMWare para que arranque la máquina virtual cuando se arranque el sistema Linux. Funciona bien, pero hay problemas con la interfaz de red. Aparentemente se arranca la máquina virtual antes de que el kernel Linux tenga la interfaz de red virtual en funcionamiento. Meto una pausa de 5 segundos entre la activación de la interfaz de red de VMWare y el arranque de las máquinas virtuales. Parece que es suficiente...

  • Reinstalo la máquina virtual de nuevo, asegurándome de configurarlo todo correctamente. Ésta va a ser la instalación definitiva, que entrará en producción.

    Realizo de nuevo todas las comprobaciones anteriores y considero que la instalación está lista para producción.

    La pausa de 5 segundos entre levantar la interfaz de red y arrancar la máquina virtual no siempre es suficiente. En vez de incrementar este tiempo, frenando el arranque sin tener la garantía de que ninguna cifra funcione siempre, añado el siguiente código al script de arranque, entre levantar la interfaz y arrancar la máquina virtual.

    echo "Pausa para tener red antes de levantar las maquinas virtuales..."
    while /bin/true ;
    do
        /sbin/ifconfig vmnet1 >/dev/null 2>/dev/null;
        if [ $? = 0 ]; then
            break;
        fi;
        sleep 1;
    done
    

    Lo que hace este código es detenerse hasta que la interfaz esté disponible.

  • Pero no lo está: durante la instalación de software nuevo he tenido dos bloqueos del servidor. Entrando por la consola del VMWare se ven errores de timeout de disco.

  • Creo un programa para generar un montón de tráfico de disco, tanto de lectura como de escritura. Dejo funcionando el programa durante el fin de semana. La máquina funciona a la perfeccion. Mosqueante... En situaciones así es preferible que las cosas fallen cuanto antes y de forma consistente, no de forma esporádica y errática...

  • Pensando un poco, los cuelgues fueron en momentos de alta carga tanto de disco como de red. Así que me pongo a copiar ficheros de varios gigabytes de una máquina a otra... Efectivamente, la máquina se cuelga tras un rato. En la consola se ven errores de timeout de disco, pero tampoco puedo llegar a la máquina virtual por red, así que el problema real afecta a varios subsistemas. ¡Qué puto desastre!.

  • La versión de VMWare que estamos usando es la 1.0.8. Ya hay una 1.0.9, pero parece que los problemas solucionados son básicamente de seguridad. También hay una versión 2.0.1 que tiene buena pinta, ya que parece soportar mejor sistemas con virtualización por hardware. Pruebo a instalar la versión 2.0.1 bajo el sistema OVH "normal", aunque cambiando el virtualizador sería buena idea instalar un kernel propio 64 bits. Ya me preocuparé de eso si todo funciona bien...

    Aparentemente las versiones recientes de Solaris 10 están soportadas de forma oficial en VMWare 2.0.1. Veremos...

    La instalación de la actualización no es inmediata, pero no tiene mucha complicación para alguien experimentado. El mayor problema es que los fuentes que tengo no se corresponden EXACTAMENTE con el kernel que está funcionando, pero se puede meter a presión. No me preocupa demasiado, porque ya que estoy tocando tantas cosas, acabaré metiendo Ubuntu LTS con mi propio kernel.

    La verdad es que cuesta lo suyo. Además, necesito un cliente nuevo para la administración remota, y toda la gestión de red ha cambiado. Al final, cansado del asunto, añado un script propio en el arranque del Linux para que cree la ruta apropiada, manualmente. Tengo que hacer lo mismo con el Proxy ARP, ya que por defecto el sistema intenta configurarse antes de que la interfaz de red virtual haya sido inicializada.

  • Algunas "putadillas":

    • El consumo de CPU al usar la red es muy alto.

    • El cliente VMWARE "normal" no funciona. Ahora se accede a la gestión vmware a través del navegador, lo que estaría muy bien si fuese algo rápido y eficiente, que no es el caso. Además, el modo "console" requiere instalar un "plugin" de 18 megabytes. Por si fuera poco, el acceso web me funciona más o menos bien sobre Linux, pero no sobre MS Windows... el mundo al revés...

    • VMWare Server 1.0.8 permite instalar una máquina virtual sobre particiones físicas del disco duro. Esta funcionalidad ha desaparecido de VMWare Server 2.0.1. Afortunadamente 2.0.1 permite ejecutar máquinas virtuales "antiguas", con esta funcionalidad, aunque no permitirá hacer cambios de disco.

      En otras palabras, hay que instalar la máquina virtual bajo VMWare Server 1.0.8 y luego actualizar a 2.0.1. Qué cosas...

    Al menos parece que la máquina virtual ya no se inestabiliza cuando el tráfico de red es elevado. Algo es algo.

¿Instalación definitiva?

Con la experiencia ganada es hora de realizar una instalación completa desde cero. Los antecendetes son:

  • No conseguimos arrancar Solaris 10 de forma nativa en la máquina. No hay más remedio, por tanto, que utilizar máquinas virtuales.

  • VirtualBox no soporta dos cores en el Guest. Lástima, porque sería mi primera opción.

  • Si usamos VMWare, hay que usar la versión Server 1.0.x para que nos permita utilizar particiones físicas de disco.

  • Una vez instalado el sistema, podemos migrar a la versión Server 2.0.x, que nos permite usar la máquina virtual con particiones físicas sin problemas, aunque no nos permita reconfigurarla.

Los pasos a dar van a ser los siguientes:

  • Reinstalamos la máquina Linux de nuevo. Usamos Ubuntu Server 8.04 LTS 64 bits. Usamos esta versión porque es una LTS (Long Time Support). Seleccionamos el particionado por defecto: 10 gigas de "/" (RAID 1), 740 gigas de "/home" (RAID 1) y un giga de Swap (en dos particiones de 512 megas sin redundancia...).

  • Eliminamos la clave de acceso de OVH y su código en "/etc/crontab".

  • Actualizo el sistema a la última versión a través de "apt-get update", "apt-get upgrade", "apt-get dist-upgrade". Reiniciamos para asegurarnos de que está todo OK.

  • Instalamos GRUB:

    • "apt-get install grub".

    • "mkdir /boot/grub".

    • "update-grub".

    • "cat /boot/grub/menu.lst".
      title UBUNTU 8.04 (Kernel OVH)
        root (hd0,0)
        kernel /boot/bzImage-2.6.27.10-xxxx-grs-ipv4-64 root=/dev/md1
      

    • "apt-get install mdadm".

    • "grub-install /dev/md1".

    Reiniciamos y comprobamos que el sistema arranca correctamente.

  • "apt-get install dkms".

  • Desmontamos "/home", lo eliminamos de "/etc/fstab". Usamod "fdisk" para marcar la partición (en ambos discos) como "Solaris" (osea, tipo "bf").

  • El kernel OVH no nos sirve, así que hacemos "apt-get install linux-image". Este comando ya actualiza el "menu.lst" de GRUB. Reiniciamos y nos aseguramos de que funciona y de que ha cargado el kernel apropiado.

    Si faltase algún driver, se puede coger la configuración OVH y recompilar el kernel nuevo con ella, activando las funcionalidades que necesitamos (especialmente la carga de módulos). En mi caso la configuración por defecto de la distribución ya soporta todo el hardware que necesito de esta máquina.

  • Descargamos la versión 1.0.9 de VMware Server. No hay versión de 64 bits, así que me bajo la de 32. Espero que los módulos kernel sean compatibles con un kernel de 64 bits... En la documentación dice que el soporte es "experimental", pero a mí me basta con que permita instalar el Guest, ya que en producción usaré VMware Server 2.0.1.

    • Me bajo el "tar.gz". Los descomprimimos y ejecutamos el instalador.

    • Necesitamos varias librerías, varias de ellas de 32 bits. Esto es un problema serio.

    • Volvemos a realizar la instalación, pero en esta ocasión instalamos la versión de 32 bits. La idea es instalar la máquina virtual en 32 bits, y luego reinstalar el sistema de nuevo en 64 bits y reusar la máquina virtual ya instalada.

  • Instalamos el sistema operativo de OVH preparado para VMWare, tal cual. Así no nos tenemos que preocupar de nada en la primera instalación.

  • Tomo nota de los datos de particiones, para ver dónde está todo. Luego desmonto el "/home" (copiando los datos de vmware que hay dentro). lo elimino del "/etc/fstab" y reconfiguro la tabla de particiones para asignarla a "Solaris".

    Los datos de particiones de ambos discos son iguales, y son:

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1        2550    20482843+  fd  Linux raid autodetect
    /dev/sda2            2551       91071   711044932+  fd  Linux raid autodetect
    /dev/sda3           91072       91201     1044225   82  Linux swap / Solaris
    

    Reinicio la máquina.

  • Creo la máquina virtual Solaris, sobre las particiones que le he indicado, pero no instalo nada aún. Usamos el modo "bridge" de red, y hay que recordar configurar los discos para que sean persistentes y no hagan caché de escritura. De momento no tocamos la caché de disco duro del Host porque esta instalación es temporal y vamos a reinstalar el Linux más tarde.

  • Una vez configurada la máquina virtual, iniciamos la instalación. Una vez que la instalación empieza a copiar ficheros, paramos la máquina virtual. Ésto es así porque al reinstalar el Linux vamos a perder los datos de esta partición, así que realizar la instalación de Solaris es una pérdida de tiempo. Lo que queremos es comprobar que la tabla de particiones sea válida para Solaris.

    Es posible que la instalación requiera cambiar la tabla de particiones de Linux, ya que Solaris es más "delicado". Si es así, es importante tomar nota de todos los valores finales del "fdisk". También es importante reiniciar el servidor antes de utilizar la nueva tabla de particiones.

    En mi caso debo descartar la última pista del disco duro, asignada al SWAP, así que debo desactivar el SWAP con "swapoff -a", cambiar el formato con "fdisk" (en ambos discos duros), recrear el swapping mediante el comando "mkswap" (en ambos discos), reiniciar el ordenador y comprobar que todo está bien con "swapon -s" y "free".

    Es importante comprobar la instalación en este punto por si necesitamos cambiar la tabla de particiones. Si la instalación de Solaris la hacemos tras reinstalar el Linux a la versión de 64 bits con VMWare Server 2.0.1, y no le gusta la tabla de particiones, tendremos que empezar de nuevo desde el principio. Adivinad quien ha pasado por ello... :-)

    Al final la configuración que me queda es:

    Disk /dev/sda: 750.1 GB, 750156374016 bytes
    255 heads, 63 sectors/track, 91201 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1        2550    20482843+  fd  Linux raid autodetect
    /dev/sda2            2551       91071   711044932+  bf  Solaris
    /dev/sda3           91072       91200     1036192+  82  Linux swap / Solaris
    

  • Una vez abortada la instalación, copiamos el "/home/vmware" (que es donde están configurados los discos virtuales, etc) a otra máquina distinta.

  • Reinstalo otra vez el Ubuntu LTS 64 bits. El punto importante es mantener exactamente el mismo particionado que en la instalación anterior, para poder utilizar la misma configuración de discos virtuales. Ésto es fundamental. Dado que el panel de control no permite afinar a nivel de pista de disco duro, se hace lo posible. El ajuste fino lo hacemos luego con un "fdisk", una vez instalado.

    Hay que hacer todos los pasos que hicimos antes, como actualizar el sistema, arrancar con GRUB, etc.

  • Copio el "/home/vmware" que habíamos grabado en otra máquina. Ésto nos permite mantener la configuración de la máquina virtual. Lo volvemos a dejar en su sitio.

  • "apt-get install make", "apt-get install linux-source", "cd /usr/src", "tar xvfj linux-source-2.6.24.tar.bz2", "cd linux-source-2.6.24", "make mrproper", "cp /boot/config-2.6.24-23-generic .config", "make -j 2".

    Lo necesitamos para compilar los módulos kernel de VMware Server.

  • Instalo VMware Server 2.0.1, versión 64 bits.

    • Cuando nos pide el path del código fuente del kernel, ponemos "/usr/src/linux-source-2.6.24/include". Se nos queja de que esos fuentes no coinciden con el kernel real que tenemos. Editamos el fichero "/usr/src/linux-source-2.6.24/include/linux/utsrelease.h" a mano, para encajar las versiones.

    • A la pregunta de "In which directory do you want to keep your virtual machine files?", ponemos "/home/vmware/Virtual Machines", que es donde tenemos la configuración de la máquina virtual que hemos creado hace un rato.

  • Reiniciamos el Linux. Nos aseguramos de que corre el kernel correcto y que existen las interfaces "vmnet" en el sistema.

  • "apt-get install ntp". Es conveniente tener la hora del ordenador de forma correcta. Reconfiguro el cortafuegos para no exportar mi servicio NTP al exterior.

  • Para entrar en la máquina virtual, se puede usar el navegador al puerto 8222 (HTTP) o 8333 (HTTPS), o bien usamos el "VMware Infraestructure Client", indicando el puerto 8333 (separado con un ":" de la IP).

  • Instalamos Solaris 10 virtualizado. La configuración es:

    • Activamos compresión en el "pool" ZFS. Hay que usar la compresión por defecto, que es la única soportada por el arranque GRUB.

    • En el dataset "/var" activamos compresión GZIP-9.

    • Instalamos el "companion".

    • Cambiamos el "/etc/hosts" para quitar el nombre de la máquina.

    • Editamos el fichero "/etc/hostname.e1000g0" y ponemos "IPfailover netmask 255.255.255.255".

    • Escribimos "route -p add default IPfailover -interface".

    • En el host Linux añadimos este fichero de arranque, tras el VMWARE:
      #!/bin/sh
      
      /sbin/hdparm -W 0 /dev/sda
      /sbin/hdparm -W 0 /dev/sdb
      
      while /bin/true ;
      do
          /sbin/ifconfig vmnet1 >/dev/null 2>/dev/null;
          if [ $? = 0 ]; then
              break;
          fi;
          sleep 1;
      done
      
      /sbin/route add IPfailover dev vmnet1
      echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
      echo 1 > /proc/sys/net/ipv4/conf/vmnet1/proxy_arp
      echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
      echo 1 > /proc/sys/net/ipv4/conf/vmnet1/forwarding
      

    • Reiniciamos, y el Guest ya debería tener red.

    • Creamos un dataset nuevo para albergar "/usr/local", y copiamos ahí cosas que tengo instaladas en otras máquinas.

    • En "/etc/profile" ponemos los siguientes paths: "/usr/local/sbin/:/usr/local/bin:/usr/sfw/sbin:/sbin:/usr/sbin:/opt/sfw/sbin:/usr/sfw/bin:/opt/sfw/bin:/opt/sfw/lib/bin/:/usr/openwin/bin:/usr/sadm/bin:/bin:/usr/bin/:/usr/openwin/bin:/usr/sadm/bin:/usr/ucb". En el mismo fichero cambiamos el path del MAN a "/usr/local/share/man:/usr/local/man:/usr/dt/man:/usr/man:/usr/openwin/share/man:/usr/share/man". Por último, en el mismo fichero, cambiamos el PAGER a "less". Añadimos nuevos PATHs para el enlazado dinámico, con "crle -c /var/ld/ld.config -l /usr/local/lib:/lib:/usr/lib" y "crle -64 -c /var/ld/64/ld.config -l /usr/local/lib/64:/lib/64:/usr/lib/64".

    • Activamos el servicio NTP en Solaris. Su configuración está en "/etc/inet/ntp.conf". Copio una configuración de otra máquina. Se activa con "svcadm enable ntp". También hay que cerrar el cortafuegos, por el mismo motivo que en el Host.

    • Registro el servidor con Sun, de forma que pueda descargar parches. Es necesario registrarse en Sun, de forma gratuita.

      Para ello creamos un fichero "/z-RegistrationProfile.properties", con el siguiente contenido:

      userName=USUARIO
      password=CLAVE
      hostName=HOST
      subscriptionKey=
      portalEnabled=false
      proxyHostName=
      proxyPort=
      proxyUserName=
      proxyPassword=
      

      Luego ejecutamos "sconadm register -a -r /z-RegistrationProfile.properties".

  • Actualizamos el sistema con los últimos parches, con "smpatch update". Ésto puede llevar un buen rato.

  • Tras actualizar por completo, y comprobar que todo parece funcionar correctamente, hacemos un "snapshot" del sistema con "zfs snapshot -r datos/ROOT@20090604-13:48" y "zfs snapshot datos@20090604-13:48". Ésto nos permitirá experimentar sin riesgos, ya que podemos recuperar el sistema al estado actual con un único comando. Obsérverse que hago un segundo snapshot de "datos", de forma no recursiva, no solo el sistema operativo en sí. De esta forma protejo también el menú de arranque GRUB de Solaris, importante para mantener la consistencia si creamos nuevos "Boot Environments".

  • Hacemos las pruebas de velocidad de grabación, para asegurarnos de que los "flush" de caché de escritura de disco duro realmente se están haciendo. Me salen 105 transacciones por segundo, lo que es un pelín bajo pero razonable para este hardware.

  • Haciendo unas pruebas de carga agresivas, la virtualización parece funcionar aceptablemente bien con la excepción del rendimiento de la red, donde la velocidad es lenta. Otro problema serio es el control del reloj del Guest, ya que el NTP sufre bastante para mantener el reloj razonablemente sincronizado y no siempre lo consigue. Y a mí esa me parece una funcionalidad crítica.

  • Vamos a intentar actualizar el hardware de la máquina virtual de la versión 4 a la versión 7. Como ésto es una operación delicada, hacemos copia primero del directorio donde reside la configuración de la máquina virtual, para poder dar marcha atrás si surgen problemas.

    Al actualizar el hardware me desaparece la tarjeta de red e1000 de la máquina virtual.

    Tras la actualización, hay configuraciones que no puedo tocar porque el cliente que estoy usando no soporta la nueva configuración. No hay forma humana de descargar un cliente nuevo, así que paro el sistema y recupero la copia, para dejarlo todo como estaba.

  • Ahora probamos a instalar las "VMWare Tools" en el Guest. No es arriesgado porque hemos hecho un snapshot ZFS, así que podemos darle para atrás en cualquier momento.

    Entre otras cosas se instala un nuevo driver de red, llamado "vmxnet0". Es de suponer que su rendimiento es mejor que la emulación de una interfaz hardware virtualizada. No obstante, no funciona. El driver está instalado correctamente en "/kernel/drv/vmxnet" y "/kernel/drv/amd64/vmxnet", pero intentar levantar la interfaz ("ifconfig vmxnet0 plumb") no tiene éxito. Un "dladm show-dev" tampoco tiene éxito.

    De todas formas, buscando por Internet parece que el driver "e1000" es la opción recomendada para el kernel Solaris de 64 bits, así que no me preocupo más del asunto.

    Doy para atrás a la instalación de las "Tools" recuperando el snapshot anterior, mediante "zfs rollback".

    Tal vez sería buena idea probar la versión 1.0.9 de VMware Server pero instalando estos drivers. Me parece una versión más pulida que la 2.0.1, tiene fama de ser más rápida, y los problemas que tenía con ella eran de red... Tal vez estos drivers lo solucionasen. Pero llevo ya tres semanas con este asunto y no puedo perder más tiempo. Necesitaría una segunda máquina para hacer pruebas en ella mientras ésta está en producción.

  • El tema de NTP me preocupa, pero de momento puedo vivir con ello. Es algo que ver en el futuro.

  • Otro problema muy feo es el siguiente: VMware Server 1.0.* permite configurar una máquina virtual como "autoarrancable" cuando se reinicia el Host. Esa funcionalidad, básica, no existe en VMware Server 2.0.*. Hay que añadir lo siguiente al final del script de arranque del sistema Host que creamos antes:
    /usr/bin/vmrun -T server2 -h https://127.0.0.1:8333/sdk/ -u USUARIO -p CLAVE start "[standard] PATH.vmx"
    

    De esta forma la máquina virtual se arranca automáticamente cuando arrancamos el Host.

  • Ahora hacemos prueba de carga... y no nos sirve. El rendimiento de la virtualización a nivel de usuario es bueno, pero cuando la CPU está en modo sistema, el rendimiento es penoso. Eso hace que, por ejemplo, bajo carga de disco elevada, el rendimiento de la red sea de risa, teniendo tiempos de "ping" de varios segundos... ¡¡dentro de la misma máquina!!. Es evidente que no puedo poner la máquina en producción bajo estas circunstancias...

    Es de señalar que este problema de rendimiento no se da en otros sistemas como, por ejemplo, emulando MS Windows, ya que su emulación está mucho más refinada (por ser de mayor interés comercial), dispone de drivers nativos, etc.

  • Ya estaba pensando probar VirtualBox (que es de Sun, el fabricante de Solaris) aunque pierda uno de los "cores", cuando veo que OVH ha añadido la opción de instalar un dispositivo KVM físico real a las máquinas dedicadas, por un coste mensual razonable. Probémoslo...


Historia

  • 02/jun/09: ¿Instalación definitiva?

  • 25/may/09: Pruebas de instalación bajo VMWARE.

  • 20/may/09: Llegamos a la última parte, donde intentamos que Solaris arranque de forma nativa.

  • 13/may/09: Primera versión de esta página.



Python Zope ©2009 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS