summaryrefslogtreecommitdiff
blob: 71d4e020267072809d2f493edd8cb8f7e7988974 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/sbin/runscript
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

extra_commands="configtest modules virtualhosts"
extra_started_commands="configdump fullstatus graceful gracefulstop reload"

description_configdump="Dumps the configuration of the runing apache server. Requires server-info to be enabled and www-client/lynx."
description_configtest="Run syntax tests for configuration files."
description_fullstatus="Gives the full status of the server. Requires lynx and server-status to be enabled."
description_graceful="A graceful restart advises the children to exit after the current request and reloads the configuration."
description_gracefulstop="A graceful stop advises the children to exit after the current request and stops the server."
description_modules="Dump a list of loaded Static and Shared Modules."
description_reload="Kills all children and reloads the configuration."
description_virtualhosts="Show the settings as parsed from the config file (currently only shows the virtualhost settings)."
description_stop="Kills all children and stops the server."

depend() {
	need net
	use mysql dns logger netmount postgresql
	after sshd
}

configtest() {
	ebegin "Checking ${SVCNAME} configuration"
	checkconfig
	eend $?
}

checkconfd() {
	if [ ! -f /etc/init.d/sysfs ]; then
		eerror "This init script works only with openrc (baselayout-2)."
		eerror "If you still need baselayout-1.x, please, use"
		eerror "apache2.initd-baselayout-1 from /usr/share/doc/apache2-*/"
	fi

	PIDFILE="${PIDFILE:-/run/apache2.pid}"
	TIMEOUT=${TIMEOUT:-15}

	SERVERROOT="${SERVERROOT:-/usr/lib/apache2}"
	if [ ! -d ${SERVERROOT} ]; then
		eerror "SERVERROOT does not exist: ${SERVERROOT}"
		return 1
	fi

	CONFIGFILE="${CONFIGFILE:-/etc/apache2/httpd.conf}"
	[ "${CONFIGFILE#/}" = "${CONFIGFILE}" ] && CONFIGFILE="${SERVERROOT}/${CONFIGFILE}"
	if [ ! -r "${CONFIGFILE}" ]; then
		eerror "Unable to read configuration file: ${CONFIGFILE}"
		return 1
	fi

	APACHE2_OPTS="${APACHE2_OPTS} -d ${SERVERROOT}"
	APACHE2_OPTS="${APACHE2_OPTS} -f ${CONFIGFILE}"
	[ -n "${STARTUPERRORLOG}" ] && APACHE2_OPTS="${APACHE2_OPTS} -E ${STARTUPERRORLOG}"

	APACHE2="/usr/sbin/apache2"
}

checkconfig() {
	checkpath --directory /run/apache_ssl_mutex
	checkconfd || return 1

	${APACHE2} ${APACHE2_OPTS} -t 1>/dev/null 2>&1
	ret=$?
	if [ $ret -ne 0 ]; then
		eerror "${SVCNAME} has detected an error in your setup:"
		${APACHE2} ${APACHE2_OPTS} -t
	fi

	return $ret
}

start() {
	checkconfig || return 1

	ebegin "Starting ${SVCNAME}"
	# Use start stop daemon to apply system limits #347301 
	start-stop-daemon --start -- ${APACHE2} ${APACHE2_OPTS} -k start

	local i=0 retval=1
	while [ $i -lt ${TIMEOUT} ] ; do
		if [ -e "${PIDFILE}" ] ; then
			retval=0
			break
		fi
		sleep 1 && i=$(expr $i + 1)
	done

	eend ${retval}
}

stop() {
	if [ "${RC_CMD}" = "restart" ]; then
		checkconfig || return 1
	else
		checkconfd || return 1
	fi

	PID=$(cat "${PIDFILE}" 2>/dev/null)
	if [ -z "${PID}" ]; then
		einfo "${SVCNAME} not running (no pid file)"
		return 0
	fi

	ebegin "Stopping ${SVCNAME}"
	${APACHE2} ${APACHE2_OPTS} -k stop

	local i=0 retval=0
	while ( test -f "${PIDFILE}" || pgrep -P ${PID} apache2 >/dev/null ) \
		&& [ $i -lt ${TIMEOUT} ]; do
		sleep 1 && i=$(expr $i + 1)
	done
	[ -e "${PIDFILE}" ] && retval=1

	eend ${retval}
}

reload() {
	RELOAD_TYPE="${RELOAD_TYPE:-graceful}"

	checkconfig || return 1

	if [ "${RELOAD_TYPE}" = "restart" ]; then
		ebegin "Restarting ${SVCNAME}"
		${APACHE2} ${APACHE2_OPTS} -k restart
		eend $?
	elif [ "${RELOAD_TYPE}" = "graceful" ]; then
		ebegin "Gracefully restarting ${SVCNAME}"
		${APACHE2} ${APACHE2_OPTS} -k graceful
		eend $?
	else
		eerror "${RELOAD_TYPE} is not a valid RELOAD_TYPE. Please edit /etc/conf.d/${SVCNAME}"
	fi
}

graceful() {
	checkconfig || return 1
	ebegin "Gracefully restarting ${SVCNAME}"
	${APACHE2} ${APACHE2_OPTS} -k graceful
	eend $?
}

gracefulstop() {
	checkconfig || return 1
	ebegin "Gracefully stopping ${SVCNAME}"
	${APACHE2} ${APACHE2_OPTS} -k graceful-stop
	eend $?
}

modules() {
	checkconfig || return 1
	${APACHE2} ${APACHE2_OPTS} -M 2>&1
}

fullstatus() {
	LYNX="${LYNX:-lynx -dump}"
	STATUSURL="${STATUSURL:-http://localhost/server-status}"

	if ! type -p $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then
		eerror "lynx not found! you need to emerge www-client/lynx"
	else
		${LYNX} ${STATUSURL}
	fi
}

virtualhosts() {
	checkconfig || return 1
	${APACHE2} ${APACHE2_OPTS} -S
}

configdump() {
	LYNX="${LYNX:-lynx -dump}"
	INFOURL="${INFOURL:-http://localhost/server-info}"

	checkconfd || return 1

	if ! type -p $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then
		eerror "lynx not found! you need to emerge www-client/lynx"
	else
		echo "${APACHE2} started with '${APACHE2_OPTS}'"
		for i in config server list; do
			${LYNX} "${INFOURL}/?${i}" | sed '/Apache Server Information/d;/^[[:space:]]\+[_]\+$/Q'
		done
	fi
}

# vim: ts=4 filetype=gentoo-init-d