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

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:

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 build

Pero 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.sh

Para 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/shared

Como 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 "=========================================================="