diff --git a/Dockerfile b/Dockerfile index 7d8a6b0..54fbb11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ ARG DEFAULT_DATA_DIR="/usr/local/share/template-files/data" \ DEFAULT_CONF_DIR="/usr/local/share/template-files/config" \ DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults" -ARG PACK_LIST="bash sudo tini xorg x11-apps xz-utils iproute2" +ARG PACK_LIST="xorg x11-apps xz-utils" ENV LANG=en_US.utf8 \ ENV=ENV=~/.bashrc \ @@ -27,9 +27,13 @@ RUN set -ex; rm -Rf "/etc/apt/sources.list" ; mkdir -p "${DEFAULT_DATA_DIR}" apt-get update -yy && apt-get upgrade -yy && apt-get install -yy ${PACK_LIST} && \ useradd --shell /bin/bash --create-home --home-dir /home/x11user x11user && \ usermod -a -G audio,video,sudo,tty,dialout,cdrom,floppy,audio,dip,video,plugdev x11user && \ - echo "x11user ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers.d/x11user" + echo "x11user ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers.d/x11user" && \ + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >/tmp/packages.microsoft.gpg && \ + install -D -o root -g root -m 644 /tmp/packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg && \ + echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" >"/etc/apt/sources.list.d/vscode.list" && \ + apt-get update -yy && apt-get upgrade -yy && apt-get install -yy code -yy -RUN installScript && \ +RUN sudo -u x11user setup-code.sh && \ chown -Rf x11user:x11user "/home/x11user" RUN echo 'Running cleanup' ; \ @@ -45,11 +49,7 @@ RUN echo 'Running cleanup' ; \ rm -rf /lib/systemd/system/sockets.target.wants/*initctl* ; \ rm -rf /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* ; \ rm -rf /lib/systemd/system/systemd-update-utmp* ; \ - if [ -d "/lib/systemd/system/sysinit.target.wants" ]; then cd "/lib/systemd/system/sysinit.target.wants" && rm Dockerfile -Dockerfile.341313.bak -LICENSE.md -README.md -rootfs ; fi + if [ -d "/lib/systemd/system/sysinit.target.wants" ]; then cd "/lib/systemd/system/sysinit.target.wants" && rm $(ls | grep -v systemd-tmpfiles-setup) ; fi FROM scratch @@ -62,7 +62,7 @@ ARG \ BUILD_VERSION="latest" \ LICENSE="MIT" \ IMAGE_NAME="code" \ - BUILD_DATE="Thu Oct 20 05:26:23 PM EDT 2022" \ + BUILD_DATE="Thu Oct 20 05:32:58 PM EDT 2022" \ TIMEZONE="America/New_York" LABEL maintainer="CasjaysDev " \ @@ -94,7 +94,8 @@ ENV LANG=en_US.utf8 \ TZ="${TZ:-America/New_York}" \ TIMEZONE="${TZ:-$TIMEZONE}" \ HOSTNAME="casjaysdev-${IMAGE_NAME}" \ - USER="x11user" + USER="x11user" \ + HOME="/home/x11user" COPY --from=build /. / @@ -108,4 +109,3 @@ EXPOSE $EXPOSE_PORTS #CMD [ "" ] ENTRYPOINT [ "tini", "-p", "SIGTERM", "--", "/usr/local/bin/entrypoint.sh" ] HEALTHCHECK --start-period=1m --interval=2m --timeout=3s CMD [ "/usr/local/bin/entrypoint.sh", "healthcheck" ] - diff --git a/rootfs/usr/local/bin/.gitkeep b/rootfs/usr/local/bin/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/rootfs/usr/local/bin/entrypoint-code.sh b/rootfs/usr/local/bin/entrypoint-code.sh deleted file mode 100755 index 350e4e9..0000000 --- a/rootfs/usr/local/bin/entrypoint-code.sh +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env bash -# shellcheck shell=bash -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202210162159-git -# @@Author : Jason Hempstead -# @@Contact : jason@casjaysdev.com -# @@License : WTFPL -# @@ReadME : entrypoint-code.sh --help -# @@Copyright : Copyright: (c) 2022 Jason Hempstead, Casjays Developments -# @@Created : Sunday, Oct 16, 2022 21:59 EDT -# @@File : entrypoint-code.sh -# @@Description : -# @@Changelog : New script -# @@TODO : Better documentation -# @@Other : -# @@Resource : -# @@Terminal App : no -# @@sudo/root : no -# @@Template : other/docker-entrypoint -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set bash options -[ -n "$DEBUG" ] && set -x -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -APPNAME="$(basename "$0" 2>/dev/null)" -VERSION="202210162159-git" -HOME="${USER_HOME:-$HOME}" -USER="${SUDO_USER:-$USER}" -RUN_USER="${SUDO_USER:-$USER}" -SCRIPT_SRC_DIR="${BASH_SOURCE%/*}" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set functions -__exec_command() { - local exitCode=0 - local cmd="${*:-bash -l}" - echo "Executing command: $cmd" - eval "$cmd" || exitCode=1 - [ "$exitCode" = 0 ] || exitCode=10 - return ${exitCode:-$?} -} -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Additional functions -__pgrep() { ps aux 2>/dev/null | grep -F "$@" | grep -qv 'grep' || return 10; } -__find() { find "$1" -mindepth 1 -type f,d 2>/dev/null | grep '^' || return 10; } -__curl() { curl -q -LSsf -o /dev/null -s -w "200" "$@" 2>/dev/null || return 10; } -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -__certbot() { - [ -n "$SSL_CERT_BOT" ] && type -P certbot &>/dev/null || { export SSL_CERT_BOT="" && return 10; } - certbot certonly --webroot -w "${WWW_ROOT_DIR:-/data/htdocs/www}" -d $DOMANNAME -d $DOMANNAME \ - --put-all-related-files-into "$SSL_DIR" -key-path "$SSL_KEY" -fullchain-path "$SSL_CERT" -} -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -__heath_check() { - status=0 health="Good" - __pgrep "${1:-$SERVICE_NAME}" || status=$((status + 1)) - #__curl "http://localhost:$HTTP_PORT/server-health" || status=$((status + 1)) - [ "$status" -eq 0 ] || health="Errors reported see docker logs --follow $CONTAINER_NAME" - echo "$(uname -s) $(uname -m) is running and the health is: $health" - return ${status:-$?} -} -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# export functions -export -f __exec_command __pgrep __find __curl __heath_check -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Define default variables - do not change these - redifine with -e or set under Additional -DISPLAY="${DISPLAY:-}" -LANG="${LANG:-C.UTF-8}" -DOMANNAME="${DOMANNAME:-}" -TZ="${TZ:-America/New_York}" -HTTP_PORT="${HTTP_PORT:-80}" -HTTPS_PORT="${HTTPS_PORT:-}" -SERVICE_PORT="${SERVICE_PORT:-}" -SERVICE_NAME="${CONTAINER_NAME}" -HOSTNAME="${HOSTNAME:-casjaysdev-code}" -HOSTADMIN="${HOSTADMIN:-root@${DOMANNAME:-$HOSTNAME}}" -SSL_CERT_BOT="${SSL_CERT_BOT:-false}" -SSL_ENABLED="${SSL_ENABLED:-false}" -SSL_DIR="${SSL_DIR:-/config/ssl}" -SSL_CA="${SSL_CA:-$SSL_DIR/ca.crt}" -SSL_KEY="${SSL_KEY:-$SSL_DIR/server.key}" -SSL_CERT="${SSL_CERT:-$SSL_DIR/server.crt}" -SSL_CONTAINER_DIR="${SSL_CONTAINER_DIR:-/etc/ssl/CA}" -WWW_ROOT_DIR="${WWW_ROOT_DIR:-/data/htdocs}" -LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}" -DEFAULT_DATA_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/data}" -DEFAULT_CONF_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}" -DEFAULT_TEMPLATE_DIR="${DEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}" -CONTAINER_IP_ADDRESS="$(ip a | grep 'inet' | grep -v '127.0.0.1' | awk '{print $2}' | sed 's|/*||g')" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Additional variables and variable overrides -#export SERVICE_NAME="" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# export variables -export LANG TZ DOMANNAME HOSTNAME HOSTADMIN SSL_ENABLED SSL_DIR SSL_CA SSL_KEY -export SSL_DIR HTTP_PORT HTTPS_PORT LOCAL_BIN_DIR DEFAULT_CONF_DIR CONTAINER_IP_ADDRESS -export SSL_CONTAINER_DIR SSL_CERT_BOT DISPLAY -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# import variables from file -[ -f "/root/env.sh" ] && . "/root/env.sh" -[ -f "/config/env.sh" ] && "/config/env.sh" -[ -f "/config/.env.sh" ] && . "/config/.env.sh" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set timezone -[ -n "${TZ}" ] && echo "${TZ}" | sudo tee "/etc/timezone" >/dev/null -[ -f "/usr/share/zoneinfo/${TZ}" ] && sudo ln -sf "/usr/share/zoneinfo/${TZ}" "/etc/localtime" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set hostname -if [ -n "${HOSTNAME}" ]; then - echo "${HOSTNAME}" | sudo tee "/etc/hostname" >/dev/null - echo "127.0.0.1 ${HOSTNAME} localhost ${HOSTNAME}.local" | sudo tee "/etc/hosts" >/dev/null -fi -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Add domain to hosts file -if [ -n "$DOMANNAME" ]; then - echo "${HOSTNAME}.${DOMANNAME:-local}" | sudo tee "/etc/hostname" >/dev/null - echo "127.0.0.1 ${HOSTNAME} localhost ${HOSTNAME}.local" | sudo tee "/etc/hosts" >/dev/null - echo "${CONTAINER_IP_ADDRESS:-127.0.0.1} ${HOSTNAME}.${DOMANNAME}" | sudo tee -a "/etc/hosts" >/dev/null -fi -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Create files -sudo mkdir -p "/config" "/data" && sudo chown -Rf x11user:x11user "/config" "/data" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -if [ -d "/config/vscode" ]; then - rm -Rf "$HOME/.vscode" && ln -sf "/config/vscode" "$HOME/.vscode" -else - mv -fv "$HOME/.vscode" "/config/vscode" && ln -sf "/config/vscode" "$HOME/.vscode" -fi -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -if [ -d "/config/code" ]; then - rm -Rf "$HOME/.config/Code" && ln -sf "/config/code" "$HOME/.config/Code" -else - mv -fv "$HOME/.config/Code" "/config/code" && ln -sf "/config/code" "$HOME/.config/Code" -fi -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Fix permissions -sudo chown -Rf x11user:x11user "/data" "/config" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -case "$1" in ---help) # Help message - echo 'Docker container for '$APPNAME'' - echo "Usage: $APPNAME [healthcheck, bash, command]" - echo "Failed command will have exit code 10" - echo "" - exit ${exitCode:-$?} - ;; - -healthcheck) # Docker healthcheck - __heath_check "code" || exitCode=10 - exit ${exitCode:-$?} - ;; - -*/bin/sh | */bin/bash | bash | shell | sh) # Launch shell - shift 1 - __exec_command "${@:-/bin/bash}" - exit ${exitCode:-$?} - ;; - -*) # Execute primary command - start-code "$@" - [ -f "/tmp/init.pid" ] || { touch "/tmp/init.pid" && bash -l; } - ;; -esac -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# end of entrypoint -exit ${exitCode:-$?} -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rootfs/usr/local/bin/entrypoint.sh b/rootfs/usr/local/bin/entrypoint.sh index 411ce12..dec5268 100755 --- a/rootfs/usr/local/bin/entrypoint.sh +++ b/rootfs/usr/local/bin/entrypoint.sh @@ -12,8 +12,8 @@ # @@Description : entrypoint point for code # @@Changelog : New script # @@TODO : Better documentation -# @@Other : -# @@Resource : +# @@Other : +# @@Resource : # @@Terminal App : no # @@sudo/root : no # @@Template : other/docker-entrypoint @@ -55,7 +55,7 @@ __heath_check() { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __start_all_services() { echo "$service_message" - bash -l + start-code.sh "$@" return $? } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -228,7 +228,18 @@ unset create_data create_data_name create_config create_config_name create_conf [ -f "/config/.docker_has_run" ] || { [ -d "/config" ] && echo "Initialized on: $(date)" >"/config/.docker_has_run"; } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Additional commands - +if [ -d "/config/vscode" ]; then + rm -Rf "/home/x11user/.vscode" && ln -sf "/config/vscode" "/home/x11user/.vscode" +else + mv -fv "/home/x11user/.vscode" "/config/vscode" && ln -sf "/config/vscode" "/home/x11user/.vscode" +fi +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +if [ -d "/config/code" ]; then + rm -Rf "/home/x11user/.config/Code" && ln -sf "/config/code" "/home/x11user/.config/Code" +else + mv -fv "/home/x11user/.config/Code" "/config/code" && ln -sf "/config/code" "/home/x11user/.config/Code" +fi +sudo chown -Rf x11user:x11user "/data" "/config" "/home/x11user" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Show message echo "Container ip address is: $CONTAINER_IP_ADDRESS" @@ -268,13 +279,8 @@ certbot) ;; *) # Execute primary command - if [ $# -eq 0 ]; then - __start_all_services - exit ${exitCode:-$?} - else - __exec_command "$@" - exitCode=$? - fi + __start_all_services "$@" + exit ${exitCode:-$?} ;; esac # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rootfs/usr/local/bin/start-code b/rootfs/usr/local/bin/start-code deleted file mode 100755 index 88cf2bd..0000000 --- a/rootfs/usr/local/bin/start-code +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# shellcheck shell=bash -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202210162304-git -# @@Author : Jason Hempstead -# @@Contact : jason@casjaysdev.com -# @@License : WTFPL -# @@ReadME : start-code --help -# @@Copyright : Copyright: (c) 2022 Jason Hempstead, Casjays Developments -# @@Created : Sunday, Oct 16, 2022 23:04 EDT -# @@File : start-code -# @@Description : -# @@Changelog : New script -# @@TODO : Better documentation -# @@Other : -# @@Resource : -# @@Terminal App : no -# @@sudo/root : no -# @@Template : other/start-service -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[ "$1" = "" ] && shift 1 -[ "$1" = " " ] && shift 1 -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -WORK_DIR="${1:-/data}" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -code -wn "$WORK_DIR" diff --git a/rootfs/usr/local/bin/start-code.sh b/rootfs/usr/local/bin/start-code.sh index 302f7aa..3215f9e 100755 --- a/rootfs/usr/local/bin/start-code.sh +++ b/rootfs/usr/local/bin/start-code.sh @@ -12,8 +12,8 @@ # @@Description : script to start code # @@Changelog : New script # @@TODO : Better documentation -# @@Other : -# @@Resource : +# @@Other : +# @@Resource : # @@Terminal App : no # @@sudo/root : no # @@Template : other/start-service @@ -72,7 +72,7 @@ CONTAINER_IP_ADDRESS="$(ip a 2>/dev/null | grep 'inet' | grep -v '127.0.0.1' | a # Overwrite variables #SERVICE_PORT="" SERVICE_NAME="code" -SERVICE_COMMAND="$SERVICE_NAME" +SERVICE_COMMAND="$SERVICE_NAME -wn" export exec_message="Starting $SERVICE_NAME on $CONTAINER_IP_ADDRESS:$SERVICE_PORT" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Pre copy commands @@ -115,7 +115,8 @@ fi [ -f "/config/.env.sh" ] && . "/config/.env.sh" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Actions based on env - +[ "$1" = "" ] && shift 1 +[ "$1" = " " ] && shift 1 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # begin main app case "$1" in @@ -144,7 +145,7 @@ certbot) echo "$SERVICE_NAME is running" else touch "/tmp/$SERVICE_NAME.pid" - __exec_command "$SERVICE_COMMAND" || rm -Rf "/tmp/$SERVICE_NAME.pid" + __exec_command "$SERVICE_COMMAND" "${@:-/data}" || rm -Rf "/tmp/$SERVICE_NAME.pid" fi ;; esac