From 064d4311d3e44d33f272eb47759375a627d4a0df Mon Sep 17 00:00:00 2001 From: Jackson Delahunt Date: Wed, 27 Feb 2019 18:56:34 +1100 Subject: [PATCH] clone --- README.md | 2 +- docker/scripts/clone.sh | 10 ++++++ docker/scripts/environment.sh | 60 +++++++++++++++----------------- docker/scripts/start.sh | 2 +- docker/scripts/take-ownership.sh | 2 +- host/bootstrap.sh | 47 ++++++------------------- packer/scripts/build.sh | 6 ++-- terraform/desktop-environment.tf | 7 ++++ terraform/scripts/start.sh | 7 ++-- terraform/variables.tf | 6 +--- 10 files changed, 66 insertions(+), 83 deletions(-) create mode 100755 docker/scripts/clone.sh diff --git a/README.md b/README.md index b07d24c..e596787 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Desktop Environment +# ☁️ Desktop Environment My [daily driver](https://cloud.docker.com/repository/docker/sabrehagen/desktop-environment). diff --git a/docker/scripts/clone.sh b/docker/scripts/clone.sh new file mode 100755 index 0000000..2de7a22 --- /dev/null +++ b/docker/scripts/clone.sh @@ -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 diff --git a/docker/scripts/environment.sh b/docker/scripts/environment.sh index 3e91be7..9a83277 100755 --- a/docker/scripts/environment.sh +++ b/docker/scripts/environment.sh @@ -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 diff --git a/docker/scripts/start.sh b/docker/scripts/start.sh index 7d63fdf..3785e79 100755 --- a/docker/scripts/start.sh +++ b/docker/scripts/start.sh @@ -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 diff --git a/docker/scripts/take-ownership.sh b/docker/scripts/take-ownership.sh index 1689009..e2c3d62 100755 --- a/docker/scripts/take-ownership.sh +++ b/docker/scripts/take-ownership.sh @@ -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 diff --git a/host/bootstrap.sh b/host/bootstrap.sh index ade0895..c394c20 100755 --- a/host/bootstrap.sh +++ b/host/bootstrap.sh @@ -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 - diff --git a/packer/scripts/build.sh b/packer/scripts/build.sh index a9c991b..c256d58 100755 --- a/packer/scripts/build.sh +++ b/packer/scripts/build.sh @@ -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 diff --git a/terraform/desktop-environment.tf b/terraform/desktop-environment.tf index 4fdab73..bf58eb7 100644 --- a/terraform/desktop-environment.tf +++ b/terraform/desktop-environment.tf @@ -1,3 +1,10 @@ +terraform { + backend "gcs" { + bucket = "desktop-environment" + prefix = "terraform " + } +} + provider "google" { project = "${var.gcp_project}" } diff --git a/terraform/scripts/start.sh b/terraform/scripts/start.sh index 624867c..e70644e 100755 --- a/terraform/scripts/start.sh +++ b/terraform/scripts/start.sh @@ -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)" diff --git a/terraform/variables.tf b/terraform/variables.tf index 85283ba..4e36254 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -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" {