mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-10-02 08:06:17 +00:00
update share menu
This commit is contained in:
@@ -148,7 +148,7 @@ pmx_choose_or_create_group() {
|
||||
local default_group="${1:-$PROXMENUX_DEFAULT_SHARE_GROUP}"
|
||||
local choice group_name groups menu_args gid_min
|
||||
|
||||
# Detect GID_MIN (fallback 1000)
|
||||
|
||||
gid_min="$(awk '/^\s*GID_MIN\s+[0-9]+/ {print $2}' /etc/login.defs 2>/dev/null | tail -n1)"
|
||||
[[ -z "$gid_min" ]] && gid_min=1000
|
||||
|
||||
@@ -161,7 +161,7 @@ pmx_choose_or_create_group() {
|
||||
|
||||
case "$choice" in
|
||||
1)
|
||||
# Ensure exists; auto GID >= 101000 if creation is needed
|
||||
|
||||
pmx_ensure_host_group "$default_group" >/dev/null || { echo ""; return 1; }
|
||||
echo "$default_group"
|
||||
;;
|
||||
@@ -174,7 +174,7 @@ pmx_choose_or_create_group() {
|
||||
msg_error "$(translate "Group name cannot be empty.")"
|
||||
echo ""; return 1
|
||||
fi
|
||||
# POSIX-ish validation: start with letter/_ ; then letters/digits/_/-
|
||||
|
||||
if ! [[ "$group_name" =~ ^[a-zA-Z_][a-zA-Z0-9_-]*$ ]]; then
|
||||
msg_error "$(translate "Invalid group name. Use letters, digits, underscore or hyphen, and start with a letter or underscore.")"
|
||||
echo ""; return 1
|
||||
@@ -185,7 +185,7 @@ pmx_choose_or_create_group() {
|
||||
;;
|
||||
|
||||
3)
|
||||
# Build list of real user groups (>= GID_MIN), exclude nogroup and pve*
|
||||
|
||||
groups=$(getent group | awk -F: -v MIN="$gid_min" '
|
||||
$3 >= MIN && $1 != "nogroup" && $1 !~ /^pve/ {print $0}
|
||||
' | sort -t: -k1,1)
|
||||
@@ -204,7 +204,7 @@ pmx_choose_or_create_group() {
|
||||
--menu "$(translate "Select an existing group:")" 20 70 12 \
|
||||
"${menu_args[@]}" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
|
||||
# Ensure (no-op if exists)
|
||||
|
||||
pmx_ensure_host_group "$group_name" >/dev/null || { echo ""; return 1; }
|
||||
echo "$group_name"
|
||||
;;
|
||||
@@ -228,7 +228,7 @@ pmx_ensure_host_group() {
|
||||
local base_gid=101000
|
||||
local new_gid gid
|
||||
|
||||
# Si ya existe, devuelve su GID
|
||||
|
||||
if getent group "$group_name" >/dev/null 2>&1; then
|
||||
gid="$(getent group "$group_name" | cut -d: -f3)"
|
||||
echo "$gid"
|
||||
@@ -236,7 +236,7 @@ pmx_ensure_host_group() {
|
||||
fi
|
||||
|
||||
if [[ -n "$suggested_gid" ]]; then
|
||||
# Verifica que el GID sugerido esté libre
|
||||
|
||||
if getent group "$suggested_gid" >/dev/null 2>&1; then
|
||||
msg_error "$(translate "GID already in use:") $suggested_gid"
|
||||
echo ""
|
||||
@@ -249,7 +249,7 @@ pmx_ensure_host_group() {
|
||||
fi
|
||||
msg_ok "$(translate "Group created:") $group_name"
|
||||
else
|
||||
# Busca el primer GID libre >= 101000
|
||||
|
||||
new_gid="$base_gid"
|
||||
while getent group "$new_gid" >/dev/null 2>&1; do
|
||||
new_gid=$((new_gid+1))
|
||||
@@ -314,39 +314,6 @@ pmx_prepare_host_shared_dir() {
|
||||
|
||||
|
||||
|
||||
pmx_select_host_mount_point_() {
|
||||
|
||||
local title="${1:-$(translate "Select Mount Point")}"
|
||||
local default_path="${2:-/mnt/shared}"
|
||||
local choice folder_name result
|
||||
|
||||
while true; do
|
||||
choice=$(whiptail --title "$title" --menu "$(translate "Where do you want the host folder?")" 16 76 4 \
|
||||
"mnt" "$(translate "Create folder in /mnt")" \
|
||||
"srv" "$(translate "Create folder in /srv")" \
|
||||
"media" "$(translate "Create folder in /media")" \
|
||||
"custom" "$(translate "Enter custom path")" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
|
||||
case "$choice" in
|
||||
mnt)
|
||||
folder_name=$(whiptail --inputbox "$(translate "Enter folder name for /mnt:")" 10 70 "shared" --title "$(translate "Folder Name")" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
[[ -z "$folder_name" ]] && continue
|
||||
echo "/mnt/$folder_name"; return 0;;
|
||||
srv)
|
||||
folder_name=$(whiptail --inputbox "$(translate "Enter folder name for /srv:")" 10 70 "shared" --title "$(translate "Folder Name")" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
[[ -z "$folder_name" ]] && continue
|
||||
echo "/srv/$folder_name"; return 0;;
|
||||
media)
|
||||
folder_name=$(whiptail --inputbox "$(translate "Enter folder name for /media:")" 10 70 "shared" --title "$(translate "Folder Name")" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
[[ -z "$folder_name" ]] && continue
|
||||
echo "/media/$folder_name"; return 0;;
|
||||
custom)
|
||||
result=$(whiptail --inputbox "$(translate "Enter full path:")" 10 80 "$default_path" --title "$(translate "Custom Path")" 3>&1 1>&2 2>&3) || { echo ""; return 1; }
|
||||
[[ -z "$result" ]] && continue
|
||||
echo "$result"; return 0;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -506,7 +473,7 @@ select_host_directory_() {
|
||||
select_host_directory() {
|
||||
local method choice result
|
||||
|
||||
method=$(whiptail --title "$(translate "Select Host Directory")" --menu "$(translate "How do you want to select the host folder to mount?")" 15 70 4 \
|
||||
method=$(whiptail --title "$(translate "Select Host Directory")" --menu "$(translate "How do you want to select the HOST folder to mount?")" 15 70 4 \
|
||||
"mnt" "$(translate "Select from /mnt directories")" \
|
||||
"manual" "$(translate "Enter path manually")" 3>&1 1>&2 2>&3) || return 1
|
||||
|
||||
|
@@ -24,27 +24,6 @@ load_language
|
||||
initialize_cache
|
||||
|
||||
# ==========================================================
|
||||
# CORE FUNCTIONS
|
||||
# ==========================================================
|
||||
|
||||
|
||||
|
||||
|
||||
ensure_host_group() {
|
||||
local group_name="$1"
|
||||
if ! getent group "$group_name" >/dev/null 2>&1; then
|
||||
if groupadd "$group_name" >/dev/null 2>&1; then
|
||||
msg_ok "$(translate "Group created:") $group_name"
|
||||
else
|
||||
msg_error "$(translate "Failed to create group:") $group_name"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
local gid
|
||||
gid="$(getent group "$group_name" | cut -d: -f3)"
|
||||
echo "$gid"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
get_container_uid_shift() {
|
||||
@@ -192,37 +171,10 @@ add_bind_mount() {
|
||||
}
|
||||
|
||||
|
||||
# ==========================================================
|
||||
|
||||
|
||||
select_lxc_container() {
|
||||
local ct_list ctid ct_status
|
||||
|
||||
ct_list=$(pct list | awk 'NR>1 {print $1, $2, $3}')
|
||||
if [[ -z "$ct_list" ]]; then
|
||||
dialog --title "$(translate "Error")" \
|
||||
--msgbox "$(translate "No LXC containers available")" 8 50
|
||||
return 1
|
||||
fi
|
||||
|
||||
local options=()
|
||||
while read -r id name status; do
|
||||
if [[ -n "$id" ]]; then
|
||||
options+=("$id" "$name ($status)")
|
||||
fi
|
||||
done <<< "$ct_list"
|
||||
|
||||
ctid=$(dialog --title "$(translate "Select LXC Container")" \
|
||||
--menu "$(translate "Select container:")" 20 70 12 \
|
||||
"${options[@]}" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [[ -z "$ctid" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$ctid"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
select_container_mount_point() {
|
||||
@@ -231,7 +183,7 @@ select_container_mount_point() {
|
||||
local choice mount_point existing_dirs options
|
||||
|
||||
while true; do
|
||||
choice=$(whiptail --title "$(translate "Container Mount Point")" \
|
||||
choice=$(whiptail --title "$(translate "Configure Mount Point inside LXC")" \
|
||||
--menu "$(translate "Where to mount inside container?")" 18 70 5 \
|
||||
"1" "$(translate "Create new directory in /mnt")" \
|
||||
"2" "$(translate "Use existing directory in /mnt")" \
|
||||
@@ -300,14 +252,11 @@ mount_host_directory_to_lxc() {
|
||||
sleep 3
|
||||
msg_ok "$(translate "Container started")"
|
||||
else
|
||||
show_proxmenux_logo
|
||||
msg_title "$(translate 'Mount Host Directory to LXC Container')"
|
||||
msg_error "$(translate "Failed to start container")"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
msg_ok "$(translate 'Select LXC container')"
|
||||
sleep 2
|
||||
|
||||
|
||||
|
||||
@@ -319,11 +268,10 @@ mount_host_directory_to_lxc() {
|
||||
fi
|
||||
msg_ok "$(translate 'Select Host directory')"
|
||||
|
||||
|
||||
# Step 3: Setup group
|
||||
local group_name="sharedfiles"
|
||||
local group_gid
|
||||
group_gid=$(ensure_host_group "$group_name")
|
||||
group_gid=$(pmx_ensure_host_group "$group_name")
|
||||
if [[ -z "$group_gid" ]]; then
|
||||
return 1
|
||||
fi
|
||||
@@ -423,8 +371,7 @@ $(translate "Proceed?")"
|
||||
}
|
||||
|
||||
# ==========================================================
|
||||
# MAIN MENU
|
||||
# ==========================================================
|
||||
|
||||
|
||||
main_menu() {
|
||||
while true; do
|
||||
@@ -454,13 +401,6 @@ main_menu() {
|
||||
done
|
||||
}
|
||||
|
||||
# ==========================================================
|
||||
# MAIN EXECUTION
|
||||
# ==========================================================
|
||||
|
||||
if ! command -v pct >/dev/null 2>&1; then
|
||||
echo "Error: This script must be run on a Proxmox host with LXC support."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
main_menu
|
||||
|
Reference in New Issue
Block a user