# SYS-L-101 · Petición, socket, proceso y log

Este paquete crea un único servicio HTTP desechable para observar una petición desde varias interfaces. No contiene una respuesta resuelta ni modifica el repositorio del portfolio.

## Requisitos

- Linux con `curl`.
- Podman ejecutado como usuario normal, Docker Engine en modo rootless o Docker Desktop.
- Acceso a Internet durante el primer build para obtener la imagen base y los paquetes del contenedor.
- Ejecución sin `sudo`.

La documentación oficial explica el [modo rootless de Docker](https://docs.docker.com/engine/security/rootless/) y las opciones de ejecución de [Podman](https://docs.podman.io/en/latest/markdown/podman-run.1.html).

## Alcance de seguridad

El launcher:

- rechaza la ejecución como root;
- valida que Podman sea rootless o que Docker informe rootless/Docker Desktop;
- publica un puerto efímero exclusivamente en `127.0.0.1`;
- elimina todas las capabilities del contenedor y activa `no-new-privileges`;
- utiliza un filesystem raíz de solo lectura, un `/tmp` acotado y límites de procesos, memoria y CPU;
- etiqueta imagen y contenedor con el ID del lab y del intento;
- comprueba esas etiquetas antes de ejecutar `reset` o `destroy`;
- nunca elimina el directorio donde fue extraído.

## Inicio

Extrae el paquete en un directorio temporal fuera del checkout del portfolio:

```bash
attempt_dir="$(mktemp -d -t sys-l-101.XXXXXX)"
tar -xzf sys-l-101-lab.tar.gz -C "$attempt_dir"
cd "$attempt_dir/sys-l-101"
./lab doctor
./lab start
```

Si están instalados ambos runtimes, se prioriza Podman. Para seleccionar uno explícitamente:

```bash
SYS_LAB_ENGINE=docker ./lab doctor
SYS_LAB_ENGINE=podman ./lab doctor
```

## Comandos del launcher

```text
./lab doctor
./lab start
./lab status
./lab endpoint
./lab logs
./lab exec <comando> [argumentos...]
./lab reset
./lab destroy
```

`reset` recrea el contenedor del mismo intento. `destroy` retira únicamente el contenedor y la imagen cuyos nombres y etiquetas coinciden con ese intento.

## Actividad

El enunciado, los comandos de observación, la evidencia requerida y los criterios de aceptación están publicados en la página de `SYS-L-101`. Este README solo documenta el entorno.
