[HEADS-UP] systemd for F14 - the next steps

Hans de Goede hdegoede at redhat.com
Wed Jul 14 08:11:31 UTC 2010


Hi,

On 07/14/2010 03:24 AM, Lennart Poettering wrote:
> Heya,
>

<snip snip>

> b) if you maintain a package which includes a daemon/service from
> outside the default install, it would be awesome if you could ship
> native unit files too, even though I don't have any ready for
> you. Writing unit files is not difficult

I'm involved in maintaining the initscripts for iscsi-intiator-utils.
I'm not sure if iscsi-intiator-utils is part of the default install,
but lots of people have it installed as libvirt requires it.

iscsi-initiator-utils comes with 2 initscripts. 1 to start iscsid and
1 to login to iscsi nodes configured in the iscsi database
(/var/lib/iscsi):
http://cvs.fedoraproject.org/viewvc/devel/iscsi-initiator-utils/iscsid.init?view=markup
http://cvs.fedoraproject.org/viewvc/devel/iscsi-initiator-utils/iscsidevs.init?view=markup

iscsid is a semi-regular daemon, yet its initscript is special as it
only starts iscsid when needed. Socket based activation is out of the question as iscsid
is a userspace kernel support daemon. Which needs to be started ASAP,
so that it is ready to do error recovery when the kernel needs it.

However we do not want to always start it, only when iscsi targets are in use.
So the bash iscsid script has this "beauty" :

# FIXME this has a false positive for root on nfs
root_is_iscsi() {
     rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
     [[ "$rootopts" =~ "_netdev" ]]
}

force_start() {
     echo -n $"Starting $prog: "
     modprobe -q iscsi_tcp
     modprobe -q ib_iser
     modprobe -q cxgb3i
     modprobe -q bnx2i
     modprobe -q be2iscsi
     daemon $prog
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     return $retval
}

use_discoveryd() {
     grep -qrs "discovery.sendtargets.use_discoveryd = Yes" /var/lib/iscsi/send_targets
     if [ $? -eq 0 ] ; then
  	return 0
     fi

     grep -qrs "discovery.isns.use_discoveryd = Yes" /var/lib/iscsi/isns
     if [ $? -eq 0 ] ; then
  	return 0
     fi

     return 1
}

start() {
     [ -x $exec ] || exit 5
     [ -f $config ] || exit 6

     # only start if nodes are setup to startup automatically, root is iscsi,
     # or if iscsid is managing the sessions.
     grep -qrs "node.startup = automatic" /var/lib/iscsi/nodes
     if [ $? -eq 0 ] || root_is_iscsi || use_discoveryd ; then
         force_start
         return $?
     fi

     return 0
}

And the iscsi (note no d) script has similar (albeit simpler) magic
to decide if it should try to login to any nodes.

So the question is how to deal with stuff like this in systemd.
I'm thinking myself that maybe the solution here is to just keep
using systemv style initscripts here, but I'm not sure.

Thanks & Regards,

Hans


More information about the devel mailing list