mirror of
https://github.com/89luca89/distrobox.git
synced 2025-02-25 18:55:25 -06:00
Improve wrapper by using pure podman, dropping using distrobox. Inject ENV and change default USER. Add Docker wrapper This improves stability, reliability of the wrapper. Fix #1421 Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
64 lines
2.0 KiB
Bash
Executable File
64 lines
2.0 KiB
Bash
Executable File
#!/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} "$@"
|