IES Miguel Romero Esteo - Departamento de
Informática - Linux/Unix
Ansible/
Taller combinado de vboxmanage y Ansible
Comandos:
Protocolo para la prueba de
evaluación:
- Global:
- Puestos de trabajo sin conexión de
red (desconexión físisca del switch del aula)
- Antes de la prueba en
cada puesto de trabajo:
- En el disco local crear una partición
de al menos 1,5GB, formatearla con FS ext4 y etiquetarla
como LOCALBOOT. En su interior crear la estructura de
directorios necesaria e insertar en ellos los archivos
que permitan arrancar el sistema sysresccd GNU/Linux en
modo local.
- En el disco local
crear una partición de al menos 25GB, formatearla con
FS ext4 y etiquetarla como LOCALCONTE. En su interior
cargar los archivos ubicados en esta URL.
- Usuario root
exclusivo del profesor con acceso a traves de password y
par de claves.
- Desactivar la NIC wifi.
- Crear un usuario operador
limpio para cada turno de examen.
- chmod
600
/usr/lib/virtualbox/{VirtualBox,VirtualBoxVM,VBoxHeadless}
- Se cierra el paso a los entornos gráficos
proporcionados por VirtualBox,VirtualBoxVM
y la entrada remota por VDRP vía VBoxHeadless
(inseguro). Se quedan sólo con VBoxSDL como
consola.
- El alumno entrega:
- A) Un archivo
empaquetado de nombre $USER-ev2-aso-24-25.tar
($USER=usuario académico) con los siguientes objetos:
- /home/operador/VirtualBox/*/ansible-*.vbox
(son 3).
- La salida estandar del comando vboxmanage
list natnets
en un fichero de nombre nat-ansible.txt
- shell script crea-nat-ansible y crea-vms-ansible.
- Los archivos /etc/network/interfaces
de las dos máquinas debian con nombres interfaces-deb1,
interfaces-deb2
- El archivo en lenguaje yaml
utilizado con la herramiemta netplan
de ubuntu
para configurar la ip
estática-automática de dicha
máquina. El archivo se
denominará netplan-userv
- Los
archivos /etc/hostname
de las tres máquinas virtuales con nombres
hostname-deb1,
hostname-deb2,
hostname-userv
- Los archivos /etc/hosts de las
tres máquinas virtuales con nombres hosts-deb1, hosts-deb2, hosts-userv
- Par de claves empleadas en los ejercicios de
ansible, con los siguientes nombres:
- parte privada: operador-llave
- parte publica: operador-cerradura.pub
- Fichero de inventario empleado en los
ejercicios de ansible con el nombre operador-inventario.
- Todos los ficheros *.apb
- B) Un archivo de nombre
$USER-ev2-aso-24-25.tar.md5
conteniendo el hash md5
del archivo $USER-ev2-aso-24-25.tar
Enunciado:
Como el alumno sabe, Ansible es un producto de orquestación
de recursos TI. Orquestación es un término muy amplio
que incluye otros como administrar, configurar, gestionar,
actualizar, instalar, etc..; todas esas tareas
encomendadas a los sysadmin y que el alumno conoce muy
bien.
- Con esta práctica el alumno
trabajará en varias fases para alcanzar un objetivo final: Crear una infraestructura de
sistemas orquestada con Ansible
- El sistema anfitrión para
realizar este taller debe ser un sistema Ubuntu Desktop (última versión
estable, o una LTS) con VirtualBox instalado.
Antes de empezar
- En el sistema anfitrión con
identidad de root:
- Crear un usuario de nombre operador
dotado de directorio $HOME con idéntico nombre y shell de
inicio /bin/bash.
- Ejecutar como root: chmod
600 /usr/lib/virtualbox/{VirtualBox,VBoxSDL,VirtualBoxVM}
- Se cierra el paso a los entornos gráficos
proporcionados por VirtualBox,VirtualBoxVM y VBoxSDL. Vamos a
trabajar la entrada remota por
VDRP usando VBoxHeadless.
A partir de este punto, todas las
operaciones que se hagan en la máquina anfitrión se harán
como usuario operador
Preparación de los
discos virtuales
https://www.linuxvmimages.com
o https://www.osboxes.org/
son espacios en la red donde encontrar objetos compatibles con
VirtualBox y VMware pensados para simplificar la puesta en
marcha de máquinas virtuales. De uno de esos lugares se han
descargado los objetos relacionados abajo y se han puesto a
disposición de los alumnos en este
espacio (sólo es accesible desde el aula).
- VDI comprido con un sistema Debian
12 instalado.
- VDI comprido con un sistema Ubuntu
Server 24.04 instalado.
Descagar los archivos anteriores en el
directorio $HOME/VirtualBox/VDIs
(crearlo si no existe) y realizar las siguientes operaciones.
- Verificar la integridad de los
objetos con los recursos proporcionados en el lugar de la
descarga (cadenas md5 o cualquier otro).
- Descomprimir los archivos.
- Modificar
los nombres originales de los archivos vdi
para normalizarlos de la siguiente forma:
- S.O. Debian GNU/Linux: ansible-deb-disco.vdi
- S.O. Ubuntu Server GNU/Linux: ansible-userv-disco.vdi
- Hacer las operaciones necesarias para
que, partiendo de los dos archivos anteriores, nos
queden estos tres archivos en el directorio $HOME/VirtualBox/VDIs:
ansible-deb1-disco.vdi
(resultado de mover ansible-deb-disco.vdi)
ansible-deb2-disco.vdi
(resultado de copiar ansible-deb1-disco.vdi)
ansible-userv-disco.vdi
- Haciendo uso del comando vboxmanage
internalcommands
modificar el UUID de ansible-deb2-disco.vdi para
evitar que colisione con ansible-deb1-disco.vdi
Creación del
entorno de red
Crear un shell-script en lenguaje bash de
nombre crea-nat-ansible
que haga lo siguiente:
En caso de que exista, elimina la red NAT de
nombre nat-ansible
y la vuelve a crear con las siguientes especificaciones:
- Nombre: nat-ansible
- CIDR: 10.20.30.0/24
- DHCP: Activado
- Reenvío de puertos:
- IP-anfitrión:2260 -> 10.20.30.60:22
- IP-anfitrión::2270 -> 10.20.30.70:22
- IP-anfitrión::2280 -> 10.20.30.80:22
Verificar la existencia de alguna red sólo-anfitrión.
En caso afirmativo mostrar por la salida estandar los nombre
de las mismas. En caso negativo crear una red sólo-anfitrión
con los parámetros por defecto y mostrar el nombre de la misma
por la salida estandar.
Creación de las
máquinas virtuales
Crear un
shell-script en lenguaje
bash que
responda a estas especificaciones:
NAME
crea-vm-ansible
- Crea máquinas virtuales con algunas especificaciones no
configurables.
SYNOPSIS
crea-vm-ansible
VM-NAME SO-TYPE VDI-NAME HOSTONLY-NAME
DESCRIPCION
Crea una máquina virtual con las
siguientes especificaciones:
- Nombre
de la máquina virtual:
$VM-NAME
- Directorio
base:
$HOME/VirtualBox
(OJO!.
En
la consola, el
comando
vboxmanage
escapa el
caracter $. No
se puede usar
la variable de
entorno $HOME)
- SO: $SO-TYPE
- Tamaño
de la memoria RAM: 1024
Mb.
- Núcleos
de CPU: 2
- Red:
- Adaptador
NIC1
conectado a la red NAT
nat-ansible
- Adaptador
NIC2
conectado
a la red $HOSTONLY-NAME
- Almacenamiento:
- Controlador
SATA
- Nombre:
$VM-NAME-sata
- Número
de puertos: 4
- Conectar
al puerto 0 el disco
virtual $HOME/VirtualBox/VDIs/$VDI-NAME
- Audio:
Deshabilitar
- Puertos
serie: Deshabilitar
todos (son 4)
Haciendo
uso del shell-script
crea-vm-ansible crea las siguientes
máquina virtuales
:
Máquina 1
- Nombre de
la máquina virtual: ansible-userv
- SO: Ubuntu
(64-bit)
- VDI:
ansible-userv-disco.vdi
Máquina 2
- Nombre de
la máquina virtual: ansible-deb1
- SO: Debian
(64-bit)
- VDI: ansible-deb1-disco.vdi
Máquina
3
- Nombre de
la máquina virtual: ansible-deb2
- SO: Debian
(64-bit)
- VDI: ansible-deb2-disco.vdi
Puesta a punto de
los sistemas operativos en las tres máquinas
(No es obligatorio pero conviene seguir
la secuencia establecida aquí abajo)
- Los sistemas instalados en los
discos cuentan con un usuario root
y un usuario ordinario, este último de nombre igual a la
distro (debian/ubuntu) y con password idéntica al nombre,
ambos usuarios ordinarios están registrados en el subsistema
sudoers con privilegios de root. La palabra de paso del usuario root
es linuxvmimages.com. En caso de dudas o problemas
con las passwords consultar esta
página
- Las tareas que se describen a continuación se harán
accediendo a las VMs vía ssh apuntando a la IP
asignada en la red sólo-anfitrión. ¡Hay que
averiguarla antes de empezar!.
- Modificar el HOSTNAME de los tres sistemas para hacerlos
coincidir con el nombre de la VM.
- Configuración de teclado, lenguaje,
codificación de caracteres y zona horaria.
- Para configurar estos cuatro
aspectos de los sistemas el alumno se remitirá al tema que
los trata estos conceptos correspondiente al primer
trimestre. En cualquier caso téngase en cuenta la
presencia del paquete console-data y el
comando loadkeys. Antes de realizar ninguna operación verificar el
estado inicial, es posible que haya que tocar nada.
- En todos los sistemas se necesita
cliente y servidor openssh. Hacer lo necesario
para proveerlo en caso de no existir.
- Asignar IP estáticas-automáticas a
los tres sistemas en la RedNat 10.20.30.0/24 de VBox:
- ansible-userv:10.20.30.60 (atentos a la herramienta netplan
de canonical y sus archivos asociados)
- ansible-deb1:10.20.30.70 (procedimiento tradicional basado en
/etc/network/interfaces)
- ansible-deb2:10.20.30.80
(procedimiento tradicional basado
en /etc/network/interfaces)
- Modificar el HOSTNAME de los tres sistemas para
hacerlos coincidir con el nombre de VM.
- En los tres sistemas registrar los
nodos en /etc/hosts con los siguientes
nombres:
- 10.20.30.60 nodo-0 ansible-n0
ansible-userv
- 10.20.30.70 nodo-1 ansible-n1
ansible-deb1
- 10.20.30.80 nodo-2 ansible-n2
ansible-deb2
- En caso de no existir,
Instalar ansible desde los
repositorios, en la máquina ansible-userv
- En caso
de no existir,
instalar python
desde los
repositorios
en las
máquinas debian.
Debe ser una
versión
compatible con
la instalada
en la máquina
userv.
- Insertar el usuario operador
en nodo-0. Debe estar dotado de
$HOME, passwd
y una shell bash para
interactuar con el sistema.
- El usuario operador
de nodo-0 necesita
tener en su poder la parte privada de una par de
claves, cuya parte pública, debe residir en el
lugar adecuado de nodo-1 y
nodo-2,
de tal forma que operador
pueda acceder a ellos como root.
Hacer las operaciones necesarias para dar
cumplimiento a esta especificación.
- En este punto, crear copias de
seguridad de los vdi,s por si hay que dar
marcha atrás en el desarrollo de las tareas con ansible (no hacerlo en modo prueba de
evaluación).
Ansible entra en
acción
Antes de proceder
téngase en cuenta que ansible
ha sido instalado desde los repositorios de una distro, con lo
cual, el despliegue de archivos sobre el sistema de ficheros es
distinto al que se obtuvo con la instalación manual descrita en ansible_director.pdf
(podría no haberse hecho manualmente dependiendo de las
instancias de AWS usadas), ahora, entre otras cosas, se cuenta
con varios ficheros por defecto, un despliegue disperso por todo
el árbol de directorios (usar dpkg -L
si se quiere averiguar dónde está cada cosa) y una notable
ampliación del catálogo de módulos disponibles (verifíquese con
el comando help
invocado desde el prompt que proporciona ansible-console).
Se aconseja al alumno que antes de insertar
lineas de texto en los playbooks sin más, lo cual, le obligará a posteriori
a ir depurando por el procedimiento de ejecución->error->depuración
y vuelta a empezar, utilice al comando ansible
para probar prototipos de argumentación de módulos antes de
llevar la versión definitiva al fichero de texto. Esto le
ahorrará tiempo y malos ratos.
Como el alumno sabe, los
modificadores -i -u --key-file
del comando ansible-playbook permiten a un
usuario sin privilegios actuar como root
en las máquinas objetivo, dicho lo cual..... hacer
login al nodo-0 como operador
y, manteniendo esta identidad, realizar las siguientes
operaciones:
- Crear el inventario de ansible de
acuerdo a las siguientes especificaciones:
- Ubicación: $HOME/ansible/
- Nombre: operador-inventario
- El nodo de control es nodo-0
- Los nodos administrados son nodo-1
y nodo-2
- Insertar entradas en el
inventario que permitan actuar sobre los dos nodos como
grupo y de forma independiente en cada uno
- Crear un directorio de nombre $HOME/ansible/playbooks/
y en su interior crear los playbooks descritos a
continuación:
- Nombre: hostname-nodo-1.apb
- Función: Modifica el HOSTNAME
de 10.20.30.70 por ansible-n1.
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: hostname-nodo-2.apb
- Función: Modifica el HOSTNAME
de 10.20.30.80 por ansible-n2.
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: dnssetup.apb
- Función: En los dos nodos
administrados establece como servidor DNS primario 1.1.1.1
y secundario 8.8.8.8
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: repositorysetup.apb
- Antes de proceder con este
playbook verifica que el archivo http://asir.sudo.es/export/sources.list
apunta a los repositorios de la versión de Debian de
los nodos 1 y 2 (en el
momento de redactar este párrafo ese archivo apunta
a Debian11 -bullseye-) En caso
contrario informa al profesor para que lo corrija.
- Función: En nodo-1
copia /etc/apt/sources.list
a /etc/apt/sources.list.old y
sustituye /etc/apt/sources.list por http://asir.sudo.es/export/sources.list.
En nodo-2 copia /etc/apt/sources.list
a /etc/apt/sources.list.old y
sustituye /etc/apt/sources.list por http://asir.sudo.es/export/sources.list.
En ambos nodos sincronizar la cache apt con los nuevos
repositorios.
- Indicaciones: El módulo shell
para hacer la copia de seguridad y el módulo get_url
para descargar el archivo de la red y posicionarlo en su
sitio.
- Nombre: xserverdelete.apb
- Función: Elimina de los nodos
el entorno gráfico en caso de que exista.
- Indicaciones: Se trata de
eliminar los paquetes con el prefijo xserver*
y todas sus dependencias en caso de que existan. Con
ello aseguramos un poco más la máquina.
Al finalizar el
taller
- Adquirir la identidad de root
en la máquina anfitrión.
- chmod 755
/usr/lib/virtualbox/{VirtualBox,VBoxSDL,VirtualBoxVM}
- chmod u+s,g+s
/usr/lib/virtualbox/{VBoxSDL,VirtualBoxVM}
- Eliminar de forma recursiva el
usuario operador (si se estima
conveniente, el alumno decide)