Files
ProxMenux/scripts/vm/select_nas_iso.sh
2026-04-05 11:24:08 +02:00

258 lines
8.1 KiB
Bash

#!/usr/bin/env bash
# ==========================================================
# ProxMenuX - Virtual Machine Creator Script
# ==========================================================
# Author : MacRimi
# Copyright : (c) 2024 MacRimi
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
# Version : 1.0
# Last Updated: 04/04/2026
# ==========================================================
# 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.
# ==========================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOCAL_SCRIPTS_LOCAL="$(cd "$SCRIPT_DIR/.." && pwd)"
LOCAL_SCRIPTS_DEFAULT="/usr/local/share/proxmenux/scripts"
LOCAL_SCRIPTS="$LOCAL_SCRIPTS_DEFAULT"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$LOCAL_SCRIPTS/utils.sh"
VENV_PATH="/opt/googletrans-env"
if [[ -f "$LOCAL_SCRIPTS_LOCAL/utils.sh" ]]; then
LOCAL_SCRIPTS="$LOCAL_SCRIPTS_LOCAL"
UTILS_FILE="$LOCAL_SCRIPTS/utils.sh"
elif [[ ! -f "$UTILS_FILE" ]]; then
UTILS_FILE="$BASE_DIR/utils.sh"
fi
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
load_language
initialize_cache
ISO_DIR="/var/lib/vz/template/iso"
mkdir -p "$ISO_DIR"
function _has_curl() {
command -v curl >/dev/null 2>&1
}
function _latest_version_from_lines() {
awk 'NF' | sort -V | tail -n 1
}
function resolve_truenas_scale_iso() {
local default_ver="25.10.2.1"
local base_url="https://download.sys.truenas.net/TrueNAS-SCALE-Goldeye"
local detected_ver=""
if _has_curl; then
detected_ver=$(
curl -fsSL "${base_url}/" 2>/dev/null \
| grep -Eo '>[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?/' \
| tr -d '>/' \
| _latest_version_from_lines
)
fi
[[ -z "$detected_ver" ]] && detected_ver="$default_ver"
ISO_NAME="TrueNAS SCALE ${detected_ver} (Goldeye)"
ISO_FILE="TrueNAS-SCALE-${detected_ver}.iso"
ISO_URL="${base_url}/${detected_ver}/${ISO_FILE}"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="TrueNAS-Scale"
}
function resolve_truenas_core_iso() {
local default_file="TrueNAS-13.3-U1.2.iso"
local detected_file=""
local base_url="https://download.freenas.org/13.3/STABLE/latest/x64"
if _has_curl; then
detected_file=$(
curl -fsSL "${base_url}/" 2>/dev/null \
| grep -Eo 'TrueNAS-13\.3-[^"]+\.iso' \
| head -n 1
)
fi
[[ -z "$detected_file" ]] && detected_file="$default_file"
ISO_NAME="TrueNAS CORE 13.3"
ISO_FILE="$detected_file"
ISO_URL="${base_url}/${ISO_FILE}"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="TrueNAS-Core"
}
function resolve_omv_iso() {
local default_ver="8.1.1"
local detected_ver=""
if _has_curl; then
detected_ver=$(
curl -fsSL "https://sourceforge.net/projects/openmediavault/files/iso/" 2>/dev/null \
| grep -Eo '/projects/openmediavault/files/iso/[0-9]+\.[0-9]+\.[0-9]+/' \
| sed -E 's|.*/iso/([0-9]+\.[0-9]+\.[0-9]+)/$|\1|' \
| _latest_version_from_lines
)
fi
[[ -z "$detected_ver" ]] && detected_ver="$default_ver"
ISO_NAME="OpenMediaVault ${detected_ver}"
ISO_FILE="openmediavault_${detected_ver}-amd64.iso"
ISO_URL="https://sourceforge.net/projects/openmediavault/files/iso/${detected_ver}/${ISO_FILE}/download"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="OpenMediaVault"
}
function resolve_xigmanas_iso() {
local default_train="14.3.0.5"
local default_build="14.3.0.5.10566"
local detected_train=""
local detected_build=""
if _has_curl; then
detected_train=$(
curl -fsSL "https://sourceforge.net/projects/xigmanas/files/" 2>/dev/null \
| grep -Eo '/projects/xigmanas/files/XigmaNAS-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/' \
| sed -E 's|.*/XigmaNAS-([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/$|\1|' \
| _latest_version_from_lines
)
fi
[[ -z "$detected_train" ]] && detected_train="$default_train"
if _has_curl; then
detected_build=$(
curl -fsSL "https://sourceforge.net/projects/xigmanas/files/XigmaNAS-${detected_train}/" 2>/dev/null \
| grep -Eo "/projects/xigmanas/files/XigmaNAS-${detected_train}/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/" \
| sed -E "s|.*/XigmaNAS-${detected_train}/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/$|\\1|" \
| _latest_version_from_lines
)
fi
[[ -z "$detected_build" ]] && detected_build="$default_build"
ISO_NAME="XigmaNAS-${detected_train}"
ISO_FILE="XigmaNAS-x64-LiveCD-${detected_build}.iso"
ISO_URL="https://sourceforge.net/projects/xigmanas/files/XigmaNAS-${detected_train}/${detected_build}/${ISO_FILE}/download"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="XigmaNAS"
}
function resolve_rockstor_iso() {
local default_file="Rockstor-Leap15.6-generic.x86_64-5.0.15-0.install.iso"
local detected_file=""
local base_url="https://rockstor.com/downloads/installer/leap/15.6/x86_64"
if _has_curl; then
detected_file=$(
curl -fsSL "${base_url}/" 2>/dev/null \
| grep -Eo 'Rockstor-Leap15\.6-generic\.x86_64-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+\.install\.iso' \
| _latest_version_from_lines
)
fi
[[ -z "$detected_file" ]] && detected_file="$default_file"
ISO_NAME="Rockstor"
ISO_FILE="$detected_file"
ISO_URL="${base_url}/${ISO_FILE}"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="Rockstor"
}
function select_nas_iso() {
local NAS_OPTIONS=(
"1" "Synology DSM VM (Loader Linux-based)"
"2" "TrueNAS SCALE VM (Goldeye)"
"3" "TrueNAS CORE VM (FreeBSD based)"
"4" "OpenMediaVault VM (Debian based)"
"5" "XigmaNAS VM (FreeBSD based)"
"6" "Rockstor VM (openSUSE based)"
"7" "ZimaOS VM (Proxmox-zimaos)"
"8" "Umbrel OS VM (Helper Scripts)"
"9" "$(translate "Return to Main Menu")"
)
local NAS_TYPE
NAS_TYPE=$(dialog --backtitle "ProxMenux" \
--title "$(translate "NAS Systems")" \
--menu "\n$(translate "Select the NAS system to install:")" 20 70 10 \
"${NAS_OPTIONS[@]}" 3>&1 1>&2 2>&3)
[[ $? -ne 0 ]] && return 1
case "$NAS_TYPE" in
1)
bash "$LOCAL_SCRIPTS/vm/synology.sh"
msg_success "$(translate "Press Enter to return to menu...")"
read -r
return 1
;;
2)
resolve_truenas_scale_iso
;;
3)
resolve_truenas_core_iso
;;
4)
resolve_omv_iso
;;
5)
resolve_xigmanas_iso
;;
6)
resolve_rockstor_iso
;;
7)
bash "$LOCAL_SCRIPTS/vm/zimaos.sh"
msg_success "$(translate "Press Enter to return to menu...")"
read -r
return 1
;;
8)
HN="Umbrel OS"
bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/umbrel-os-vm.sh)"
echo -e
echo -e "${TAB}$(translate "Default Login Credentials:")"
echo -e "${TAB}Username: umbrel"
echo -e "${TAB}Password: umbrel"
echo -e "${TAB}$(translate "After logging in, run: ip a to obtain the IP address.\nThen, enter that IP address in your web browser like this:\n http://IP_ADDRESS\n\nThis will open the Umbral OS dashboard.")"
echo -e
msg_success "$(translate "Press Enter to return to menu...")"
read -r
whiptail --title "Proxmox VE - Umbrel OS" \
--msgbox "$(translate "Umbrel OS installer script by Helper Scripts\n\nVisit the GitHub repo to learn more, contribute, or support the project:\n\nhttps://community-scripts.github.io/ProxmoxVE/scripts?id=umbrel-os-vm")" 15 70
return 1
;;
9)
return 1
;;
esac
export ISO_NAME ISO_URL ISO_FILE ISO_PATH HN
return 0
}