commit:     959deea778d9aa4f174493f2a9d390d14a3c4df1
Author:     Jaco Kroon <jaco <AT> uls <DOT> co <DOT> za>
AuthorDate: Sun Jul  9 19:46:19 2023 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Fri Aug 11 08:12:05 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=959deea7

net-misc/asterisk-base: new package, add 1

Closes: https://bugs.gentoo.org/907060

Signed-off-by: Jaco Kroon <jaco <AT> uls.co.za>
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 net-misc/asterisk-base/asterisk-base-1.ebuild      |  42 +++
 net-misc/asterisk-base/files/asterisk.service-1    |  23 ++
 .../asterisk-base/files/asterisk.service-1.conf    |  10 +
 net-misc/asterisk-base/files/asterisk_wrapper-1    | 227 +++++++++++++++
 net-misc/asterisk-base/files/confd-1               | 169 +++++++++++
 net-misc/asterisk-base/files/initd-1               | 311 +++++++++++++++++++++
 net-misc/asterisk-base/files/logrotate-1           |  27 ++
 net-misc/asterisk-base/files/tmpfiles-1.conf       |   2 +
 net-misc/asterisk-base/metadata.xml                |  12 +
 9 files changed, 823 insertions(+)

diff --git a/net-misc/asterisk-base/asterisk-base-1.ebuild 
b/net-misc/asterisk-base/asterisk-base-1.ebuild
new file mode 100644
index 000000000000..83c1cd3dee45
--- /dev/null
+++ b/net-misc/asterisk-base/asterisk-base-1.ebuild
@@ -0,0 +1,42 @@
+# 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-1" 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.service-1 
b/net-misc/asterisk-base/files/asterisk.service-1
new file mode 100644
index 000000000000..08245d9fe87f
--- /dev/null
+++ b/net-misc/asterisk-base/files/asterisk.service-1
@@ -0,0 +1,23 @@
+[Unit]
+Description=Asterisk PBX and telephony daemon.
+After=network.target
+
+[Service]
+Type=simple
+WorkingDirectory=/var/lib/asterisk
+User=asterisk
+Group=asterisk
+ExecStart=/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf
+ExecStop=/usr/sbin/asterisk -rx 'core stop now'
+ExecReload=/usr/sbin/asterisk -rx 'core reload'
+
+LimitNOFILE=4096
+ProtectSystem=full
+ProtectHome=yes
+PrivateTmp=yes
+
+Restart=always
+RestartSec=5
+
+[Install]
+WantedBy=multi-user.target

diff --git a/net-misc/asterisk-base/files/asterisk.service-1.conf 
b/net-misc/asterisk-base/files/asterisk.service-1.conf
new file mode 100644
index 000000000000..d94a08d78190
--- /dev/null
+++ b/net-misc/asterisk-base/files/asterisk.service-1.conf
@@ -0,0 +1,10 @@
+# Uncomment the following 7 lines to start asterisk with a console on tty7
+#
+# Warning! Use only for debugging, this is a potential security issue!
+#
+# [Service]
+# ExecStart=/usr/sbin/asterisk -f -c -C /etc/asterisk/asterisk.conf
+# TTYPath=/dev/tty7
+# StandardInput=tty
+# StandardOutput=tty
+# StandardError=tty

diff --git a/net-misc/asterisk-base/files/asterisk_wrapper-1 
b/net-misc/asterisk-base/files/asterisk_wrapper-1
new file mode 100644
index 000000000000..1a85eccf9b25
--- /dev/null
+++ b/net-misc/asterisk-base/files/asterisk_wrapper-1
@@ -0,0 +1,227 @@
+#! /bin/sh
+# 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}"
+
+# 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 "${core_pattern}" | 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}\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

diff --git a/net-misc/asterisk-base/files/confd-1 
b/net-misc/asterisk-base/files/confd-1
new file mode 100644
index 000000000000..c350b7e9161d
--- /dev/null
+++ b/net-misc/asterisk-base/files/confd-1
@@ -0,0 +1,169 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+#
+# Additional options for asterisk
+#
+# see "asterisk -h" for a list of options
+#
+# No default.
+#
+#ASTERISK_OPTS=""
+
+#
+# User and group to run asterisk as
+#
+# Value: double-colon separated list of user and group, or empty to run as 
root:
+#
+#
+# "asterisk:asterisk" to run as user "asterisk" and group "asterisk"
+# "asterisk" to run as user "asterisk" and all groups that user "asterisk" is 
a member of
+# ":asterisk" to run as user "root" and group "asterisk"
+#
+# Default: asterisk
+#
+#ASTERISK_USER="asterisk"
+
+#
+# Nicelevel
+#
+# Set the priority of the asterisk process
+#
+# Value: (highest) -20..19 (lowest)
+#
+# No default (leave scheduling to be system default).
+#
+#ASTERISK_NICE="19"
+
+# Send crash notifications emails to this address
+# (needs a working mail service and /usr/sbin/sendmail to do so (e.g. ssmtp))
+#
+# Value: Email address or empty to disable
+#
+# No default.
+#
+#ASTERISK_NOTIFY_EMAIL="root"
+
+#
+# Send asterisk's output to this terminal
+#
+# Value: Full path to device node or a number
+#
+# No default.
+#
+#ASTERISK_TTY="/dev/tty9"
+
+#
+# Start an asterisk console on the terminal specified by ASTERISK_TTY
+#
+# Warning! Use only for debugging, this is a potential security issue!
+#
+# Value: yes/no
+#
+# Default: no
+#
+#ASTERISK_CONSOLE="no"
+
+#
+# Maximum size of core files.
+#
+# Value: Size in bytes, unlimited for no limit or empty to disable.
+#
+# Default:  do not generate core dumps
+#
+#ASTERISK_CORE_SIZE="unlimited"
+
+#
+# ASTERISK_CORE_DIR
+#
+# Value: Directory (will be created if non-existant).
+#
+# Default: /tmp
+#
+#ASTERISK_CORE_DIR="/var/lib/asterisk/core"
+
+#
+# Max number of filedescriptors.  asterisk can trivially run out of
+# descriptors.  In most (SIP) cases it uses at least four descriptors per call,
+# and this is a conservative value.
+#
+# Value: Number of descriptors
+#
+# Default: leave system default in place.
+#
+ASTERISK_MAX_FD="4096"
+
+#
+# Delay time before restarting asterisk after a crash.
+#
+# Value: Number of seconds to sleep after a crash before restarting.
+#
+# Default: 5
+#
+#ASTERISK_RESTART_DELAY=5
+
+#
+# The stop mechanism to use.  Asterisk can do gracefully, when convenient or 
now.
+# By default we expect you to want to stop as soon as possible, so we default
+#
+# Default: gracefully
+#
+#ASTERISK_STOP_METHOD="when convenient"
+
+#
+# By default the init script waits two minutes for asterisk to stop.  This 
allows
+# you to change that, or even completely disable and go into wait for ever 
mode (-1).
+# The value here is in seconds.
+#
+# Default: 120
+#
+#ASTERISK_STOP_TIMEOUT=-1
+
+#
+# ASTERISK_CONFDIR
+#
+# If you'd like an alternative folder to /etc/${RC_SVCNAME} to be used
+# (typically /etc/asterisk) to be used for configuration.
+#
+# Default: /etc/${RC_SVCNAME}
+#
+#ASTERISK_CONFDIR="/etc/foo/bar"
+
+# ASTERISK_CACHEDIR
+#
+# Value: Directory to which astcachedir in asterisk.conf is set.
+#
+# Default: /var/cache/asterisk
+#
+#ASTERISK_CACHEDIR="/var/cache/asterisk"
+
+
+#
+# Normally the init script will not wait for asterisk to fully boot.  With this
+# setting set to yes/true/1 it will issue a "core waitfullybooted" directly
+# after starting asterisk, and wait for asterisk to start up completely.  This
+# is useful in certain conditions where other software requires asterisk to be
+# properly started before they themselves can be started.
+#
+# Default:  no
+#
+#ASTERISK_WAITBOOTED=yes
+
+#
+# When core-dumping, the default was to generate core-$(date +%Y%m%d-%H%M%S).
+# In certain highly unusual configurations it's helpful to also get the
+# hostname into this filename.  By enabling this option the wrapper loop will
+# adjust the core file to be named core-$(hostname)-$(date ...).
+#
+# Default: no
+#
+#ASTERISK_CORE_USEHOSTNAME=yes
+
+#
+# When core-dumping, the default is to not compress these files.  However, as 
it turns
+# out, compressing these core files can save significant amount of space, so 
if you
+# want them compressed, specify the tool to use here.
+#
+# Default: do not compress
+#
+#ASTERISK_CORE_COMPRESS=bzip2

diff --git a/net-misc/asterisk-base/files/initd-1 
b/net-misc/asterisk-base/files/initd-1
new file mode 100644
index 000000000000..7d48b36456bf
--- /dev/null
+++ b/net-misc/asterisk-base/files/initd-1
@@ -0,0 +1,311 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+extra_started_commands="forcestop reload"
+
+depend() {
+       need net
+       use nscd dns dahdi mysql postgresql slapd capi
+}
+
+is_running() {
+       [ -r "${ast_rundir}/asterisk.pid" ] || return 1
+       PID="$(cat "${ast_rundir}/asterisk.pid")"
+       [ -d "/proc/${PID}" ] || return 1
+       EXE="$(readlink -f /proc/${PID}/exe)"
+       EXE="${EXE% (deleted)}" # in case asterisk got upgraded and we're still 
looking at an old one.
+       [ "${EXE}" = /usr/sbin/asterisk ] || return 1 # pid got re-used for 
another process.
+
+       # PID reported in pidfile is active, and is still an asterisk instance.
+       return 0
+}
+
+# Sets up a few variables for us for use
+# ast_instancename: eg, asterisk when RC_SVCNAME=asterisk, or asterisk(foo) 
when asterisk.foo.
+# ast_rundir: directory to be used as run folder (pid and ctl files).
+setup_svc_variables()
+{
+       local t
+
+       ast_instancename=asterisk
+       ast_rundir=/run/${RC_SVCNAME}
+       ast_logdir=/var/log/${RC_SVCNAME}
+       ast_confdir=/etc/${RC_SVCNAME}
+       ast_cachedir=/var/cache/asterisk
+       ast_stop_timeout=120
+       ast_stop_method="gracefully"
+
+       if [ "${RC_SVCNAME}" != "asterisk" ]; then
+               t="${RC_SVCNAME#asterisk.}"
+               if [ "${RC_SVCNAME}" = "${t}" ]; then
+                       eerror "Invalid SVCNAME of ${RC_SVCNAME}, must be of 
the format asterisk.name."
+                       return 1
+               fi
+               ast_instancename="${ast_instancename}(${t})"
+       fi
+
+       [ -n "${ASTERISK_RUNDIR}" ] && ast_rundir="${ASTERISK_RUNDIR}"
+       [ -n "${ASTERISK_LOGDIR}" ] && ast_logdir="${ASTERISK_LOGDIR}"
+       [ -n "${ASTERISK_CONFDIR}" ] && ast_confdir="${ASTERISK_CONFDIR}"
+       [ -n "${ASTERISK_CACHEDIR}" ] && ast_confdir="${ASTERISK_CACHEDIR}"
+       [ -n "${ASTERISK_STOP_TIMEOUT}" ] && 
ast_stop_timeout="${ASTERISK_STOP_TIMEOUT}"
+       case "${ASTERISK_STOP_METHOD}" in
+               gracefully|when\ convenient|now)
+                       ast_stop_method="${ASTERISK_STOP_METHOD}"
+               ;;
+       esac
+       ast_group=
+       if [ -n "${ASTERISK_USER}" ]; then
+               ast_user="${ASTERISK_USER%%:*}"
+               if [ "${ast_user}" != "${ASTERISK_USER}" ]; then
+                       ast_group="${ASTERISK_USER#*:}"
+                       ast_group="${ast_group%%:*}"
+               fi
+       fi
+
+       [ -z "${ast_user}" ] && ast_user=asterisk
+
+       ast_pgroup="$(getent group $(getent passwd "${ast_user}" | awk -F: '{ 
print $4 }') | sed -re 's/:.*//')"
+
+       return 0
+}
+
+start() {
+       local OPTS PID
+       local tmp x
+
+       local OPTS ARGS WRAPPER_OPTS
+
+       setup_svc_variables || return $?
+
+       ebegin "Starting ${ast_instancename} PBX"
+
+       eindent
+
+       # filter (redundant) arguments
+       OPTS="$(echo "${ASTERISK_OPTS}" | sed -re "s:-[cfF]::g")"
+
+       # default options
+       OPTS="${OPTS}${OPTS:+ }-C ${ast_confdir}/asterisk.conf -f"  # don't 
fork / detach breaks wrapper script...
+
+       WRAPPER_OPTS="--syslog"
+       if [ "${RC_SVCNAME}" != "asterisk" ]; then
+               WRAPPER_OPTS="${WRAPPER_OPTS} --instance 
${RC_SVCNAME#asterisk.}"
+       fi
+       WRAPPER_OPTS="${WRAPPER_OPTS} --rundir ${ast_rundir}"
+       
+       # ensure that ASTERISK_RESTART_DELAY is integer.
+       ASTERISK_RESTART_DELAY="$(echo "${ASTERISK_RESTART_DELAY}" | sed -re 
's/^([0-9]*).*/\1/')"
+       [ -z "${ASTERISK_RESTART_DELAY}" ] && ASTERISK_RESTART_DELAY=5
+       WRAPPER_OPTS="${WRAPPER_OPTS} --restartdelay ${ASTERISK_RESTART_DELAY}"
+
+       if [ -n "${ASTERISK_CORE_SIZE}" ] &&
+          [ "${ASTERISK_CORE_SIZE}" != "0" ]; then
+               WRAPPER_OPTS="${WRAPPER_OPTS} --dumpcore ${ASTERISK_CORE_SIZE}" 
+               OPTS="${OPTS} -g"
+
+               if [ -n "${ASTERISK_CORE_DIR}" ] && \
+                  [ ! -d "${ASTERISK_CORE_DIR}" ]
+               then
+                       checkpath -d -m 0755 -o ${ast_user}:${ast_group} 
"${ASTERISK_CORE_DIR}"
+               fi
+               ASTERISK_CORE_DIR="${ASTERISK_CORE_DIR:-/tmp}"
+
+               cd "${ASTERISK_CORE_DIR}"
+               einfo "Core dump size            : ${ASTERISK_CORE_SIZE}"
+               einfo "Core dump location        : ${ASTERISK_CORE_DIR}"
+
+               if [ -n "${ASTERISK_CORE_COMPRESS}" ]; then
+                       einfo "Core compression tool     : 
${ASTERISK_CORE_COMPRESS}"
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --corecompress 
${ASTERISK_CORE_COMPRESS}"
+               fi
+
+               if yesno "${ASTERISK_CORE_USEHOSTNAME}"; then
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --corerename 
core-%H-%D-%T"
+               else
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --corerename core-%D-%T"
+               fi
+       else
+               cd /
+       fi
+
+       if [ -n "${ASTERISK_MAX_FD}" ]; then
+               WRAPPER_OPTS="${WRAPPER_OPTS} --maxfd ${ASTERISK_MAX_FD}"
+               einfo "Max open filedescriptors  : ${ASTERISK_MAX_FD}"
+       fi
+
+       if [ -n "${ASTERISK_NICE}" ]; then
+               if [ ${ASTERISK_NICE} -ge -20 ] && \
+                  [ ${ASTERISK_NICE} -le  19 ]; then
+                       einfo "Nice level                : ${ASTERISK_NICE}"
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --nicelevel 
${ASTERISK_NICE}"
+               else
+                       eerror "Nice value must be between -20 and 19"
+                       return 1
+               fi
+       fi
+
+       if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then
+               if [ -x /usr/sbin/sendmail ]; then
+                       einfo "Email notifications go to : 
${ASTERISK_NOTIFY_EMAIL}"
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --crashemail 
${ASTERISK_NOTIFY_EMAIL}"
+               else
+                       ewarn "Notifications disabled, /usr/sbin/sendmail 
doesn't exist or is not executable!"
+               fi
+       fi
+
+       if [ -n "${ASTERISK_TTY}" ]; then
+               for x in "${ASTERISK_TTY}" \
+                        "/dev/tty${ASTERISK_TTY}" \
+                        "/dev/vc/${ASTERISK_TTY}"
+               do
+                       if [ -c "${x}" ]; then
+                               TTY="${x}"
+                       fi
+               done
+               if [ -n "${TTY}" ]; then
+                       einfo "Messages are sent to      : ${TTY}"
+                       WRAPPER_OPTS="${WRAPPER_OPTS} --tty ${TTY}"
+               else
+                       ewarn "ASTERISK_TTY=${TTY} ignored, not valid."
+               fi
+       fi
+
+       if yesno "${ASTERISK_CONSOLE}" && [ -n "${TTY}" ]; then
+               einfo "Starting Asterisk console : Yes"
+               OPTS="${OPTS} -c"
+       fi
+
+       if ! getent passwd "${ast_user}" >/dev/null 2>&1; then
+               eerror "Requested to run asterisk as ${ast_user}, which doesn't 
exist."
+               return 1
+       fi
+       OPTS="${OPTS} -U ${ast_user}"
+
+       if [ -n "${ast_group}" ] && ! getent group "${ast_group}" >/dev/null 
2>&1; then
+               eerror "Requested to run ${ast_instancename} with group 
${ast_group}, which doesn't exist."
+               return 1
+       fi
+       [ -n "${ast_group}" ] && OPTS="${OPTS} -G ${ast_group}"
+
+       if [ "${ast_user}" = root ]; then
+               ewarn "Starting asterisk as root is not recommended (SERIOUS 
SECURITY CONSIDERATIONS)."
+       elif [ "${ast_group}" = root ]; then
+               ewarn "Starting asterisk with group root is not recommended 
(SERIOUS SECURITY CONSIDERATIONS)."
+       fi
+
+       checkpath -d -m 0755 -o "${ast_user}:${ast_group}" "${ast_logdir}" 
"${ast_rundir}"
+       checkpath -d -m 0750 -o "${ast_user}:${ast_group}" "${ast_cachedir}"
+
+       einfo "Starting asterisk as      : 
${ast_user}:${ast_group:-${ast_pgroup} (+supplementaries)}"
+       einfo "Wrapper options           : ${WRAPPER_OPTS}"
+       einfo "Asterisk options          : ${OPTS}"
+
+       /usr/sbin/asterisk_wrapper ${WRAPPER_OPTS} -- ${OPTS} &
+       result=$?
+
+       if [ $result -eq 0 ]; then
+               # 2 seconds should be enough for asterisk to start
+               sleep 2
+               is_running
+               result=$?
+
+               [ $result -eq 0 ] || wrapperstop
+       fi
+
+       eoutdent
+       eend $result
+
+       if [ $result -eq 0 ] && yesno "${ASTERISK_WAITBOOTED}"; then
+               if [ ! -r "${ast_rundir}/asterisk.ctl" ]; then
+                       # asterisk can crash during startup ...
+                       ebegin "Waiting for ctl file to appear"
+                       while is_running && [ ! -r "${ast_rundir}/asterisk.ctl" 
]; do
+                               sleep 1
+                       done
+                       is_running
+                       result=$?
+                       eend $result
+               fi
+               if [ $result -eq 0 ]; then
+                       ebegin "Waiting for ${ast_instancename} to fully boot"
+                       /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r 
-x "core waitfullybooted" >/dev/null 2>&1
+                       eend $?
+               fi
+       fi
+
+       return $result
+}
+
+wrapperstop() {
+       # Older path.
+       if [ -r "${ast_rundir}/wrapper_loop.running" ]; then
+               ebegin "Signalling ${ast_instancename} wrapper script to 
terminate"
+               rm "${ast_rundir}/wrapper_loop.running"
+               eend $?
+       fi
+
+       if [ -r "${ast_rundir}/asterisk_wrapper.pid" ]; then
+               ebegin "Signalling ${ast_instancename} wrapper script to 
terminate"
+               rm "${ast_rundir}/asterisk_wrapper.pid"
+               eend $?
+       fi
+
+       return 0
+}
+
+forcestop() {
+       setup_svc_variables || return $?
+
+       # Just to be sure - when we want to forcestop we should make it all 
tear down.
+       wrapperstop
+
+       ebegin "Stopping ${ast_instancename} PBX"
+       start-stop-daemon --stop --pidfile /run/asterisk/asterisk.pid
+       eend $?
+}
+
+stop() {
+       setup_svc_variables || return $?
+
+       wrapperstop
+
+       if ! is_running; then
+               eerror "${ast_instancename} is not running!"
+               return 0
+       fi
+
+       ebegin "Stopping ${ast_instancename} PBX ${ast_stop_method}"
+       /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r -x "core stop 
${ast_stop_method}" >/dev/null 2>&1
+       # Now we have to wait until asterisk has _really_ stopped.
+       sleep 1
+       if is_running; then
+               einfon "Waiting for ${ast_instancename} to shutdown ."
+               local cnt=0
+               while is_running; do
+                       cnt="$(expr $cnt + 2)"
+                       if [ ${ast_stop_timeout} -gt 0 -a $cnt -gt 
${ast_stop_timeout} ] ; then
+                               echo
+                               eend 1 "Failed waiting for ${ast_instancename} 
to stop."
+                               return 1
+                       fi
+                       sleep 2
+                       printf "."
+               done
+               echo
+       fi
+       eend 0
+}
+
+reload() {
+       setup_svc_variables || return $?
+
+       if is_running; then
+               ebegin "Requesting ${ast_instancename} to reload configuration"
+               /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r -x 
"module reload" >/dev/null 2>&1
+               eend $?
+       else
+               eerror "${ast_instancename} is not running!"
+       fi
+}

diff --git a/net-misc/asterisk-base/files/logrotate-1 
b/net-misc/asterisk-base/files/logrotate-1
new file mode 100644
index 000000000000..2286efc1e7e9
--- /dev/null
+++ b/net-misc/asterisk-base/files/logrotate-1
@@ -0,0 +1,27 @@
+/var/log/asterisk/messages {
+       missingok
+       notifempty
+
+       postrotate
+               test -e /run/openrc/softlevel && /etc/init.d/asterisk --quiet 
status && /usr/sbin/asterisk -rnx "logger reload" || /bin/true
+               test -e /run/systemd/system && systemctl is-active --quiet 
asterisk.service && /usr/sbin/asterisk -rnx "logger reload" || /bin/true
+       endscript
+}
+
+/var/log/asterisk/debug /var/log/asterisk/full {
+       missingok
+       notifempty
+       daily
+
+       postrotate
+               test -e /run/openrc/softlevel && /etc/init.d/asterisk --quiet 
status && /usr/sbin/asterisk -rnx "logger reload" || /bin/true
+               test -e /run/systemd/system && systemctl is-active --quiet 
asterisk.service && /usr/sbin/asterisk -rnx "logger reload" || /bin/true
+       endscript
+}
+
+/var/log/asterisk/cdr-csv/*.csv /var/log/asterisk/cdr-custom/*.csv 
/var/log/asterisk/queue_log {
+       missingok
+       notifempty
+       weekly
+       rotate 52
+}

diff --git a/net-misc/asterisk-base/files/tmpfiles-1.conf 
b/net-misc/asterisk-base/files/tmpfiles-1.conf
new file mode 100644
index 000000000000..224d060a3c92
--- /dev/null
+++ b/net-misc/asterisk-base/files/tmpfiles-1.conf
@@ -0,0 +1,2 @@
+d /run/asterisk 0750 asterisk asterisk
+d /var/cache/asterisk 0750 asterisk asterisk

diff --git a/net-misc/asterisk-base/metadata.xml 
b/net-misc/asterisk-base/metadata.xml
new file mode 100644
index 000000000000..6aebbc46f559
--- /dev/null
+++ b/net-misc/asterisk-base/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person" proxied="yes">
+               <email>[email protected]</email>
+               <name>Jaco Kroon</name>
+       </maintainer>
+       <maintainer type="project" proxied="proxy">
+               <email>[email protected]</email>
+               <name>Proxy Maintainers</name>
+       </maintainer>
+</pkgmetadata>

Reply via email to