152 lines
2.9 KiB
Bash
152 lines
2.9 KiB
Bash
#!/bin/sh
|
|
|
|
volume_root='/run/ngx'
|
|
target_root="${volume_root}/conf"
|
|
persist_dirs='cache lib log'
|
|
empty_dir='/var/lib/empty'
|
|
|
|
## unexporting variable in (POSIX) sh is PITA =/
|
|
# have_envvar() {
|
|
# [ -n "$1" ] || return 1
|
|
# grep -Ezq "^$1=" /proc/$$/environ || return
|
|
# }
|
|
# unexport() {
|
|
# local ___k ___v
|
|
# for ___k ; do
|
|
# [ -n "${___k}" ] || continue
|
|
# have_envvar "${___k}" || continue
|
|
|
|
# ___v=$(eval printf '%s' "\"\${${___k}}\"")
|
|
# eval "unset ${___k}"
|
|
# eval "${___k}=$(env printf '%s' \"\${___v}\")"
|
|
# done
|
|
# }
|
|
|
|
## likely the same as in https://pkg.go.dev/strconv#ParseBool
|
|
gobool_to_int() {
|
|
## local value=$1
|
|
## local default=$2
|
|
case "${1:-_}" in
|
|
1 | [Tt] | [Tt][Rr][Uu][Ee] ) echo 1 ;;
|
|
0 | [Ff] | [Ff][Aa][Ll][Ss][Ee] ) echo 0 ;;
|
|
* ) echo "${2:-error}" ;;
|
|
esac
|
|
}
|
|
|
|
[ -n "${__IEP_SRC:-}" ] || __IEP_SRC="$0"
|
|
|
|
log_always() {
|
|
if [ "${IEP_DEBUG}" = 1 ] ; then
|
|
echo "# $(date +'%Y-%m-%d %H:%M:%S.%03N %z'): ${__IEP_SRC}${*:+: $*}"
|
|
else
|
|
echo "# ${__IEP_SRC}${*:+: $*}"
|
|
fi >&2
|
|
}
|
|
|
|
log() {
|
|
[ "${IEP_VERBOSE}" = 0 ] || log_always "$@"
|
|
}
|
|
|
|
ln_s() {
|
|
if [ "${IEP_VERBOSE}" = 0 ] ; then
|
|
ln -s "$@" || return
|
|
else
|
|
ln -sv "$@" || return
|
|
fi
|
|
}
|
|
cp_a() {
|
|
if [ "${IEP_VERBOSE}" = 0 ] ; then
|
|
cp -a "$@" || return
|
|
else
|
|
cp -av "$@" || return
|
|
fi
|
|
}
|
|
|
|
ln_cp() {
|
|
if [ -h "$1" ] ; then
|
|
ln_s "$(readlink -e "$1")" "$2"
|
|
else
|
|
cp_a "$1" "$2"
|
|
fi
|
|
}
|
|
|
|
have_cmd() { command -v "$1" >/dev/null 2>&1 || return ; }
|
|
|
|
strip_suffix() { printf '%s' "${1%"$2"}" | tr -s '/' ; }
|
|
|
|
user_install() {
|
|
if [ "${IEP_ROOT}" = 1 ] ; then
|
|
install -o "${NGX_USER}" -g "${NGX_GROUP}" "$@"
|
|
else
|
|
install "$@"
|
|
fi
|
|
}
|
|
|
|
is_builtin_module() {
|
|
[ -n "${1:-}" ] || return 1
|
|
[ -n "${2:-}" ] || return 1
|
|
|
|
[ -f "/etc/angie.dist/builtin.$1" ] || return 1
|
|
[ -s "/etc/angie.dist/builtin.$1" ] || return 1
|
|
|
|
grep -Fxq -e "$2" "/etc/angie.dist/builtin.$1" || return 1
|
|
}
|
|
|
|
append_list() {
|
|
if [ -n "$2" ] ; then
|
|
printf '%s' "${1:-}${1:+ }$2"
|
|
else
|
|
printf '%s' "$1"
|
|
fi
|
|
}
|
|
|
|
prepend_list() {
|
|
if [ -n "$2" ] ; then
|
|
printf '%s' "$2${1:+ }${1:-}"
|
|
else
|
|
printf '%s' "$1"
|
|
fi
|
|
}
|
|
|
|
list_have_item() {
|
|
[ -n "$1" ] || return 1
|
|
[ -n "$2" ] || return 1
|
|
case " $1 " in
|
|
*" $2 "* ) return 0 ;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
normalize_list() {
|
|
[ -n "$1" ] || return 0
|
|
|
|
printf '%s' "$1" \
|
|
| sed -zE 's/[[:space:]]+/ /g;s/^ //;s/ $//'
|
|
}
|
|
|
|
sort_dedup_list() {
|
|
[ -n "$1" ] || return 0
|
|
|
|
printf '%s' "$1" \
|
|
| tr -s '[:space:]' '\n' | sort -uV \
|
|
| sed -zE 's/[[:space:]]+/ /g;s/^ //;s/ $//'
|
|
}
|
|
|
|
float_div() {
|
|
mawk -v "a=$1" -v "b=$2" 'BEGIN{print a/b;exit;}' </dev/null
|
|
}
|
|
|
|
find_fast() {
|
|
find "$@" -printf . -quit | grep -Fq .
|
|
}
|
|
|
|
randN() {
|
|
od -v -A n -t x1 -N "$1" < /dev/urandom | tr -d '[:space:]'
|
|
}
|
|
|
|
re_ipv4_oct='[0-9]|[1-9][0-9]|[1-9][0-9][0-9]|2[0-4][0-9]|25[0-5]'
|
|
re_ipv4_addr="^${re_ipv4_oct}\.${re_ipv4_oct}\.${re_ipv4_oct}\.${re_ipv4_oct}\$"
|
|
is_ipv4_address() {
|
|
[ -n "$1" ] || return 1
|
|
printf '%s' "$1" | grep -zEq "${re_ipv4_addr}" || return 1
|
|
} |