[Bug 1821343] Re: slapd process failure is not detected by systemd

Heitor R. Alves de Siqueira 1821343 at bugs.launchpad.net
Tue Apr 9 12:17:12 UTC 2019


@slashd I don't think we need anything special for systemd in the
debian/{control,rules} files, since we're not shipping full systemd
support with this. The slapd service is still handled by systemd-sysv-
generator(8), so there's no service units that we need to include or
activate in dh_systemd rules.

To make sure things are working fine I went ahead and tested a package
upgrade with this debdiff:

ubuntu at disco:~$ dpkg -l | grep slapd
ii  slapd                       2.4.47+dfsg-3ubuntu1        amd64        OpenLDAP server (slapd)

ubuntu at disco:~$ sudo apt-get --only-upgrade install slapd

ubuntu at disco:~$ dpkg -l | grep slapd
ii  slapd                       2.4.47+dfsg-3ubuntu2        amd64        OpenLDAP server (slapd)

ubuntu at disco:~$ systemctl cat slapd
# /run/systemd/generator.late/slapd.service
# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/slapd
Description=LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
After=remote-fs.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/slapd start
ExecStop=/etc/init.d/slapd stop

# /usr/lib/systemd/system/slapd.service.d/slapd-remain-after-exit.conf
[Service]
Type=forking
RemainAfterExit=no

Thanks!

-- 
You received this bug notification because you are a member of Ubuntu
Sponsors Team, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1821343

Title:
  slapd process failure is not detected by systemd

Status in openldap package in Ubuntu:
  Confirmed
Status in openldap source package in Xenial:
  Confirmed
Status in openldap source package in Bionic:
  Confirmed
Status in openldap source package in Cosmic:
  Confirmed
Status in openldap package in Debian:
  New

Bug description:
  [Impact]
  Systemd service reports slapd as active, even though it may have failed

  [Description]
  The slapd package for OpenLDAP is shipped with a SysV-style init script (/etc/init.d/slapd). Systemd automatically converts this to a systemd service by generating the unit file using the systemd-sysv-generator(8) utility. The generated unit file contains Type=forking and RemainAfterExit=yes directives.

  If the slapd daemon process exits due to some failure (e.g., it
  receives a SIGTERM or SIGKILL), the failure is not detected properly
  by systemd. The service is still reported as active even though the
  child (daemon) process has exited with a signal.

  We can easily fix this by including a proper systemd service file for
  slapd in the openldap package. Since the init.d script already does
  most of the necessary work (parsing configs, setting up PID files,
  etc.), we don't need anything complicated for the systemd unit file.
  Just making sure that RemainAfterExit is set to "no" makes the systemd
  service behave in the expected way.

  [Test Case]
  1) Deploy a disco container
  $ lxc launch images:ubuntu/disco disco

  2) Install slapd
  ubuntu at disco:~$ sudo apt update && sudo apt install slapd -y

  3) Verify that slapd is running with the auto-generated service
  ubuntu at disco:~$ systemctl status slapd
  ● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
     Loaded: loaded (/etc/init.d/slapd; generated)
     Active: active (running) since Fri 2019-03-22 11:51:22 UTC; 40min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1103 ExecStart=/etc/init.d/slapd start (code=exited, status=0/SUCCESS)
      Tasks: 3 (limit: 4915)
     Memory: 712.6M
     CGroup: /system.slice/slapd.service
             └─1109 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d

  4) SIGKILL the slapd process (PID is displayed in systemctl status output)
  ubuntu at disco:~$ sudo kill -9 1109

  5) Check if systemd service lists slapd as still active, even though it was terminated
  ubuntu at disco:~$ systemctl status slapd
  ● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
     Loaded: loaded (/etc/init.d/slapd; generated)
     Active: active (exited) since Fri 2019-03-22 11:51:22 UTC; 42min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1103 ExecStart=/etc/init.d/slapd start (code=exited, status=0/SUCCESS)

  [Regression Potential]
  The regression potential for this fix should be very low, if we keep the new systemd unit file close to the one generated by systemd-sysv-generator(8). The only significant change would be the RemainAfterExit directive, and this should make the slapd service behave like a "normal" forking service. Nonetheless, we'll perform scripted test runs to make sure no regressions arise.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openldap/+bug/1821343/+subscriptions



More information about the Ubuntu-sponsors mailing list