Compare commits

...

8 Commits

Author SHA1 Message Date
16205e66ec cleanup...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-11 00:24:51 +03:00
f00050a5a6 cleanup...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-11 00:00:42 +03:00
d7fb8fd63e fix...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 23:59:53 +03:00
37d4b893dd tweaking...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 23:57:20 +03:00
4c3f7f8e50 tweaking...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 23:46:04 +03:00
01366f02a6 cleanup + dependency checking...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 23:35:52 +03:00
a2bc38a766 minor fix...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 18:17:18 +03:00
044962d625 refactoring...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2024-01-10 18:12:24 +03:00
4 changed files with 137 additions and 28 deletions

View File

@ -27,6 +27,28 @@ ECHO_PREFIX="### "
#----------------------------------------------------------------------
#
# check MSG COMMAND ..
#
check(){
local MSG=$1
shift
for cmd in "$@" ; do
which $cmd > /dev/null 2>&1 \
|| eval "echo \"$MSG\"" >&2
done
}
need(){
check 'ERROR: "$cmd": needed by this script but not in path.' "$@"
}
would-like(){
check 'WARNING: "$cmd": is not in path.' "$@"
}
#----------------------------------------------------------------------
# Fill section...
#
@ -172,12 +194,17 @@ getLatestTemplate(){
# xread [-n] MSG VAR
#
# This saves all user input variables to the $XREAD_VARS array.
#
# XXX add support for keywords like SKIP and DISABLE
xread(){
local non_empty=
if [[ $1 == '-n' ]] ; then
shift
local non_empty=1
fi
if [[ "${!2}" == "SKIP" ]] ; then
return
fi
if [ -z ${!2} ] ; then
eval 'read -ep "'$1'" -i "$DFL_'$2'" '${2}''
XREAD_VARS+=(${2})
@ -189,6 +216,40 @@ xread(){
&& echo "$2=${!2}"
}
#
# xreadYes MSG VAR
#
xreadYes(){
if [[ "${!2}" == "SKIP" ]] ; then
return
fi
if [ -z ${!2} ] ; then
if [ -z $(eval "echo \$DFL_${2}") ] ; then
local yes=y
local no=N
local dfl=
else
local yes=Y
local no=n
local dfl=1
fi
eval 'read -ep "'$1' ('$yes'/'$no') " '${2}''
XREAD_VARS+=(${2})
# normalize...
eval "${2}=${!2,,}"
if [[ "${!2}" == 'y' ]] ; then
eval "${2}=1"
elif [[ ${!2} == 'n' ]] ; then
eval "${2}="
# set default if empty...
else
eval "${2}=\${${2}:-$dfl}"
fi
fi
[ $SCRIPTING ] \
&& echo "$2=${!2}"
}
#
# xreadpass VAR
#
@ -216,20 +277,20 @@ xreadpass(){
# Wait for /etc/inithooks.conf to be generated then cleared
#
# tklWaitForSetup
# tklWaitForSetup ID
#
# for tkl inithooks doc see:
# https://www.turnkeylinux.org/docs/inithooks
tklWaitForSetup(){
printf "# TKL setup, this may take a while"
if [ -z $DRY_RUN ] ; then
while ! $(lxc-attach $ID -- test -e /etc/inithooks.conf) ; do
while ! $(lxc-attach $1 -- test -e /etc/inithooks.conf) ; do
printf '.'
sleep ${TIMEOUT:=5}
done
printf '+'
sleep ${TIMEOUT:=5}
while ! [[ $(lxc-attach $ID -- cat /etc/inithooks.conf | wc -c) < 2 ]] ; do
while ! [[ $(lxc-attach $1 -- cat /etc/inithooks.conf | wc -c) < 2 ]] ; do
printf '.'
sleep ${TIMEOUT:=5}
done
@ -264,28 +325,49 @@ readConfig(){
}
#
# saveConfig [-d] CONFIG VAR ..
# saveConfig [-d|-a] CONFIG VAR ..
#
saveConfig(){
local prefix=
if [ $1 == '-d' ] ; then
local append=
while true ; do
case $1 in
-d|--default)
prefix=DFL_
shift
fi
;;
-a|--append)
append=1
shift
;;
*)
break
;;
esac
done
local cfg=$1
shift
if [ -z $append ] ; then
printf '' > "$cfg"
fi
{
for var in $@ ; do
echo "${prefix}${var}=${!var}"
done
} > $cfg
echo
} >> "$cfg"
}
saveLastRunConfig(){
local cfg=config.last-run
echo "# Saving config to: config.last-run"
saveConfig -d config.last-run ${XREAD_VARS[@]}
{
echo "#"
echo "# This file is auto-generated, any changes here will be overwritten."
echo "#"
} > "$cfg"
saveConfig -d -a "$cfg" ${XREAD_VARS[@]}
}
#
@ -483,6 +565,29 @@ pctCreateUbuntu(){
@ lxc-attach $1 -- apt upgrade -y
}
#
# pctCreateTurnkey APP ID ARGS [PASS]
#
pctCreateTurnkey(){
local app=$1
shift
local TEMPLATE
getLatestTemplate '.*-turnkey-'$app TEMPLATE
pctCreate $1 "$TEMPLATE" "$2" "$3"
tklWaitForSetup $1
sleep ${TIMEOUT:=5}
}
#
# pctUpdateTurnkey ID
#
pctUpdateTurnkey(){
@ lxc-attach $1 apt update
@ lxc-attach $1 -- apt upgrade -y
}
#
# pctSet ID [ARGS [REBOOT]]

View File

@ -18,13 +18,9 @@
# - the rest of the CT's are created in order of importance, strting
# from CT's needed for access and ending with services.
CTs := \
gate \
ns \
ssh \
wireguard \
syncthing \
nextcloud \
gitea
gate ns \
ssh wireguard syncthing \
nextcloud gitea

View File

@ -70,11 +70,7 @@ echo "# Building config..."
buildAssets
echo "# Creating CT..."
getLatestTemplate '.*-turnkey-nextcloud' TEMPLATE
pctCreate $ID "$TEMPLATE" "$OPTS_STAGE_1" "$PASS"
sleep ${TIMEOUT:=5}
tklWaitForSetup
pctCreateTurnkey 'nextcloud' $ID "$OPTS_STAGE_1" "$PASS"
echo "# Starting TKL UI..."
# XXX might be a good idea to reaaad stuff from config...
@ -109,8 +105,7 @@ echo "# Disabling fail2ban..."
@ lxc-attach $ID systemctl disable fail2ban
echo "# Updating system..."
@ lxc-attach $ID apt update
@ lxc-attach $ID -- apt upgrade -y
pctUpdateTurnkey $ID
echo "# Post config..."
pctSet $ID "${OPTS_STAGE_2}" $REBOOT

View File

@ -13,11 +13,14 @@ source ../.pct-helpers
#----------------------------------------------------------------------
readConfig
# check dependencies...
would-like dig #qrencode
#----------------------------------------------------------------------
readConfig
DFL_ID=${DFL_ID:=103}
DFL_CTHOSTNAME=${DFL_CTHOSTNAME:=wireguard}
@ -36,7 +39,11 @@ LAN_GATE=-
REBOOT=${REBOOT:=1}
# Wireguard config...
DFL_ENDPOINT=${DFL_ENDPOINT:=$(dig +short ${DOMAIN:-$DFL_DOMAIN} | tail -1)}
DFL_ENDPOINT=${DFL_ENDPOINT:=$(\
which dig > /dev/null 2>&1 \
&& (dig +short ${DOMAIN:-$DFL_DOMAIN} \
| tail -1) \
|| echo "${DOMAIN:-$DFL_DOMAIN}")}
xread "Wireguard endpoint: " ENDPOINT
DFL_ENDPOINT_PORT=${DFL_ENDPOINT_PORT:=51820}
@ -45,6 +52,7 @@ xread "Wireguard endpoint port: " ENDPOINT_PORT
CLIENT_IPS=${CLIENT_IPS:-10.42.0.0/16}
ALLOWED_IPS=${ALLOWED_IPS:-0.0.0.0/0,${CLIENT_IPS}}
xreadYes "Show profile as QRcode when done?" QRCODE
readVars
@ -83,7 +91,7 @@ echo "# Creating CT..."
pctCreateAlpine $ID "${OPTS_STAGE_1}" "$PASS"
echo "# Installing dependencies..."
@ lxc-attach $ID apk add iptables wireguard-tools-wg-quick make bind-tools
@ lxc-attach $ID apk add iptables wireguard-tools-wg-quick make bind-tools libqrencode
echo "# Copying assets..."
@ pct-push-r $ID ./assets /
@ -99,6 +107,11 @@ echo "# Setup: wireguard default profile..."
echo "# client config:"
@ mkdir -p clients
@ pct pull $ID /etc/wireguard/clients/default.conf clients/default.conf
# show the profile as a qrcode...
if [ "$QRCODE" ] ; then
echo "# default profile:"
@ lxc-attach $ID -- qrencode -t UTF8 -r /etc/wireguard/clients/default.conf
fi
#echo "# Setup: bridge device..."
@ lxc-attach $ID wg-quick up wg0