Compare commits

...

6 Commits

Author SHA1 Message Date
47b624b708 Add user number be agnostic. 2026-07-12 21:50:45 +00:00
6682a59f53 fix: ensure user's home directory exists before writing .bashrc and update version to 3.2.25 2026-07-11 01:59:59 +00:00
3b1a175eac fix: install VS Code from Microsoft's direct download endpoint instead of apt repo
The apt repo at packages.microsoft.com/repos/vscode does not publish amd64
and arm64 .deb packages atomically, so the arm64 build in CI could pick up
an older VS Code version than amd64 when both platforms build in the same run.

Switch to downloading the .deb directly from
update.code.visualstudio.com/latest/linux-deb-{arch}/stable, the canonical
"always latest" endpoint, and resolve dependencies via apt-get install -f.

Also add an explicit docker/setup-qemu-action step to the workflow so arm64
emulation is version-pinned rather than relying on the runner's default
binfmt registration.
2026-07-03 16:39:24 +00:00
69e52bcac1 fixing chown. 2026-07-03 04:44:16 +00:00
9a998f3e0c Updating version of vscode. 2026-06-16 01:54:51 +00:00
48ca077a44 Updating VSCode to lastes, updating to version 3.2.21 2026-02-02 19:32:30 +00:00
5 changed files with 50 additions and 10 deletions

View File

@@ -11,6 +11,9 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v1

View File

@@ -29,13 +29,16 @@ RUN curl -sL https://aka.ms/DevTunnelCliInstall | bash
#Instalando VSCode #Instalando VSCode
RUN ARCH="$(dpkg --print-architecture)" \ RUN ARCH="$(dpkg --print-architecture)" \
&& case "${ARCH}" in \
amd64) VSCODE_ARCH="x64" ;; \
arm64) VSCODE_ARCH="arm64" ;; \
*) echo "Unsupported architecture: ${ARCH}" >&2; exit 1 ;; \
esac \
&& curl -fsSL "https://update.code.visualstudio.com/latest/linux-deb-${VSCODE_ARCH}/stable" -o /tmp/vscode.deb \
&& (sudo dpkg -i /tmp/vscode.deb || true) \
&& sudo apt-get update \ && sudo apt-get update \
&& sudo apt-get install -y gnupg2 \ && sudo DEBIAN_FRONTEND=noninteractive apt-get install -f -y \
&& sudo apt-get install -y software-properties-common \ && rm -f /tmp/vscode.deb
&& sudo wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - \
&& sudo add-apt-repository "deb [arch=${ARCH}] https://packages.microsoft.com/repos/vscode stable main" \
&& sudo apt-get update \
&& sudo DEBIAN_FRONTEND=noninteractive apt-get install -y code
#Making home writable #Making home writable
RUN sudo chmod -R a+rwX /home RUN sudo chmod -R a+rwX /home

View File

@@ -5,6 +5,13 @@ if [[ -z "${HOME_USER-}" ]]; then
HOME_USER="vscode" HOME_USER="vscode"
fi fi
# Detectar UID/GID del volumen montado en /home/${HOME_USER} (si ya existe),
# permitir override explícito vía HOST_UID/HOST_GID, y por defecto usar 1000.
DETECTED_UID=$(stat -c '%u' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
DETECTED_GID=$(stat -c '%g' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
TARGET_UID="${HOST_UID:-$DETECTED_UID}"
TARGET_GID="${HOST_GID:-$DETECTED_GID}"
if ! grep -q "HOME_USER=" /etc/environment; then if ! grep -q "HOME_USER=" /etc/environment; then
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment" sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment"
fi fi
@@ -48,6 +55,13 @@ sed 's/^USER_ENV_//' |
# Append the result to /usr/bin/.bashrc # Append the result to /usr/bin/.bashrc
while IFS= read -r line while IFS= read -r line
do do
# Ensure the user's home directory exists before writing .bashrc
if [ ! -d "/home/${HOME_USER}" ]; then
sudo mkdir -p "/home/${HOME_USER}"
sudo chown root:root "/home/${HOME_USER}"
sudo chmod 755 "/home/${HOME_USER}"
fi
# Check if the current user is root # Check if the current user is root
if [ "$(id -u)" = "0" ]; then if [ "$(id -u)" = "0" ]; then
echo "" >> /usr/bin/.bashrc echo "" >> /usr/bin/.bashrc
@@ -59,8 +73,9 @@ do
done done
USER="$HOME_USER" USER="$HOME_USER"
if ! id -u $HOME_USER > /dev/null 2>&1; then if ! id -u "$HOME_USER" > /dev/null 2>&1; then
sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER} sudo groupadd -g "${TARGET_GID}" "${HOME_USER}" 2>/dev/null || true
sudo adduser --disabled-password --gecos "" --uid "${TARGET_UID}" --gid "${TARGET_GID}" "${HOME_USER}"
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
# Creating .vscode folder if it doesn't exist # Creating .vscode folder if it doesn't exist
@@ -70,13 +85,29 @@ if ! id -u $HOME_USER > /dev/null 2>&1; then
# Changing the property of the directory /home/${HOME_USER}/.vscode # Changing the property of the directory /home/${HOME_USER}/.vscode
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
else
# Usuario ya existe (imagen/volumen reusado) — resincronizar UID/GID si cambiaron
CURRENT_UID=$(id -u "${HOME_USER}")
CURRENT_GID=$(id -g "${HOME_USER}")
CURRENT_GROUP=$(id -gn "${HOME_USER}")
if [ "$CURRENT_UID" != "$TARGET_UID" ] || [ "$CURRENT_GID" != "$TARGET_GID" ]; then
if [ "$CURRENT_GID" != "$TARGET_GID" ]; then
sudo groupmod -g "${TARGET_GID}" "${CURRENT_GROUP}"
fi
if [ "$CURRENT_UID" != "$TARGET_UID" ]; then
sudo usermod -u "${TARGET_UID}" "${HOME_USER}"
fi
sudo find / -xdev \( -user "${CURRENT_UID}" -o -group "${CURRENT_GID}" \) \
-exec chown -h "${TARGET_UID}:${TARGET_GID}" {} + 2>/dev/null || true
fi
fi fi
# Then execute entrypoint.sh # Then execute entrypoint.sh
if [ "$HOME_USER" != "$(whoami)" ]; then if [ "$HOME_USER" != "$(whoami)" ]; then
exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh" exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh"
else else
sudo chown -R ${HOME_USER} /home/${HOME_USER} sudo find "/home/${HOME_USER}" -xdev -exec chown "${HOME_USER}" {} + 2>/dev/null || true
if [ -d "/home/${HOME_USER}/.ssh" ]; then if [ -d "/home/${HOME_USER}/.ssh" ]; then
sudo chmod 755 /home/${HOME_USER}/.ssh sudo chmod 755 /home/${HOME_USER}/.ssh
sudo chmod -R 600 /home/${HOME_USER}/.ssh/* sudo chmod -R 600 /home/${HOME_USER}/.ssh/*

View File

@@ -16,6 +16,7 @@ The following environment variables can be set when running the Docker container
- `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container. - `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container.
- `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container. - `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container.
- `HOST_UID` / `HOST_GID` (optional): Force the `HOME_USER` account to use a specific UID/GID instead of the default `1000`. If not set, the container will try to auto-detect the UID/GID from an existing `/home/${HOME_USER}` mount (useful when bind-mounting a host directory owned by a non-1000 user); if that can't be detected either, it falls back to `1000`. If the container is restarted/reused and the UID/GID changed, the existing user is resynced (`usermod`/`groupmod`) and its files re-owned accordingly.
### Custom Environment Variables ### Custom Environment Variables
@@ -175,6 +176,8 @@ RUN echo 'source ~/.nvm/nvm.sh' >> ~/.bashrc
> **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory. > **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.
> **Note:** The `--uid 1000` in the example above is just illustrative. If you run the final container with `HOST_UID`/`HOST_GID` set (or with `/home/${HOME_USER}` bind-mounted from a host directory owned by another user), `entrypoint.sh` will resync this user's UID/GID at container start.
> **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code. > **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.
## Contributing ## Contributing

View File

@@ -1 +1 @@
3.2.20 3.2.25