uci-docker-doc/src/rootfs/opt/lib/caddy.lib

121 lines
3.5 KiB
Bash

#!/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
}