Comment 1 for bug 1755858

Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

Status of a clean install in a VM and/or Container, so testable rather trivial:

$ systemctl status iscsid open-iscsi
● iscsid.service - iSCSI initiator daemon (iscsid)
   Loaded: loaded (/lib/systemd/system/iscsid.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-05-23 10:52:11 UTC; 7min ago
     Docs: man:iscsid(8)
  Process: 751 ExecStart=/sbin/iscsid (code=exited, status=0/SUCCESS)
  Process: 721 ExecStartPre=/lib/open-iscsi/startup-checks.sh (code=exited, status=0/SUCCESS)
 Main PID: 759 (iscsid)
    Tasks: 2 (limit: 548)
   CGroup: /system.slice/iscsid.service
           ├─754 /sbin/iscsid
           └─759 /sbin/iscsid

May 23 10:52:11 b1 systemd[1]: Starting iSCSI initiator daemon (iscsid)...
May 23 10:52:11 b1 systemd[1]: iscsid.service: Failed to parse PID from file /run/iscsid.pid: Invalid argument
May 23 10:52:11 b1 iscsid[754]: iSCSI daemon with pid=759 started!
May 23 10:52:11 b1 systemd[1]: Started iSCSI initiator daemon (iscsid).

● open-iscsi.service - Login to default iSCSI targets
   Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
Condition: start condition failed at Wed 2018-05-23 10:52:11 UTC; 7min ago
           ├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
           └─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
     Docs: man:iscsiadm(8)
           man:iscsid(8)

It is important to note that these are not "the same" service twice.
both belong to the same package:
dpkg -S /lib/systemd/system/open-iscsi.service /lib/systemd/system/iscsid.service
open-iscsi: /lib/systemd/system/open-iscsi.service
open-iscsi: /lib/systemd/system/iscsid.service

But the two are doing rather different things:
open-iscsi.service: logs into iSCSI targets if some are configured (Condition stops it from doing so) - this is more a one-shot configure-devices and not a real service
iscsi.service: the basic service daemone, required by the service above

I think here we might learn from Fedora:
Default is:
[root@fedora ~]# systemctl status iscsid.socket iscsid.service
● iscsid.socket - Open-iSCSI iscsid Socket
   Loaded: loaded (/usr/lib/systemd/system/iscsid.socket; enabled; vendor preset: disabled)
   Active: active (listening) since Wed 2018-05-23 11:26:37 UTC; 9s ago
     Docs: man:iscsid(8)
           man:iscsiadm(8)
   Listen: @ISCSIADM_ABSTRACT_NAMESPACE (Stream)

May 23 11:26:37 fedora systemd[1]: Listening on Open-iSCSI iscsid Socket.

● iscsid.service - Open-iSCSI
   Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:iscsid(8)
           man:iscsiadm(8)

May 23 11:26:09 fedora systemd[1]: iscsid.service: Failed to reset devices.list: Operation not permitted
May 23 11:26:09 fedora systemd[1]: Starting Open-iSCSI...

And the related config in /etc/iscsid.conf says:
# Use socket activation, but try to make sure the socket units are listening
iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
(We don't have the uio, but you get the idea - initially only ensure the socket runs.)

The socket then does:
# systemctl cat iscsid.socket
# /usr/lib/systemd/system/iscsid.socket
[Unit]
Description=Open-iSCSI iscsid Socket
Documentation=man:iscsid(8) man:iscsiadm(8)

[Socket]
ListenStream=@ISCSIADM_ABSTRACT_NAMESPACE

[Install]
WantedBy=sockets.target

The tools will reach that and activate the service:
# surely fails and does nothing, but activates the service
$ iscsiadm -m discovery -t st -p 1.2.3.4

Afterwards:
● iscsid.service - Open-iSCSI
   Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-05-23 11:30:41 UTC; 7s ago

So far our logic is inverse:
1. we start iscsid always
2. we pre-check if it is starte din open-iscsid
   ExecStartPre=/bin/systemctl --quiet is-active iscsid.service