This commit is contained in:
Jackson Delahunt 2019-02-27 18:56:34 +11:00
parent f0c5659bf8
commit 064d4311d3
10 changed files with 66 additions and 83 deletions

View file

@ -1,4 +1,4 @@
# Desktop Environment
# ☁️ Desktop Environment
My [daily driver](https://cloud.docker.com/repository/docker/sabrehagen/desktop-environment).

10
docker/scripts/clone.sh Executable file
View file

@ -0,0 +1,10 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
export $($REPO_ROOT/docker/scripts/environment.sh)
docker run \
--rm \
--volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \
--workdir $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \
alpine/git clone https://github.com/$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER --branch $DESKTOP_ENVIRONMENT_BRANCH $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY

View file

@ -2,53 +2,49 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Desktop environment user configuration
DESKTOP_ENVIRONMENT_CONTAINER=desktop-environment
DESKTOP_ENVIRONMENT_DOMAIN_NAME=cloud.jacksondelahunt.com
DESKTOP_ENVIRONMENT_REGISTRY=sabrehagen
DESKTOP_ENVIRONMENT_USER=jackson
DESKTOP_ENVIRONMENT_DOMAIN_NAME=cloud.jacksondelahunt.com
DESKTOP_ENVIRONMENT_USER_HOME=/home/$DESKTOP_ENVIRONMENT_USER
echo DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER
echo DESKTOP_ENVIRONMENT_DOMAIN_NAME=$DESKTOP_ENVIRONMENT_DOMAIN_NAME
echo DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY
echo DESKTOP_ENVIRONMENT_USER=$DESKTOP_ENVIRONMENT_USER
echo DESKTOP_ENVIRONMENT_DOMAIN_NAME=$DESKTOP_ENVIRONMENT_DOMAIN_NAME
echo DESKTOP_ENVIRONMENT_USER_HOME=$DESKTOP_ENVIRONMENT_USER_HOME
# Desktop environment docker configuration
echo DESKTOP_ENVIRONMENT_DOCKER_NETWORK=$DESKTOP_ENVIRONMENT_REGISTRY-$DESKTOP_ENVIRONMENT_CONTAINER
# Desktop environment host configuration
DESKTOP_ENVIRONMENT_HOST_HOME=/$DESKTOP_ENVIRONMENT_USER/home
echo DESKTOP_ENVIRONMENT_HOST_HOME=$DESKTOP_ENVIRONMENT_HOST_HOME
echo DESKTOP_ENVIRONMENT_HOST_REPOSITORY=/$DESKTOP_ENVIRONMENT_USER/$DESKTOP_ENVIRONMENT_CONTAINER
echo DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY=/$DESKTOP_ENVIRONMENT_CONTAINER
# Desktop environment repository information
echo DESKTOP_ENVIRONMENT_BRANCH=$(git --git-dir $REPO_ROOT/.git rev-parse --abbrev-ref HEAD)
# Desktop environment application cache volumes
echo DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES=$DESKTOP_ENVIRONMENT_HOST_HOME/.pki
echo DESKTOP_ENVIRONMENT_CACHE_CHROME=$DESKTOP_ENVIRONMENT_HOST_HOME/.cache/google-chrome
echo DESKTOP_ENVIRONMENT_CACHE_CODE=$DESKTOP_ENVIRONMENT_HOST_HOME/.vscode
echo DESKTOP_ENVIRONMENT_CACHE_SECRETS=$DESKTOP_ENVIRONMENT_HOST_HOME/.secrets
echo DESKTOP_ENVIRONMENT_CACHE_SSH=$DESKTOP_ENVIRONMENT_HOST_HOME/.ssh
echo DESKTOP_ENVIRONMENT_CACHE_STEMN=$DESKTOP_ENVIRONMENT_HOST_HOME/.stemn
echo DESKTOP_ENVIRONMENT_CACHE_VCSH=$DESKTOP_ENVIRONMENT_HOST_HOME/.config/vcsh/repo.d
echo DESKTOP_ENVIRONMENT_CACHE_VCSH_PRIVATE=$DESKTOP_ENVIRONMENT_HOST_HOME/.config/vcsh/repo-private.d
echo DESKTOP_ENVIRONMENT_CACHE_YARN=$DESKTOP_ENVIRONMENT_HOST_HOME/.cache/yarn
echo DESKTOP_ENVIRONMENT_CACHE_ZOOM=$DESKTOP_ENVIRONMENT_HOST_HOME/.cache/zoom
echo DESKTOP_ENVIRONMENT_CACHE_X11=/tmp/.X11-unix
echo DESKTOP_ENVIRONMENT_CACHE_ZSH=$DESKTOP_ENVIRONMENT_HOST_HOME/.cache/zsh
echo DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES=$DESKTOP_ENVIRONMENT_USER_HOME/.pki
echo DESKTOP_ENVIRONMENT_CACHE_CHROME=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/google-chrome
echo DESKTOP_ENVIRONMENT_CACHE_CODE=$DESKTOP_ENVIRONMENT_USER_HOME/.vscode
echo DESKTOP_ENVIRONMENT_CACHE_SECRETS=$DESKTOP_ENVIRONMENT_USER_HOME/.secrets
echo DESKTOP_ENVIRONMENT_CACHE_SSH=$DESKTOP_ENVIRONMENT_USER_HOME/.ssh
echo DESKTOP_ENVIRONMENT_CACHE_STEMN=$DESKTOP_ENVIRONMENT_USER_HOME/.stemn
echo DESKTOP_ENVIRONMENT_CACHE_VCSH=$DESKTOP_ENVIRONMENT_USER_HOME/.config/vcsh/repo.d
echo DESKTOP_ENVIRONMENT_CACHE_VCSH_PRIVATE=$DESKTOP_ENVIRONMENT_USER_HOME/.config/vcsh/repo-private.d
echo DESKTOP_ENVIRONMENT_CACHE_YARN=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/yarn
echo DESKTOP_ENVIRONMENT_CACHE_ZOOM=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/zoom
echo DESKTOP_ENVIRONMENT_CACHE_ZSH=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/zsh
# Desktop environment application state volumes
echo DESKTOP_ENVIRONMENT_STATE_CHROME=$DESKTOP_ENVIRONMENT_HOST_HOME/.config/google-chrome
echo DESKTOP_ENVIRONMENT_STATE_CODE=$DESKTOP_ENVIRONMENT_HOST_HOME/.config/Code
echo DESKTOP_ENVIRONMENT_STATE_GITHUB=$DESKTOP_ENVIRONMENT_HOST_HOME/.config/github
echo DESKTOP_ENVIRONMENT_STATE_JUMP=$DESKTOP_ENVIRONMENT_HOST_HOME/.jump
echo DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE=$DESKTOP_ENVIRONMENT_HOST_HOME/.musikcube
echo DESKTOP_ENVIRONMENT_STATE_TRAEFIK=$DESKTOP_ENVIRONMENT_HOST_HOME/.traefik
echo DESKTOP_ENVIRONMENT_STATE_ZOOM=$DESKTOP_ENVIRONMENT_HOST_HOME/.zoom
echo DESKTOP_ENVIRONMENT_STATE_CHROME=$DESKTOP_ENVIRONMENT_USER_HOME/.config/google-chrome
echo DESKTOP_ENVIRONMENT_STATE_CODE=$DESKTOP_ENVIRONMENT_USER_HOME/.config/Code
echo DESKTOP_ENVIRONMENT_STATE_GITHUB=$DESKTOP_ENVIRONMENT_USER_HOME/.config/github
echo DESKTOP_ENVIRONMENT_STATE_JUMP=$DESKTOP_ENVIRONMENT_USER_HOME/.jump
echo DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE=$DESKTOP_ENVIRONMENT_USER_HOME/.musikcube
echo DESKTOP_ENVIRONMENT_STATE_TRAEFIK=$DESKTOP_ENVIRONMENT_USER_HOME/.traefik
echo DESKTOP_ENVIRONMENT_STATE_ZOOM=$DESKTOP_ENVIRONMENT_USER_HOME/.zoom
# Desktop environment user state volumes
echo DESKTOP_ENVIRONMENT_USER_DOCUMENTS=$DESKTOP_ENVIRONMENT_HOST_HOME/Documents
echo DESKTOP_ENVIRONMENT_USER_DOWNLOADS=$DESKTOP_ENVIRONMENT_HOST_HOME/Downloads
echo DESKTOP_ENVIRONMENT_USER_HOME=$DESKTOP_ENVIRONMENT_HOST_HOME
echo DESKTOP_ENVIRONMENT_USER_MUSIC=$DESKTOP_ENVIRONMENT_HOST_HOME/Music
echo DESKTOP_ENVIRONMENT_USER_PICTURES=$DESKTOP_ENVIRONMENT_HOST_HOME/Pictures
echo DESKTOP_ENVIRONMENT_USER_DOCUMENTS=$DESKTOP_ENVIRONMENT_USER_HOME/Documents
echo DESKTOP_ENVIRONMENT_USER_DOWNLOADS=$DESKTOP_ENVIRONMENT_USER_HOME/Downloads
echo DESKTOP_ENVIRONMENT_USER_MUSIC=$DESKTOP_ENVIRONMENT_USER_HOME/Music
echo DESKTOP_ENVIRONMENT_USER_PICTURES=$DESKTOP_ENVIRONMENT_USER_HOME/Pictures
echo DESKTOP_ENVIRONMENT_USER_REPOSITORIES=/$DESKTOP_ENVIRONMENT_USER/repositories
echo DESKTOP_ENVIRONMENT_USER_VIDEOS=$DESKTOP_ENVIRONMENT_HOST_HOME/Videos
echo DESKTOP_ENVIRONMENT_USER_VIDEOS=$DESKTOP_ENVIRONMENT_USER_HOME/Videos

View file

@ -26,7 +26,6 @@ docker run \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
--volume /var/lib/docker:/var/lib/docker \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume $DESKTOP_ENVIRONMENT_HOST_HOME/.config/alacritty:$DESKTOP_ENVIRONMENT_HOST_HOME/.config/alacritty \
--volume DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES:$DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES \
--volume DESKTOP_ENVIRONMENT_CACHE_CHROME:$DESKTOP_ENVIRONMENT_CACHE_CHROME \
--volume DESKTOP_ENVIRONMENT_CACHE_CODE:$DESKTOP_ENVIRONMENT_CACHE_CODE \
@ -52,6 +51,7 @@ docker run \
--volume DESKTOP_ENVIRONMENT_USER_PICTURES:$DESKTOP_ENVIRONMENT_USER_PICTURES \
--volume DESKTOP_ENVIRONMENT_USER_REPOSITORIES:$DESKTOP_ENVIRONMENT_USER_REPOSITORIES \
--volume DESKTOP_ENVIRONMENT_USER_VIDEOS:$DESKTOP_ENVIRONMENT_USER_VIDEOS \
--workdir /$DESKTOP_ENVIRONMENT_USER \
$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER:$DESKTOP_ENVIRONMENT_BRANCH
# Wait until the desktop environment container is running before proceeding

View file

@ -3,7 +3,7 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
export $($REPO_ROOT/docker/scripts/environment.sh)
DESKTOP_ENVIRONMENT_VOLUMES=$(cat $REPO_ROOT/docker/scripts/environment.sh | grep -E "CACHE|STATE|USER_" | cut -b 6- | cut -f 1 -d =)
DESKTOP_ENVIRONMENT_VOLUMES=$(cat $REPO_ROOT/docker/scripts/environment.sh | grep echo | grep -E "CACHE|STATE|USER_" | cut -b 6- | cut -f 1 -d =)
for VOLUME_NAME in $DESKTOP_ENVIRONMENT_VOLUMES; do

View file

@ -9,17 +9,6 @@ REPO_ROOT=$(dirname $(readlink -f $0))/..
# Export desktop environment shell configuration
export $($REPO_ROOT/docker/scripts/environment.sh)
# Fork setup to desktop environment global location immediately
if [ ! "$REPO_ROOT" -ef "$DESKTOP_ENVIRONMENT_HOST_REPOSITORY" ]; then
# Clone the desktop environment to the global location on the host
git clone https://github.com/$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER $DESKTOP_ENVIRONMENT_HOST_REPOSITORY
# Restart bootstrap from the global location
$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/host/bootstrap.sh "$@"
exit 0
fi
# Conventional docker group id
DOCKER_GID=999
@ -37,7 +26,6 @@ apt-get update -qq && \
tilda \
vcsh \
wicd-curses \
x11-xserver-utils \
xclip \
zsh
@ -78,22 +66,16 @@ xhost local:docker
# Host user configuration
HOST_USER=$DESKTOP_ENVIRONMENT_USER
HOST_USER_ID=1000
HOST_HOME=/$HOST_USER/home
HOST_REPOSITORY=/$DESKTOP_ENVIRONMENT_CONTAINER
# Remove existing user with host user id
userdel --force $(getent passwd $HOST_USER_ID | cut -d : -f 1)
# Make the host user directory
mkdir -p /$HOST_USER
# Create the host user
useradd \
--gid $HOST_USER_ID \
--home-dir $HOST_HOME \
--uid $HOST_USER_ID \
$HOST_USER && \
passwd $HOST_USER
$HOST_USER
# Give the host user access to required tools
usermod \
@ -101,16 +83,6 @@ usermod \
--groups docker,sudo \
$HOST_USER
# Make desktop environment logs directory
mkdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY/logs
# Take ownership of all files under the user's directory
chown -R $HOST_USER:$HOST_USER /$HOST_USER
# Make gosu accessible to the host user for running desktop environment scripts
chown :$HOST_USER /usr/sbin/gosu && \
chmod +s /usr/sbin/gosu
# Install dotfiles configuration for host user
gosu $HOST_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-alacritty.git
gosu $HOST_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-autostart.git
@ -120,19 +92,22 @@ gosu $HOST_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-scr
gosu $HOST_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-tilda.git
gosu $HOST_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-zsh.git
# Ensure the desktop environment container exists before starting
$REPO_ROOT/docker/scripts/build.sh
# Pre-cache development environment container
docker pull $DESKTOP_ENVIRONMENT_REPOSITORY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_BRANCH
# Pre-cache environment support container
# Pre-cache development environment support container
docker pull jare/x11-bridge:latest
# Ensure the container user has ownership of the volumes before starting
# Clone the desktop environment into a local docker volume
$REPO_ROOT/docker/scripts/clone.sh
# Ensure the container user has ownership of docker volumes
$REPO_ROOT/docker/scripts/take-ownership.sh
# Start the environment on host startup
DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY_VOLUME_PATH=/var/lib/docker/volumes/$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/_data$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY
if [ "$1" = "--xpra" ]; then
echo "$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/docker/scripts/recycle-xpra.sh; exit 0" > /etc/rc2.d/S01$DESKTOP_ENVIRONMENT_REPOSITORY-$DESKTOP_ENVIRONMENT_CONTAINER_NAME
echo "$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY_VOLUME_PATH/docker/scripts/recycle-xpra.sh; exit 0" > /etc/rc2.d/S01$DESKTOP_ENVIRONMENT_REPOSITORY-$DESKTOP_ENVIRONMENT_CONTAINER_NAME
else
echo "$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/docker/scripts/recycle.sh; exit 0" > /etc/rc2.d/S01$DESKTOP_ENVIRONMENT_REPOSITORY-$DESKTOP_ENVIRONMENT_CONTAINER_NAME
echo "$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY_VOLUME_PATH/docker/scripts/recycle.sh; exit 0" > /etc/rc2.d/S01$DESKTOP_ENVIRONMENT_REPOSITORY-$DESKTOP_ENVIRONMENT_CONTAINER_NAME
fi

View file

@ -7,13 +7,13 @@ export $($REPO_ROOT/docker/scripts/environment.sh)
$REPO_ROOT/credentials/authenticate.sh
docker run \
--env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/credentials/credentials.json \
--env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/credentials.json \
--interactive \
--rm \
--tty \
--volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY:ro \
--volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:ro \
hashicorp/packer:light build \
-force \
-var DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER \
-var DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \
$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/packer/desktop-environment.json
$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/packer/desktop-environment.json

View file

@ -1,3 +1,10 @@
terraform {
backend "gcs" {
bucket = "desktop-environment"
prefix = "terraform "
}
}
provider "google" {
project = "${var.gcp_project}"
}

View file

@ -8,18 +8,17 @@ $REPO_ROOT/credentials/authenticate.sh
docker run \
--entrypoint ash \
--env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/credentials/credentials.json \
--env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/credentials.json \
--interactive \
--rm \
--tty \
--volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
--workdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY/terraform \
--volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \
hashicorp/terraform:light -c "\
cd $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/terraform && \
terraform init && \
terraform apply \
-auto-approve \
-var DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER \
-var DESKTOP_ENVIRONMENT_HOST_REPOSITORY=$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
-var DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \
-var owner_host=$(hostname) \
-var owner_name=$(whoami)"

View file

@ -2,10 +2,6 @@ variable "DESKTOP_ENVIRONMENT_CONTAINER" {
description = "The DESKTOP_ENVIRONMENT_CONTAINER environment variable."
}
variable "DESKTOP_ENVIRONMENT_HOST_REPOSITORY" {
description = "The DESKTOP_ENVIRONMENT_HOST_REPOSITORY environment variable."
}
variable "DESKTOP_ENVIRONMENT_REGISTRY" {
description = "The DESKTOP_ENVIRONMENT_REGISTRY environment variable."
}
@ -22,7 +18,7 @@ variable "machine_region" {
variable "machine_type" {
description = "The machine type."
default = "custom-6-30720"
default = "custom-6-16384"
}
variable "owner_host" {