Some checks failed
Build teams container / Build image (push) Has been cancelled
* Changed to Podman * added option to use podman or docker on host * Feature/podman fix (#1) * WIP * WIP * restored dockerfile * podman works rootless savepoint * added bin folder * changed teams-two to podman * changed to podman scheme * updated Makefile * updated README.md * host script refactor * renamed Dockerfile to Containerfile for podman scheme * added ci * changed ci script name * tried changing repo name * prepared merge with main. Added config to swap container runtime with ease * added podman explanation to readme * improved the runtime_switching experience * fixed path mistake in env loading
163 lines
4.2 KiB
Bash
Executable File
163 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
### Application Configuration
|
|
SCRIPT_NAME="teams-wrapper"
|
|
LOCAL_COMPUTER_USERNAME=$(whoami)
|
|
|
|
# registry config
|
|
IMAGE_NAME="docker.io/stifstof/teams-desktop:latest"
|
|
CONTAINER_NAME="teams"
|
|
CONFIG_PATH="${HOME}/.config/Microsoft"
|
|
|
|
########## Script
|
|
|
|
# Container runtime (docker or podman)
|
|
CONTAINER_ENGINE="${CONTAINER_ENGINE}"
|
|
# Local .env
|
|
if [ -f "/home/$LOCAL_COMPUTER_USERNAME/Documents/git/TeamsInDocker/.env" ]; then
|
|
# Load Environment Variables
|
|
export $(cat /home/$LOCAL_COMPUTER_USERNAME/Documents/git/TeamsInDocker/.env | grep -v '#' | awk '/=/ {print $1}')
|
|
# For instance, will be example_kaggle_key
|
|
echo $CONTAINER_ENGINE
|
|
fi
|
|
if [ -z "$CONTAINER_ENGINE" ]
|
|
then
|
|
echo "\$CONTAINER_ENGINE is empty. Defaulting to docker"
|
|
CONTAINER_ENGINE="docker"
|
|
fi
|
|
|
|
PATH=/home/cn/Documents/git/TeamsInDocker/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
TEAMS_DESKTOP_USER=${LOCAL_COMPUTER_USERNAME}
|
|
XSOCK=/home/$TEAMS_DESKTOP_USER/X/teamsOne/.X11-unix
|
|
XAUTH=/home/$TEAMS_DESKTOP_USER/X/teamsOne/."${CONTAINER_ENGINE}".xauth
|
|
|
|
# do we need to use sudo to start containers?
|
|
if [ "$CONTAINER_ENGINE" == "docker" ]; then
|
|
(id -Gn | grep -q $CONTAINER_ENGINE) || SUDO=sudo
|
|
fi
|
|
|
|
USER_UID=$(id -u)
|
|
USER_GID=$(id -g)
|
|
|
|
|
|
DOWNLOAD_DIR=$(xdg-user-dir DOWNLOAD)
|
|
if [ -z "${DOWNLOAD_DIR}" ]; then
|
|
DOWNLOAD_DIR="${HOME}/Downloads"
|
|
fi
|
|
|
|
list_commands() {
|
|
echo ""
|
|
echo "Launch teams using:"
|
|
echo " teams-wrapper teams"
|
|
echo ""
|
|
exit 1
|
|
}
|
|
|
|
cleanup_stopped_teams_desktop_instances() {
|
|
echo "Cleaning up stopped teams instances..."
|
|
for c in $(${SUDO} ${CONTAINER_ENGINE} ps -a -q); do
|
|
image="$(${SUDO} ${CONTAINER_ENGINE} inspect -f {{.Name}} ${c})"
|
|
if [ "${image}" == "${CONTAINER_NAME}" ]; then
|
|
running=$(${SUDO} ${CONTAINER_ENGINE} inspect -f {{.State.Running}} ${c})
|
|
if [ "${running}" != "true" ]; then
|
|
${SUDO} ${CONTAINER_ENGINE} rm "${c}" >/dev/null
|
|
fi
|
|
if [ "${running}" == "true" ]; then
|
|
${SUDO} ${CONTAINER_ENGINE} kill "${c}" >/dev/null
|
|
${SUDO} ${CONTAINER_ENGINE} rm "${c}" >/dev/null
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
prepare_extra_arguments() {
|
|
if [ "$CONTAINER_ENGINE" == "docker" ]; then
|
|
TEAMS_EXTRA_CONTAINER_ARGUMENTS+="--privileged"
|
|
fi
|
|
}
|
|
|
|
prepare_container_env_parameters() {
|
|
ENV_VARS+=" --env=USER_UID=${USER_UID}"
|
|
ENV_VARS+=" --env=USER_GID=${USER_GID}"
|
|
ENV_VARS+=" --env=DISPLAY=unix$DISPLAY"
|
|
ENV_VARS+=" --env=XAUTHORITY=${XAUTH}"
|
|
ENV_VARS+=" --env=TZ=$(date +%Z)"
|
|
ENV_VARS+=" --env=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket"
|
|
}
|
|
|
|
create_x_folder() {
|
|
mkdir "/home/$TEAMS_DESKTOP_USER/X/teamsOne/"
|
|
touch ${XAUTH}
|
|
touch ${XSOCK}
|
|
}
|
|
|
|
prepare_container_volume_parameters() {
|
|
if [ -d "/home/$TEAMS_DESKTOP_USER/X/teamsOne/" ]; then
|
|
rm -rf "/home/$TEAMS_DESKTOP_USER/X/teamsOne/"
|
|
fi
|
|
create_x_folder
|
|
|
|
xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f ${XAUTH} nmerge -
|
|
|
|
VOLUMES+=" --volume=${CONFIG_PATH}:/home/${TEAMS_DESKTOP_USER}/.config/Microsoft/"
|
|
VOLUMES+=" --volume=${XSOCK}:${XSOCK}"
|
|
VOLUMES+=" --volume=${XAUTH}:${XAUTH}"
|
|
VOLUMES+=" --volume=/run/user/${USER_UID}/pulse:/run/pulse"
|
|
VOLUMES+=" --volume=/run/user/${USER_UID}/bus:/run/dbus/system_bus_socket"
|
|
|
|
if [ -d "${HOME}/tmp" ]; then
|
|
VOLUMES+=" --volume=${HOME}/tmp:/home/${TEAMS_DESKTOP_USER}/tmp"
|
|
fi
|
|
|
|
}
|
|
|
|
prepare_container_device_parameters() {
|
|
# enumerate video devices for webcam support
|
|
VIDEO_DEVICES=
|
|
for device in /dev/video*; do
|
|
if [ -c $device ]; then
|
|
VIDEO_DEVICES="${VIDEO_DEVICES} --device $device:$device"
|
|
fi
|
|
done
|
|
}
|
|
|
|
prog=$(basename $0)
|
|
exec=$(which $prog)
|
|
|
|
if [[ ${prog} == ${SCRIPT_NAME} ]]; then
|
|
case ${1} in
|
|
teams)
|
|
prog=${1}
|
|
shift
|
|
;;
|
|
* | help)
|
|
list_commands
|
|
exit 1
|
|
;;
|
|
esac
|
|
elif [[ -n ${exec} ]]; then
|
|
# launch host binary if it exists
|
|
exec ${exec} $@
|
|
fi
|
|
|
|
cleanup_stopped_teams_desktop_instances
|
|
prepare_container_env_parameters
|
|
prepare_container_volume_parameters
|
|
prepare_container_device_parameters
|
|
prepare_extra_arguments
|
|
|
|
echo "Starting ${prog}..."
|
|
set -o xtrace
|
|
${SUDO} ${CONTAINER_ENGINE} run -d \
|
|
--name ${CONTAINER_NAME} \
|
|
--network host \
|
|
--memory=4g \
|
|
--shm-size=4g \
|
|
--device /dev/dri \
|
|
--device /dev/snd \
|
|
${TEAMS_EXTRA_CONTAINER_ARGUMENTS} \
|
|
${ENV_VARS} \
|
|
${VIDEO_DEVICES} \
|
|
${VOLUMES} \
|
|
${IMAGE_NAME} ${prog} $@ >/dev/null
|