#!/usr/bin/env bash
# Construye (si hace falta) y abre una shell en el contenedor del curso.
# El directorio actual se monta en /work.
#
#   run.sh               abre una shell
#   run.sh make qemu     ejecuta un comando dentro del contenedor
#   run.sh --rebuild     reconstruye la imagen
set -euo pipefail

IMAGE=sistemas-operativos
HERE="$(cd "$(dirname "$0")" && pwd)"

if [ "${1:-}" = "--rebuild" ]; then
    docker build -t "$IMAGE" "$HERE"
    shift
elif ! docker image inspect "$IMAGE" >/dev/null 2>&1; then
    docker build -t "$IMAGE" "$HERE"
fi

[ $# -eq 0 ] && set -- bash
# seccomp=unconfined: permite setarch -R (sin ASLR), gdb y strace dentro del contenedor.
# SYS_NICE: permite prioridades de tiempo real (chrt, SCHED_FIFO) en las semanas 3 y 11.
exec docker run --rm -it --name "sistemas-operativos-$$" \
    --security-opt seccomp=unconfined --cap-add=SYS_PTRACE --cap-add=SYS_NICE \
    -v "$PWD":/work -w /work "$IMAGE" "$@"
