]> code.ossystems Code Review - openembedded-core.git/commitdiff
Allow user mode NFS server to run without rpcbind / portmap
authorJason Wessel <jason.wessel@windriver.com>
Wed, 5 Oct 2011 15:26:30 +0000 (10:26 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 10 Oct 2011 08:54:02 +0000 (09:54 +0100)
and nfsroot mount without the need to talk to an RPC info
server as long as the port numbers for mountd and nfsd
are known in advance.

This patch updates the qemu startup scripts and the
user mode NFS server to have the ability to start
without the need to use rpcbind or portmap services.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/023-no-rpc-register.patch [new file with mode: 0644]
meta/recipes-devtools/unfs-server/unfs-server_2.1+2.2beta47.bb
scripts/runqemu-export-rootfs
scripts/runqemu-internal

diff --git a/meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/023-no-rpc-register.patch b/meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/023-no-rpc-register.patch
new file mode 100644 (file)
index 0000000..50f23fc
--- /dev/null
@@ -0,0 +1,34 @@
+Upstream-Status: Inappropriate [other]
+Upstream is not making further releases of this software.
+
+Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
+
+# Allow user mode NFS to work without rpcbind / portmap
+# Patch origin: Wind River
+
+---
+ rpcmisc.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/rpcmisc.c
++++ b/rpcmisc.c
+@@ -91,7 +91,8 @@ not_inetd:
+               if (transp == NULL)
+                       Dprintf(L_FATAL, "cannot create udp service.");
+               for (i = 0; (vers = verstbl[i]) != 0; i++) {
+-                      if (!svc_register(transp, prog, vers, dispatch, IPPROTO_UDP)) {
++                      if (!(svc_register(transp, prog, vers, dispatch, IPPROTO_UDP) ||
++                            svc_register(transp, prog, vers, dispatch, 0))) {
+                               Dprintf(L_FATAL,
+                                       "unable to register (%s, %d, udp).",
+                                       name, vers);
+@@ -110,7 +111,8 @@ not_inetd:
+               transp->xp_ops->xp_recv = auth_rendevouser;
+ #endif
+               for (i = 0; (vers = verstbl[i]) != 0; i++) {
+-                      if (!svc_register(transp, prog, vers, dispatch, IPPROTO_TCP)) {
++                      if (!(svc_register(transp, prog, vers, dispatch, IPPROTO_TCP) ||
++                            svc_register(transp, prog, vers, dispatch, 0))) {
+                               Dprintf(L_FATAL,
+                                       "unable to register (%s, %d, tcp).",
+                                       name, vers);
index 8ed2e33f952b9026128b99aec545d35970d37d83..29c7052056b45ed011080a477f91b142761bd148 100644 (file)
@@ -7,7 +7,7 @@ RDEPENDS_${PN} = "pseudo"
 RDEPENDS_${PN}_virtclass-native = "pseudo-native"
 RDEPENDS_${PN}_virtclass-nativesdk = "pseudo-nativesdk"
 BASEPV = "2.2beta47"
-PR = "r0"
+PR = "r1"
 
 SRC_URI = "ftp://linux.mathematik.tu-darmstadt.de/pub/linux/oldstuff/people/okir/nfs-server-${BASEPV}.tar.gz \
            file://001-2.2b47-2.2b51.patch \
@@ -32,6 +32,7 @@ SRC_URI = "ftp://linux.mathematik.tu-darmstadt.de/pub/linux/oldstuff/people/okir
            file://020-undefined-chmod-fix.patch \
            file://021-nolibwrap.patch \
            file://022-add-close-on-exec-descriptors.patch \
+           file://023-no-rpc-register.patch \
           "
 
 SRC_URI[md5sum] = "79a29fe9f79b2f3241d4915767b8c511"
index fec288accdf67dd1d3d72c7d3fcfa4de49214fa4..f8213ba4ef27a5b05f09fa39d55b12672ec46c59 100755 (executable)
@@ -83,10 +83,12 @@ NFS_MOUNTPROG=$[ 21111 + $NFS_INSTANCE ]
 NFS_NFSPROG=$[ 11111 + $NFS_INSTANCE ]
 # NFS port number
 NFS_PORT=$[ 3049 + $NFS_INSTANCE ]
+# mountd port number
+MOUNT_PORT=$[ 3048 + $NFS_INSTANCE ]
 
 ## For debugging you would additionally add
 ## --debug all
-MOUNTD_OPTS="--allow-non-root --mount-pid $MOUNTPID -f $EXPORTS --rmtab $RMTAB --prog $NFS_MOUNTPROG -r"
+MOUNTD_OPTS="--allow-non-root --mount-pid $MOUNTPID -f $EXPORTS --rmtab $RMTAB --prog $NFS_MOUNTPROG -r -P $MOUNT_PORT"
 NFSD_OPTS="--allow-non-root --nfs-pid $NFSPID -f $EXPORTS --prog $NFS_NFSPROG -P $NFS_PORT -r"
 
 # Setup the exports file
index ce3291f3a9f41b1ec22c2088402be1df57866328..2968ed939c8b8178bed9d1d505071f3b06e2a0e0 100755 (executable)
@@ -258,21 +258,15 @@ fi
 if [ "$FSTYPE" = "nfs" ]; then
     NFS_SERVER="192.168.7.1"
     NFS_DIR=`echo $ROOTFS | sed 's/^[^:]*:\(.*\)/\1/'`
-    MOUNTD_PORT=$[ 21111 + $NFS_INSTANCE ]
-    NFSD_PORT=$[ 11111 + $NFS_INSTANCE ]
-    UNFS_OPTS="nfsvers=2,mountprog=$MOUNTD_PORT,nfsprog=$NFSD_PORT,udp"
+    MOUNTD_RPCPORT=$[ 21111 + $NFS_INSTANCE ]
+    NFSD_RPCPORT=$[ 11111 + $NFS_INSTANCE ]
+    NFSD_PORT=$[ 3049 + $NFS_INSTANCE ]
+    MOUNTD_PORT=$[ 3048 + $NFS_INSTANCE ]
+    UNFS_OPTS="nfsvers=2,mountprog=$MOUNTD_RPCPORT,nfsprog=$NFSD_RPCPORT,udp,port=$NFSD_PORT,mountport=$MOUNTD_PORT"
 
     PSEUDO_LOCALSTATEDIR=~/.runqemu-sdk/pseudo
     export PSEUDO_LOCALSTATEDIR
 
-    rpcbind_running=`ps ax | grep rpcbind | grep -v grep | wc -l`
-    portmap_running=`ps ax | grep portmap | grep -v grep | wc -l`
-    if [[ $rpcbind_running == 0 && $portmap_running == 0 ]]; then
-        echo "You need to be running either rpcbind or portmap to continue"
-        cleanup
-        return
-    fi
-
     # Start the userspace NFS server
     echo "runqemu-export-rootfs restart $ROOTFS"
     runqemu-export-rootfs restart $ROOTFS