#!/bin/sh
##
## Setup a supervised Mailman qrunner service
## Copyright (c) 2008-2018 SATOH Fumiyasu @ OSS Technology Corp., Japan
##               <https://www.OSSTech.co.jp/>
##
## License: GNU General Public License version 2 or later
##

set -u
umask 0022

pdie()
{
  echo "$0: ERROR: $*" 1>&2
  exit 1
}

## Options
## ======================================================================

root="${MAILMAN_SVCONF_ROOT-}"
sv_cmd="/opt/osstech/lib/mailman/bin/mailmanctl"
sv_env="
  COMMAND
  ARGV0
  USER
"

if [ $# -ne 2 ]; then
  echo "Usage: $0 /SVDIR USER" 1>&2
  exit 1
fi

sv_dir="$1"; shift
sv_user="$1"; shift

## Create service directory
## ======================================================================

mkdir "$root$sv_dir" || exit 1
mkdir "$root$sv_dir/env" || exit 1

## The "once" is an OSSTech-specific file and is used by
## /etc/init.d/svinit, not for supervise(8).
touch "$root$sv_dir/down" "$root$sv_dir/once" || exit 1

for env in $sv_env; do
  touch "$root$sv_dir/env/$env" || exit 1
done
echo "$sv_cmd" >"$root$sv_dir/env/COMMAND" || exit 1
echo "$sv_user" >"$root$sv_dir/env/USER" || exit 1

cat <<'EOT_SV_RUN' >"$root$sv_dir/run" || exit 1
#!/bin/sh
exec 2>&1
exec envdir ./env sh -c '
  echo "PID: $$"
  env |sort |sed "s/^/Environment: /"
  set -- \
    setuidgid "$USER" \
    argv0 \
    "$COMMAND" \
    "${ARGV0:-sv:`pwd`}" \
    --foreground \
    start \
  ;
  echo "Execute: $@"
  wait
  exec "$@"
'
EOT_SV_RUN
chmod 0755 "$root$sv_dir/run" || exit 1

exit 0
