Creación de una imagen Windows 7 para OpenStack

A menudo necesitamos en OpenStack disponer de imágenes diferentes de las que suelen estar disponibles en la red, las cuales suelen ser distribuciones de Linux en su versión servidor.

Sin embargo, si necesitamos instancias Windows en OpenStack sólo encontramos la preparada por Cloudbase para Windows Server 2012.

En este tutorial veremos cómo crear una imagen OpenStack para Windows 7. A grandes rasgos el proceso consiste en crear en nuestro ordenador una máquina virtual configurada para funcionar en OpenStack. A continuación, convertiremos la máquna virtual a formato qcow2. Finalmente, subiremos la imagen qcow2 a OpenStack.

Necesitaremos:

Paso 1. Crear máquina virtual Windows 7

Especificar los parámetros de la máquina virtual

Desde Virtual Manager pulsaremos el botón Crear una máquina virtual nueva

Aparecerá un asistente que iremos siguiendo para crear la máquina virtual. En el primer paso introduciremos el nombre de la máquina virtual, Windows7. Dejaremos el resto de valores predeterminados y pasaremos al paso siguiente.

En el segundo paso pulsaremos el botón Explorar para seleccionar la imagen ISO de nuestro Windows 7. En el desplegable Tipo de SO seleccionaremos Windows y en Versión seleccionaremos Microsoft Windows 7. No obstante, esta información no es relevante.

En el tercer paso, aumentaremos la memoria RAM a 2048 MB. El resto de valores predeterminados los mantendremos y pasaremos al paso siguiente.

En el cuarto paso se especifica el tamaño que va a tener el disco en la máquina virtual. Elegiremos un tamaño de 20 GB y muy importante: Dejaremos desactivada la casilla de verificación Asignar todo el disco ahora. Eso proporcionará dos ventajas:

En el último paso del asistente activaremos la casilla de verificación Personalizar configuración antes de instalar. Esto nos permitirá lo siguiente:

Para configurar el disco, lo seleccionaremos de la lista de la izquierda y desplegaremos las Opciones avanzadas. En Bus de disco seleccionaremos Virtio y pulsaremos en botón Aplicar.

De forma análoga, seleccionaremos la tarjeta de red de la lista de la izquierda. En la lista Modelo de dispositivo seleccionaremos Virtio y pulsaremos el botón Aplicar.

Para añadir una unidad de CD donde cargaremos los drivers VirtIO pulsaremos el botón Añadir hardware. En este formulario realizaremos varios cambios:

Instalación de Windows 7 usando los controladores VirtIO

Una vez finalizada la configuración de creación de la máquina virtual, pulsaremos el botón Iniciar la instalación. Tras unos instantes aparecerá la pantalla siguiente en la que aparecerán el idioma de la instalación, el formato de hora y moneda, y el teclado. Dejaremos los valores predeterminados de Español.

Ahora procederemos con la instalación de Windows y dejaremos los valores predeterminados.

En la pantalla de ¿Qué tipo de instalación desea? seleccionaremos Personalizada (avanzada).

En el paso siguiente observamos que la máquina virtual aún no tiene ningún disco.

A continuación cargaremos el controlador VirtIO. Para ello pulsaremos sobre Cargar controlador. Nos aparecerá un cuadro de diálogo pidiéndonos que indiquemos dónde está el controlador.

Pulsaremos sobre el botón Examinar. En el cuadro de diálogo aparecerán dos unidades de CD. La primera es la que tiene la imagen de Windows 7 que se ésta instalando. La segunda es la que tiene los controladores VirtIO que necesitamos propocionar en este paso. Los controladores de disco están en la carpeta viostor/w7/amd64.

Tras seleccionar el controlador de disco de VirtIO en el cuadro de diálogo aparece el controlador disponible.

Ahora veremos que ya sí aparecen los 20 GB de espacio de disco que seleccionamos en Virtual Manager cuando estábamos creando la máquina virtual de Windows 7. Pulsaremos el botón Siguiente y comenzará el proceso de instalación de Windows 7.

Una vez finalizada la instalación de Windows, hay que especificar el nombre de usuario y el del equipo. A modo de ejemplo usaremos cloud_user y cloud_PC, este valor se deja a discrección.

En cuanto al número de serie, no introduciremos ninguno para que nuestro número de serie no sea el que se utilice a la hora de crear instancias OpenStack. Al dejar la instalación sin número de serie, se pedirá al inicio de cada sesión y será responsabilidad de los usuarios de la instancia OpenStack introducir un número de serie válido (p.e. disponible a través del acuerdo Dreamspark).

Además, desactivaremos la casilla de verificación Activar Windows automáticamente cuando esté conectado. A continuación, pulsaremos el botón Omitir

En el la pantalla de Ayude a proteger el equipo y a mejorar Windows automáticamente seleccionaremos Preguntar más tarde. En el resto de ventanas dejaremos los valores predeterminados.

A continuación vamos a actualizar los controladores que quedan pendientes, como el de red, y el Balloon de aprovechamiento de RAM. Para ajustar estos controladores, iremos al Panel de control y en el bloque _Hardware y Sonido Dispositivos e impresoras_ seleccionaremos Administrador de dispositivos.

Veremos como en la categoría Otros dispositivos aparecen como pendientes de configurar Controladora Ethernet y Dispositivo PCI.

Para actualizar sus respectivos controladores, haremos clic sobre ellos con el botón derecho, seleccionaremos Actualizar software de controlador y en la pantalla siguiente seleccionaremos Buscar software de controlador en el equipo.

Los controladores necesarios están en el CD de VirtIO. Lo seleccionaremos pulsando sobre Examinar y eligiendo la unidad de CD en la que tenemos los controladores VirtIO.

Aparecerá un cuadro de diálogo preguntando si queremos instalar el controlador de red de VirtIO. Marcaremos la casilla de verificación Siempre confiar en el software de “Red Hat, Inc.” y pulsaremos el botón Instalar.

Aparecerá un cuadro de diálogo informándonos que el controlador ha sido instalado correctamente. Repetiremos estos pasos para el Dispostivo PCI. Tras esto, todos los disposivos de nuestra máquina virtual están configurados correctamente.

Por último, configuraremos la red, comprobaremos que funciona correctamente y apagaremos la máquina virtual.

NOTA: Si no puedes navegar correctamente, consulta el Anexo al final de este post.

Desconectar las unidades de CD de la máquina virtual

Lo siguiente que haremos será desconectar las unidades de CD de la máquina virtual, tanto la que tiene la imagen de Windows 7, como la que tiene los controladores VirtIO, ya que no queremos que formen parte de la imagen que vamos a generar para OpenStack. Para ello, pulsaremos el botón Mostrar detalles del hardware virtual de Virtual Manager. Seleccionaremos la primera unidad de CD y pulsaremos el botón Desconectar

Repetiremos este paso para la unidad de CD de VirtIO.

Paso 2. Instalar Cloudbase-init

Iniciamos la máquina virtual para instalar Cloudbase-init. Cloudbase-init permite la inicialización automática de las instancias OpenStack. Se encarga de tareas como expansión del volumen del disco, creación de usuarios, generación de passwords, entre otros. Una vez instalado, se habrá creado un archivo de configuración y un servicio de Windows que se ejecuta al inicio. Descarga Cloudbase-init x64.

En la instalación de Cloudbase-init aceptaremos los valores predeterminados salvo en la especificación del nombre de usuario. Aquí indicaremos nuestro usuario Windows, y debe coincidir con uno existente. En el caso de este tutorial usaremos cloud-user.

Al finalizar el asistente, nos pedirá que si queremos ejecutar sysprep para crear una imagen generalizada, y que al crear instancias sobre ella, el nuevo usuario la configure con sus propias preferencias. No marcaremos esta opción por ahora. Haremos sysprep más adelante.

Cloudbase-init creará un archivo de configuración almacenado en C:\Archivos de programa\Cloudbase Solutions\Cloudbase-Init\conf\cloubase-init.conf\.

Paso 3. Desactivar el cortafuegos y activar conexiones de escritorio remoto

Para poder conectarnos más adelante por escritorio remoto a la instancia de Windows 7 de OpenStack, hay que desactivar el cortafuegos de Windows y permitir la conexión por escritorio remoto.

El cortafuegos lo desactivaremos desde el bloque Sistema y seguridad » Firewall de Windows del Panel de control.

El escritorio remotolo desactivaremos desde el bloque Sistema y seguridad » Sistema del Panel de control. En este caso, marcaremos la opción Permitir la conexiones desde equipos que ejecuten cualquier versión de Escritorio remoto (menos seguro).

Paso 4. Activar sysprep

sysprep prepara la imagen para la duplicación. De esta forma, cuando creemos una instancia a partir de esta imagen, aparecerá la Bienvenida de Windows.

Desde la ventana de Símbolo de sistema ejecutaremos C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown

Paso 5. Subir la imagen a OpenStack

En este paso convertiremos la imagen creada a formato qcow2 y la subiremos a OpenStack. En primer lugar, en nuestro equipo Linux convertiremos la imagen de Windows 7 al formato qcow2, y la comprimiremos usando el parámetro -c. Esto dismuinirá el tiempo de propagación a los nodos de cómputo a la hora de instanciar. Es cierto, que al estar comprimida la imagen aumentarán los requerimientos de CPU a la hora de crear las imágenes, pero en nuestro caso, las ventajas superan los inconvenientes.

Para ello, ejecutaremos lo siguiente:

# qemu-img convert -c -p -f raw -O qcow2 /var/lib/libvirt/images/win7.img ./win7.qcow2

Una vez convertida la imagen la copiaremos al nodo de control de OpenStack y desde él subiremos la imagen a OpenStack con el comando siguiente:

# glance --os-image-api-version 1 image-create --name="Windows 7 (x86_64)" --is-public=True --container-format=bare --disk-format=qcow2 --file=/home/mtorres/Windows7.qcow2

Tras esto la imagen subida a OpenStack ya está disponible y lo podemos comprobar desde Horizon. La imagen está lista para ser instanciada.

Paso 6. Creación de la instancia de Windows 7

En primer lugar, creamos una instancia a partir de la imagen de Windows 7 subida a OpenStack completando los valores como el nombre de la instancia, flavour, número de instancias, y red. Por supuesto, el puerto 3389 para RDP deberá estar abierto para que la instancia admita conexiones de escritorio remoto.

Una vez finalizada la creación de la instancia, asignaremos una IP pública, pero comprobaremos que no es posible conectarnos a la instancia por escritorio remoto. Esto se debe a que como pasamos sysprep antes de convertirla a qcow2 y subirla a OpenStack, la instancia está ejecutándose pero aún está en la pantalla de configuración de la instalación de Windows, por lo que aún no es accesible por Escritorio remoto. Por tanto, tendremos que conectarnos a ella a través abriendo una consola desde OpenStack. Una vez abierta la consola, efectivamente comprobamos que la instancia está ejecutándose y está esperando a terminar de ser configurada antes de estar disponible a través de escritorio remoto.

Ahora tendremos que crear una cuenta de usuario (p.e. mtorres), introducir un número de serie, y seguir todos los pasos habituales de la instalación de Windows.

La figura siguiente ilustra la pantalla inicial de login, en la que aparece la cuenta de usuario cloud-user, creada en la instalación de la máquina virtual, y la creada ahora desde la consola, mtorres.

Una vez finalizada la configuración inicial, ya sí podemos establecer una conexión por escritorio remoto usando la IP flotante que haya asignado OpenStack a esta instancia. La figura siguiente ilustra la conexión a la instancia con el Cliente de escritorio remoto de Microsoft.

CONSEJO: El tema Basic predeterminado ofree retardos en el refresco de pantalla a través de la conexión de escritorio remoto. El uso de un tema menos exigente, como Classic permite tener una interacción más fluida. Puedes cambiarlo en el Panel de control.

Paso 7. Eliminación del número de serie

Si pensamos distribuir la imagen que hemos creado, debemos saber que incluirá el número de serie de Windows 7 que se haya usado en el instalador. En nuestro caso, el propio instalador de Windows 7 lo ha incorporado. Por tanto, es conveniente eliminar dicho número de serie, crear un snapshot a partir de la instancia sin número de serie, y que sea el snapshot creado el nuevo medio para crear instancias.

Primero, debemos consultar el número de serie. Para ello, como abriremos una ventana de Interfaz de comandos y escribiremos lo siguiente para obtener el número de serie:

slmgr /dlv

Esto mostrará un cuadro de alerta con el número de serie en Id. de activación.

Para eliminar el número de serie escribiremos el comando siguiente:

slmgr /upk <<clave>>

A continuación, ya podremos hacer el snapshot. Al instanciar este snapshot e iniciar sesión, se le pedirá al usuario que introduzca un número de serie válido.

Anexo. Configurar MTU (Sólo en el caso de tener problemas de conexión a Internet)

En la creación de algunas imágenes hemos experimentado problemas de conexión a Internet. Para ello, basta comprobar si podemos cargar cualquier página en el navegador. Si no es así, y todos los pasos anteriores han sido llevados a cabo de forma correcta, la solución puede estar en cambiar la Unidad Máxima de Transferencia (MTU).

MTU expresa el tamaño en bytes de la unidad de datos más grande que puede enviarse usando un protocolo de comunicaciones. Un tamaño MTU no adecuado puede derivar en la fragmentación y pérdida de paquetes.

De forma predeterminada, Windows 7, tiene establecido el tamaño en 1500. Esto puede provocar que nuestra máquina virtual experimente problemas de conexión a Internet. En tal caso, el valor adecuado MTU que debemos especificar es 1432. Veamos cómo hacerlo.

Abrir como Administrador una ventana de Símbolo del sistema. Introducimos netsh interface ipv4 show interfaces para conocer la lista de tarjetas de red disponibles en la máquina virtual. En el ejemplo vemos que la que tenemos que configurar la de índice 11, que es la que tiene MTU a 1500.

Para cambiar la MTU y hacer el cambio persistente, escribiremos netsh interface ipv4 set subinterface <indice> mtu=1432 store=persistent. En nuestro caso el valor de índice es 11. La interfaz de comandos devolverá Aceptar si el cambio se ha llevado a cabo con éxito.