Rich Freeman on 22 Oct 2015 04:14:55 -0700


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] Void Linux tips


On Thu, Oct 22, 2015 at 12:17 AM, brent timothy saner
<brent.saner@gmail.com> wrote:
>
> i find a lot of it comes from individuals who have never actually used
> systemd in a production or regular environment (or a *proper* systemd
> implementation- such as Arch's- and have instead used a half-cocked
> hybridized implementation such as debian, ubuntu, centos to a lesser
> degree, etc.)
>

I'll agree with the latter half of that sentiment in particular.  I
think systemd has a really clean approach to its configuration with a
declarative design.  Distros that still use their old shell scripts
with systemd are losing much of the benefit of that.  Oh, and if you
stick to upstream it actually gives you configuration files that are
distro-agnostic - my unit file is likely identical to the one on arch,
and if it isn't it would probably still work there.

Case in point - the Gentoo apache2 scripts.  Which do you find easier
to read (and looking at the second one I find it a bit amusing that
people accuse systemd of scope creep - at least its service manager
component just manages services):

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
EnvironmentFile=/etc/conf.d/apache2
ExecStart=/usr/sbin/apache2 $APACHE2_OPTS -DFOREGROUND
ExecReload=/usr/sbin/apache2 $APACHE2_OPTS -k graceful
ExecStop=/usr/sbin/apache2 $APACHE2_OPTS -k graceful-stop
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

or

#!/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:-/var/run/apache2.pid}"
TIMEOUT=${TIMEOUT:-15}

SERVERROOT="${SERVERROOT:-/usr/lib64/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
___________________________________________________________________________
Philadelphia Linux Users Group         --        http://www.phillylinux.org
Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
General Discussion  --   http://lists.phillylinux.org/mailman/listinfo/plug