105 lines
No EOL
2.6 KiB
Bash
105 lines
No EOL
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
CONFIG_FILE="/etc/proxmox-bindmounts.conf"
|
|
|
|
# Function to create config file
|
|
create_config() {
|
|
echo "First run detected. Setting up configuration..."
|
|
|
|
read -p "Enter mount source path (e.g., /z/media): " MNT_SOURCE
|
|
read -p "Enter mount target path (e.g., /media): " MNT_TARGET
|
|
read -p "Enter container base path (e.g., /z/pve): " CT_BASE
|
|
read -p "Enter container IDs (space-separated): " -a CT_IDS
|
|
|
|
# Save to config file
|
|
cat > "$CONFIG_FILE" << EOF
|
|
MNT_SOURCE="$MNT_SOURCE"
|
|
MNT_TARGET="$MNT_TARGET"
|
|
CT_BASE="$CT_BASE"
|
|
CT_IDS=(${CT_IDS[@]})
|
|
EOF
|
|
|
|
chmod 600 "$CONFIG_FILE"
|
|
echo "Configuration saved to $CONFIG_FILE"
|
|
}
|
|
|
|
# Check if config exists, if not create it
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
create_config
|
|
fi
|
|
|
|
# Source the config file
|
|
source "$CONFIG_FILE"
|
|
|
|
# Set signal traps
|
|
trap "exit 1" INT TERM KILL
|
|
trap "exit 0" QUIT HUP
|
|
|
|
# Function to validate paths
|
|
validate_paths() {
|
|
if [ ! -d "$MNT_SOURCE" ]; then
|
|
echo "Error: Source directory $MNT_SOURCE does not exist!"
|
|
exit 1
|
|
fi
|
|
if [ ! -d "$CT_BASE" ]; then
|
|
echo "Error: Container base directory $CT_BASE does not exist!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Function to mount
|
|
mount_containers() {
|
|
for ID in "${CT_IDS[@]}"; do
|
|
TARGET_PATH="${CT_BASE}/subvol-${ID}-disk-1${MNT_TARGET}"
|
|
|
|
# Try unmounting first
|
|
if mountpoint -q "$TARGET_PATH"; then
|
|
umount -v "$TARGET_PATH" && rm -rf "${TARGET_PATH:?}"/*
|
|
fi
|
|
|
|
# Create target directory if needed
|
|
mkdir -p "$TARGET_PATH"
|
|
|
|
# Perform the bind mount
|
|
mount -v -o bind "$MNT_SOURCE" "$TARGET_PATH"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Successfully mounted for container $ID"
|
|
else
|
|
echo "Failed to mount for container $ID"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Function to unmount
|
|
unmount_containers() {
|
|
for ID in "${CT_IDS[@]}"; do
|
|
TARGET_PATH="${CT_BASE}/subvol-${ID}-disk-1${MNT_TARGET}"
|
|
if mountpoint -q "$TARGET_PATH"; then
|
|
umount -v "$TARGET_PATH"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Main logic
|
|
case "$1" in
|
|
up)
|
|
validate_paths
|
|
mount_containers
|
|
# Keep service running for systemd
|
|
exec /bin/sleep infinity
|
|
;;
|
|
down)
|
|
unmount_containers
|
|
;;
|
|
reconfigure)
|
|
create_config
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {up|down|reconfigure}"
|
|
echo " up - Mount all containers"
|
|
echo " down - Unmount all containers"
|
|
echo " reconfigure - Reset configuration"
|
|
exit 1
|
|
;;
|
|
esac |