135 lines
3.5 KiB
Bash
Executable File
135 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
STANDARD_HOME_DIR="${STANDARD_HOME_DIR:-/home/cmep4i}"
|
|
STANDARD_RUN_USER="${STANDARD_RUN_USER:-cmep4i}"
|
|
STANDARD_JAVA_HOME="${STANDARD_JAVA_HOME:-${STANDARD_HOME_DIR}/jdk}"
|
|
|
|
step="${1:-}"
|
|
case "${step}" in
|
|
setfraq)
|
|
script="${STANDARD_HOME_DIR}/cpackage/toolsh/setfraq.sh"
|
|
;;
|
|
setftq)
|
|
script="${STANDARD_HOME_DIR}/cpackage/toolsh/setftq.sh"
|
|
;;
|
|
settlq)
|
|
script="${STANDARD_HOME_DIR}/cpackage/toolsh/settlq.sh"
|
|
;;
|
|
setsptp)
|
|
script="${STANDARD_HOME_DIR}/cpackage/toolsh/setsptp.sh"
|
|
;;
|
|
*)
|
|
echo "unsupported standard vendor step: ${step}" >&2
|
|
exit 64
|
|
;;
|
|
esac
|
|
|
|
if [ "$(id -u)" != "0" ]; then
|
|
echo "this wrapper must be executed as root through sudo" >&2
|
|
exit 77
|
|
fi
|
|
|
|
if [ ! -f "${script}" ]; then
|
|
echo "standard vendor script not found: ${script}" >&2
|
|
exit 66
|
|
fi
|
|
|
|
read_cpconfig_value() {
|
|
local key="$1"
|
|
local file="${STANDARD_HOME_DIR}/cpconfig.cfg"
|
|
if [ ! -f "${file}" ]; then
|
|
return 0
|
|
fi
|
|
awk -F= -v key="${key}" '
|
|
$1 == key {
|
|
value = substr($0, index($0, "=") + 1)
|
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", value)
|
|
print value
|
|
exit
|
|
}
|
|
' "${file}"
|
|
}
|
|
|
|
local_ipv4s() {
|
|
if command -v ip >/dev/null 2>&1; then
|
|
ip -o -4 addr show | awk '{ split($4, parts, "/"); print parts[1] }'
|
|
fi
|
|
if command -v hostname >/dev/null 2>&1; then
|
|
hostname -I 2>/dev/null | tr ' ' '\n' | awk '/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/'
|
|
fi
|
|
}
|
|
|
|
has_local_ip() {
|
|
local expected="$1"
|
|
if [ -z "${expected}" ]; then
|
|
return 1
|
|
fi
|
|
local_ipv4s | awk -v expected="${expected}" '$0 == expected { found = 1 } END { exit found ? 0 : 1 }'
|
|
}
|
|
|
|
resolve_standard_node_dir() {
|
|
local node01
|
|
local node02
|
|
node01="$(read_cpconfig_value "sptp_01app_ip")"
|
|
node02="$(read_cpconfig_value "sptp_02app_ip")"
|
|
if has_local_ip "${node02}" && ! has_local_ip "${node01}"; then
|
|
echo "02"
|
|
return 0
|
|
fi
|
|
echo "01"
|
|
}
|
|
|
|
prepare_setsptp_templates() {
|
|
local node_dir
|
|
local cmsp_src
|
|
local cmtp_src
|
|
local cmsp_dst
|
|
local cmtp_dst
|
|
|
|
node_dir="$(resolve_standard_node_dir)"
|
|
cmsp_src="${STANDARD_HOME_DIR}/cpackage/cmsp/${node_dir}"
|
|
cmtp_src="${STANDARD_HOME_DIR}/cpackage/cmtp/${node_dir}"
|
|
cmsp_dst="${STANDARD_HOME_DIR}/cmsp"
|
|
cmtp_dst="${STANDARD_HOME_DIR}/cmtp"
|
|
|
|
if [ ! -d "${cmsp_src}" ]; then
|
|
echo "standard CMSP template directory not found: ${cmsp_src}" >&2
|
|
exit 67
|
|
fi
|
|
if [ ! -d "${cmtp_src}" ]; then
|
|
echo "standard CMTP template directory not found: ${cmtp_src}" >&2
|
|
exit 67
|
|
fi
|
|
|
|
mkdir -p "${cmsp_dst}" "${cmtp_dst}"
|
|
cp -a "${cmsp_src}/." "${cmsp_dst}/"
|
|
cp -a "${cmtp_src}/." "${cmtp_dst}/"
|
|
echo "prepared standard receiver templates from node ${node_dir}"
|
|
}
|
|
|
|
if [ "${step}" = "setsptp" ]; then
|
|
prepare_setsptp_templates
|
|
fi
|
|
|
|
run_payload='
|
|
set -euo pipefail
|
|
standard_home="$1"
|
|
java_home="$2"
|
|
script="$3"
|
|
|
|
cd "${standard_home}"
|
|
export JAVA_HOME="${java_home}"
|
|
export PATH="${JAVA_HOME}/bin:/usr/local/bin:/usr/bin:/bin:${PATH:-}"
|
|
|
|
exec /bin/bash "${script}"
|
|
'
|
|
|
|
if command -v runuser >/dev/null 2>&1; then
|
|
exec runuser -u "${STANDARD_RUN_USER}" -- /bin/bash -lc "${run_payload}" -- \
|
|
"${STANDARD_HOME_DIR}" "${STANDARD_JAVA_HOME}" "${script}"
|
|
fi
|
|
|
|
exec sudo -n -u "${STANDARD_RUN_USER}" /bin/bash -lc "${run_payload}" -- \
|
|
"${STANDARD_HOME_DIR}" "${STANDARD_JAVA_HOME}" "${script}"
|