summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO20
-rw-r--r--PKGBUILD26
-rwxr-xr-xnfs-utils-rdma-server45
-rw-r--r--nfs-utils-rdma-server.conf13
-rw-r--r--nfs-utils-rdma-server.install14
-rw-r--r--nfs-utils-rdma-server.service16
6 files changed, 134 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..0665d8be4c6b
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,20 @@
+pkgbase = nfs-utils-rdma-server
+ pkgdesc = Load kernel module for NFS server using RDMA, and configure RDMA port
+ pkgver = 1.00
+ pkgrel = 1
+ arch = any
+ license = GPL2
+ depends = rdma
+ depends = nfs-utils
+ source = nfs-utils-rdma-server
+ source = nfs-utils-rdma-server.conf
+ source = nfs-utils-rdma-server.service
+ source = nfs-utils-rdma-server.install
+ md5sums = 573abc0d8a23fe08ed2bfcc696d3f826
+ md5sums = 82c54ede9b9ecf21e15a803a10eef82d
+ md5sums = 91d018727b56223c8381cd8dbac1d2dc
+ md5sums = d42c8b5ae86e61d3a847a92b1f59a2ae
+
+pkgname = nfs-utils-rdma-server
+ install = nfs-utils-rdma-server.install
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..ea6729e37933
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,26 @@
+# Maintainer: James Harvey <jamespharvey20@gmail.com>
+# * Namcap warns that dependency rdma and nfs-utils are not needed, but nfs-utils-rdma-server requires IPoIB, and the IPoIB kernel modules are loaded by the rdma package, and requires nfs-utils, or there's no kernel module to load or port to configure.
+
+pkgname=nfs-utils-rdma-server
+pkgver=1.00
+pkgrel=1
+pkgdesc='Load kernel module for NFS server using RDMA, and configure RDMA port'
+arch=('any')
+license=('GPL2')
+depends=('rdma' 'nfs-utils')
+source=('nfs-utils-rdma-server'
+ 'nfs-utils-rdma-server.conf'
+ 'nfs-utils-rdma-server.service'
+ 'nfs-utils-rdma-server.install')
+md5sums=('573abc0d8a23fe08ed2bfcc696d3f826'
+ '82c54ede9b9ecf21e15a803a10eef82d'
+ '91d018727b56223c8381cd8dbac1d2dc'
+ 'd42c8b5ae86e61d3a847a92b1f59a2ae')
+
+package() {
+ install=nfs-utils-rdma-server.install
+
+ install -Dm755 "${srcdir}/nfs-utils-rdma-server" "${pkgdir}/usr/bin/nfs-utils-rdma-server"
+ install -Dm644 "${srcdir}/nfs-utils-rdma-server.conf" "${pkgdir}/etc/nfs-utils-rdma-server.conf"
+ install -Dm644 "${srcdir}/nfs-utils-rdma-server.service" "${pkgdir}/etc/systemd/system/nfs-utils-rdma-server.service"
+}
diff --git a/nfs-utils-rdma-server b/nfs-utils-rdma-server
new file mode 100755
index 000000000000..b56e54185466
--- /dev/null
+++ b/nfs-utils-rdma-server
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Written by James Harvey <jamespharvey20@gmail.com>
+# Released under GPL2 license
+#
+# Load kernel module for NFS server using RDMA, and configure RDMA port
+#
+# This is usually run automatically by systemd, after rdma.service starts
+#
+
+CONFIG=/etc/nfs-utils-rdma-server.conf
+
+if [[ $EUID -ne 0 ]]; then
+ echo "nfs-utils-rdma-server must be run as root" 1>&2
+ exit 1
+fi
+
+if ! [ -f $CONFIG ]; then
+ echo "$CONFIG not found"
+ exit 2
+fi
+
+. $CONFIG
+
+if ! [ -n "${NFS_UTILS_RDMA_SERVER_PORT}" ]; then
+ echo "You need to fix $CONFIG"
+ echo "NFS_UTILS_RDMA_SERVER_PORT is not set"
+ exit 1
+fi
+
+numerical_regex='^[0-9]+$'
+if ! [[ ${NFS_UTILS_RDMA_SERVER_PORT} =~ $numerical_regex ]]; then
+ echo "You need to fix $CONFIG"
+ echo "NFS_UTILS_RDMA_SERVER_PORT=${NFS_UTILS_RDMA_SERVER_PORT} - Acceptable values are only integers"
+ exit 2
+fi
+
+modprobe svcrdma
+echo "Attempted loading kernel module svcrdma."
+
+echo "rdma ${NFS_UTILS_RDMA_SERVER_PORT}" > /proc/fs/nfsd/portlist
+echo "Attempted setting rdma port to ${NFS_UTILS_RDMA_SERVER_PORT}."
+
+unset NFS_UTILS_RDMA_SERVER_PORT
+
+exit 0
diff --git a/nfs-utils-rdma-server.conf b/nfs-utils-rdma-server.conf
new file mode 100644
index 000000000000..d701c9eb2325
--- /dev/null
+++ b/nfs-utils-rdma-server.conf
@@ -0,0 +1,13 @@
+# nfs-utils-rdma-server is designed to load the necessary kernel module for
+# running an NFS server with RDMA support, and to set the server port to be
+# used.
+
+# NFS_UTILS_RDMA_SERVER_PORT=<port>
+# port valid values:
+# nfs-utils-rdma-server allows any integer value.
+# The value is directly echoed after "rdma" to /proc/fs/nfsd/portlist,
+# so the actual valid values will depend on what it takes.
+# The recommended value is 20049, which was approved by the IANA for
+# NFS/RDMA, chosen because it is similar to port 2049 for NFS. See:
+# http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
+NFS_UTILS_RDMA_SERVER_PORT=20049
diff --git a/nfs-utils-rdma-server.install b/nfs-utils-rdma-server.install
new file mode 100644
index 000000000000..40be7e5d20c9
--- /dev/null
+++ b/nfs-utils-rdma-server.install
@@ -0,0 +1,14 @@
+post_install() {
+ echo "nfs-utils-rdma-server
+
+ NOTE: In your /etc/exports or /etc/exports.d/*.exports files, you MUST use
+ the insecure option, because the NFS/RDMA client does not use a
+ reserved port. This option ONLY means that the client can be using a
+ port less than IPPORT_RESERVED (1024).
+
+ NOTE: If you want to run nfs v4.0+ only, you do not need rpcbind. In this
+ case, change /etc/conf.d/nfs-server.conf to contain:
+ NFSD_OPTS=\"-N 2 -N 3\"
+ And, on clients, you muse use \"mount -t nfs4 ...\"
+"
+}
diff --git a/nfs-utils-rdma-server.service b/nfs-utils-rdma-server.service
new file mode 100644
index 000000000000..539bab8494e6
--- /dev/null
+++ b/nfs-utils-rdma-server.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Load kernel module for NFS server using RDMA, and configure RDMA port
+Documentation=file:/etc/nfs-utils-rdma-server.conf
+RefuseManualStop=true
+DefaultDependencies=false
+Conflicts=emergency.target emergency.service
+Before=remote-fs-pre.target
+After=nfs-server.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/nfs-utils-rdma-server
+
+[Install]
+WantedBy=sysinit.target