run docker dev nextcloud

- missing clone info
- missing setup of certificates (mkcert and so one ... )
This commit is contained in:
2025-09-29 16:05:00 +02:00
parent ad09c3ec72
commit 6a2ccb5d2b
4 changed files with 379 additions and 33 deletions

View File

@@ -1,30 +1,72 @@
#!/bin/bash
# SPDX-FileCopyrightText: 2025 artlog@l0g.eu
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# metascript to include
#
# usual way if no parameters used by outer script :
#
# source $(dirname "$0")/metascript.sh
#
# defaultmetainit $@
# to generate file header for caller script do :
# bash <relative_path_to>/metascript.sh header
# ex:
# bash lib/metascript.sh header
# if called directly
if [[ "$0" =~ ^(.*)/metascript.sh$ ]]
then
prefix=${BASH_REMATCH[1]}
if [[ $1 == header ]]
then
cat <<EOF
#!/bin/bash
# SPDX-FileCopyrightText: 2025 artlog@l0g.eu
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# sample to include this script.
toolsdir=$prefix
pushd \$toolsdir >/dev/null
toolsdir=\$(pwd)
source metascript.sh
popd >/dev/null
while [[ \$# > 0 ]]
do
case "\$1" in
*)
parsemetaarg "\$1"
;;
esac
shift
done
exit 0
EOF
else
echo "[WARNING] only header argument is supported. (prefix=$prefix)" >&2
fi
exit 0
fi
if [[ "$metascript_included" == "yes" ]]
then
log_warn "metascript already included ($0)"
else
metascript_included=yes
# assume all tools are in lib/
toolsdir=$(dirname $(readlink -f $0))/lib
# all tools resources are relative to this directory
# at this step $(pwd) should be this of metascript.sh
# while $0 is this of caller script using metascript
# project directory
# relative
# toolsparentdir=$(realpath --relative-to "$(pwd)" $(readlink -f $0))/
# absolute
toolsparentdir=$(realpath $(readlink -f $0))/
if [[ -z $toolsdir ]]
then
# assume all tools are in lib/
toolsdir=$(dirname $(readlink -f $0))/lib
# all tools resources are relative to this directory
fi
if [[ -z $log_functions ]]
then
log_functions=$toolsdir/log_functions.sh
[[ -f $log_functions ]] || { echo "[FATAL] Missing $log_functions" >&2 ; exit 1 ;}
[[ -f $log_functions ]] || { echo "[FATAL] Missing $log_functions , toolsdir=$toolsdir script=$0" >&2 ; exit 1 ;}
source $log_functions
fi
@@ -36,7 +78,7 @@ metascript commands :
help|usage help or usage of this {$0} tool
dryrun|show|showdoc display what should/will be done
defersource= script file defining defer() non sandard function
defersource= script file defining defer() non standard function
defer= defer function to use, default is showdoc
toolsresourcesdir= where to pick resource
default to parent of script $toolsresourcesdir
@@ -54,7 +96,12 @@ usage()
showinfo()
{
echo $@
echo "$@"
}
metarun()
{
$defer $metasudo "$@"
}
showdoc()
@@ -62,10 +109,10 @@ showdoc()
if [[ $1 =~ ^tools/ ]]
then
# assumes it handles ENV_METASCRIPT_DEFER
$@
"$@"
else
echo '```'
autoquoteargs $@
autoquoteargs "$@"
echo
echo '```'
fi
@@ -92,11 +139,11 @@ execredirectfrom()
if [[ -n $defer ]]
then
echo '```'
autoquoteargs $@
autoquoteargs "$@"
echo ' < '"$tofile"
echo '```'
else
$@ < $tofile
"$@" < $tofile
fi
}
@@ -107,7 +154,7 @@ execredirectto()
if [[ -n $defer ]]
then
echo '```'
autoquoteargs $@
autoquoteargs "$@"
echo ' > '"$tofile"
echo '```'
else
@@ -115,19 +162,34 @@ execredirectto()
fi
}
execredirecttoroot()
{
tofile=$1
shift
if [[ -n $defer ]]
then
echo '```'
autoquoteargs "$@"
echo ' | sudo tee '"$tofile"
echo '```'
else
"$@" | sudo tee $tofile
fi
}
pipeto()
{
if [[ -n $defer ]]
then
echo '```'
echo -n 'cat << EOF| '
autoquoteargs $@
autoquoteargs "$@"
echo
cat
echo "EOF"
echo '```'
else
cat | $@
cat | "$@"
fi
}
@@ -355,6 +417,9 @@ parsemetaarg()
dryrun|show|showdoc)
defer=showdoc
;;
metasudo=*)
metasudo=${1/metasudo=}
;;
help|usage)
usage
;;
@@ -528,7 +593,7 @@ check_variable_in()
shift 2
local value=""
local values=$@
local values="$@"
eval value='$'"$var"
@@ -570,17 +635,148 @@ get_timestamp_second()
echo "$(date +"%Y%m%d%H%M%S")"
}
if [[ -z $ENV_METASCRIPT_RESOURCESDIR ]]
todo()
{
log_any TODO "$@"
}
get_resource_var() {
local varname="$1"
local default_value="$2"
eval value='$'"$varname"
if [[ -z $value ]]
then
echo "# ($0:metascript.sh:$LINENO) $(date)" >>$collect_context
if [[ -z $default_value ]]
then
log_error "resource $varname does not exists and no non empty default provided"
echo "# $varname=<MISSING>" >>$collect_context
exit 1
fi
log_warn "($0) Using default value '$varname'='$default_value' HARDCODED in script : should be fixed with proper default file .resources.var, see traces in $collect_context"
read "$varname" <<<"$default_value"
echo "$varname=$default_value" >>$collect_context
fi
}
setup_resources_var()
{
local resource_var="$1"
enforcefile "$resource_var" exists
while read line
do
if [[ $line =~ ^([a-zA-Z0-9_]+)=(.+)$ ]]
then
varname=${BASH_REMATCH[1]}
value=${BASH_REMATCH[2]}
read "$varname" <<<"$value"
elif [[ $line =~ ^# ]]
then
echo "$line"
else
log_warn "Invalid syntax in $resource_var '$line' does not match any expected expression"
fi
done <"$resource_var"
}
# allow to check mounted points
mountpoint_get_device()
{
local mount_point="$1"
$defer awk "{ if (\$2 == \""$mount_point"\") print \$1 ;}" /proc/mounts
}
device_get_mountpoints()
{
local device="$1"
$defer awk "{ if (\$1 == \""$device"\") print \$2 ;}" /proc/mounts
}
mount_if_needed()
{
local mountpoint="$1"
local mountdevice="$2"
local param="$3"
device=$(mountpoint_get_device "$mountpoint")
enforcedir "$mountpoint" exists
# device is a device ...
# enforcefile "$mountdevice" exists
if [[ -z $device ]]
then
$metarun mount $param "$mountdevice" "$device"
elif [[ "$device" == "$mountdevice" ]]
then
log_info "$device already mounted on $mountdevice"
else
log_warn "Another device $device is mounted on $mountdevice, not $mountdevice"
fi
}
umount_if_needed()
{
local mountpoint="$1"
local mountdevice="$2"
device=$(mountpoint_get_device "$mountpoint")
if [[ -n "$device" ]]
then
if [[ "$device" == "$mountpoint" ]]
then
$metarun umount "$mountpoint"
else
log_warn "Another device $device is mounted on $mountdevice, not $mountdevice"
fi
fi
}
# collect all hardcoded values.
mkdir -p ~/.artlog
collect_context=~/.artlog/collect_context.var
if [[ -z $toolsresourcesdir ]]
then
toolsresourcesdir=$toolsparentdir
else
toolsresourcesdir=$ENV_METASCRIPT_RESOURCESDIR
# project directory
# from current $(pwd) will follow parent dir hierarchy to find .resources.var
dir="$(pwd)"
while [[ -n $dir ]] && [[ -d $dir ]] && [[ ! -f $dir/.resources.var ]]
do
new_dir=$(dirname "$dir")
if [[ $new_dir == $dir ]]
then
# protect against infinite loop
break
fi
dir="$new_dir"
done
if [[ -f $dir/.resources.var ]]
then
toolsresourcesdir=$dir
else
if [[ -z $ENV_METASCRIPT_RESOURCESDIR ]]
then
toolsresourcesdir=$toolsparentdir
else
toolsresourcesdir=$ENV_METASCRIPT_RESOURCESDIR
fi
fi
fi
# quick way to give scl patches to fill scl_arg array
if [[ -f $toolsparentdir/.scl_env ]]
resources_var=$toolsresourcesdir/.resources.var
if [[ -f $resources_var ]]
then
source $toolsparentdir/.scl_env
setup_resources_var "$resources_var"
else
log_warn "No $resources_var found"
fi
# quick way to give scl patches to fill scl_arg array
if [[ -f $toolsresourcesdir/.scl_env ]]
then
source $toolsresourcesdir/.scl_env
fi
# empty defer means doit
@@ -588,6 +784,11 @@ defer=$ENV_METASCRIPT_DEFER
showinfo=showinfo
allparms=$@
allparms="$@"
applymetaargs=applymetaargs
metarun=$defer
# metascript included
fi