#!/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;}'