55 lines
1.7 KiB
Bash
Executable file
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";
|