Desplegando Oracle Linux 5.x en Azure

A la hora de trabajar con cualquier plataforma es muy importante revisar las tecnologías y las versiones soportadas para poder estar cubiertos por los acuerdos de nivel de servicio y el soporte. Sin embargo, en algunas ocasiones es posible que necesitemos instalar una versión no soportada para realizar alguna prueba que en local no podemos realizar. En el caso de Azure, podéis encontrar el listado de distribuciones Linux y sus versiones soportadas directamente en la documentación.

En este caso en particular, el interés estaba en desplegar una versión antigua de Oracle Linux de la rama 5.x la cual se encuentra totalmente fuera de soporte. Dado que era para un escenario de desarrollo y pruebas como comentaba anteriormente, era aceptable asumir ese riesgo para ver si era posible hacer lo que buscábamos con Azure o no.

Si os encontráis en una situación similar, a continuación tenéis los pasos para configurar vuestra máquina Oracle Linux y poder arrancar máquinas virtuales en Azure.

Instalación de Oracle Linux de forma local en Hyper-V

Para poder subir una versión personalizada de uno de los sistemas operativos soportados en Azure, es necesario crear previamente un disco duro virtual en formato .vhd que contenga nuestra imagen con las personalizaciones que hayamos llevado a cabo. Además de ello, será necesario instalar el agente para Linux de Azure que permita que nuestra máquina virtual se comunique con el resto de la infraestructura, el fabric de forma correcta.

Si nos interesara configurar un Oracle Linux 6.4 o superior, podemos encontrar el paso a paso en la documentación. Como no es nuestro caso nos tocará personalizar un poco el proceso de instalación.

Obteniendo una copia de Oracle Linux

Oracle cuenta con la plataforam “Oracle Software Delivery Cloud” desde donde podemos obtener una ISO de Oracle Linux. Para ello, es necesario estar registrados. Si no queréis proporcionar vuestros datos personales recordad que existen páginas web como 10MinutesMail que os permiten generar uno al vuelo.

A través del buscador podéis llegar rápido a lo que estáis buscando; en mi caso, una 5.8. Para la gestión de las descargas usan el agente de Akamai por lo que necesitaréis instalarlo en el caso de que no lo tengáis ya.

Descarga Oracle Linux 5.8
Descarga Oracle Linux 5.8

Configurando nuestra máquina virtual en Hyper-V

Una vez que tenemos la ISO solo tendremos que crear nuestra máquina virtual en Hyper-V. Actualmente Azure solo soporta máquinas virtuales de la Generación 1 y con formato de disco duro .vhd fijo, no de expansión dinámica. Por lo tanto, a la hora de crearla, tened cuidado de no escoger Generación 2 y .vhdx que son las configuraciones por defecto en las versiones más recites de Hyper-V. Los recursos como la memoria o los procesadores no son clave por lo que escogedlos según dispongáis en vuestro equipo. Finalmente, añadidle al menos un adaptador de red para poder tener conexión a internet y descargar los paquetes necesarios.

Si habéis hecho todo lo anterior y habéis cargado la ISO en la unidad de DVD virtual de la máquina os encontraréis cuando la arranquéis con algo parecido a lo siguiente:

Instalacion Oracle Linux 5.8 en Azure
Instalacion Oracle Linux 5.8 en Azure

La instalación es posible realizarla en modo interactivo o en modo texto. Por comodidad yo escogí en modo texto. El proceso de instalación es bastante standard por lo que con la configuración por defecto en muchos casos es suficiente. La única recomendación es no particionar el disco duro con la partición de Swap. Esto se debe a que el agente de Linux de Azure se encargará de crearnos una partición Swap en el disco duro temporal que toda máquina virtual tiene incluído. Más adelante veremos cómo ajustarlo.

Nota: Como buen ingeniero esto es algo que leí en el manual después de acabar de hacerlo la primera vez por lo que las capturas a continuación no lo reflejan. Tenedlo en cuenta en vuestro caso. La principal diferencia es que el disco temporal es gratuito por lo que toda la información que se escriba en él no tiene coste de almacenamiento o de transacciones, si dejáis el Swap en el disco principal esto sí que se facturará.

A modo de galería, aquí tenéis el paso a paso.

Una vez acabado lo primero que necesitaremos es instalar los componentes de integración de Linux de Hyper-V también conocidos como LIS. Si revisáis la documentación oficial para Oracle sobre Hyper-V comprobaréis que no existen los LIS para la rama 5.x. En este punto será necesario que recordemos que Oracle Linux es al final una modificación de Red Hat Enterprise Linux y consultando la documentación veremos que si existen componentes para la rama 5.x. La versión correspondiente es la 4.1 que podéis descargar directamente desde el centro de descargas de Microsoft.

Los LIS vienen en formato ISO por lo que podemos montarlos directamente en nuestra máquina virtual. Para ello únicamente necesitaremos añadir la ISO como contenido del DVD de la máquina virtual y ejecutar lo siguiente:

# sudo mount /dev/cdrom /media

Si accedemos a la carpeta de media veremos que ahí están los componentes para todas las distribuciones de Linux soportadas.

Componentes LIS para Hyper-V 4.1
Componentes LIS para Hyper-V 4.1

El color de la captura no es la más óptima pero si accedéis a la carpeta de RHEL58 encontraréis el instalador como script de shell. Únicamente será necesario ejecutarlo y esperar a que termine. Tras finalizar reiniciaremos nuestra máquina virtual y ya los tendremos disponibles.

Realizando la configuración necesaria para Azure

Una vez que tenemos la base de nuestra máquina virtual será necesario realizar los ajustes que podemos encontrar en el artículo de la documentación para la rama 6. No todo aplica por lo que lo revisaremos paso por paso.

Lo primero será necesario desinstalar el gestor de redes en el caso de que haya sido instalado durante el proceso de configuración anterior. Para ello, únicamente será necesario lo siguiente:

rpm -e --nodeps NetworkManager

Tras ello, vamos a prepara la configuración de la tarjeta de red. En primer lugar, ajustaremos el contenido del fichero /etc/sysconfig/network con lo siguiente:

NETWORKING=yes
HOSTNAME=localhost.localdomain

Tras ello, le tocará algo similar al fichero /etc/sysconfig/network-scripts/ifcfg-eth0 con el siguiente contenido:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no

El punto 6 de la guía no es aplicable a la versión 5.x de Oracle Linux. De todas formas es recomendable que lo probéis para aseguraros de que realmente esos ficheros no están.

mkdir -m 0700 /var/lib/waagent
mv /lib/udev/rules.d/75-persistent-net-generator.rules /var/lib/waagent/ 
mv /etc/udev/rules.d/70-persistent-net.rules /var/lib/waagent/

Finalmente, para acabar con la parte de la red, nos aseguramos de que la configuración se aplicará en los siguientes reinicios de la máquina definiendo que el servicio de red se arranque automáticamente.

chkconfig network on

Hasta este punto el proceso ha sido similar a la guía; sin embargo a partir de aquí tendremos que alterar un poco el procedimiento. Esto se debe fundamentalmente a que los repositorios oficiales de Oracle no cuentan con los paquetes necesarios para configurar el agente de Linux en Azure: WALinuxAgent y Python26. El agente está desarrollado por Python y no funciona correctamente con la 2.4 instalada por defecto.

Necesitaremos hacer uso de los “Extra Packages for Enterprise Linux” proporcionados por el Project Fedora. Su objetivo es proporcionar un conjunto de paquetes adicionales no disponibles en las distribuciones originales. En este caso, nos interesará Python 2.6.

Los pasos para configurar el repositorio EPEL y descargarnos la versión que necesitamos de Python son los siguientes:

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm
rpm -i epel-release-latest-5.noarch.rpm
yum install python26

Lo siguiente será instalar las dependencias del agente y el software de parted en el caso de que no estuviera ya instalado por defecto.

curl https://bootstrap.pypa.io/get-pip.py | python26
pip2.6 install pyasn1
yum install parted

Una vez que tengamos las dependencias necesarias en nuestro equipo, instalaremos el agente de Linux para Azure. Será necesario obtener el código fuente del repositorio público de GitHub. A día de hoy la versión más reciente es la 2.0.18.

  # wget https://github.com/Azure/WALinuxAgent/archive/WALinuxAgent-2.0.18.tar.gz
tar zxf WALinuxAgent-2.0.17.tar.gz
cp WALinuxAgent-WALinuxAgent-2.0.17/waagent /usr/sbin/
chmod 755 /usr/sbin/waagent

Para que el agente emplee la versión correcta de Python será necesario modificar la cabecera del fichero /usr/bin/waagent

#!/usr/bin/python26

Una vez hecho, instalamos el agente..

waagent -install

Toda la configuración del agente se gestiona a través del fichero /etc/waagent.conf. Será en este punto donde habilitaremos la partición Swap que mencionamos anteriormente. Para ello, modificaremos las siguientes propiedades:

ResourceDisk.Format=y
ResourceDisk.Filesystem=ext3 # RHEL 5 no soporta ext4
ResourceDisk.MountPoint=/mnt/resource
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=2048 ## NOTA: Puedes modificarlo al tamaño que desees.

Para finalizar, nos tocará generalizar nuestro .vhd para borrar información como las claves ssh, la contraseña de root, las cesiones de DHCP, etc.

waagent -deprovision
export HISTSIZE=0
logout

Subiendo nuestro .vhd a Azure

Después de todo lo anterior ya solo nos quedará subir nuestro fichero .vhd a una cuenta de almacenamiento de Azure. Desde dicha cuenta procederemos a crear tantas máquinas virtuales como queramos a partir de nuestra imagen. Para ello es necesario contar con el módulo de Azure para PowerShell que tenéis disponible en la página de descargas.

Tras ello, necesitaremos realizar lo siguiente en nuestra consola de PowerShell:

# Iniciamos sesión en Azure
Login-AzureRmAccount 
# Creamos un nuevo grupo de recursos
New-AzureRmResourceGroup -Name miGrupoRecursos -Location "North Europe"
# Creamos una nueva cuenta de almacenamiento
New-AzureRmStorageAccount -ResourceGroupName migrupoRecursos -Name miAlmacenamiento -Type Standard_LRS -Location "North Europe"
 
# Subimos el fichero .vhd
Add-AzureRmVhd -ResourceGroupName miGrupoRecursos -Destination "https://miAlmacenamiento.blob.core.windows.net/customimages/oracle-linux-5.8-x86_64.vhd" -LocalFilePath "C:\oracle-linux-server-5.8-x86_64.vhd"
MD5 hash is being calculated for the file  C:\oracle-linux-server-5.8-x86_64.vhd.
MD5 hash calculation is completed.
Elapsed time for the operation: 00:32:06
Creating new page blob of size 136365212160...
Detecting the empty data blocks in the local file.
Detecting the empty data blocks completed.
Elapsed time for upload: 00:22:32

Podéis personalizar el contenedor de destino dentro de la cuenta de almacenamiento. En mi caso he escogido un contenedor llamado customimages. Respecto al fichero local será necesario que especifiquéis la ruta correcta dentro de vuestro equipo. El tiempo de subida dependerá del tamaño del .vhd y de vuestra conexión. Una de las cosas buenas es que el comando es capaz de reconocer los bloques vacíos existentes en el disco ahorrándose de esa manera tener que subir partes del fichero que no contienen ningún tipo de información.

Creando nuestra máquina virtual personalziada en Azure

Tras todo este proceso ya podremos disfrutar de lo que estábamos buscando, arrancar la máquina virtual personalizada en Azure. Para crearla os recomiendo la siguiente plantilla de Azure Resource Manager que está preparada justo para este escenario. Es importante que leáis la información disponible en el repostirio para comprender mejor cómo funciona o encontrar la guía para realizarlo con PowerShell.

Espero que os haya resultado útil esta guía paso a paso. Recordad que no está soportada esta configuración por lo que sólo empleadla en caso de necesitar un entorno de desarrollo o pruebas.

Leave a Reply

Your email address will not be published. Required fields are marked *