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 3GB,
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. Este
taller desarrolla el procedimiento.
- 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-25-26.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
- Los 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á 01-netplan-userv.yaml
- Los
archivos /etc/hosts de las tres máquinas virtuales con nombres hosts-deb1, hosts-deb2, hosts-userv
- Los
archivos /etc/hostname
de las tres máquinas virtuales con nombres hostname-deb1,
hostname-deb2, hostname-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-25-26.tar.md5
conteniendo
el hash md5 del archivo $USER-ev2-aso-24-25.tar
IMPORTANTE: ¡Al
entregar el papel del examen al profesor se
requerirá a este para que genera el md5 de
sellado¡.
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 si
estás en modo práctica, no se hace si estás en modo
PERA
- 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. En la PERA
estará disponible en el disco del puesto).
- 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 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
PERA ).
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)