summaryrefslogtreecommitdiff
path: root/net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-07-13 13:36:46 +0100
committerV3n3RiX <venerix@koprulu.sector>2022-07-13 13:36:46 +0100
commit7b02e37a04e4051a91a109814d386711f41f9a4b (patch)
treed0689f14f1d1df3a6a2525512a6812b146064a9e /net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1
parent5c0c70d5917e66743293789a6d6fd7d72250eb32 (diff)
gentoo auto-resync : 13:07:2022 - 13:36:46
Diffstat (limited to 'net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1')
-rw-r--r--net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1202
1 files changed, 202 insertions, 0 deletions
diff --git a/net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1 b/net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1
new file mode 100644
index 000000000000..477812171a86
--- /dev/null
+++ b/net-misc/asterisk/files/asterisk_wrapper-16.26.1-18.12.1
@@ -0,0 +1,202 @@
+#! /bin/bash
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+progname="$(basename "$0")"
+
+T="$(getopt -o "h" --long "help,corecompress:,corerename:,crashemail:,dumpcore:,instance:,maxfd:,nicelevel:,restartdelay:,rundir:,syslog,tty:" -n "$progname" -- "$@")"
+eval set -- "${T}"
+
+rundir=/run/asterisk
+restartdelay=5
+nicelevel=0
+maxfd=4096
+dumpcore=0
+unset tty instance syslog corecompress corerename crashemail
+
+function usage() {
+ cat <<USAGE
+USAGE: $progname [options] -- asterisk options"
+OPTIONS:
+ -h|--help
+ Output this text and exit.
+ --corecompress[=tool]
+ asterisk's address space can get quite large, compressing the core dumps can
+ save significant space, especially if asterisk core dumps frequently.
+ --corerename pattern
+ It's assumed core files (if enabled) will go into PWD, this specifies a
+ rename pattern. The following % codes are recognised:
+ %h - hostname
+ %D - date in format YYYYMMDD
+ %T - time in format HHMMSS
+ It must be mentioned that if kernel.core_pattern (sysctl) is modified
+ from the default 'core' value this option is unlikely to work.
+ --crashemail email@address
+ This will send an email whenver asterisk crashes (does not terminate
+ cleanly with a zero exit code). You need a working sendmail binary.
+ --dumpcore sizelimit
+ Maximum size of core limit, or the word unlimited. Default is disabled
+ (sizelimit of 0).
+ --instance name
+ Updated label for sylog logger.
+ --maxfd maxfd
+ Sets the maximum number of file descriptors (default 4096).
+ --nicelevel nicelevel
+ Will set the asterisk nice level to the specified value.
+ --restartdelay delay_in_seconds
+ Number of seconds to wait before attempting to restart asterisk. This helps
+ to avoid tight-loop crashes. Defaults to 5s. Minimum 1.
+ --rundir path
+ Where to store the asterisk asterisk_wrapper.pid file. In order to terminate the
+ wrapper (when asterisk next terminates), remove this file.
+ --syslog
+ Pass to redirect output to syslog rather than using stdout and stderr.
+ --tty tty
+ If asterisk should be attached to a TTY device, then pass this, eg --tty /dev/tty8.
+ Use of this is not recommended in general.
+
+NOTE: There are some quirks with bash getopt shunting non-options prior to --
+ to asterisk options, so be careful of this. Typically stuff will break.
+USAGE
+}
+
+while [ "$1" != "--" ]; do
+ case "$1" in
+ --corecompress|--corerename|--crashemail|--dumpcore|--instance|--maxfd|--nicelevel|--restartdelay|--rundir|--tty)
+ eval "${1:2}=\"\${2}\""
+ shift 2
+ ;;
+ --syslog)
+ eval "${1:2}=1"
+ shift
+ ;;
+ --help|-h)
+ usage
+ exit 0
+ ;;
+ *)
+ echo "BUG: Don't know how to process option $1." >&2
+ usage >&2
+ exit 1
+ ;;
+ esac
+done
+shift # --
+
+ast_opts=("$@")
+
+if ! [[ "${restartdelay}" =~ ^[1-9][0-9]*$ ]]; then
+ echo "Invalid --restartdelay value ${restartdelay}, resetting to 5." >&2
+ restartdelay=5
+fi
+
+if [[ -n "${corecompress}" && ! -x "${corecompress}" ]]; then
+ corecompress=$(which "${corecompress}" 2>/dev/null)
+ [[ -z "${corecompress}" ]] && echo "Error locating core compression tool, disabling core compression." >&2
+fi
+
+# Before here will still be output (potentially munged, to the terminal).
+if [[ -n "${syslog}" ]]; then
+ exec 1> >(logger -t "asterisk_wrapper${instance:+:}${instance}" &>/dev/null)
+ exec 2>&1
+fi
+
+echo "Initializing ${progname}"
+
+function cleanup(){
+ # There is a tiny race here, if this gets replaced inbetween the read and the rm.
+ # To fix this is quite complex in that we need to keep an fd, compare inode numbers
+ # and manage flock's.
+ [[ -r "${rundir}/${progname}.pid" ]] && \
+ [[ "$(<"${rundir}/${progname}.pid")" = $$ ]] && \
+ rm "${rundir}/${progname}.pid"
+}
+trap cleanup EXIT
+
+# We could be clobbering an old version's pid, in which case it'll just terminate on
+# it's next iteration. Towards this end, if asterisk.pid exists, attempt to find it's
+# config file and request a core stop when convenient so that we can take over.
+echo $$ > "${rundir}/${progname}.pid"
+if [[ -r "${rundir}/asterisk.pid" ]]; then
+ ast_pid="$(<"${rundir}/asterisk.pid")"
+ [[ -r "/proc/${ast_pid}/cmdline" ]] && ast_conf="$(tr '\0' '\n' < "/proc/${ast_pid}/cmdline" | grep -A1 '^-C$' | tail -n1)" && /usr/sbin/asterisk -C "${ast_conf:-/etc/asterisk/asterisk.conf}" -rx "core stop when convenient"
+ # We may hit a few (depending on how busy the server is a great many number) loop failures still ...
+fi
+
+ulimit -c "${dumpcore}"
+ulimit -n "${maxfd}"
+
+ast_cmd=()
+if [ -n "${nicelevel}" ]; then
+ ast_cmd+=(nice -n "${nicelevel}")
+fi
+ast_cmd+=(/usr/sbin/asterisk "${ast_opts[@]}")
+
+while [[ -r "${rundir}/${progname}.pid" ]]; do
+ # Another instance is looking to replace us, so terminate.
+ if [[ "$(<"${rundir}/${progname}.pid")" != $$ ]]; then
+ break
+ fi
+
+ echo "Starting asterisk with ${ast_opts[*]}"
+ if [ -n "${tty+yes}" ]; then
+ /bin/stty -F "${tty}" sane
+ "${ast_cmd[@]}" >"${tty}" 2>&1 <"${tty}"
+ result=$?
+ else
+ # Purposefully leave stderr alone, this will under certain odd cases (like exceptions,
+ # and other odd cases logged from glibc) result in those logs at least being captured
+ # in syslog.
+ "${ast_cmd[@]}" </dev/null >/dev/null
+ result=$?
+ fi
+
+ if [ "$result" -eq 0 ]; then
+ echo "Asterisk terminated normally."
+ break
+ fi
+
+ if [ "$result" -gt 128 ]; then
+ signal="$(( result - 128 ))"
+ signame="$(kill -l $signal 2>/dev/null)"
+ MSG="Asterisk terminated with Signal: $signal (SIG${signame:-???})"
+
+ # TODO: figure out how to use /proc/sys/kernel/core_pattern here, but if someone is using
+ # that, chances are they're already dealing with what we want here.
+ if [[ -r core ]]; then
+ if [[ -n "${corerename+yes}" ]]; then
+ core_target="${core_pattern}"
+ core_target="${core_target//%h/$(hostname)}"
+ core_target="${core_target//%D/$(date +%Y%m%d)}"
+ core_target="${core_target//%T/$(date +%H%M%S)}"
+ mv core "${core_target}"
+ core_target=$(readlink -f "${core_target}")
+ else
+ core_target=$(readlink -f core)
+ fi
+
+ if [[ -n "${corecompress}" && -x "${corecompress}" ]]; then
+ "${corecompress}" "${core_target}"
+ # TODO: Figure out a way to tag the extension onto core_target.
+ fi
+
+ MSG="${MSG}\r\nCore dumped: ${core_target}"
+ fi
+ else
+ MSG="Asterisk terminated with return code: $result"
+ fi
+
+ [ -n "${tty+yes}" ] \
+ && echo "${MSG}" >"${tty}" \
+ || echo "${MSG}"
+
+ if [[ -n "${crashemail+yes}" && -x /usr/sbin/sendmail ]]; then
+ echo -e -n "Subject: Asterisk crashed\r\n${MSG}\r\n" |\
+ /usr/sbin/sendmail "${crashemail}"
+ fi
+ echo "Restarting asterisk after ${restartdelay}s ..."
+ sleep "${restartdelay}"
+done
+
+echo "Terminating $progname."
+exit 0