[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