[PKG-Openstack-devel] Bug#770706: Bug#770706: Bug#770706: keystone.service does not start, /var/run/keystone not created
Mikaël Cluseau
mcluseau at isi.nc
Sun Nov 30 07:29:36 UTC 2014
Hi all,
I tried to minimize the changes to get close to a unit file in the
systemd spirit, while still using on the init-script to keep same
features as before. The patch below reflect the following actions:
1. don't auto-create the /var/*/${PROJECT_NAME} folder if not root, as
it will fail anyway.
2. add a do_systemd_start function to implement the systemd-start
argument that will exec' the daemon with the previously computed args.
3. since then systemd will manage the daemon, the systemd-stop argument
can be removed.
4. since the script doesn't create the necessary folders anymore, create
what's required using the systemd unit file.
The point 4 is where I did the most invasive choices; I assumed that
1. /var/run/${PROJECT_NAME} is not needed since PID file is not created
anymore (process managed by systemd);
2. /var/lib/${PROJECT_NAME} doesn't have to be created as it is created
when the package is installed;
3. /var/lock/${PROJECT_NAME}, AFAIK, is not needed when using systemd;
4. /var/log/${PROJECT_NAME} is the only one that is both required and
can be considered volatile.
If any of these choices is wrong, it's easy to add the folder in the
ExecStartPre lines of the systemd unit file.
If the systemd-stop argument should still be supported, I think it
should be noop or print a depreciation warning.
As a consequence of these changes, the unit file doesn't need its
RuntimeDirectory and PIDFile directives. Since the daemon is exec'd, the
Type falls back to the default (simple) so it is removed too.
I don't how to do less than that, so here is my minimal patch proposal:
diff --git a/init-template/init-script-template
b/init-template/init-script-template
index 0326b5d..fd20957 100644
--- a/init-template/init-script-template
+++ b/init-template/init-script-template
@@ -36,11 +36,13 @@ fi
# Exit if the package is not installed
[ -x $DAEMON ] || exit 0
-# Create /var/lock/X, /var/run/X, /var/lib/X and /var/log/X
-for i in lock run log lib ; do
- mkdir -p /var/$i/${PROJECT_NAME}
- chown ${SYSTEM_USER} /var/$i/${PROJECT_NAME}
-done
+# If ran as root, create /var/lock/X, /var/run/X, /var/lib/X and
/var/log/X as needed
+if [ "x$USER" = "xroot" ] ; then
+ for i in lock run log lib ; do
+ mkdir -p /var/$i/${PROJECT_NAME}
+ chown ${SYSTEM_USER} /var/$i/${PROJECT_NAME}
+ done
+fi
# This defines init_is_upstart which we use later on (+ more...)
. /lib/lsb/init-functions
@@ -65,6 +67,10 @@ do_stop() {
return "$RETVAL"
}
+do_systemd_start() {
+ exec $DAEMON $DAEMON_ARGS
+}
+
case "$1" in
start)
init_is_upstart > /dev/null 2>&1 && exit 1
@@ -88,11 +94,8 @@ status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
systemd-start)
- do_start
+ do_systemd_start
;;
-systemd-stop)
- do_stop
-;;
restart|force-reload)
init_is_upstart > /dev/null 2>&1 && exit 1
log_daemon_msg "Restarting $DESC" "$NAME"
@@ -110,7 +113,7 @@ restart|force-reload)
esac
;;
*)
- echo "Usage: $SCRIPTNAME
{start|stop|status|restart|force-reload|systemd-start|systemd-stop}" >&2
+ echo "Usage: $SCRIPTNAME
{start|stop|status|restart|force-reload|systemd-start}" >&2
exit 3
;;
esac
diff --git a/init-template/pkgos-gen-systemd-unit
b/init-template/pkgos-gen-systemd-unit
index b97e2a9..09cf3e5 100755
--- a/init-template/pkgos-gen-systemd-unit
+++ b/init-template/pkgos-gen-systemd-unit
@@ -33,12 +33,11 @@ $AFTER
[Service]
User=${SYSTEM_USER}
Group=${SYSTEM_GROUP}
+PermissionsStartOnly=true
+ExecStartPre=/bin/mkdir -p /var/log/${PROJECT_NAME}
+ExecStartPre=/bin/chown ${SYSTEM_USER}:${SYSTEM_GROUP}
/var/log/${PROJECT_NAME}
ExecStart=${SCRIPTNAME} systemd-start
-ExecStop=${SCRIPTNAME} systemd-stop
-RuntimeDirectory=${PROJECT_NAME}
-PIDFile=/var/run/${PROJECT_NAME}/${NAME}.pid
Restart=on-failure
-Type=forking
[Install]
WantedBy=multi-user.target
More information about the Openstack-devel
mailing list