Comment 24 for bug 1755863

Revision history for this message
Eric Desrochers (slashd) wrote :

I started to look at this problem from scratch since it's been a while since I have reported it....

It seems to go into emergency mode due to a failed attempt to start unit "tmp.mount" :

# /var/log/boot.log
65 emergency.target: Enqueued job emergency.target/start as 159
66 tmp.mount: Unit entered failed state.

Adding "systemd.mask=tmp.mount" in /tftpboot/pxelinux.cfg/default as a parameter did the trick to workaround the behaviour :

APPEND initrd=bionic-desktop-amd64/initrd root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.100.2:/bionic-desktop-amd64 splash systemd.mask=tmp.mount systemd.debug-shell=1 systemd.log_level=debug systemd.log_target=console console=ttyS0,38400 console=tty1 --

Note:
- I did the test by curiosity w/ Artful/17.10 (systemd-234) and it works, so it's possibly something between v234 and v237 which introduced the behaviour for tmp.mount, a change in mount, ...
- Problem is also reproducible in Cosmic, and journalctl was a little bit more verbose in Cosmic than it was for Bionic in my testing :

$ journalctl -a -u tmp.mount
-- Logs begin at Wed 2018-10-10 20:15:36 UTC, end at Wed 2018-10-10 20:15:43 UTC. --
Oct 10 20:15:36 ubuntu systemd[1]: tmp.mount: Directory /tmp to mount over is not empty, mounting anyway.
Oct 10 20:15:36 ubuntu systemd[1]: Mounting /tmp...
Oct 10 20:15:36 ubuntu systemd[1]: tmp.mount: Mount process finished, but there is no mount.
Oct 10 20:15:36 ubuntu systemd[1]: tmp.mount: Failed with result 'protocol'.
Oct 10 20:15:36 ubuntu systemd[1]: Failed to mount /tmp.

# src/core/mount.c
802 static void mount_enter_dead(Mount *m, MountResult f) {
803 assert(m);
804
805 if (m->result == MOUNT_SUCCESS)
806 m->result = f;
807
808 if (m->result != MOUNT_SUCCESS)
809 log_unit_warning(UNIT(m), "Failed with result '%s'.", mount_result_to_string(m->result));
...
1282 switch (m->state) {
1283
1284 case MOUNT_MOUNTING:
1285 /* Our mount point has not appeared in mountinfo. Something went wrong. */
1286
1287 if (f == MOUNT_SUCCESS) {
1288 /* Either /bin/mount has an unexpected definition of success,
1289 * or someone raced us and we lost. */
1290 log_unit_warning(UNIT(m), "Mount process finished, but there is no mount.");
1291 f = MOUNT_FAILURE_PROTOCOL;
1292 }

and m->result is indeed equalt to "MOUNT_FAILURE_PROTOCOL" ^

1955 [MOUNT_FAILURE_PROTOCOL] = "protocol",

I'll try to instrument things and create a custom ISO for further debugging/testing. This is where am at the moment.

- Eric