summaryrefslogtreecommitdiff
path: root/net-misc/asterisk-base
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-09-14 16:47:47 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-09-14 16:47:47 +0100
commitcdb999af22d9aa464bfd480fc9f5ebda71fc89e2 (patch)
treededc259e3cf8ed2fac9979725038b722a866579c /net-misc/asterisk-base
parentd938920a33f03124f4e211a67d9291283442caa1 (diff)
gentoo auto-resync : 14:09:2023 - 16:47:47
Diffstat (limited to 'net-misc/asterisk-base')
-rw-r--r--net-misc/asterisk-base/Manifest2
-rw-r--r--net-misc/asterisk-base/asterisk-base-2.ebuild40
-rw-r--r--net-misc/asterisk-base/files/asterisk_wrapper-2227
3 files changed, 269 insertions, 0 deletions
diff --git a/net-misc/asterisk-base/Manifest b/net-misc/asterisk-base/Manifest
index 4d6d9c84a8bb..946d9e951333 100644
--- a/net-misc/asterisk-base/Manifest
+++ b/net-misc/asterisk-base/Manifest
@@ -1,9 +1,11 @@
AUX asterisk.service-1 456 BLAKE2B 4a5da9f0e45aa3b1eff29d59317d09e061e0a0e3c0e38cd39732e7880e96b7f34a68b44001d2608a7636b1259803f567b94bdb85ef15428727427fa1081ee385 SHA512 d443c3821d50e78a76b7cad8906f560ab0f4b58007f6c9322256626bc4a502bdbd844f1ee48cdaf86d499bf78f50cebb0cfc88a0cab0c4876f4e853bc2e76aa8
AUX asterisk.service-1.conf 311 BLAKE2B df7af706230a92fa0110f4b081d305c2302a7e6e5aff094ea3f32cfbf7a3f0dcae3c70c5f6a648d47067913450cbb0280b7a69bd2e6dcd3d1b7eaba858739794 SHA512 449d25743b53e2b1947de4af4c63a77e0226d6195c38f4cc9639e9c0c11a360bcbf1ec6492d6c1f6c17325c508f51bc3f82db5e8d80ce33619e353a651c6c092
AUX asterisk_wrapper-1 7221 BLAKE2B c4c696e6e79329903e5e33cec03cd11db752e2915c247cd4d503cfc00bbafab56a560dc37c8045604b4c793b2289e03096f7b0e66535df53a375e1d74b617dbd SHA512 472ee92546dbf725e9f1fca19e258e0d6c4005923edb27bf0b6bc08a18a86913a54f85edd610c114cd867c601fc029928d49f55afec4387b54566ed3835fca7d
+AUX asterisk_wrapper-2 7225 BLAKE2B a499397610bf48c22d86bbb7b56993ae41458fa185749a61105a99e72c3b79cdf4fa0307fcc6703efac58bb9f8eb7c7fb8aa0e02581e0c9b6f9132a47e33dfcd SHA512 4b083ee919c2e060053c5db4374e0a12b108a30b54ca5f239d84e5b754daf4e9f36ba078bfde6573e7f9027d91298d325c05bbaaa7f3d2622448f40197f4a85e
AUX confd-1 4050 BLAKE2B cda2632a9b951f2061d4d7e25b221d0473c623860aa96eeb2bf0b8a8354606cc6b22e98ac3450d160e13507c21174d086ebecce3a4b6a470a3e19dc6a6a98784 SHA512 922c59f08f75f9c18955d7337caa8e1b12a0037909903f6afee707ffca8b784011ba35188b8a921ea8b9c6238556dc70bdd1b5716af7894c09821c03b4808340
AUX initd-1 8882 BLAKE2B 0dd7507254955ccc21688068107211380289ff468ad74140f135097d2babdb1b31db161bf2d91fa237a883a94c4d1af84c31856cee88f07cee52a17f212ad720 SHA512 2dd51d8342e212df4d98576de8b1017d6e7fdd257a70b49d2baf78bc1640911e351ec89b14fe4c55d905d738e277f2b65d4e627535eecc5eb195e7678b3d9759
AUX logrotate-1 848 BLAKE2B db047c4cc1c3b1ea20ce6a3313332622374bfae9728b09f8b5bb2bfa6136000b95dbfd0a58ac172ac6c41b99c846d8e4ee630ac091f28552b39cfd758772ab4b SHA512 02eba497df35690755755c840534cc00f7851c75f4103381edec2d9c21681c302e2e4a48f218792292bf378b269b6f6a0e4d0b2b571a4e25921624710764b841
AUX tmpfiles-1.conf 84 BLAKE2B 133761739570a08bebb88059df1a870ddaef194bd1c5a1a4d4626d3791e3cb664b03ff51260892167a22c3cfca2caa02d162e7476070ec1374a92ef24ec799dc SHA512 680a4478d3a501c26fa19e29fad18389e7e02f04c8b9a676ae0f192fa6afbed95a826b74696c6c5459aba5aba6a16c57df8a9c5ff486e9dc8f1cbd01185e9320
EBUILD asterisk-base-1.ebuild 1009 BLAKE2B fee1b726a36acff9a1ec4c56a157bf5d03363bc869aa82f6ca3bb9e0e68ca0a240248fcdafb1e0280ce9dc564dbeea5b06648b73d7bc43f38f818091012fdbd2 SHA512 c73fdf5eca5afe8fb53e52d76bdb6274fe05e9a1d2b0ec57fb29c91916b7c56b2c36b2895e095a5a8d960da478c81fec024f340ade1269f311fc86b104bb2033
+EBUILD asterisk-base-2.ebuild 1009 BLAKE2B f6eb67305505dd5d808ddd4d3f5fdad78ac169cfdc338eafcaf9801eb4f94b2dbed6069849e223084991e752fd9d217cff232dc844db26031475be14c1d4ef23 SHA512 43f757d7c8fd1b94945a074d13ded8ce71e8b18aecd212b32dd1a0880a6d20e08e93f060f2a9cdd72bc69efb945a72f2b7d06c1678e79a0ca7a04eb20505db64
MISC metadata.xml 388 BLAKE2B 8627eaf1867246255f9cf5e886749300fe854b6fc4add00c1fb7395a41349a42aeaf9bcd1866b1ef8a6b3ecd04416cd6ebb7dcebd266ae341af4aaa144de510d SHA512 238ec6ad37a6fcb588eeb6f5f00befa9e9f483cbd012d7e98b9627a3bf3f401ea74aee560a1909458a471e6c44b3ea13eb3a7d30e5f5a1f5c5464c9775d5614d
diff --git a/net-misc/asterisk-base/asterisk-base-2.ebuild b/net-misc/asterisk-base/asterisk-base-2.ebuild
new file mode 100644
index 000000000000..7d89202ca56f
--- /dev/null
+++ b/net-misc/asterisk-base/asterisk-base-2.ebuild
@@ -0,0 +1,40 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit systemd tmpfiles
+
+DESCRIPTION="Gentoo Asterisk init scripts"
+HOMEPAGE="https://www.gentoo.org/wiki/No_homepage"
+# Need to set S due to PMS saying we need it existing, but no SRC_URI
+S="${WORKDIR}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~arm64 ~ppc ~ppc64 x86"
+
+RDEPEND="
+ net-misc/asterisk
+ !<=net-misc/asterisk-16.30.0:0/16
+ !<=net-misc/asterisk-18.18.0:0/18
+ !<=net-misc/asterisk-20.3.0:0/20
+"
+
+src_install() {
+ newinitd "${FILESDIR}/initd-1" asterisk
+ newconfd "${FILESDIR}/confd-1" asterisk
+ newsbin "${FILESDIR}/asterisk_wrapper-2" asterisk_wrapper
+
+ systemd_newunit "${FILESDIR}/asterisk.service-1" asterisk.service
+ systemd_install_serviced "${FILESDIR}/asterisk.service-1.conf" asterisk.service
+
+ newtmpfiles "${FILESDIR}/tmpfiles-1.conf" asterisk.conf
+
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/logrotate-1" asterisk
+}
+
+pkg_postinst() {
+ tmpfiles_process asterisk.conf
+}
diff --git a/net-misc/asterisk-base/files/asterisk_wrapper-2 b/net-misc/asterisk-base/files/asterisk_wrapper-2
new file mode 100644
index 000000000000..cd7d5ff6504e
--- /dev/null
+++ b/net-misc/asterisk-base/files/asterisk_wrapper-2
@@ -0,0 +1,227 @@
+#! /bin/sh
+# Copyright 1999-2023 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}"
+
+# bash builtins are special ...
+echo_e="$([ "${SHELL}" = "/bin/bash" ] && echo "echo -e" || echo echo)"
+
+rundir=/run/asterisk
+restartdelay=5
+nicelevel=0
+maxfd=4096
+dumpcore=0
+unset tty instance syslog corecompress corerename crashemail
+
+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
+}
+
+matchreg() {
+ local v=$1
+ shift
+ echo "$v" | grep -q "$@"
+}
+
+while [ "$1" != "--" ]; do
+ case "$1" in
+ --corecompress|--corerename|--crashemail|--dumpcore|--instance|--maxfd|--nicelevel|--restartdelay|--rundir|--tty)
+ eval "${1#--}=\"\${2}\""
+ shift 2
+ ;;
+ --syslog)
+ eval "${1#--}=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 # --
+
+if ! matchreg "${restartdelay}" "^[1-9][0-9]*$"; then
+ echo "Invalid --restartdelay value ${restartdelay}, resetting to 5." >&2
+ restartdelay=5
+fi
+
+if ! matchreg "${maxfd}" "^[1-9][0-9]*$"; then
+ echo "Invalid --maxfd value, resetting to 4096." >&2
+ maxfd=4096
+fi
+
+if [ $maxfd -lt 1024 ]; then
+ echo "maxfd is guaranteed too low, bumping to at least 1024" >&2
+ maxfd=1024
+fi
+
+if [ -n "${nicelevel}" ] && ! matchreg "${nicelevel}" -E "^-?[0-9]+$"; then
+ echo "Invalid --nicelevel which much be a valid integer (values from -20 to 20 makes sense)."
+ exit 1
+fi
+
+if [ -n "${corecompress}" -a ! -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
+ tdir="$(mktemp -d)"
+ tfifo="${tdir}/asterisk_wrapper.logger.fifo"
+ mkfifo "${tfifo}"
+ logger -t "asterisk_wrapper${instance:+:}${instance}" --id=$$ >/dev/null 2>&1 <"${tfifo}" &
+ exec 1>"${tfifo}"
+ exec 2>&1
+
+ rm "${tfifo}"
+ rmdir "${tdir}"
+fi
+
+echo "Initializing ${progname}"
+
+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" ] && \
+ [ "$(cat "${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="$(cat "${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
+
+prlimit --core=${dumpcore} --pid=$$
+prlimit --nofile=${maxfd} --pid=$$
+
+ast_cmd=/usr/sbin/asterisk
+if [ -n "${nicelevel}" ]; then
+ ast_cmd="nice -n ${nicelevel} ${ast_cmd}"
+fi
+
+while [ -r "${rundir}/${progname}.pid" ]; do
+ # Another instance is looking to replace us, so terminate.
+ if [ "$(cat "${rundir}/${progname}.pid")" != $$ ]; then
+ break
+ fi
+
+ echo "Starting asterisk with ${ast_cmd} $*"
+ 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="$(echo "${corerename}" | sed -e "s/%h/$(hostname)/" \
+ -e "s/%D/$(date +%Y%m%d)/" -e "s/%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}"
+ fi
+
+ MSG="${MSG}, Core 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