[Debian-ha-maintainers] Bug#887563: corosync prerm will stop pacemaker and not start it again

Nishanth Aravamudan nish.aravamudan at canonical.com
Wed Jan 17 23:32:37 UTC 2018


Source: corosync
Severity: normal

Dear Maintainer,

We have a report in Ubuntu,
https://bugs.launchpad.net/charm-hacluster/+bug/1740892, which I believe
is reproducible in Debian Sid as well. In particular, I set up a Sid
LXD:

# apt install corosync pacemaker
...
# systemctl status corosync pacemaker
● corosync.service - Corosync Cluster Engine
...
   Active: active (running) since Wed 2018-01-17 23:14:56 UTC; 9s ago
...
● pacemaker.service - Pacemaker High Availability Cluster Manager
...
   Active: active (running) since Wed 2018-01-17 23:15:00 UTC; 5s ago
# apt install --reinstall corosync
...
# systemctl status corosync pacemaker
● corosync.service - Corosync Cluster Engine
...
   Active: active (running) since Wed 2018-01-17 23:15:23 UTC; 3s ago
● pacemaker.service - Pacemaker High Availability Cluster Manager
...
   Active: inactive (dead) since Wed 2018-01-17 23:15:22 UTC; 4s ago

I believe this is because the prerm of corosync.service has

# Automatically added by dh_installinit
if [ -x "/etc/init.d/corosync" ]; then
	invoke-rc.d corosync stop || exit $?
fi

which unconditionally stops corosync for all Debian and Ubuntu releases
(as the init script is installed even if unused by systemd). When
corosync stops, pacemaker fails to connect to corosync (and the
pacemaker systemd unit file specifies that pacemaker Requires corosync)
and also stops.

When the postinst for corosync runs:

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then
	if [ -x "/etc/init.d/corosync" ]; then
		update-rc.d corosync defaults >/dev/null
		invoke-rc.d corosync start || exit $?
	fi
fi

corosync will start, but there is no connection between corosync
starting (systemd or SysV) and pacemaker.

I think there are two necessary changes to the packaging/upstream to fix
this:

1) The systemd unit file should indicate pacemaker is PartOf corosync,
which will propogate restarts of corosync to pacemaker. This will also
propogate stops, but as mentioned above, pacemaker already stops when
corosync stops, so I think it's harmless. Additionally, the SysV init
file should be updated to check if the pacemaker SysV status was running
before stopping corosync in the restart path and start pacemaker as well
after starting corosync.

2) d/rules should call dh_installinit with --restart-after-upgrade. This
is the default in compat >= 10 (2.4.2-3 is still at 9). That will change
the prerm and postinst to not stop/start the service on upgrade, but
simply restart it in the postinst (removals will still stop the
service).

Now, neither of these actually fix the existing packages unfortunately,
which will stop pacemaker on the upgrade to a fixed package and thus
stop pacemaker. I have no idea if there actually is any way to fix this
for existing packages, since the 'old' prerm will be invoked by dpkg on
the upgrade path.

-- System Information:
Debian Release: buster/sid
  APT prefers bionic
  APT policy: (500, 'bionic')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.13.0-25-generic (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

-- 
Nishanth Aravamudan
Ubuntu Server
Canonical Ltd



More information about the Debian-ha-maintainers mailing list