run docker dev nextcloud
- missing clone info - missing setup of certificates (mkcert and so one ... )
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user