#!/usr/bin/env bash # $1 The path to ensure is mounted after a network interface comes up. ensure_nfs() { local dirpath="${1}"; local target_script="/etc/network/if-up.d/ensure-nfs"; #/etc/network/if-up.d/ task_begin "ensure_nfs: registering ${dirpath}"; # 1: Ensure the target script exists if [[ ! -d "$(dirname "${target_script}")" ]]; then mkdir -p "$(dirname "${target_script}")"; fi if [[ ! -r "${target_script}" ]]; then echo "#!/usr/bin/env bash" >>"${target_script}"; chmod +x "${target_script}"; fi if grep -q "${dirpath}; then" "${target_script}"; then echo "ensure_nfs: ${dirpath} is already registered."; task_end 0; return 0; fi echo "if ! mountpoint -q '${dirpath}'; then mount '${dirpath}'; fi" >>"${target_script}"; task_end "$?" "ensure_nfs: error registering ${dirpath} in ${target_script}"; } # $1 Thing to mount # $2 Path to mount it to add_nfs_mount() { local source="${1}"; local target="${2}"; task_begin "NFS mount ${source} → ${target}"; # 1: Remove any old entries from /etc/fstab sed -i "/^$(echo "${source}" | awk '{gsub("/", "\\/", $0); print($0); }')\s/d" /etc/fstab # 2: Append the new entry echo "${source} ${target} nfs auto,nofail,noatime,_netdev,tcp,bg,timeo=50,retrans=5 0 0" >>/etc/fstab; # 3: Create the target mount point & mount mkdir -p "${target}"; mount "${target}"; task_end "$?"; ensure_nfs "${target}"; } add_nfs_mount "magicbag.node.mooncarrot.space:/mnt/elfstone2/cluster" "/mnt/shared"; add_nfs_mount "magicbag.node.mooncarrot.space:/mnt/elfstone2/main /mnt/elfstone" "/mnt/elfstone"; add_nfs_mount "magicbag.node.mooncarrot.space:/mnt/elfstone2/syncthing" "/mnt/elessar-syncthing";