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