mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-08-26 06:11:15 +00:00
Storage manager
This commit is contained in:
145
scripts/storage/mount-point-to-ct.sh
Normal file
145
scripts/storage/mount-point-to-ct.sh
Normal file
@@ -0,0 +1,145 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================================
|
||||
# ProxMenu - Mount point from host into LXC container (CT)
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# License : MIT
|
||||
# Description : Mount a folder from /mnt on the host to a mount point in a CT
|
||||
# ==========================================================
|
||||
|
||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
||||
BASE_DIR="/usr/local/share/proxmenux"
|
||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||
|
||||
if [[ -f "$UTILS_FILE" ]]; then
|
||||
source "$UTILS_FILE"
|
||||
fi
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
#######################################################
|
||||
|
||||
CT_LIST=($(pct list | awk 'NR>1 {print $1":"$3}'))
|
||||
|
||||
if [[ ${#CT_LIST[@]} -eq 0 ]]; then
|
||||
whiptail --title "$(translate "No CTs")" --msgbox "$(translate "No containers found.")" 8 40
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CT_OPTIONS=()
|
||||
for entry in "${CT_LIST[@]}"; do
|
||||
ID="${entry%%:*}"
|
||||
NAME="${entry##*:}"
|
||||
CT_OPTIONS+=("$ID" "$NAME")
|
||||
done
|
||||
|
||||
CTID=$(whiptail --title "$(translate "Select CT")" --menu "$(translate "Select the container:")" 20 60 10 "${CT_OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$CTID" ]] && exit 0
|
||||
|
||||
|
||||
|
||||
|
||||
CT_STATUS=$(pct status "$CTID" | awk '{print $2}')
|
||||
if [ "$CT_STATUS" != "running" ]; then
|
||||
msg_info "$(translate "Starting CT") $CTID..."
|
||||
pct start "$CTID"
|
||||
sleep 2
|
||||
if [ "$(pct status "$CTID" | awk '{print $2}')" != "running" ]; then
|
||||
msg_error "$(translate "Failed to start the CT.")"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "$(translate "CT started successfully.")"
|
||||
fi
|
||||
|
||||
|
||||
#######################################################
|
||||
|
||||
|
||||
select_origin_path() {
|
||||
METHOD=$(whiptail --title "$(translate "Select Host Folder")" --menu "$(translate "How do you want to select the host folder to mount?")" 15 60 5 \
|
||||
"auto" "$(translate "Select from /mnt")" \
|
||||
"manual" "$(translate "Enter path manually")" 3>&1 1>&2 2>&3)
|
||||
|
||||
case "$METHOD" in
|
||||
auto)
|
||||
HOST_DIRS=(/mnt/*)
|
||||
OPTIONS=()
|
||||
for dir in "${HOST_DIRS[@]}"; do
|
||||
[[ -d "$dir" ]] && OPTIONS+=("$dir" "")
|
||||
done
|
||||
|
||||
ORIGIN=$(whiptail --title "$(translate "Select Folder")" --menu "$(translate "Select the folder to mount:")" 20 60 10 "${OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$ORIGIN" ]] && return 1
|
||||
;;
|
||||
|
||||
manual)
|
||||
ORIGIN=$(whiptail --title "$(translate "Enter Path")" --inputbox "$(translate "Enter the full path to the host folder:")" 10 60 "/mnt/" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$ORIGIN" ]] && return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ ! -d "$ORIGIN" ]]; then
|
||||
whiptail --title "$(translate "Error")" --msgbox "$(translate "The selected path is not a valid directory:")\n$ORIGIN" 8 60
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
select_origin_path || exit 0
|
||||
|
||||
|
||||
|
||||
#######################################################
|
||||
|
||||
|
||||
|
||||
CT_NAME=$(pct config "$CTID" | awk -F: '/hostname/ {print $2}' | xargs)
|
||||
DEFAULT_MOUNT_POINT="/mnt/host_share"
|
||||
|
||||
MOUNT_POINT=$(whiptail --title "$(translate "Mount Point")" \
|
||||
--inputbox "$(translate "Enter the mount point inside the CT (e.g., /mnt/host_share):")" \
|
||||
10 70 "$DEFAULT_MOUNT_POINT" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [[ -z "$MOUNT_POINT" ]]; then
|
||||
whiptail --title "$(translate "Error")" --msgbox "$(translate "No mount point specified.")" 8 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
if ! pct exec "$CTID" -- test -d "$MOUNT_POINT"; then
|
||||
if whiptail --yesno "$(translate "Directory does not exist in the CT.")\n\n$MOUNT_POINT\n\n$(translate "Do you want to create it?")" 12 70 --title "$(translate "Create Directory")"; then
|
||||
pct exec "$CTID" -- mkdir -p "$MOUNT_POINT"
|
||||
msg_ok "$(translate "Directory created inside CT:") $MOUNT_POINT"
|
||||
else
|
||||
msg_error "$(translate "Directory not created. Operation cancelled.")"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
INDEX=0
|
||||
while pct config "$CTID" | grep -q "mp${INDEX}:"; do
|
||||
((INDEX++))
|
||||
|
||||
|
||||
[[ $INDEX -ge 100 ]] && msg_error "Too many mount points." && exit 1
|
||||
done
|
||||
|
||||
|
||||
msg_info "$(translate "Mounting folder from host to CT...")"
|
||||
RESULT=$(pct set "$CTID" -mp${INDEX} "$ORIGIN,mp=$MOUNT_POINT,backup=0,ro=0,acl=1" 2>&1)
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
msg_ok "$(translate "Successfully mounted:")\n$ORIGIN → $CT_NAME:$MOUNT_POINT"
|
||||
else
|
||||
msg_error "$(translate "Error mounting folder:")\n$RESULT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user