# Plan: Dockerfile user-agnostic con sudo ## Context El Dockerfile hardcodea el usuario `aleleba` y no crea la imagen para múltiples usuarios. Cuando se ejecuta con `HOME_USER=aleleba-telus`, el entrypoint.sh intenta sourcear `/home/aleleba-telus/.bashrc` que no existe → "Permission denied". **Objetivo:** Instalar todo como root en paths globales. Cualquier `HOME_USER` funciona — el entrypoint crea el usuario, le da sudo, y copia la configuración. ## Cambios (solo 3) ### 1. Eliminar creación hardcoded de usuario (líneas 7-11) Eliminar estas líneas del Dockerfile: ```dockerfile RUN sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER} RUN sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null USER ${HOME_USER} WORKDIR /home/${HOME_USER} ``` El entrypoint.sh ya hace todo esto al runtime: - Crea el usuario si no existe (línea 56) - Le da sudo (línea 58) - Copia `/usr/bin/.bashrc` al home del usuario (línea 99) ### 2. Mover `.bashrc` a global (líneas 172-179) Cambiar todos los `~/.bashrc` a `/usr/bin/.bashrc`: ```bash # Antes RUN echo "PATH=..." | sudo tee -a ~/.bashrc RUN echo "export JAVA_HOME=..." | sudo tee -a ~/.bashrc RUN echo "export ANDROID_HOME=..." | sudo tee -a ~/.bashrc RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a ~/.bashrc RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a ~/.bashrc RUN echo "export EMSDK_QUIET=1" | sudo tee -a ~/.bashrc RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a ~/.bashrc RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a ~/.bashrc # Después — todo a /usr/bin/.bashrc RUN echo "PATH=..." | sudo tee -a /usr/bin/.bashrc RUN echo "export JAVA_HOME=..." | sudo tee -a /usr/bin/.bashrc RUN echo "export ANDROID_HOME=..." | sudo tee -a /usr/bin/.bashrc RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a /usr/bin/.bashrc RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a /usr/bin/.bashrc RUN echo "export EMSDK_QUIET=1" | sudo tee -a /usr/bin/.bashrc RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a /usr/bin/.bashrc RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a /usr/bin/.bashrc ``` El entrypoint.sh ya se encarga de copiar `/usr/bin/.bashrc` a cada home. ### 3. Limpiar redundancias (líneas 155-159) Eliminar comentarios de "already installed" — no aportan valor. ## Todas las herramientas siguen disponibles Nada cambia en las instalaciones — todo está en paths globales: | Herramienta | Dónde | |---|---| | `code` | `/usr/bin/code` (base image) | | `docker` | `/usr/bin/docker` | | `docker-compose` | `/usr/local/bin/docker-compose` | | `gh` | `/usr/bin/gh` | | `node`/`npm`/`nvm` | `/usr/local/bin/` + `/root/.nvm` | | `python3`/`pip` | `/usr/bin/python3` | | `pandas`/`numpy`/etc | `pip install` global | | `kubectl` | `/usr/bin/kubectl` | | `flux` | `/usr/bin/flux` | | `conan` | `pip install` global | | `emsdk` | `/emsdk` | | `android-sdk` | `/opt/android-sdk` | | `claude` | `/usr/local/bin/claude` | Los binarios están en `/usr/bin` y `/usr/local/bin` — paths que **cualquier usuario** puede usar. Solo cambia que ya no está restringido al usuario `aleleba`. ## Verificación 1. `docker build` — sin errores 2. `docker run -e HOME_USER=aleleba` — funciona (mismo usuario) 3. `docker run -e HOME_USER=aleleba-telus` — funciona (nuevo usuario, sin permission denied) 4. Dos contenedores con diferente `HOME_USER` coexisten 5. Cada usuario tiene sudo: `sudo apt-get update` funciona 6. Todos los binarios accesibles: `code`, `docker`, `node`, `python3`, `adb`, `emcc`, `claude`, `gh`, `kubectl`