uci-docker-caddy/src/init/opt/lib/caddy.lib

115 lines
3.9 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_checksum () {
echo "verifying checksum of $2"
source $LIB_DIR/github.lib
local download=$(github_asset caddyserver caddy $1 caddy_$(echo ${1})_checksums.txt)
echo checksum file to download: $download
wget -q -O /tmp/caddy_checksum $download
# cat /tmp/caddy_checksum
local sha=$(grep $2 /tmp/caddy_checksum | cut -d " " -f1)
# echo $sha
# sha512sum $3
# must have TWO spaces in echo command!
echo "$sha $3" | sha512sum -c >/dev/null 2>&1;
ret=$?
rm -r /tmp/caddy_checksum
return $ret
}
caddy_install_bin () {
echo in caddy binary install
local arch; local download; local caddytar
source $LIB_DIR/github.lib
source $LIB_DIR/getarch.sh
arch=$(get_arch)
[[ ! $arch ]] && echo unable to determine build architecture && return 1
ver=${CADDY_VER:-$(github_latest caddyserver caddy | sed 's/^v//')};
[[ ! $ver ]] && echo unable to determine caddy version && return 1
echo "---FETCHING AND INSTALLING CADDY BINARY v$ver for $arch ------------"
caddytar="caddy_${ver}_linux_${arch}.tar.gz"
download=$(github_asset caddyserver caddy $ver $caddytar)
echo "github_asset caddyserver caddy $ver $caddytar"
echo caddy version: $ver
echo caddy tarball: $caddytar
echo getting tarball from: $download
if wget -q -O /tmp/caddy.tar.gz $download; then
if caddy_checksum $ver $caddytar /tmp/caddy.tar.gz; then
echo download tarball verified
tar x -z -f /tmp/caddy.tar.gz -C $CADDY_HOME/bin caddy
rm -f /tmp/caddy.tar.gz
chmod +x $CADDY_BIN
setcap cap_net_bind_service=+ep $CADDY_BIN
chmod +x $CADDY_BIN
echo "caddy binary successfully installed version: $($CADDY_BIN version)"
else
echo file "$download failed checksum, install terminated"
return 2
fi
else
echo failed to fetch $download, install terminated
return 1
fi
echo "----------------------------------"
}