Bug#847204: nfs-kernel-server: `systemctl status` incorrectly reports server "active" even if not started
Package: nfs-kernel-server
Version: 1:1.2.8-9
The systemd service unit file for `nfs-kernel-server` incorrectly
reports the service status as "active" even when the NFS server is *not*
running (e.g., empty exports file).
This causes scripts (e.g., Ansible) that use `systemctl status` to check
for the NFS server to fail in a way that is difficult to debug because
the actual reported error might be in a loosely-related task (e.g., when
doing `exportfs -r` or when mounting fs from a client).
Steps to reproduce on a Debian "jessie" VM:
* starting from a basic "jessie" install, install the `nfs-kernel-server`::
debian@debian-nfs-bug:~$ sudo apt install nfs-kernel-server
[...]
The following extra packages will be installed:
libevent-2.0-5 libldap-2.4-2 libnfsidmap2 libsasl2-2 libsasl2-modules libsasl2-modules-db libtirpc1 nfs-common rpcbind
Suggested packages:
libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit libsasl2-modules-gssapi-heimdal open-iscsi watchdog
The following NEW packages will be installed:
libevent-2.0-5 libldap-2.4-2 libnfsidmap2 libsasl2-2 libsasl2-modules libsasl2-modules-db libtirpc1 nfs-common nfs-kernel-server rpcbind
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 1123 kB of archives.
After this operation, 3018 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://http.debian.net/debian/ jessie/main libevent-2.0-5 amd64 2.0.21-stable-2 [152 kB]
[...]
Setting up libnfsidmap2:amd64 (0.25-5) ...
Setting up libtirpc1:amd64 (0.2.5-1) ...
Setting up rpcbind (0.2.1-6+deb8u1) ...
Setting up nfs-common (1:1.2.8-9) ...
Creating config file /etc/idmapd.conf with new version
Adding system user `statd' (UID 106) ...
Adding new user `statd' (UID 106) with group `nogroup' ...
Not creating home directory `/var/lib/nfs'.
Setting up libsasl2-modules:amd64 (2.1.26.dfsg1-13+deb8u1) ...
Setting up nfs-kernel-server (1:1.2.8-9) ...
Creating config file /etc/exports with new version
Creating config file /etc/default/nfs-kernel-server with new version
Processing triggers for libc-bin (2.19-18+deb8u6) ...
Processing triggers for systemd (215-17+deb8u5) ...
* note that the NFS server has *not* been started yet, as the rpcbind
daemon does not know about it::
debian@debian-nfs-bug:~$ sudo rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 56360 status
100024 1 tcp 39499 status
Still, `systemctl status` reports it already as loaded/active::
debian@debian-nfs-bug:~$ sudo systemctl status nfs-kernel-server.service
* nfs-kernel-server.service - LSB: Kernel NFS server support
Loaded: loaded (/etc/init.d/nfs-kernel-server)
Active: active (exited) since Tue 2016-12-06 12:12:58 UTC; 1min 13s ago
Dec 06 12:12:58 debian-nfs-bug nfs-kernel-server[1544]: Not starting NFS kernel daemon: no exports. ... (warning).
Dec 06 12:12:58 debian-nfs-bug systemd[1]: Started LSB: Kernel NFS server support.
* now add an export and try to start it again::
debian@debian-nfs-bug:~$ echo "/home localhost(rw,async.no_subtree_check)" | sudo tee -a /etc/exports
/home localhost(rw,async.no_subtree_check)
debian@debian-nfs-bug:~$ sudo systemctl start nfs-kernel-server
(last command produces no output)
* `systemctl status` reports the server as loaded/active (green on
terminal, so "ok")::
debian@debian-nfs-bug:~$ sudo systemctl status nfs-kernel-server.service
* nfs-kernel-server.service - LSB: Kernel NFS server support
Loaded: loaded (/etc/init.d/nfs-kernel-server)
Active: active (exited) since Tue 2016-12-06 12:12:58 UTC; 1min 36s ago
Dec 06 12:12:58 debian-nfs-bug nfs-kernel-server[1544]: Not starting NFS kernel daemon: no exports. ... (warning).
Dec 06 12:12:58 debian-nfs-bug systemd[1]: Started LSB: Kernel NFS server support.
Dec 06 12:14:33 debian-nfs-bug systemd[1]: Started LSB: Kernel NFS server support.
* still `exportfs -r` fails with a strange error message (due to
`/proc/fs/nfsd` not being mounted) and the NFS server is not running nor
registered with rpcbind/portmapper::
debian@debian-nfs-bug:~$ sudo exportfs -r
exportfs: localhost:/home: Function not implemented
debian@debian-nfs-bug:~$ sudo showmount -e localhost
clnt_create: RPC: Program not registered
debian@debian-nfs-bug:~$ sudo rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 56360 status
100024 1 tcp 39499 status
On the other hand, `systemctl restart nfs-kernel-server` (or a reboot)
does actually start the NFS server.
System information:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.6 (jessie)
Release: 8.6
Codename: jessie
$ dpkg -l nfs-kernel-server nfs-common linux-image-3.16.0-4-amd64
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=========================================-=========================-=========================-=======================================================================================
ii linux-image-3.16.0-4-amd64 3.16.36-1+deb8u1 amd64 Linux 3.16 for 64-bit PCs
ii nfs-common 1:1.2.8-9 amd64 NFS support files common to client and server
ii nfs-kernel-server 1:1.2.8-9 amd64 support for NFS kernel server
$ uname -a
Linux debian-nfs-bug 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux
Thanks,
Riccardo
Reply to: