Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Recorrido · SistemasSYS-L-101

Sistemas · SYS-L-101 · Laboratorio · EC

Seguir una petición desde curl hasta el proceso y el log

Un servicio HTTP mínimo responde dentro de un contenedor. Debes seguir una petición real desde el cliente hasta el socket en escucha, el proceso que la atiende y el evento que deja en el log.

Contenido de la actividad

EC · Contenedor desechable ejecutado con Podman rootless, Docker rootless o Docker Desktop.

Capacidad

Observar una misma operación desde varias interfaces y construir una explicación causal sin modificar el host ni confundir aislamiento con una máquina virtual.

Enunciado

Arranca el servicio preparado, formula una predicción, ejecuta una petición correlacionada y reúne tres observaciones independientes que permitan reconstruir el recorrido y sus límites.

Estado inicial

  • Paquete autocontenido con Containerfile, servicio Python y launcher de alcance validado.
  • El runtime asigna un puerto efímero ligado a 127.0.0.1; no se abre una interfaz externa.
  • El servicio expone /health y /trace, y registra eventos estructurados en stdout.
  • No hay un fallo oculto: el objetivo es aprender a relacionar vistas del mismo estado.

Límites del sandbox

  • Extrae el paquete en un directorio creado para el intento, nunca dentro de este repositorio.
  • Ejecuta el launcher como usuario normal y no antepongas sudo.
  • El launcher rechaza Docker Engine rootful; acepta Podman rootless, Docker rootless o Docker Desktop.
  • No publiques el endpoint, no cambies el bind de loopback y no uses credenciales reales.
  • La limpieza valida etiquetas y nombres exactos antes de retirar el contenedor o la imagen.

Fases de trabajo

1. Preparar un intento aislado

Separar el sistema objetivo del portfolio y obtener un estado reiniciable.

  1. Descarga el paquete y colócalo en un directorio desde el que puedas extraerlo.
  2. Crea un directorio temporal nuevo y entra en la carpeta extraída.
  3. Ejecuta el diagnóstico antes de construir o iniciar recursos.
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

2. Predecir y arrancar

Declarar el recorrido esperado antes de mirar todas las salidas.

  1. Dibuja una primera predicción con host, runtime, puerto publicado, contenedor, socket, proceso y aplicación.
  2. Inicia el intento y conserva el ID, el runtime y el endpoint que muestra el launcher.
  3. Comprueba el estado sin interpretar todavía que «en ejecución» equivale a servicio sano.
./lab start
./lab status
./lab endpoint

3. Correlacionar cliente, socket, proceso y log

Observar la misma operación mediante interfaces diferentes.

  1. Asigna un ID a la petición y conserva el verbose de curl.
  2. Observa el socket dentro del contenedor y registra dirección, puerto y estado.
  3. Observa el árbol o la tabla de procesos y relaciona el PID con el programa.
  4. Consulta los logs del runtime y localiza el evento con el mismo ID de petición.
  5. Para cada salida escribe qué confirma y qué sigue sin demostrar.
endpoint="$(./lab endpoint)"
request_id="manual-$(date +%s)"
curl --verbose --header "X-Request-ID: $request_id" "$endpoint/trace"
./lab exec ss -ltnp
./lab exec ps -eo pid,ppid,user,stat,args
./lab logs

4. Reiniciar y retirar

Demostrar que el estado es desechable y que la limpieza tiene alcance exacto.

  1. Registra el identificador actual del contenedor.
  2. Reinicia el intento y comprueba qué estado cambió y cuál se conservó.
  3. Destruye los recursos del intento y confirma que el launcher ya no encuentra el contenedor.
./lab reset
./lab status
./lab destroy
./lab status

Evidencia que debes conservar

  • Expediente completado con objetivo, estado inicial e identificador del intento.
  • Predicción inicial y mapa corregido del recorrido.
  • Tres fragmentos mínimos de salida: socket, proceso y log, además del verbose relevante de curl.
  • Interpretación de cada fragmento y una afirmación que todavía no permite sostener.
  • Evidencia del reset o destroy y conclusión final.

Criterios de aceptación

  • El paquete se extrae en un directorio temporal fuera del checkout del portfolio y se ejecuta sin sudo.
  • El puerto se publica únicamente en loopback y el contenedor descarta capacidades, usa filesystem de solo lectura y limita recursos.
  • La misma petición se identifica de forma inequívoca en la salida del cliente y en el log del servicio.
  • Las observaciones de socket, proceso y log se interpretan por separado, sin afirmar que una sola demuestra la salud completa.
  • El mapa diferencia el proceso del host, el runtime, el espacio de red del contenedor y la aplicación.
  • El reinicio o la destrucción actúan solo sobre los recursos etiquetados con el ID del intento.

Decisiones abiertas

  • Usar Podman rootless, Docker rootless o Docker Desktop según el entorno disponible.
  • Representar el mapa como diagrama, tabla o texto estructurado.
  • Elegir /proc como observación adicional del proceso, sin sustituir las tres evidencias mínimas.

Materiales

Se guarda solo en este navegador. Puedes descargarlo para enviarlo a Codex junto con los materiales que hayas completado.

Sin borrador guardado.

Revisión y reinicio

Revisión: Codex debe comparar la evidencia con estos criterios, señalar primero el supuesto no demostrado y proponer una sola comprobación siguiente. No hay una solución oficial publicada.

Reinicio: Ejecutar ./lab reset para recrear únicamente el contenedor del intento o ./lab destroy para retirar su contenedor e imagen etiquetados.

Pistas graduadas

Pista 1 · Conserva un identificador común
  • La cabecera X-Request-ID permite localizar la misma petición en dos perspectivas.
  • No pegues todo el log: conserva el evento mínimo que comparte ese identificador.
Pista 2 · Pregunta quién posee cada vista
  • curl observa como cliente; ss consulta sockets; ps o /proc muestran procesos; el runtime conserva stdout.
  • Que dos herramientas muestren información relacionada no significa que consulten la misma interfaz.
Pista 3 · Distingue publicación y escucha
  • El puerto del host y el puerto dentro del contenedor pueden ser distintos.
  • Anota en qué espacio de red existe cada dirección antes de unirlas en el mapa.