mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-06-28 04:06:54 +00:00
Update create_vm_menu.sh
This commit is contained in:
parent
3663c76256
commit
191a5ed025
@ -1,50 +1,167 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# ProxMenu - VM Creation Menu
|
# ProxMenuX - Virtual Machine Creator Script
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Author : MacRimi
|
# Author : MacRimi
|
||||||
# Copyright : (c) 2024 MacRimi
|
# Copyright : (c) 2024 MacRimi
|
||||||
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
||||||
# Version : 1.0
|
# Version : 1.0
|
||||||
# Last Updated: 28/01/2025
|
# Last Updated: 07/05/2025
|
||||||
|
# ==========================================================
|
||||||
|
# Description:
|
||||||
|
# This script is part of the central ProxMenux VM creation module. It allows users
|
||||||
|
# to create virtual machines (VMs) in Proxmox VE using either default or advanced
|
||||||
|
# configurations, streamlining the deployment of Linux, Windows, and other systems.
|
||||||
|
#
|
||||||
|
# Key features:
|
||||||
|
# - Supports both virtual disk creation and physical disk passthrough.
|
||||||
|
# - Automates CPU, RAM, BIOS, network and storage configuration.
|
||||||
|
# - Provides a user-friendly menu to select OS type, ISO image and disk interface.
|
||||||
|
# - Automatically generates a detailed and styled HTML description for each VM.
|
||||||
|
#
|
||||||
|
# All operations are designed to simplify and accelerate VM creation in a
|
||||||
|
# consistent and maintainable way, using ProxMenux standards.
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
|
|
||||||
# Configuration ============================================
|
|
||||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
||||||
|
VM_REPO="$REPO_URL/scripts/vm"
|
||||||
|
ISO_REPO="$REPO_URL/scripts/vm"
|
||||||
|
MENU_REPO="$REPO_URL/scripts/menus"
|
||||||
BASE_DIR="/usr/local/share/proxmenux"
|
BASE_DIR="/usr/local/share/proxmenux"
|
||||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||||
VENV_PATH="/opt/googletrans-env"
|
VENV_PATH="/opt/googletrans-env"
|
||||||
|
|
||||||
|
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
|
||||||
|
|
||||||
|
|
||||||
|
source <(curl -s "$VM_REPO/vm_configurator.sh")
|
||||||
|
source <(curl -s "$VM_REPO/disk_selector.sh")
|
||||||
|
source <(curl -s "$VM_REPO/vm_creator.sh")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ -f "$UTILS_FILE" ]]; then
|
if [[ -f "$UTILS_FILE" ]]; then
|
||||||
source "$UTILS_FILE"
|
source "$UTILS_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
load_language
|
load_language
|
||||||
initialize_cache
|
initialize_cache
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function header_info() {
|
||||||
|
clear
|
||||||
|
show_proxmenux_logo
|
||||||
|
echo -e "${BL}╔═══════════════════════════════════════════════╗${CL}"
|
||||||
|
echo -e "${BL}║ ║${CL}"
|
||||||
|
echo -e "${BL}║${YWB} ProxMenux VM Creator ${BL}║${CL}"
|
||||||
|
echo -e "${BL}║ ║${CL}"
|
||||||
|
echo -e "${BL}╚═══════════════════════════════════════════════╝${CL}"
|
||||||
|
echo -e
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# MAIN EXECUTION
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
show_proxmenux_logo
|
header_info
|
||||||
|
echo -e "\n Loading..."
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function start_vm_configuration() {
|
||||||
|
|
||||||
|
if (whiptail --title "ProxMenux" --yesno "$(translate "Use Default Settings?")" --no-button "$(translate "Advanced")" 10 60); then
|
||||||
|
header_info
|
||||||
|
load_default_vm_config "$OS_TYPE"
|
||||||
|
|
||||||
|
if [[ -z "$HN" ]]; then
|
||||||
|
HN=$(whiptail --inputbox "$(translate "Enter a name for the new virtual machine:")" 10 60 --title "VM Hostname" 3>&1 1>&2 2>&3)
|
||||||
|
[[ -z "$HN" ]] && HN="custom-vm"
|
||||||
|
fi
|
||||||
|
|
||||||
|
apply_default_vm_config
|
||||||
|
else
|
||||||
|
header_info
|
||||||
|
echo -e "${CUS}$(translate "Using advanced configuration")${CL}"
|
||||||
|
configure_vm_advanced "$OS_TYPE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
OPTION=$(whiptail --title "$(translate "Create VM Menu")" --menu "$(translate "Select a VM to create:")" 18 70 5 \
|
OS_TYPE=$(dialog --backtitle "ProxMenux" \
|
||||||
"1" "$(translate "Synology DSM VM")" \
|
--title "$(translate "Select System Type")" \
|
||||||
"2" "$(translate "Return to Main Menu")" 3>&1 1>&2 2>&3)
|
--menu "\n$(translate "Choose the type of virtual system to install:")" 18 70 10 \
|
||||||
|
1 "$(translate "Create") VM System NAS" \
|
||||||
|
2 "$(translate "Create") VM System Windows" \
|
||||||
|
3 "$(translate "Create") VM System Linux" \
|
||||||
|
4 "$(translate "Create") VM System Others (based Linux)" \
|
||||||
|
5 "$(translate "Return to Main Menu")" \
|
||||||
|
3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
|
||||||
|
[[ $? -ne 0 || "$OS_TYPE" == "5" ]] && exec bash <(curl -s "$MENU_REPO/main_menu.sh")
|
||||||
|
|
||||||
|
case "$OS_TYPE" in
|
||||||
|
1)
|
||||||
|
source <(curl -fsSL "$ISO_REPO/select_nas_iso.sh") && select_nas_iso || continue
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
source <(curl -fsSL "$ISO_REPO/select_windows_iso.sh") && select_windows_iso || continue
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_iso || continue
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_other_scripts || continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
if ! confirm_vm_creation; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
start_vm_configuration || continue
|
||||||
|
|
||||||
|
|
||||||
|
select_disk_type
|
||||||
|
if [[ -z "$DISK_TYPE" ]]; then
|
||||||
|
msg_error "$(translate "Disk type selection failed or cancelled")"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
create_vm
|
||||||
|
break
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function start_vm_configuration() {
|
||||||
|
|
||||||
|
if (whiptail --title "ProxMenux" --yesno "$(translate "Use Default Settings?")" --no-button "$(translate "Advanced")" 10 60); then
|
||||||
|
header_info
|
||||||
|
load_default_vm_config "$OS_TYPE"
|
||||||
|
|
||||||
|
if [[ -z "$HN" ]]; then
|
||||||
|
HN=$(whiptail --inputbox "$(translate "Enter a name for the new virtual machine:")" 10 60 --title "VM Hostname" 3>&1 1>&2 2>&3)
|
||||||
|
[[ -z "$HN" ]] && HN="custom-vm"
|
||||||
|
fi
|
||||||
|
|
||||||
|
apply_default_vm_config
|
||||||
|
else
|
||||||
|
header_info
|
||||||
|
echo -e "${CUS}$(translate "Using advanced configuration")${CL}"
|
||||||
|
configure_vm_advanced "$OS_TYPE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
case $OPTION in
|
|
||||||
1)
|
|
||||||
msg_info2 "$(translate "Running script:") $(translate "Synology DSM VM Creator")..."
|
|
||||||
bash <(curl -s "$REPO_URL/scripts/vm/synology.sh")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_warn "$(translate "Operation cancelled or failed.")"
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
Loading…
x
Reference in New Issue
Block a user