On Mon, Dec 19, 2005 at 08:45:45PM -0800, Russ Allbery wrote: > > (TBH, I'd be much happier just making the technical changes necessary to > > ensure /var is mounted early -- keeps the filesystem sane, and it's just > > a simple matter of programming, rather than arguing over what's ugly. > Yeah, I agree with this too. So why don't we go with this? Thomas? Here are the cases: (a) /var on /, mounted rw during normal operation (b) /var a local fs, separate to / (c) / and /var separate NFS mounts (d) / local, /var an NFS mount (e) /var local, can't be mounted 'til a writable fs is available For (a) you just need to wait until S10checkroot.sh has finished. For (b) you need to wait until S35mountall.sh has finished. For (d) and (e) you need special handling; using /run as a tmpfs and setting up /var/run -> /run symlinks on both / and /var. That's pretty special handling, and probably needs something like shared subtrees to be done automatically at upgrade time (http://lwn.net/Articles/159077/). For (c) you could either do the same handling as (d) and (e), or just expect the admin to mount it rw as part of bootup. As far as the "but programmers/admins might be confused" concern goes; adding a brief /run/README at bootup seems feasible. That'd mean: /var is available after: S10checkroot.sh (/var on rootfs) S35mountall.sh (/var local) S40hotplug (/var local, but requires hotplug drivers) S45mountnfs.sh (/var on NFS not mounted before init) /var/run is thus available after one of: S10checkroot.sh S35mountall.sh S36mountvirtfs And /var/run is used before /var is necessarily available by (on my system): S39dns-clean S40networking S41hotplug-net S43portmap Hrm. Special casing in mountvirtfs and mountnfs.sh could be: mountvirtfs: if touch /var/run/.rw_var_run >/dev/null 2>&1; then rm -f /var/run/.rw_var_run elif [ "$EARLY_RUN_FS" ] && [ -d "$EARLY_RUN_FS" ]; then echo "Mounting /var/run tmpfs on $EARLY_RUN_FS..." mount -t tmpfs tmpfs "$EARLY_RUN_FS" ln -s . "$EARLY_RUN_FS/run" mount --bind "$EARLY_RUN_FS" /var touch /var/.bind_var else echo "Error: no early writable filesystem available" # ... fi mountnfs.sh: if [ -e /var/.bind_var ]; then rm -f /var/.bind_var /var/run umount /var fi # ... mount -a at which point you only need to mkdir $EARLY_FUN_FS and ensure /var/run is a symlink to it when setting up that behaviour on upgrade. Alternatively you could just make the directory and "mount --bind $EARLY_RUN_FS /var/run" after mounting /var. (If $EARLY_RUN_FS is /run, you'd have to work out in advance when it's needed so as not to add useless stuff to / when it's not needed; adding a pointless dir to /etc or /lib would likely be okay though) Note that in that scenario programs are FHS compliant in that they only access files throug the /var/run namespace, and if an admin prefers /etc/run or /lib/run, it's just a matter of local configuration rather than recompiling apps. Cheers, aj
Attachment:
signature.asc
Description: Digital signature