Files
teams-in-docker/host-scripts/teams-wrapper-two
ChristofferNissen 9416420267
Some checks failed
Build teams container / Build image (push) Has been cancelled
Feature/podman (#3)
* 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
2022-01-23 18:20:34 +01:00

163 lines
4.2 KiB
Bash

#!/bin/bash
### Application Configuration
SCRIPT_NAME="teams-wrapper-two"
LOCAL_COMPUTER_USERNAME=$(whoami)
# config
IMAGE_NAME="docker.io/stifstof/teams-desktop:latest"
CONTAINER_NAME="teams-two"
CONFIG_PATH="${HOME}/.config/MicrosoftTwo"
########## 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/teamsTwo/.X11-unix
XAUTH=/home/$TEAMS_DESKTOP_USER/X/teamsTwo/."${CONTAINER_ENGINE}".xauth
# do we need to use sudo to start docker 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/teamsTwo/"
touch ${XAUTH}
touch ${XSOCK}
}
prepare_container_volume_parameters() {
if [ -d "/home/$TEAMS_DESKTOP_USER/X/teamsTwo/" ]; then
rm -rf "/home/$TEAMS_DESKTOP_USER/X/teamsTwo/"
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