2025-04-08 22:31:25 +02:00
#!/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
2025-04-10 22:23:17 +02:00
ORIGIN = $( whiptail --title " $( translate "Select Host Folder" ) " --menu " $( translate "Select the folder to mount:" ) " 20 60 10 " ${ OPTIONS [@] } " 3>& 1 1>& 2 2>& 3)
2025-04-08 22:31:25 +02:00
[ [ -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"
2025-04-10 22:23:17 +02:00
MOUNT_POINT = $( whiptail --title " $( translate "Mount Point to CT" ) " \
2025-04-08 22:31:25 +02:00
--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
2025-04-11 19:07:41 +02:00
msg_success " $( translate "Press Enter to return to menu..." ) "
read -r
2025-04-08 22:31:25 +02:00
exit 0