From 35a8626222947cb6ec31a515dc95d733f70b4103 Mon Sep 17 00:00:00 2001 From: David Kebler Date: Fri, 15 Sep 2023 09:58:32 -0700 Subject: [PATCH] initial commit - build and deploy working --- .gitignore | 5 + build/.env.example | 6 + build/boot | 2 + build/build | 1 + build/build.env.example | 3 + build/clean | 4 + build/devsync | 5 + build/publish | 1 + build/shell | 3 + build/shelldev | 3 + build/term | 1 + deploy/docker-compose.yml | 25 ++++ deploy/log | 1 + deploy/restart | 3 + deploy/run | 1 + deploy/scrub | 2 + deploy/start | 1 + deploy/stop | 1 + deploy/term | 3 + deploy/upgrade | 4 + readme.md | 25 ++++ src/init/image.info | 1 + src/init/init.sh | 31 +++++ src/packages/caddy.pkgs | 3 + src/packages/caddy.sh | 34 +++++ src/packages/packages.sh | 32 +++++ src/packages/python.pkgs | 3 + src/packages/system.pkgs | 7 + src/rootfs/doc/docs/index.md | 4 + src/rootfs/doc/editor/data/.gitignore | 5 + src/rootfs/doc/editor/data/User/.gitignore | 6 + src/rootfs/doc/editor/data/User/settings.json | 4 + src/rootfs/doc/editor/editor.tmpl.yml | 8 ++ .../doc/editor/extensions/extensions.json | 1 + src/rootfs/doc/mkdocs.yml | 3 + src/rootfs/opt/bin/boot | 17 +++ src/rootfs/opt/bin/doc | 31 +++++ src/rootfs/opt/caddy/conf/.Caddyfile | 3 + src/rootfs/opt/lib/caddy.lib | 121 ++++++++++++++++++ src/rootfs/opt/lib/cmds.lib | 36 ++++++ src/rootfs/opt/lib/runit.lib | 48 +++++++ src/rootfs/opt/services/caddy/finish | 3 + src/rootfs/opt/services/caddy/run | 4 + src/rootfs/opt/services/editor/finish | 3 + src/rootfs/opt/services/editor/run | 14 ++ src/rootfs/opt/services/mkdocs/finish | 3 + src/rootfs/opt/services/mkdocs/run | 5 + 47 files changed, 530 insertions(+) create mode 100644 .gitignore create mode 100644 build/.env.example create mode 100755 build/boot create mode 100755 build/build create mode 100644 build/build.env.example create mode 100755 build/clean create mode 100755 build/devsync create mode 100755 build/publish create mode 100755 build/shell create mode 100755 build/shelldev create mode 100755 build/term create mode 100644 deploy/docker-compose.yml create mode 100755 deploy/log create mode 100755 deploy/restart create mode 100755 deploy/run create mode 100755 deploy/scrub create mode 100755 deploy/start create mode 100755 deploy/stop create mode 100755 deploy/term create mode 100755 deploy/upgrade create mode 100644 readme.md create mode 100644 src/init/image.info create mode 100755 src/init/init.sh create mode 100755 src/packages/caddy.pkgs create mode 100644 src/packages/caddy.sh create mode 100644 src/packages/packages.sh create mode 100644 src/packages/python.pkgs create mode 100644 src/packages/system.pkgs create mode 100644 src/rootfs/doc/docs/index.md create mode 100644 src/rootfs/doc/editor/data/.gitignore create mode 100644 src/rootfs/doc/editor/data/User/.gitignore create mode 100644 src/rootfs/doc/editor/data/User/settings.json create mode 100644 src/rootfs/doc/editor/editor.tmpl.yml create mode 100644 src/rootfs/doc/editor/extensions/extensions.json create mode 100644 src/rootfs/doc/mkdocs.yml create mode 100755 src/rootfs/opt/bin/boot create mode 100755 src/rootfs/opt/bin/doc create mode 100644 src/rootfs/opt/caddy/conf/.Caddyfile create mode 100644 src/rootfs/opt/lib/caddy.lib create mode 100644 src/rootfs/opt/lib/cmds.lib create mode 100644 src/rootfs/opt/lib/runit.lib create mode 100755 src/rootfs/opt/services/caddy/finish create mode 100755 src/rootfs/opt/services/caddy/run create mode 100755 src/rootfs/opt/services/editor/finish create mode 100755 src/rootfs/opt/services/editor/run create mode 100755 src/rootfs/opt/services/mkdocs/finish create mode 100755 src/rootfs/opt/services/mkdocs/run diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef45402 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +logs/ +mnt/ +archive/ +*.env +deploy/doc \ No newline at end of file diff --git a/build/.env.example b/build/.env.example new file mode 100644 index 0000000..35a0a6b --- /dev/null +++ b/build/.env.example @@ -0,0 +1,6 @@ +# copy to .env and edit to suit +NAME=doc +BASE_IMAGE="squidfunk/mkdocs-material" +RUSER=ucommandit +BUILD_SRC=../src +APPEND_BUILD_ENV=./build.env diff --git a/build/boot b/build/boot new file mode 100755 index 0000000..1f08ba3 --- /dev/null +++ b/build/boot @@ -0,0 +1,2 @@ +#!/bin/bash +udbuild try -o '-p 8011:8000 -p 8012:8080 -v tempdoc:/doc' -y /opt/bin/boot $@ \ No newline at end of file diff --git a/build/build b/build/build new file mode 100755 index 0000000..a094d08 --- /dev/null +++ b/build/build @@ -0,0 +1 @@ +udbuild -p "$@" diff --git a/build/build.env.example b/build/build.env.example new file mode 100644 index 0000000..b151924 --- /dev/null +++ b/build/build.env.example @@ -0,0 +1,3 @@ +export USER=doc +# set a password for create login user +# export USER_PW=somepassword \ No newline at end of file diff --git a/build/clean b/build/clean new file mode 100755 index 0000000..dc93410 --- /dev/null +++ b/build/clean @@ -0,0 +1,4 @@ +#!/bin/bash +rm -rf ../build/mnt +docker volume rm tempdoc + diff --git a/build/devsync b/build/devsync new file mode 100755 index 0000000..4b7e253 --- /dev/null +++ b/build/devsync @@ -0,0 +1,5 @@ +rsync -r ../src/rootfs/opt/lib/ mnt/opt/lib/ +rsync -r ../src/rootfs/opt/bin/ mnt/opt/bin/ +rsync -r ../src/rootfs/opt/env/ mnt/opt/env/ +rsync -r ../src/rootfs/opt/services/ mnt/opt/services/ +rsync -r ../src/rootfs/opt/caddy/conf/ mnt/opt/caddy/conf \ No newline at end of file diff --git a/build/publish b/build/publish new file mode 100755 index 0000000..06696f0 --- /dev/null +++ b/build/publish @@ -0,0 +1 @@ +udbuild -t publish $@ \ No newline at end of file diff --git a/build/shell b/build/shell new file mode 100755 index 0000000..9dec95f --- /dev/null +++ b/build/shell @@ -0,0 +1,3 @@ +#!/bin/bash +udbuild try -m doc -k -o '-p 8012:8080 -p 8011:8000' ${@:-shell} $@ + diff --git a/build/shelldev b/build/shelldev new file mode 100755 index 0000000..23b45ce --- /dev/null +++ b/build/shelldev @@ -0,0 +1,3 @@ +#!/bin/bash +udbuild try -m opt -k -o '-p 8012:8080 -p 8011:8000' ${@:-shell} $@ + diff --git a/build/term b/build/term new file mode 100755 index 0000000..beeb09d --- /dev/null +++ b/build/term @@ -0,0 +1 @@ +docker exec -it try-ucommandit-doc /opt/bin/entrypoint ${@:-shell} \ No newline at end of file diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml new file mode 100644 index 0000000..e8c9d20 --- /dev/null +++ b/deploy/docker-compose.yml @@ -0,0 +1,25 @@ +services: + caddy: + container_name: ${NAME:-doc} + image: ${IMAGE:-doc} + entrypoint: /opt/bin/boot + hostname: ${NAME:-doc} + # env_file: + # - $CREDENTIALS + volumes: + - doc:/doc + restart: unless-stopped + ports: + # use 80 if doing reverse proxy inside container + # - 80:80 + # map 8080 and 8000 if not doing reverse proxy inside container + - 8901:8080 # editor + - 8900:8000 # docs +# bind doc volume to host for backup or outside container editing +# volumes: +# doc: +# driver: local +# driver_opts: +# type: none +# device: ${PWD}/doc +# o: bind diff --git a/deploy/log b/deploy/log new file mode 100755 index 0000000..0289754 --- /dev/null +++ b/deploy/log @@ -0,0 +1 @@ +docker-compose logs \ No newline at end of file diff --git a/deploy/restart b/deploy/restart new file mode 100755 index 0000000..c73f489 --- /dev/null +++ b/deploy/restart @@ -0,0 +1,3 @@ +#!/bin/bash +./stop +./start diff --git a/deploy/run b/deploy/run new file mode 100755 index 0000000..83ed0d0 --- /dev/null +++ b/deploy/run @@ -0,0 +1 @@ +docker-compose up diff --git a/deploy/scrub b/deploy/scrub new file mode 100755 index 0000000..d37526b --- /dev/null +++ b/deploy/scrub @@ -0,0 +1,2 @@ +docker-compose down -v +rm -rf doc/ \ No newline at end of file diff --git a/deploy/start b/deploy/start new file mode 100755 index 0000000..a8341a6 --- /dev/null +++ b/deploy/start @@ -0,0 +1 @@ +docker-compose up -d diff --git a/deploy/stop b/deploy/stop new file mode 100755 index 0000000..685cc77 --- /dev/null +++ b/deploy/stop @@ -0,0 +1 @@ +docker-compose down diff --git a/deploy/term b/deploy/term new file mode 100755 index 0000000..75af349 --- /dev/null +++ b/deploy/term @@ -0,0 +1,3 @@ +#!/bin/bash +source .env +docker exec -it ${NAME:-doc} bash -l \ No newline at end of file diff --git a/deploy/upgrade b/deploy/upgrade new file mode 100755 index 0000000..34323fd --- /dev/null +++ b/deploy/upgrade @@ -0,0 +1,4 @@ +#!/bin/bash +./stop +docker-compose pull +./start diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e29c85f --- /dev/null +++ b/readme.md @@ -0,0 +1,25 @@ +# UCI - Live Documetation in a Container + +** A self contained live documenation system for editing and displaying documentation via the browser** + +This repo will build an alpine image complete with a mkdocs-material and vscode servers. + +## Deploy + +* Copy the deploy directory from this repo to your machine that has docker and docker-compose installed +* Make a copy of the .env.example file to .env and edit as needed. +* Edit the docker-compose.yml as needed. +* use the ./run script for testing and the ./start to deploy detached. + +Run a caddy reverse proxy to use https and to obfuscate the ports of the servers + +## Build + +* You MUST clone and install the [UCI Docker Build]() repo first +* Then clone this repo +* make a copy of the .env.example file to .env and edit +* make a copy of the build.env.example to build.env and edit +* user the ./build script to build and the ./publish script to publish + +additional script in the direcotory are used to facilitate testing and deveopment. + diff --git a/src/init/image.info b/src/init/image.info new file mode 100644 index 0000000..47c3728 --- /dev/null +++ b/src/init/image.info @@ -0,0 +1 @@ +Build Source: uci-docker-base \ No newline at end of file diff --git a/src/init/init.sh b/src/init/init.sh new file mode 100755 index 0000000..45d2fe8 --- /dev/null +++ b/src/init/init.sh @@ -0,0 +1,31 @@ +#!/bin/bash +echo -e "********** Docs Server Initialization ***************" + +source $LIB_DIR/verbose.lib +source $LIB_DIR/helpers.lib +source $ENV_DIR/run.env + +echo setting up document directory $DOC_HOME with git, making first commit +mkdir -p $DOC_HOME +[[ ! -f $DOC_HOME/mkdocs.yml ]] && echo intializing mkdocs in $DOC_HOME && /usr/local/bin/mkdocs new $DOC_HOME +chown -R $USER:$USER $DOC_HOME +# TODO allow setting up a remote for branch +sudo -u doc /bin/bash << CMD +cd $DOC_HOME +git init +git add . +git config user.email ${USER_EMAIL:-doc@somedomain.com} +git config user.name "${USER_NAME:-doc}" +git commit -m="initial documentation commit" +git log --stat +CMD +echo "done setting up $DOC_HOME" + +echo "setting up caddy for password secured access to editor and docs" +source $LIB_DIR/caddy.lib +mkdir -p $CADDY_HOME/bin $CADDY_HOME/settings $CADDY_HOME/data + +chown -R $USER:$USER /opt + +echo -e "********** Done: initialization ***************" + diff --git a/src/packages/caddy.pkgs b/src/packages/caddy.pkgs new file mode 100755 index 0000000..ac02fb7 --- /dev/null +++ b/src/packages/caddy.pkgs @@ -0,0 +1,3 @@ +github.com/caddy-dns/route53 +# comment lines are ignored thus a way to disable a package on build +# github.com/greenpau/caddy-security diff --git a/src/packages/caddy.sh b/src/packages/caddy.sh new file mode 100644 index 0000000..0b5b5fc --- /dev/null +++ b/src/packages/caddy.sh @@ -0,0 +1,34 @@ +caddy_add_packages () { + local ifile; local bin; local pkgs; local pkg; local ipkgs + clean () { + local tmp;local tmp2; local append + if [[ -f $1 ]]; then + tmp=$(sed '/^[[:space:]]*#[^!]/d; /#$/d' $1) + else + tmp=$1 + fi + echo "$tmp $2" | xargs -n1 | sort -u | xargs | sed "s# # #g" + + } + + [[ -f caddy.pkgs ]] && pkgs=" $(clean caddy.pkgs)" + [[ ! $pkgs ]] && echo "no packages requested, nothing to do" && return 0 + echo "-packages requested to install-" + echo $pkgs + bin=/usr/sbin/caddy + [[ ! -x $bin ]] && echo ERROR: can not add packages, no caddy binary found at $bin && return 1 + if ! $bin add-package $pkgs >/dev/null 2>&1; then + echo Error: Aborting further package installs and reverting to last good binary + return 2 + else + echo packages added successfully + CADDY_HOME=${CADDY_HOME:-/opt/caddy} + mkdir -p $CADDY_HOME/bin/ + echo $pkgs >> $CADDY_HOME/bin/installed.pkgs + echo "---" + echo currently installed packages + cat $CADDY_HOME/bin/installed.pkgs + echo installed modules from these packages + $bin list-modules | sed '1,/Standard modules/d;/Non-standard modules/,$d' + fi +} \ No newline at end of file diff --git a/src/packages/packages.sh b/src/packages/packages.sh new file mode 100644 index 0000000..a64c4f2 --- /dev/null +++ b/src/packages/packages.sh @@ -0,0 +1,32 @@ + +if ! { [ "$VERBOSE" = "packages" ] || [ "$VERBOSE" = "all" ]; }; then unset VERBOSE; fi +source /opt/core_run.env +source $LIB_DIR/verbose.lib + +echo "----- Installing python packages ---------------" +while IFS= read -r plug || [ -n "$plug" ]; do + echo installing plugin: $plug + silence pip install $plug +done < ./python.pkgs + echo "----- done, Installing python packages ---------------" + +echo "----- Installing caddy packages ---------------" +source caddy.sh +caddy_add_packages +echo "----- done, Installing caddy packages ---------------" + +echo "----- Downloading editor $EDITOR ---------------" +source $LIB_DIR/helpers.lib +EDITOR=${EDITOR:-coder/code-server} +ARCH=$(get_arch) +echo downloading $EDITOR version: $(lastversion coder/code-server) for $ARCH +lastversion coder/code-server --assets --filter linux-$ARCH -d /tmp/temp.tar.gz +EDITOR_SRC=${EDITOR_SRC:-/usr/local/lib/code-server} +mkdir -p $EDITOR_SRC +echo unpacking tarball into $EDITOR_SRC +tar xf /tmp/temp.tar.gz -C $EDITOR_SRC --strip-components=1 +rm -rf /tmp/temp.tar.gz +ln -s ${EDITOR_BIN:-$EDITOR_SRC/bin/code-server} /usr/local/bin/editor +echo "----- done, downloading editor $EDITOR ---------------" + + diff --git a/src/packages/python.pkgs b/src/packages/python.pkgs new file mode 100644 index 0000000..549989e --- /dev/null +++ b/src/packages/python.pkgs @@ -0,0 +1,3 @@ +mkdocs-macros-plugin +mkdocs-glightbox +lastversion \ No newline at end of file diff --git a/src/packages/system.pkgs b/src/packages/system.pkgs new file mode 100644 index 0000000..c2ff4ad --- /dev/null +++ b/src/packages/system.pkgs @@ -0,0 +1,7 @@ +jq +rsync +envsubst +runit +caddy +gcompat +libstdc++ \ No newline at end of file diff --git a/src/rootfs/doc/docs/index.md b/src/rootfs/doc/docs/index.md new file mode 100644 index 0000000..cc00a32 --- /dev/null +++ b/src/rootfs/doc/docs/index.md @@ -0,0 +1,4 @@ +# UCI Live Documentation System + + +[mkdocs material](https://squidfunk.github.io/mkdocs-material/setup/) \ No newline at end of file diff --git a/src/rootfs/doc/editor/data/.gitignore b/src/rootfs/doc/editor/data/.gitignore new file mode 100644 index 0000000..88e5fcc --- /dev/null +++ b/src/rootfs/doc/editor/data/.gitignore @@ -0,0 +1,5 @@ +/* +!User +!.gitignore + + diff --git a/src/rootfs/doc/editor/data/User/.gitignore b/src/rootfs/doc/editor/data/User/.gitignore new file mode 100644 index 0000000..b216021 --- /dev/null +++ b/src/rootfs/doc/editor/data/User/.gitignore @@ -0,0 +1,6 @@ +/* +!snippets +!.gitignore +!settings.json + + diff --git a/src/rootfs/doc/editor/data/User/settings.json b/src/rootfs/doc/editor/data/User/settings.json new file mode 100644 index 0000000..77c1948 --- /dev/null +++ b/src/rootfs/doc/editor/data/User/settings.json @@ -0,0 +1,4 @@ +{ + "workbench.colorTheme": "Default Dark Modern", + "workbench.startupEditor": "none" +} \ No newline at end of file diff --git a/src/rootfs/doc/editor/editor.tmpl.yml b/src/rootfs/doc/editor/editor.tmpl.yml new file mode 100644 index 0000000..1a71dcc --- /dev/null +++ b/src/rootfs/doc/editor/editor.tmpl.yml @@ -0,0 +1,8 @@ +port: 8080 +host: 0.0.0.0 +auth: none +# password: test +cert: false +user-data-dir: $EDITOR_DATA +extensions-dir: $EDITOR_EXTENSIONS +app-name: $DOC_NAME diff --git a/src/rootfs/doc/editor/extensions/extensions.json b/src/rootfs/doc/editor/extensions/extensions.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/rootfs/doc/editor/extensions/extensions.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/rootfs/doc/mkdocs.yml b/src/rootfs/doc/mkdocs.yml new file mode 100644 index 0000000..ad5d44d --- /dev/null +++ b/src/rootfs/doc/mkdocs.yml @@ -0,0 +1,3 @@ +site_name: UCI Documentation Docker Instance +theme: + name: material diff --git a/src/rootfs/opt/bin/boot b/src/rootfs/opt/bin/boot new file mode 100755 index 0000000..d49bfb2 --- /dev/null +++ b/src/rootfs/opt/bin/boot @@ -0,0 +1,17 @@ +#!/bin/sh +source /opt/core_run.env +source $LIB_DIR/runit.lib + +startup + +# catch shutdown signals +trap shutdown SIGTERM SIGHUP SIGQUIT SIGINT +# RUNIT is runsvdir pid +wait $RUNIT + +sleep 3 + +echo "killing any other processes (zombie) still running in the container" + for _pid in $(ps -eo pid | grep -v PID | tr -d ' ' | grep -v '^1$' | head -n -6); do + timeout 5 /bin/sh -c "kill $_pid && wait $_pid || kill -9 $_pid" + done diff --git a/src/rootfs/opt/bin/doc b/src/rootfs/opt/bin/doc new file mode 100755 index 0000000..c4b0538 --- /dev/null +++ b/src/rootfs/opt/bin/doc @@ -0,0 +1,31 @@ +#!/bin/bash + +source $LIB_DIR/cmds.lib + +doc () { + +cmd=$1 +case "$cmd" in + idle) ;& + shell) ;& + caddy) ;& + editor) ;& + browser) ;& + run) ;& + startup) ;& + shutdown) ;& + func) + shift 1 + $cmd "$@" + ;; + *) + echo "no command: $*" + ;; + +esac + +} + + +# # if script was executed then call the function +(return 0 2>/dev/null) || doc "$@" \ No newline at end of file diff --git a/src/rootfs/opt/caddy/conf/.Caddyfile b/src/rootfs/opt/caddy/conf/.Caddyfile new file mode 100644 index 0000000..099a63a --- /dev/null +++ b/src/rootfs/opt/caddy/conf/.Caddyfile @@ -0,0 +1,3 @@ +:8010 { + reverse_proxy :8011 +} \ No newline at end of file diff --git a/src/rootfs/opt/lib/caddy.lib b/src/rootfs/opt/lib/caddy.lib new file mode 100644 index 0000000..8351c0f --- /dev/null +++ b/src/rootfs/opt/lib/caddy.lib @@ -0,0 +1,121 @@ +#!/bin/bash + +caddy_add_packages () { + local ifile; local bin; local pkgs; local pkg; local ipkgs + clean () { + local tmp;local tmp2; local append + if [[ -f $1 ]]; then + tmp=$(sed '/^[[:space:]]*#[^!]/d; /#$/d' $1) + else + tmp=$1 + fi + echo "$tmp $2" | xargs -n1 | sort -u | xargs | sed "s# # #g" + + } + [[ -f $1 ]] && pkgs=" $(clean $1)" + [[ $BUILDING && -f $BUILD_DIR/caddy.pkgs ]] && pkgs=$(clean $BUILD_DIR/caddy.pkgs "$pkgs") + # echo pkgs after build + # echo $pkgs + [[ -f $CADDY_CONF/caddy.pkgs ]] && pkgs=$(clean $CADDY_CONF/caddy.pkgs "$pkgs") + # echo pkgs after conf + # echo $pkgs + [[ ! $pkgs ]] && echo "no packages requested, nothing to do" && return 0 + echo "--- packages requested to install ----" + echo $pkgs + echo "-----------" + ifile=${CADDY_HOME}/bin/installed.pkgs + # uncomment for testing + # /bin/cp installed.pkgs $ifile + [[ -f $ifile ]] && ipkgs=$(clean $ifile) + echo "--- currently installed packages ----" + [[ $ipkgs ]] && echo $ipkgs || echo NONE + echo "-----------" + for pkg in $ipkgs; do + # echo installed packaged $pkg + pkgs=${pkgs/${pkg}/}; + done + [[ ! $(clean $pkgs) ]] && echo "no new packages to add, nothing to do" && return 0 + echo "--- packages that need adding ----" + echo $pkgs + echo "-----------" + bin=${2:-$CADDY_BIN} + bin=${bin:-$(command -v caddy)} + # [[ ! $bin ]] && echo no caddy binary found && return 1 + [[ ! -x $bin ]] && echo ERROR: can not add packages, no caddy binary found at $bin && return 1 + echo "------- ADDING CADDY PACKAGES ------------" + if ! $bin add-package $pkgs >/dev/null 2>&1; then + echo Error: Aborting further package installs and reverting to last good binary + return 2 + else + echo packages + echo $pkgs + echo added successfully + echo $pkgs >> $CADDY_HOME/bin/installed.pkgs + echo "---" + echo currently installed packages + cat $CADDY_HOME/bin/installed.pkgs + echo installed modules from these packages + $bin list-modules | sed '1,/Standard modules/d;/Non-standard modules/,$d' + echo "-----------------------------------" + fi +} + +caddy_get_conf () { + local conf + cd $CADDY_CONF || { echo could not enter conf directory in container; return 2; } + if [[ $1 ]];then + [[ -f $1 ]] && conf=$1 || conf=$1.conf + else + conf=.Caddyfile + fi + echo "$CADDY_CONF/$conf" +} + + +caddy () { + +if [[ ! $CADDY_HOME ]]; then + echo caddy run environment is NOT set + echo this is an error as the image build should set this + echo attempting to recover by sourcing the environment now + echo at $ENV_DIR/caddy.env + if [[ -f $ENV_DIR/caddy.env ]]; then + source $ENV_DIR/caddy.env + else + echo default environment can not be sourced at $ENV_DIR/caddy.env + return 1 + fi +fi + +[[ ! $CADDY_BIN ]] && CADDY_BIN is not set unable to find caddy binary +[ ! -f "$CADDY_BIN" ] && echo caddy binary file at $CADDY_BIN does not exist && return 1 +[ ! -x "$CADDY_BIN" ] && echo caddy binary file $CADDY_BIN is not executable && return 1 + +case "$1" in + start) + ;& + stop) + ;& + validate) + ;& + run) + cmd=$1;shift 1 + conf=$(caddy_get_conf $1) + if [[ -f $conf ]]; then + # echo checking for any run time packages to add... + # caddy_add_packages + echo running: $CADDY_BIN $cmd --config $conf --adapter caddyfile + $CADDY_BIN $cmd --config $conf --adapter caddyfile + return $? + else + echo no configuration file found at $conf in the container + echo make sure you have mounted one from the host into /opt/caddy/conf + return 1 + fi + ;; + *) + $CADDY_BIN "$@" + +esac + +} \ No newline at end of file diff --git a/src/rootfs/opt/lib/cmds.lib b/src/rootfs/opt/lib/cmds.lib new file mode 100644 index 0000000..ec1c750 --- /dev/null +++ b/src/rootfs/opt/lib/cmds.lib @@ -0,0 +1,36 @@ +#!/bin/bash + +source $LIB_DIR/runit.lib + +shell () { +/bin/bash -c "cd ${DEFAULT_DIR:-/}; exec bash -l" +} + +func () { +local func=$1 +shift 1 +$func $@ +} + +editor () { + $SVDIR/editor/run "$@" +} + +browser () { + $SVDIR/mkdocs/run "$@" +} + +caddy () { + $SVDIR/caddy/run "$@" +} + +run() { + if [ "$(id -u)" = 0 ]; then + sudo -u "${USER:-doc}" bash -c "source /opt/core_run.env; $*" + fi +} + + +idle () { +sleep infinity +} diff --git a/src/rootfs/opt/lib/runit.lib b/src/rootfs/opt/lib/runit.lib new file mode 100644 index 0000000..e17e55e --- /dev/null +++ b/src/rootfs/opt/lib/runit.lib @@ -0,0 +1,48 @@ +#!/bin/sh +# runit library +svall () { + +for _srv in $(basename -a $(ls -d1 $SVDIR/*/)); do + if [ -z "$1" ]; then + echo $_srv + else + echo $1 for $_srv + sv $1 $_srv + fi +done + +} + +shutdown() { + # first shutdown any service started by runit + + echo first shutting down all services + svall force-stop + # shutdown RUNIT command + RUNIT=${RUNIT:-$(cat ${SVDIR:-/opt/services}/pid)} + echo now killing runit at pid $RUNIT + kill -HUP $RUNIT + echo runit is shutdown + +} + + +startup () { + +[ -z $SVDIR ] && echo using default services directory /opt/services +SVDIR=${SVDIR:-/opt/services} +export SVDIR=${1:-$SVDIR} +echo starting up services in $SVDIR +exec runsvdir -P ${1:-$SVDIR} & + +RUNIT=$! +echo $RUNIT > $SVDIR/pid +export RUNIT +echo +echo "Started services at $SVDIR, PID is $RUNIT" +echo "waiting for service processes to start...." +sleep 3 +svall status + +} + diff --git a/src/rootfs/opt/services/caddy/finish b/src/rootfs/opt/services/caddy/finish new file mode 100755 index 0000000..472f464 --- /dev/null +++ b/src/rootfs/opt/services/caddy/finish @@ -0,0 +1,3 @@ +#!/bin/bash +echo stopping caddy +source $LIB_DIR/caddy.lib diff --git a/src/rootfs/opt/services/caddy/run b/src/rootfs/opt/services/caddy/run new file mode 100755 index 0000000..5ebeb08 --- /dev/null +++ b/src/rootfs/opt/services/caddy/run @@ -0,0 +1,4 @@ +#!/bin/bash +echo ${1:-run} caddy +source $LIB_DIR/caddy.lib +caddy ${1:-run} \ No newline at end of file diff --git a/src/rootfs/opt/services/editor/finish b/src/rootfs/opt/services/editor/finish new file mode 100755 index 0000000..9d8f3b5 --- /dev/null +++ b/src/rootfs/opt/services/editor/finish @@ -0,0 +1,3 @@ +#!/bin/bash +echo code-server run finished with exit code $1 +echo "doing any cleanup now" \ No newline at end of file diff --git a/src/rootfs/opt/services/editor/run b/src/rootfs/opt/services/editor/run new file mode 100755 index 0000000..a4b0337 --- /dev/null +++ b/src/rootfs/opt/services/editor/run @@ -0,0 +1,14 @@ +#!/bin/bash +env | grep EDITOR +echo booting up editor +ls -la $DOC_HOME/editor +if [[ -f $EDITOR_CONFIG_TMPL ]]; then +echo creating editor config from template +envsubst < $EDITOR_CONFIG_TMPL > $EDITOR_CONFIG +fi +[[ ! -f $EDITOR_CONFIG ]] && echo "no editor config file (or template) at $EDITOR_CONFIG, aborting" && exit 1 +echo "--- editor config -----" +cat $EDITOR_CONFIG +echo "-----------------------" +echo starting code server editor +sudo -u doc $EDITOR_BIN --config $EDITOR_CONFIG $@ $DOC_HOME diff --git a/src/rootfs/opt/services/mkdocs/finish b/src/rootfs/opt/services/mkdocs/finish new file mode 100755 index 0000000..c1b2f3b --- /dev/null +++ b/src/rootfs/opt/services/mkdocs/finish @@ -0,0 +1,3 @@ +#!/bin/bash +echo mkdocs run finished with exit code $1 +echo "doing any cleanup now" \ No newline at end of file diff --git a/src/rootfs/opt/services/mkdocs/run b/src/rootfs/opt/services/mkdocs/run new file mode 100755 index 0000000..f4730ab --- /dev/null +++ b/src/rootfs/opt/services/mkdocs/run @@ -0,0 +1,5 @@ +#!/bin/bash +echo starting mkdocs in $DOC_HOME +pushd $DOC_HOME +/usr/local/bin/mkdocs serve --dev-addr=0.0.0.0:8000 --watch-theme +popd \ No newline at end of file