findmnt -n /mnt/nfs >/dev/null && refuse "/mnt/nfs is already mounted; unmount it and start again" [ -e /exports ] && refuse "/exports already exists; the lab's server needs it" nfs_was_enabled=no enabled nfs-server && nfs_was_enabled=yes pkg_installed nfs-utils || pkg_install nfs-utils # The server runs in the peer, not on the VM itself. [ "$nfs_was_enabled" = yes ] || systemctl disable --now nfs-server >/dev/null 2>&1 || true peer_up hosts_add "$LE_PEER_ADDR server.lab.example server" word=$(shuf -n1 -e marigold juniper cobalt saffron basalt quokka lantern tundra) state_set word "$word" mkdir -p /exports/share /exports/homes printf 'This file is on the NFS server.\nThe secret word is: %s\n' "$word" >/exports/share/readme.txt mkdir -p /etc/exports.d cat >/etc/exports.d/le-lab.exports <"$LAB_STATE/server.sh" <<'X' set -e export PATH=/usr/sbin:/usr/bin:/sbin:/bin mount -t tmpfs -o mode=755 tmpfs /run mkdir -p /run/rpc_pipefs /run/rpcbind if command -v restorecon >/dev/null; then restorecon -R /run; fi rpcbind -w mount -t nfsd nfsd /proc/fs/nfsd mount -t rpc_pipefs sunrpc /run/rpc_pipefs if command -v nfsdcld >/dev/null; then mkdir -p "$1/server-cld" nfsdcld -p /run/rpc_pipefs -s "$1/server-cld" fi echo 10 >/proc/fs/nfsd/nfsv4gracetime echo 10 >/proc/fs/nfsd/nfsv4leasetime exportfs -r rpc.nfsd -H 10.99.0.2 8 exec rpc.mountd -F X cat >"$LAB_STATE/server-stop.sh" <<'X' export PATH=/usr/sbin:/usr/bin:/sbin:/bin mount -t nfsd nfsd /proc/fs/nfsd && echo 0 >/proc/fs/nfsd/threads true X cat >/etc/systemd/system/le-lab-nfs-server.service <