Hi, tl;dr
I filed https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1928259 found while testing https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1927745 and verifying that rpc.gssd was not restarted after a package upgrade. Which means the fix wasn't available until the service was restarted manually. # Troubleshooting story I was testing https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1927745, and while the fix is correct, it didn't always "stick" after I upgraded the packages. Further troubleshooting showed that some of the NFS services are not restarted after a package upgrade, under a specific condition which took a while to figure out. Many services make up a NFS server or client, so sometime ago debian decided to wrap them all around a systemd service called nfs-utils.service, which is a bit fake, used just to coordinate all the real services. Its header explains it: $ systemctl cat nfs-utils.service # /lib/systemd/system/nfs-utils.service [Unit] Description=NFS server and client services # This service should never be stopped, only restarted. # When it is re-started, all other services which declare # themselves to be "PartOf" this service will also be # restarted. Thus # systemctl restart nfs-utils # will restart all daemons which are part of nfs-utils # and which are running. This is useful after a software # update. # This is a "service" rather than "target" so that we # don't need to say "systemctl restart nfs-utils.target". [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true d/rules has these, and we can see it does not enable nfs-utils.service, but asks for it to be restarted on upgrade: dh_systemd_enable -p nfs-common nfs-client.target dh_systemd_enable -p nfs-kernel-server nfs-server.service dh_installinit -pnfs-common -R dh_systemd_start -p nfs-common --restart-after-upgrade nfs-utils.service dh_systemd_start -p nfs-kernel-server --restart-after-upgrade nfs-server.service And this "fake" service really can't be enabled: $ sudo systemctl enable nfs-utils.service The unit files have no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). (...long explanation follows this output ...) We get this during package install: Setting up nfs-common (1:1.3.4-2.1ubuntu5.3) ... nfs-utils.service is a disabled or a static unit not running, not starting it. Even when upgrading: Setting up nfs-common (1:1.3.4-2.1ubuntu5.4) ... nfs-utils.service is a disabled or a static unit not running, not starting it. This is because the service is not enabled. Critically for the bug I'm fixing, rpc.gssd is not restarted, so the fix isn't applied :/ Before upgrade: 442 ? Ss 0:00 /usr/sbin/blkmapd 7146 ? Ss 0:00 /usr/sbin/rpc.gssd 7399 ? Ss 0:00 /usr/sbin/rpc.idmapd 7406 ? Ss 0:00 /usr/sbin/rpc.mountd --manage-gids 7400 ? Ss 0:00 /usr/sbin/rpc.svcgssd After pkg upgrade: 442 ? Ss 0:00 /usr/sbin/blkmapd 7146 ? Ss 0:00 /usr/sbin/rpc.gssd 8421 ? Ss 0:00 /usr/sbin/rpc.idmapd 8422 ? Ss 0:00 /usr/sbin/rpc.mountd --manage-gids 8420 ? Ss 0:00 /usr/sbin/rpc.svcgssd If I do a manual "sudo systemctl start nfs-utils.service" (or restart) before upgrading the package, then all these processes are restarted after the package upgrade, because deb-systemd-invoke sees nfs-utils.service as "started". From its code: # If the job is disabled and is not currently running, the job is not started or restarted. # However, if the job is disabled but has been forced into the running state, we *do* stop # and restart it since this is expected behaviour for the admin who forced the start. # We don't autostart static units either. I filed https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1928259 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=988430. Some ideas I'm considering: a) just do a systemctl start before the #DEBHELPER# marker, like this: --- a/debian/nfs-common.postinst +++ b/debian/nfs-common.postinst @@ -43,6 +43,10 @@ case "$1" in if [ -f /lib/init/rw/sendsigs.omit.d/statd ]; then mv /lib/init/rw/sendsigs.omit.d/statd /run/sendsigs.omit.d/statd fi + + # always "start" nfs-utils.service, so package upgrades will restart it, + # see LP: #1928259 + systemctl start nfs-utils.service > /dev/null || true ;; esac b) Don't use dh_systemd_* in d/rules for nfs-utils.service, and do my own handling in d/nfs-common.postinst using systemctl directly, instead of deb-systemd-invoke, i.e., something like (also untested): diff --git a/debian/nfs-common.postinst b/debian/nfs-common.postinst index f709d53..feb375a 100644 --- a/debian/nfs-common.postinst +++ b/debian/nfs-common.postinst @@ -43,11 +43,19 @@ case "$1" in if [ -f /lib/init/rw/sendsigs.omit.d/statd ]; then mv /lib/init/rw/sendsigs.omit.d/statd /run/sendsigs.omit.d/statd fi - - # always "start" nfs-utils.service, so package upgrades will restart it, - # see LP: #1928259 - systemctl start nfs-utils.service > /dev/null || true ;; esac +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then + if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true + if [ -n "$2" ]; then + _dh_action=restart + else + _dh_action=start + fi + systemctl $_dh_action 'nfs-utils.service' >/dev/null || true + fi +fi + #DEBHELPER# diff --git a/debian/rules b/debian/rules index 8bb2f25..3259d3b 100755 --- a/debian/rules +++ b/debian/rules @@ -57,7 +57,6 @@ binary-arch: build dh_systemd_enable -p nfs-common nfs-client.target dh_systemd_enable -p nfs-kernel-server nfs-server.service dh_installinit -pnfs-common -R - dh_systemd_start -p nfs-common --restart-after-upgrade nfs-utils.service dh_systemd_start -p nfs-kernel-server --restart-after-upgrade nfs-server.service install -m 0755 debian/nfs-kernel-server.init debian/nfs-kernel-server/etc/init.d/nfs-kernel-server install -m 0644 debian/nfs-common.bugcontrol debian/nfs-common/usr/share/bug/nfs-common/control I just grabbed the bits that debhelper added for the dh_systemd_start line I removed, and replaced deb-systemd-invoke with systemctl Any other ideas?
-- ubuntu-devel mailing list ubuntu-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel