1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#!/bin/sh
id="$(echo "$@" | grep -Eo ' [a-zA-Z0-9]{64} ' | tr -d ' ')"
DOCKER_COMMAND="$(command -v docker 2> /dev/null)"
ENV_COMMAND="printenv"
# if we're in a flatpak, we fallback to host-spawn
if [ -n "${FLATPAK_ID}" ]; then
DOCKER_COMMAND="flatpak-spawn --host docker"
ENV_COMMAND="flatpak-spawn --host printenv"
fi
# This little workaround is used to ensure
# we use our distrobox to properly enter the container
if echo "$@" | grep -q 'exec'; then
# we do this procedure only for distroboxes
# we will leave regular containers alone.
if [ "$(${DOCKER_COMMAND} inspect --type container --format '{{ index .Config.Labels "manager" }}' "${id}")" = "distrobox" ]; then
# Ensure that our distrobox containers will use different vscode-servers
# by symlinking to different paths
# This is necessary because vscode-server will always use $HOME/.vscode-server
# so we're forced to do this workaround
if [ -n "${id}" ]; then
# shellcheck disable=SC2016
${DOCKER_COMMAND} exec -u "${USER}" "${id}" /bin/sh -c '
if [ ! -L "${HOME}/.vscode-server" ]; then
[ -e "${HOME}/.vscode-server" ] && mv "${HOME}/.vscode-server" /var/tmp
[ -d /var/tmp/.vscode-server ] || mkdir /var/tmp/.vscode-server
ln -sf /var/tmp/.vscode-server "$HOME"
elif [ ! -e "${HOME}/.vscode-server" ]; then
mkdir /var/tmp/.vscode-server
ln -sf /var/tmp/.vscode-server "$HOME"
fi
'
fi
for i; do
# interject root:root, we want to be our own user
if echo "${i}" | grep -q "root:root"; then
set -- "$@" "${USER}:${USER}"
shift
# inject host's environment
elif echo "${i}" | grep -q "exec"; then
set -- "$@" "exec"
shift
# inject host's environment
for j in $(${ENV_COMMAND} | grep '=' | grep -Ev ' |"|`|\$' |
# refer to distrobox-enter:L454
grep -Ev '^(CONTAINER_ID|HOST|HOSTNAME|HOME|PATH|PROFILEREAD|SHELL|XDG_SEAT|XDG_VTNR|XDG_.*_DIRS|^_)'); do
set -- "$@" "--env"
set -- "$@" "${j}"
done
else
set -- "$@" "${i}"
shift
fi
done
fi
fi
${DOCKER_COMMAND} "$@"
|