GNU/Linux >> Tutoriales Linux >  >> Linux

Creación de una imagen personalizada de Red Hat Enterprise Linux 7 para Microsoft Azure

¿Planea ejecutar Red Hat Enterprise Linux (RHEL) en Azure, o lo está considerando, pero quiere crear sus propias imágenes? En este artículo, me centraré en crear una imagen de RHEL 7 para ejecutar en instancias de Azure Mv2 (también conocido como Hyper-V Generation 2). La principal diferencia con una imagen estándar es que usará la interfaz de firmware extensible unificada (UEFI) y, por lo tanto, se requieren opciones adicionales.

Además del enfoque principal en Mv2, también le daré un buen conjunto de comandos iniciales para que pueda automatizar el proceso de creación de esas imágenes y eventualmente integrar ese proceso en su canalización de CI/CD.

La mayoría de estas instrucciones también deberían ser aplicables para crear imágenes de Red Hat Enterprise Linux 8, pero esa versión no era mi enfoque principal.

Configurando el entorno

Como entorno de compilación, Red Hat Enterprise Linux 8 nos brinda el conjunto correcto de herramientas para compilar imágenes de arranque UEFI. Para reproducir todo aquí, necesitará los siguientes paquetes instalados:

  • libvirt-client
  • virt-install
  • libvirt
  • libvirt-daemon-kvm
  • azure-cli (instrucciones aquí)
  • azcopy (instrucciones aquí) en el $PATH (por ejemplo, /usr/bin/ o ~/bin/ )

También necesitará una copia del DVD de binarios de Red Hat Enterprise Linux 7.7, que puede descargar aquí si tiene una suscripción válida de Red Hat. Guarde este DVD como /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso .

Nota: Cualquier otra versión basada en Red Hat Enterprise Linux 7 u 8 debería funcionar, pero este recorrido ha sido probado con 7.7.

Para que lo anterior funcione si está ejecutando en una VM, necesitará KVM habilitado en el host o transferido a la VM. Si desea ejecutar este ejemplo en una máquina virtual remota o en otra canalización de CI/CD, he hecho exactamente eso para poder automatizar el proceso, de modo que pueda ejecutar este headless (sin X, interfaz de usuario gráfica y X reenvío necesario).

Crear una imagen de forma automatizada

Necesitamos algunos paquetes instalados en nuestra imagen, además de algunas configuraciones establecidas, y se recomienda tener instalado el cliente de Azure. Mientras buscaba la mejor manera de instalar este cliente de manera automática, la única opción que encontré fue obtenerlo del repositorio de extras de CentOS 7 (comuníquese conmigo y avíseme si conoce una mejor manera).

Un ejemplo de kickstart.cfg El archivo se puede obtener aquí. Adáptalo a tus necesidades, pero asegúrate de dejar al menos la configuración de red en DHCP.

Construyendo la imagen con el archivo Kickstart y un comando simple

Para construir la imagen: 

$ sudo virt-install \
       --name rhel77 \
       --memory 4096 \
       --vcpus 4 \
       --boot uefi \
       --os-variant rhel7.7 \
       -l /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso \
       --disk size=4 \
       --initrd-inject $(pwd)/kickstart.cfg \
       --extra-args="ks=file:/kickstart.cfg console=tty0 console=ttyS0,115200n8" \
       --graphics=none \
       --network network=default \
       --noreboot

Como se mencionó anteriormente, deberá tener la imagen del DVD en el lugar correcto. Mi ejemplo asume que usted:

  • Tener kickstart.cfg en su $PWD actual .
  • Quiero un disco de 4GB.
  • Está utilizando su libvirt local /Instalación de KVM.
  • No tengo requisitos especiales con respecto a la interfaz de red (estoy usando los valores predeterminados).

Convertir la imagen al formato correcto

Luché por convertir la imagen al formato correcto, pero gracias a mis amigos y a Google, finalmente descubrí el formato requerido:VHD alineado a 1 MB.

La última imagen construida debe ser la correcta:

$ image=$(ls -1tr /var/lib/libvirt/images/rhel*|tail -1)

Use sudo para acceder a la imagen, conviértala a RAW y colóquela en el $PWD actual

$ sudo qemu-img convert -f qcow2 -O raw $image rhel-7.7.raw

Asegúrese de que podamos acceder a él; después de este punto, un "normal" (por ejemplo, el uso no root puede continuar)

$ sudo chown $(whoami) *.raw

Calcula el tamaño de la imagen.

$ MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.7.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB))

Cambiar el tamaño de la imagen.

$ sudo qemu-img resize -f raw rhel-7.7.raw $rounded_size

Convierta la imagen de RAW a VHD y fuerce el tamaño correcto

$ sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.7.raw rhel-7.7.vhd

Creando un grupo

Ahora tiene su propia imagen personalizada de Red Hat Enterprise Linux 7. Probablemente se esté preguntando cómo cargarlo en Azure y usarlo para ejecutar una instancia. Lea más. Como tuve que probar todo mi proceso de compilación, también hice esto.

Siempre necesitará un grupo de recursos en Azure. He elegido westus2 como mi región, pero cualquier otra debería funcionar también (si tienen instancias Mv2). El nombre de mi grupo de recursos es simplemente myresourcegroup . Si desea usar otro nombre, tendrá que reemplazarlo en todos los lugares donde lo usé.

Para crear su grupo, cree un grupo de recursos AZ en westus2 y nombre "myresourcegroup".

$ sudo az group create -l westus2 -n myresourcegroup

Cargar la imagen del disco y convertirla en una imagen de Azure

Para cargar la imagen del disco y convertirla en una imagen de Azure, cree el disco en Azure con el nombre 'rhel-7', en nuestro grupo de recursos creado anteriormente 'myresourcegroup'.

$ sudo az disk delete --name rhel-7 -g myresourcegroup -y

Asegúrate de que sea Hyper-V Gen 2 y un sistema operativo tipo Linux con el tamaño correcto.

$ sudo az disk create --hyper-v-generation V2 -g myresourcegroup -n rhel-7 --os-type Linux -l westus2 --for-upload --upload-size-bytes $(wc -c rhel-7.7.vhd|awk '{ print $1 }') --sku standard_lrs

Necesitas un SASURI para cargar.

$ SASURI=$(az disk grant-access -n rhel-7 -g myresourcegroup --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)

Esto usa azcopy para copiar la imagen (azcopy debe estar en su $PATH en algún lugar)

$ sudo azcopy $(pwd)/rhel-7.7.vhd $SASURI --blob-type PageBlob

Una vez completada la carga, debemos revocar el acceso; de lo contrario, no se podrá usar la imagen del disco.

$ sudo az disk revoke-access -n rhel-7 -g myresourcegroup

Finalmente, márquelo como una imagen del sistema operativo Hyper-V Gen 2.

$ sudo az image create -g myresourcegroup -n rhel-7 --os-type Linux --hyper-v-generation V2 --source rhel-7

Ejecutando la imagen

Uno podría imaginar que en este momento, todo estaba claro y ejecutar una imagen sería fácil. Si tienes todo correctamente en su lugar, sí, eso es cierto. Pero cuando trabajé con este ejemplo, me olvidé por completo del último paso en el párrafo anterior y no marqué la imagen del disco como una imagen de Azure, lo que resultó en que no pude proporcionar la clave SSH o admin-username .

De todos modos, con las instrucciones anteriores, debería estar listo para ejecutar la imagen. El siguiente comando asume que está ejecutando esta herramienta como usuario raíz y utilizando la clave SSH del usuario raíz. Adapta lo que tengo aquí a tus necesidades:

$ sudo az vm create  \
      --resource-group myresourcegroup \
      --location westus2 \
      --name rhel-7 \
      --image rhel-7 \
      --admin-username cloud-user \
      --ssh-key-value @/root/.ssh/id_rsa.pub

Si necesita un diagnóstico de arranque, deberá crear una cuenta de almacenamiento con el nombre "storageaccount123" usando el siguiente comando:

$ sudo az storage account create -n storageaccount123 -g myresourcegroup -l westus2 --sku Standard_LRS

El anterior az vm create el comando debe ampliarse con el siguiente parámetro para registrar los diagnósticos de arranque y los mensajes en la cuenta de almacenamiento que acabamos de crear:

--boot-diagnostics-storage storageaccount123

Nota: No necesita habilitar los diagnósticos de arranque y, si lo hace, definitivamente tendrá que adaptar el nombre de la cuenta de almacenamiento.

Iniciar sesión en la instancia de Azure

Desde az vm create comando, debe obtener una salida que contenga la dirección IP. Ahora debería poder iniciar sesión automáticamente, dado que la clave SSH se proporciona con:

$ ssh cloud-user@<azure-ip>

Conclusión

Antes de explorar las posibilidades de crear imágenes de Red Hat Enterprise Linux 7 para instancias de Azure Mv2 de manera automatizada, no tenía experiencia previa con Azure y, por lo tanto, fue todo un viaje. Todavía no me consideraría un experto en lo que respecta a Azure, y probablemente falten cosas. Me encantaría escuchar sus opiniones para mejorar esta configuración si es necesario.

Los scripts y comandos que usé para este artículo se pueden encontrar aquí. Las solicitudes de extracción son bienvenidas, ¡así como los clones!

¿Quiere probar Red Hat Enterprise Linux? Descárgalo ahora gratis.


Linux
  1. Instale Red Hat Enterprise Linux en modo de texto

  2. Optimización de una imagen ISO de instalación de Red Hat Enterprise Linux

  3. ¿Cómo obtener Red Hat Enterprise Linux gratis?

  4. ¿Qué es Red Hat Linux?

  5. Instalación de IBM DB2 en Red Hat Enterprise Linux

RHEL 6:guía de instalación paso a paso del servidor Red Hat Enterprise Linux

Pasos de instalación de Red Hat Enterprise Linux (RHEL) 8 con capturas de pantalla

Serie Microsoft Azure:creación de una máquina virtual Linux a partir de una imagen personalizada

Instale Red Hat Enterprise Linux Server desde una imagen ISO

Cómo instalar Red Hat Enterprise Linux 8 (RHEL 8)

Trabajar con el kernel en tiempo real para Red Hat Enterprise Linux