Gentoo Archives: gentoo-commits

From: "Tony Vroon (chainsaw)" <chainsaw@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in net-misc/asterisk/files/1.8.0: asterisk.initd4
Date: Sat, 01 Dec 2012 22:08:15
Message-Id: 20121201220759.36AB921706@flycatcher.gentoo.org
1 chainsaw 12/12/01 22:07:59
2
3 Added: asterisk.initd4
4 Log:
5 OpenRC has seen fit to overhaul /var/run; as identified by Vincent Brillault in bug #445182 our init scripts require immediate adjustments. With thanks to Jaco Kroon for review. Updating all three branches and removing all non-stable now unusable ebuilds.
6
7 (Portage version: 2.1.11.32/cvs/Linux x86_64, unsigned Manifest commit)
8
9 Revision Changes Path
10 1.1 net-misc/asterisk/files/1.8.0/asterisk.initd4
11
12 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/asterisk/files/1.8.0/asterisk.initd4?rev=1.1&view=markup
13 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/asterisk/files/1.8.0/asterisk.initd4?rev=1.1&content-type=text/plain
14
15 Index: asterisk.initd4
16 ===================================================================
17 #!/sbin/runscript
18 # Copyright 1999-2012 Gentoo Foundation
19 # Distributed under the terms of the GNU General Public License v2
20 # $Header: /var/cvsroot/gentoo-x86/net-misc/asterisk/files/1.8.0/asterisk.initd4,v 1.1 2012/12/01 22:07:59 chainsaw Exp $
21
22 extra_started_commands="forcestop reload"
23
24 depend() {
25 need net
26 use nscd dns dahdi mysql postgresql slapd capi
27 }
28
29 is_running() {
30 if [ -z "`pidof asterisk`" ]; then
31 return 1
32 else
33 PID="`cat /var/run/asterisk/asterisk.pid`"
34 for x in `pidof asterisk`; do
35 if [ "${x}" = "${PID}" ]; then
36 return 0
37 fi
38 done
39 fi
40
41 return 1
42 }
43
44 asterisk_run_loop() {
45 local result=0 signal=0
46
47 echo "Initializing asterisk wrapper"
48 OPTS="$*"
49
50 trap "rm /var/run/asterisk/wrapper_loop.pid" EXIT
51 cut -f4 -d' ' < /proc/self/stat > /var/run/asterisk/wrapper_loop.pid
52
53 while :; do
54 if [ -n "${TTY}" ]; then
55 /usr/bin/stty -F ${TTY} sane
56 ${NICE} /usr/sbin/asterisk ${OPTS} >${TTY} 2>&1 <${TTY}
57 result=$?
58 else
59 ${NICE} /usr/sbin/asterisk ${OPTS} 2>&1 >/dev/null
60 result=$?
61 fi
62
63 if [ $result -eq 0 ]; then
64 echo "Asterisk terminated normally"
65 break
66 else
67 if [ $result -gt 128 ]; then
68 signal=`expr $result - 128`
69 MSG="Asterisk terminated with Signal: $signal"
70
71 CORE_TARGET="core-`date +%Y%m%d-%H%M%S`"
72
73 local CORE_DUMPED=0
74 if [ -f "${ASTERISK_CORE_DIR}/core" ]; then
75 mv "${ASTERISK_CORE_DIR}/core" \
76 "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
77 CORE_DUMPED=1
78
79 elif [ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]; then
80 mv "${ASTERISK_CORE_DIR}/core.${PID}" \
81 "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
82 CORE_DUMPED=1
83
84 fi
85
86 [ $CORE_DUMPED -eq 1 ] && \
87 MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}"
88 else
89 MSG="Asterisk terminated with return code: $result"
90 fi
91
92 # kill left-over tasks
93 for X in ${ASTERISK_CLEANUP_ON_CRASH}; do
94 kill -9 `pidof ${X}`;
95 done
96 fi
97
98 [ -n "${TTY}" ] \
99 && echo "${MSG}" >${TTY} \
100 || echo "${MSG}"
101
102
103 if [ -n "${ASTERISK_NOTIFY_EMAIL}" ] && \
104 [ -x /usr/sbin/sendmail ]; then
105 echo -e -n "Subject: Asterisk crashed\n\r${MSG}\n\r" |\
106 /usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}"
107 fi
108 sleep "${ASTERISK_RESTART_DELAY}"
109 echo "Restarting Asterisk..."
110 done
111 return 0
112 }
113
114 start() {
115 local OPTS USER GROUP PID NICE=""
116 local tmp x
117
118 local OPTS ARGS
119
120 ebegin "Starting asterisk PBX"
121
122 eindent
123
124 # filter (redundant) arguments
125 OPTS=`echo "${ASTERISK_OPTS}" | sed -re "s:-[cfF]::g"`
126
127 # default options
128 OPTS="${OPTS} -f" # don't fork / detach breaks wrapper script...
129
130 # mangle yes/no options
131 ASTERISK_CONSOLE="`echo ${ASTERISK_CONSOLE} | tr '[:lower:]' '[:upper:]'`"
132
133 ASTERISK_RESTART_DELAY="`echo "${ASTERISK_RESTART_DELAY}" | sed -re 's/^([0-9]*).*/\1/'`"
134 [ -z "${ASTERISK_RESTART_DELAY}" ] && ASTERISK_RESTART_DELAY=5
135
136 if [ -n "${ASTERISK_CORE_SIZE}" ] &&
137 [ "${ASTERISK_CORE_SIZE}" != "0" ]; then
138 ulimit -c ${ASTERISK_CORE_SIZE}
139
140 if [ -n "${ASTERISK_CORE_DIR}" ] && \
141 [ ! -d "${ASTERISK_CORE_DIR}" ]
142 then
143 mkdir -m750 -p "${ASTERISK_CORE_DIR}"
144
145 if [ -n "${ASTERISK_USER}" ]; then
146 chown -R "${ASTERISK_USER}" "${ASTERISK_CORE_DIR}"
147 fi
148 fi
149 ASTERISK_CORE_DIR="${ASTERISK_CORE_DIR:-/tmp}"
150
151 cd "${ASTERISK_CORE_DIR}"
152 einfo "Core dump size : ${ASTERISK_CORE_SIZE}"
153 einfo "Core dump location : ${ASTERISK_CORE_DIR}"
154
155 OPTS="${OPTS} -g"
156 fi
157
158 if [ -n "${ASTERISK_MAX_FD}" ]; then
159 ulimit -n ${ASTERISK_MAX_FD}
160 einfo "Max open filedescriptors : ${ASTERISK_MAX_FD}"
161 fi
162
163 if [ -n "${ASTERISK_NICE}" ]; then
164 if [ ${ASTERISK_NICE} -ge -20 ] && \
165 [ ${ASTERISK_NICE} -le 19 ]; then
166 einfo "Nice level : ${ASTERISK_NICE}"
167 NICE="nice -n ${ASTERISK_NICE} --"
168 else
169 eerror "Nice value must be between -20 and 19"
170 return 1
171 fi
172 fi
173
174 if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then
175 if [ -x /usr/sbin/sendmail ]; then
176 einfo "Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}"
177 else
178 ewarn "Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!"
179 unset ASTERISK_NOTIFY_EMAIL
180 fi
181 fi
182
183 if [ -n "${ASTERISK_TTY}" ]; then
184 for x in ${ASTERISK_TTY} \
185 /dev/tty${ASTERISK_TTY} \
186 /dev/vc/${ASTERISK_TTY}
187 do
188 if [ -c "${x}" ]; then
189 TTY="${x}"
190 fi
191 done
192 [ -n "${TTY}" ] && \
193 einfo "Messages are sent to : ${TTY}"
194 fi
195
196 if [ "${ASTERISK_CONSOLE}" = "YES" ] && [ -n "${TTY}" ]; then
197 einfo "Starting Asterisk console : ${ASTERISK_CONSOLE}"
198 OPTS="${OPTS} -c"
199 fi
200
201 if [ -n "${ASTERISK_USER}" ]; then
202 USER=`echo $ASTERISK_USER | sed 's/:.*//'`
203 GROUP=`echo $ASTERISK_USER | awk -F: '/.*:.*/ { print $2 }'`
204 if [ -n "${USER}" ]; then
205 OPTS="${OPTS} -U ${USER}"
206 fi
207 if [ -n "${GROUP}" ]; then
208 OPTS="${OPTS} -G ${GROUP}"
209 GROUP=":${GROUP}" # make it look nice...
210 fi
211 checkpath -d -m 0755 -o ${USER}${GROUP} /var/{log,run}/asterisk
212 for element in `find /var/{log,run}/asterisk`; do
213 if [ `stat -c %U $element` != "${USER}" ]; then
214 ewarn "${USER} is not the owner of $element, fixing."
215 chown -R ${USER} /var/{log,run}/asterisk
216 chmod -R u+r /var/{log,run}/asterisk
217 chmod u+x /var/{log,run}/asterisk
218 fi;
219 done;
220 einfo "Starting asterisk as : ${USER}${GROUP}"
221 else
222 checkpath -d -m 0755 -o root:root /var/{log,run}/asterisk
223 ewarn "Starting asterisk as root is not recommended."
224 fi
225
226 asterisk_run_loop ${OPTS} 2>&1 | logger -t asterisk_wrapper &
227 result=$?
228
229 if [ $result -eq 0 ]; then
230 # 2 seconds should be enough for asterisk to start
231 sleep 2
232 is_running
233 result=$?
234 fi
235
236 eoutdent
237 eend $result
238 }
239
240 forcestop() {
241 ebegin "Stopping asterisk PBX"
242 start-stop-daemon --stop --pidfile /var/run/asterisk/asterisk.pid
243 eend $?
244 }
245
246 stop() {
247 if ! is_running; then
248 eerror "Asterisk is not running!"
249 return 0
250 fi
251
252 if [ -r /var/run/asterisk/wrapper_loop.pid ]; then
253 ebegin "Killing wrapper script"
254 kill `cat /var/run/asterisk/wrapper_loop.pid`
255 eend $?
256 fi
257
258 ebegin "Stopping asterisk PBX gracefully"
259 /usr/sbin/asterisk -r -x "core stop gracefully" &>/dev/null
260 # Now we have to wait until asterisk has _really_ stopped.
261 sleep 1
262 if is_running; then
263 einfon "Waiting for asterisk to shutdown ."
264 local cnt=0
265 while is_running; do
266 cnt=`expr $cnt + 1`
267 if [ $cnt -gt 60 ] ; then
268 # Waited 120 seconds now. Fail.
269 echo
270 eend 1 "Failed."
271 return
272 fi
273 sleep 2
274 echo -n "."
275 done
276 echo
277 fi
278 eend 0
279 }
280
281 reload() {
282 if is_running; then
283 ebegin "Forcing asterisk to reload configuration"
284 /usr/sbin/asterisk -r -x "module reload" &>/dev/null
285 eend $?
286 else
287 eerror "Asterisk is not running!"
288 fi
289 }