cluster-deployment/src/steps-postinstall/20-nfs.sh

55 lines
1.7 KiB
Bash
Executable file

#!/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";