Upstart vs. NFS Mounts vs. LightDM: Success!

That comment suggested a different solution to the problem of having the display manager start before the NFS mounts complete. When that happens, you can sign in and start programs that won’t have access to their data, producing all manner of heartache and confusion.

One complication: it seems /etc/rc.local starts and runs before the network (among other tidbits) gets connected and becomes ready, which means you can’t just plunk your code in that file like you used to, at least not in Ubuntu. Fixing that requires an upstart script triggered when the network interface finally hauls itself to its feet.

There’s no actual link between the NFS mount commands and the display manager startup, but it seems that if you don’t attempt to mount the NFS shares before the network becomes active (which is what happen with shares automounted through /etc/fstab), but wait for the network to come up and then issue the mounts, the shares mount almost instantly and become ready by the time the display manager presents the login screen. That’s better than the kludge I had figured out and works fine, so I’ll run with it until something else breaks.

The not-quite-deterministic fix has three parts:

  • Use noauto in the fstab entries for the NFS shares
  • Create an upstart script to mount those shares after eth0 lights up
  • Allow lightdm to start up normally (i.e., remove my hackish attempts)

A sample line from fstab, with the vital noauto option:

oyster:/mnt/bulkdata	/mnt/bulkdata	nfs	noauto,noatime	0 0

The /etc/init/local.conf script assumes the network interface will be eth0, which does not generalize to wireless networks on laptops and suchlike. You could add some Boolean logic to wait for the first of several interfaces, I suppose:

description "Stuff that should be in /etc/rc.local"
author "Ed Nisley - KE4ZNU"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
script

logger Starting local init...

logger Mounting NFS filesystems
mount /mnt/bulkdata
mount /mnt/userfiles
mount /mnt/diskimages
mount /mnt/music

logger Ending local init

end script

The lightdm.conf file reverts to the distribution version, with this starting trigger:

start on ((filesystem
           and runlevel [!06]
           and started dbus
           and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
                or stopped udev-fallback-graphics))
          or runlevel PREVLEVEL=S)

It’s worth noting that the upstart interpreter hates comment lines embedded within statements: it does not regard them as whitespace and does not ignore them. Just don’t do it. That explains some of the problems I encountered before, but fixing those problems did not eliminate the overall issue.

The end result of all that hocus-pocus makes the box boot the way it used to: the display manager comes up promptly, presents the GUI login screen, and the NFS mounts are ready when you are.

About these ads

  1. #1 by madbodger on 17-March-2013 - 11:14

    Heh, when I saw “ready when you are” as a link, I fully expected it to point to Betty Crocker ready-to-spread frosting, another brand that used that phrase.

    • #2 by Ed on 17-March-2013 - 11:52

      Looks like Delta got there first and kept using it. I suppose they regarded “using the same tagline” as flattery.

      Nowadays, that’s pronounced “IP infringement” and they darken your skies with lawyers. [sigh]

  1. Optiplex 980 Bringup Notes | The Smell of Molten Projects in the Morning
  2. Upstart vs. NFS Mounts vs. Display Manager: Resolved! | The Smell of Molten Projects in the Morning

Comment moderation may cause a delay. Spam comments vanish, so don't bother...

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s