#!/usr/bin/env bash
set -eu
SIZE=300G
IMG=/srv/longhorn-backup-staging.img
MNT=/srv/longhorn-backup-staging
EXPORT_LINE='/srv/longhorn-backup-staging 192.168.20.40(rw,sync,no_subtree_check,no_root_squash) 192.168.20.45(rw,sync,no_subtree_check,no_root_squash)'
FSTAB_LINE='/srv/longhorn-backup-staging.img /srv/longhorn-backup-staging ext4 loop,nofail,noatime 0 2'

echo '--- ensure nfs server ---'
sudo -n /usr/bin/apt-get install -y nfs-kernel-server

echo '--- create mount point/image ---'
sudo -n /usr/bin/mkdir -p "$MNT"
if [ ! -f "$IMG" ]; then
  sudo -n /usr/bin/fallocate -l "$SIZE" "$IMG"
  sudo -n /usr/sbin/mkfs.ext4 -F -L longhorn-stage "$IMG"
else
  echo "image exists, not recreating: $IMG"
fi

echo '--- fstab entry ---'
if ! sudo -n /usr/bin/grep -Fq "$FSTAB_LINE" /etc/fstab; then
  printf '%s\n' "$FSTAB_LINE" | sudo -n /usr/bin/tee -a /etc/fstab >/dev/null
fi

echo '--- mount staging ---'
if ! /usr/bin/findmnt "$MNT" >/dev/null 2>&1; then
  sudo -n /usr/bin/mount "$MNT"
fi
sudo -n /usr/bin/chmod 0770 "$MNT"
sudo -n /usr/bin/chown root:root "$MNT"

echo '--- exports entry ---'
if ! sudo -n /usr/bin/grep -Fq "$EXPORT_LINE" /etc/exports; then
  printf '%s\n' "$EXPORT_LINE" | sudo -n /usr/bin/tee -a /etc/exports >/dev/null
fi
sudo -n /usr/sbin/exportfs -ra
sudo -n /usr/bin/systemctl enable nfs-server >/dev/null
sudo -n /usr/bin/systemctl restart nfs-server

echo '--- verify local ---'
/usr/bin/findmnt "$MNT"
sudo -n /usr/bin/df -hT "$MNT"
sudo -n /usr/sbin/exportfs -v
sudo -n /usr/bin/systemctl --no-pager --lines=5 status nfs-server
