4 Práctica 01
4.1 Directorios de tu cuenta
En el laboratorio Linux de la EIF, crea el directorio ~/pst2. Aquí trabajarás en todo lo relacionado con la asignatura. Si vas a trabajar en tu propio ordenador, es conveniente que uses las mismas estructura, nombres de ficheros y directorios.
Copia en ~/pst2 los ficheros tgz con el laboratorio Kathará lab01 y con el código fuente de PDRouter. Descomprime. Deberán quedar en ~/pst2/lab01 y ~/pst2/pdrouter. Puedes usar el comando de la shell de Linux tree para revisar la estructura.
Crean el directorio ~/pst2/practica01.
4.2 Documentación básica sobre Kathará
Repasa con cuidado el documento uso básico de Kathará y asegúrate de haberlo entendido bien.
4.3 Descripción de lab01

4.3.1 Direcciones IP
hub1 pc1 (200.0.0.10)
pc4 (200.0.0.40)
r1:eth0 (200.0.0.1)
r3:eth0 (200.0.0.3)
hub2 r1:eth1 (201.0.0.1)
r2:eth0 (201.0.0.2)
hub3 r2:eth1 (202.0.0.2)
r3:eth1 (202.0.0.3)
pc2 (202.0.0.20)
hub4 r2:eth2 (203.0.0.2)
pc3 (203.0.0.30)
4.3.2 Rutas
Rutas estáticas configuradas en /etc/network/interfaces de cada router:
| Router | Red destino | Via | Interfaz |
|---|---|---|---|
| r1 | 202.0.0.0/24 | 201.0.0.2 | eth1 |
| r1 | 203.0.0.0/24 | 201.0.0.2 | eth1 |
| r2 | 200.0.0.0/24 | 201.0.0.1 | eth0 |
| r2 | 202.0.0.0/16 | 201.0.0.1 | eth0 |
| r2 | default | 202.0.0.3 | eth1 |
| r3 | 201.0.0.0/24 | 200.0.0.1 | eth0 |
| r3 | 203.0.0.0/24 | 202.0.0.2 | eth1 |
| r3 | default | 202.0.0.2 | eth1 |
Encontrarás esta misma información:
En este documento pdf
En el subdirectorio docs del lab.
4.4 Instalación de PDRouter en el lab
El fichero lab01 contiene casi todo lo necesario para el funcionamiento del laboratorio.
Para que todo funcione es necesario además PDRouter. Tendrás que compilarlo y llevarlo a lab01/shared.
Como sabes, para compilar un programa en Rust normalmente bastaría con hacer
cargo buildPero esto genera un binario que depende de la biblioteca glibc del sistema, y los contenedores Docker de Kathará no incluyen esta librería. Para resolver este problema, generaremos un ejectuble enlazado estáticamente con musl.
musl es una implementación ligera de la biblioteca estándar de C para sistemas Linux, alternativa a glibc. Es exactamente lo que necesitamos. Está especialmente orientada a generar ejecutables pequeños y puede utilizarse para crear binarios enlazados estáticamente, reduciendo su dependencia de las bibliotecas del sistema donde se ejecuten.
En el laboratorio de la EIF no podemos usar las herramientas habituales para compilar de esta forma, así que lo haremos dentro de un contenedor Docker preconfigurado para esta tarea.
Para compilar PDRouter con musl en este contenedor, ejecuta
cd ~/pst2/pdrouter
./compila_contenedor.shPara copiar el ejecutable de PDRouter a la carpeta shared de lab01, de forma que todos los hosts del lab la tengan disponible en /shared, ejecuta
cp ~/pst2/pdrouter/target/x86_64-unknown-linux-musl/debug/router ~/pst2/lab01/sharedComo compilar y llevar a shared lo vas a realizar a menudo, es conveniente que lo guardes en un script de shell. P.e. en ~/pst2/bin/deploy.sh. Recuerda ponerle permisos de ejecución.
4.5 Puesta en marcha de PDRouter
Lanza el laboratorio Kathará
Sugerencia: usa un escritorio de Ubuntu solo para Kathará. Ordena los terminales en el escritorio para localizarlos fácilmente. Por ejemplo, routers en la parte superior del escritorio y hosts en la inferior. De izquierda a derecha.
Entra el el directorio /shared de uno de los router y observa el contenido del fichero lanza_pdrouter.sh.
Ejecuta lanza_pdrouter.sh en todos los routers del lab.
Comprueba que puedes hacer ping entre dos o tres hosts.
Ejecuta los test de integración de PDRouter, como indica el documento uso básico de Kathará.
4.6 Personalización de PDRouter
Modifica el código fuente de PDRouter para que el mensaje de bienvenida no sea
Router listo. Escribe ‘help’ para ver los comandos disponibles.
Sino
PDRouter versión de Juan García listo. Escribe ‘help’ para ver los comandos disponibles.
Reemplazando Juan García por tu nombre.
Usa el comando grep para saber qué fichero tienes que modificar.
grep "hola mundo" *Busca la cadena hola mundo en todos los ficheros del directorio actual. Considera que mayúsculas y minúsculas son diferentes (case sensitive).
grep -i "hola mundo" *Busca la cadena hola mundo en todos los ficheros del directorio actual. Considera que mayúsculas y minúsculas son iguales (case insensitive).
grep -iR "hola mundo" *Busca la cadena hola mundo en todos los ficheros del directorio actual y en sus subdirectorios. Considera que mayúsculas y minúsculas son iguales (case insensitive).
4.7 Instalación en tu ordenador
En los laboratorios docentes de la EIF ya tienes listo todo lo necesario para esta práctica. Pero si quieres instalar Kathará en tu propio ordenador, ejecuta este script:
#!/usr/bin/env bash
set -euo pipefail
echo "=== 1. Actualizando índice e instalando dependencias de Docker ==="
sudo apt update
sudo apt install -y ca-certificates curl gnupg
echo "=== 2. Configurando el repositorio oficial de Docker ==="
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg --yes
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
echo "=== 3. Instalando Docker Engine ==="
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "=== 4. Añadiendo usuario al grupo docker ==="
sudo usermod -aG docker "$USER"
echo "=== 5. Añadiendo repositorio PPA e instalando Kathará ==="
sudo add-apt-repository -y ppa:katharaframework/kathara
sudo apt update
sudo apt install -y kathara
echo ""
echo "=========================================================="
echo " ¡Instalación finalizada con éxito!"
echo "=========================================================="
echo "Para aplicar los cambios del grupo 'docker' sin reiniciar la sesión, ejecuta:"
echo " newgrp docker"
echo "Y comprueba el estado con:"
echo " kathara check"
echo "=========================================================="