On Mon, Mar 27, 2006 at 03:45:41AM +0200, Steinar H. Gunderson wrote:
> See the comments in #294959 for implementation ugliness -- basically, I
> think the best thing to do would be to defer the mounting of these
> filesystems to some later stage, where we're sure to have at least /usr
> up-and-running (and stable time etc.).

I implemented it a bit differently, inspired by the way the portmapper is
handled. Basically, if it finds a situation it can't handle (NFSv4 mounts,
which need idmapd and the nfs4 kernel module, or Kerberos mounts, which need
gssd and the rpcsec_gss_krb5 module), it simply starts nfs-common, which
knows how to handle all these situations (including the user's preferences
for flags given to gssd etc.).

/* Steinar */
-- 
Homepage: http://www.sesse.net/
--- ./debian/initscripts/etc/init.d/mountnfs.sh 2006-04-01 03:05:35.000000000 
+0200
+++ /tmp/S45mountnfs.sh 2006-04-01 03:12:36.000000000 +0200
@@ -26,11 +26,16 @@
        # Read through fstab line by line. If it is NFS, set the flag
        # for mounting NFS file systems. If any NFS partition is found and it
        # not mounted with the nolock option, we start the portmapper.
+       # 
+       # If any sec={krb5,krb5i,krb5p} option is given, or any of the file
+       # systems are nfs4, we'll need to start rpc.gssd and/or rpc.idmapd too;
+       # we'll leave that to nfs-common.
        #
 
        exec 9<&0 </etc/fstab
 
        portmap=no
+       gss_or_idmap=no
        while read DEV MTPT FSTYPE OPTS REST
        do
                case "$DEV" in
@@ -52,6 +57,11 @@
                                portmap=yes
                                ;;
                        esac
+                       case "$OPTS" in
+                         
sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5i,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
+                               gss_or_idmap=yes
+                               ;;
+                       esac
                        ;;
                  smbfs|cifs|coda|ncp|ncpfs|ocfs2|gfs)
                        ;;
@@ -69,6 +79,10 @@
                                ;;
                        esac
                fi
+               if [ "$FSTYPE" = "nfs4" ]
+               then
+                       gss_or_idmap=yes
+               fi
        done
 
        exec 0<&9 9<&-
@@ -95,6 +109,15 @@
                fi
        fi
 
+       #
+       # Initialize nfs-common (which starts rpc.gssd and/or rpc.idmapd, and 
loads
+       # the right kernel modules if applicable) if we use Kerberos and/or 
NFSv4 mounts.
+       #
+       if [ "$gss_or_idmap" = yes ] && [ -x /etc/init.d/nfs-common ]
+       then
+               /etc/init.d/nfs-common start
+       fi
+
        if [ "$NETFS" ]
        then
                mount_all_nfs() { mount -a -t$NETFS ; }

Reply via email to