[OE-core] [PATCH] Allow user mode NFS server to run without rpcbind / portmap

Saul Wold saul.wold at intel.com
Mon Oct 10 05:04:25 UTC 2011


On 10/05/2011 11:43 AM, Jason Wessel wrote:
>> From the 2.6.39 linux kernel and up it is possible to use
> 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.
>
Jason,

I have not fully tested this yet, but if someone has rpcbind and/or 
portmap services are running, what affect will this patch have?

Sau!

> Signed-off-by: Jason Wessel<jason.wessel at windriver.com>
> ---
>   .../023-no-rpc-register.patch                      |   34 ++++++++++++++++++++
>   .../unfs-server/unfs-server_2.1+2.2beta47.bb       |    3 +-
>   scripts/runqemu-export-rootfs                      |    4 ++-
>   scripts/runqemu-internal                           |   16 +++------
>   4 files changed, 44 insertions(+), 13 deletions(-)
>   create mode 100644 meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/023-no-rpc-register.patch
>
> 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
> index 0000000..50f23fc
> --- /dev/null
> +++ b/meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/023-no-rpc-register.patch
> @@ -0,0 +1,34 @@
> +Upstream-Status: Inappropriate [other]
> +Upstream is not making further releases of this software.
> +
> +Signed-off-by: Jason Wessel<jason.wessel at 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);
> diff --git a/meta/recipes-devtools/unfs-server/unfs-server_2.1+2.2beta47.bb b/meta/recipes-devtools/unfs-server/unfs-server_2.1+2.2beta47.bb
> index 8ed2e33..29c7052 100644
> --- a/meta/recipes-devtools/unfs-server/unfs-server_2.1+2.2beta47.bb
> +++ b/meta/recipes-devtools/unfs-server/unfs-server_2.1+2.2beta47.bb
> @@ -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"
> diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs
> index 3ee3112..5cb4bf2 100755
> --- a/scripts/runqemu-export-rootfs
> +++ b/scripts/runqemu-export-rootfs
> @@ -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
> diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal
> index ce3291f..2968ed9 100755
> --- a/scripts/runqemu-internal
> +++ b/scripts/runqemu-internal
> @@ -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





More information about the Openembedded-core mailing list