mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-06-28 12:16:53 +00:00
Update vm_creator.sh
This commit is contained in:
parent
7b7e7bddf8
commit
06d492c358
@ -3,8 +3,6 @@
|
|||||||
# ==========================================================
|
# ==========================================================
|
||||||
# VM Creator Module - ProxMenux
|
# VM Creator Module - ProxMenux
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Este módulo recibe las variables globales y crea la VM
|
|
||||||
# con su configuración, discos y descripción.
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
BASE_DIR="/usr/local/share/proxmenux"
|
BASE_DIR="/usr/local/share/proxmenux"
|
||||||
@ -19,7 +17,7 @@ load_language
|
|||||||
initialize_cache
|
initialize_cache
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Función para montar ISOs
|
# Mont ISOs
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
function mount_iso_to_vm() {
|
function mount_iso_to_vm() {
|
||||||
local vmid="$1"
|
local vmid="$1"
|
||||||
@ -68,7 +66,7 @@ function select_interface_type() {
|
|||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Función reutilizable para seleccionar almacenamiento EFI/TPM
|
# EFI/TPM
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
function select_storage_target() {
|
function select_storage_target() {
|
||||||
local PURPOSE="$1"
|
local PURPOSE="$1"
|
||||||
@ -127,7 +125,7 @@ function configure_guest_agent() {
|
|||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Función principal para crear la VM
|
# Create VM
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
function create_vm() {
|
function create_vm() {
|
||||||
local BOOT_ORDER=""
|
local BOOT_ORDER=""
|
||||||
@ -136,18 +134,18 @@ function create_vm() {
|
|||||||
local ISO_DIR="/var/lib/vz/template/iso"
|
local ISO_DIR="/var/lib/vz/template/iso"
|
||||||
|
|
||||||
|
|
||||||
# Descargar ISO si es necesario
|
|
||||||
if [[ -n "$ISO_PATH" && -n "$ISO_URL" && ! -f "$ISO_PATH" ]]; then
|
if [[ -n "$ISO_PATH" && -n "$ISO_URL" && ! -f "$ISO_PATH" ]]; then
|
||||||
# Detectar si es una URL de SourceForge
|
|
||||||
if [[ "$ISO_URL" == *"sourceforge.net"* ]]; then
|
if [[ "$ISO_URL" == *"sourceforge.net"* ]]; then
|
||||||
# SourceForge necesita --content-disposition para descargar correctamente
|
|
||||||
wget --content-disposition --show-progress -O "$ISO_PATH" "$ISO_URL"
|
wget --content-disposition --show-progress -O "$ISO_PATH" "$ISO_URL"
|
||||||
else
|
else
|
||||||
# Normal para el resto
|
|
||||||
wget --no-verbose --show-progress -O "$ISO_PATH" "$ISO_URL"
|
wget --no-verbose --show-progress -O "$ISO_PATH" "$ISO_URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar si se descargó bien
|
|
||||||
if [[ -f "$ISO_PATH" ]]; then
|
if [[ -f "$ISO_PATH" ]]; then
|
||||||
msg_ok "$(translate "ISO image downloaded")"
|
msg_ok "$(translate "ISO image downloaded")"
|
||||||
else
|
else
|
||||||
@ -163,17 +161,17 @@ function create_vm() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Crear la VM base primero (mínima)
|
|
||||||
qm create "$VMID" -agent 1${MACHINE} -tablet 0 -localtime 1${BIOS_TYPE}${CPU_TYPE} \
|
qm create "$VMID" -agent 1${MACHINE} -tablet 0 -localtime 1${BIOS_TYPE}${CPU_TYPE} \
|
||||||
-cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags proxmenux \
|
-cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags proxmenux \
|
||||||
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -ostype "$GUEST_OS_TYPE" \
|
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -ostype "$GUEST_OS_TYPE" \
|
||||||
-scsihw virtio-scsi-pci \
|
-scsihw virtio-scsi-pci \
|
||||||
$( [[ -n "$SERIAL_PORT" ]] && echo "-serial0 $SERIAL_PORT" )
|
$( [[ -n "$SERIAL_PORT" ]] && echo "-serial0 $SERIAL_PORT" ) >/dev/null 2>&1
|
||||||
|
|
||||||
msg_ok "$(translate "Base VM created with ID") $VMID"
|
msg_ok "$(translate "Base VM created with ID") $VMID"
|
||||||
|
|
||||||
|
|
||||||
# Crear disco EFI si corresponde
|
|
||||||
if [[ "$BIOS_TYPE" == *"ovmf"* ]]; then
|
if [[ "$BIOS_TYPE" == *"ovmf"* ]]; then
|
||||||
msg_info "$(translate "Configuring EFI disk")"
|
msg_info "$(translate "Configuring EFI disk")"
|
||||||
EFI_STORAGE=$(select_storage_target "EFI" "$VMID")
|
EFI_STORAGE=$(select_storage_target "EFI" "$VMID")
|
||||||
@ -209,7 +207,7 @@ function create_vm() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Añadir TPM si es Windows
|
|
||||||
if [[ "$OS_TYPE" == "2" ]]; then
|
if [[ "$OS_TYPE" == "2" ]]; then
|
||||||
msg_info "$(translate "Configuring TPM device")"
|
msg_info "$(translate "Configuring TPM device")"
|
||||||
TPM_STORAGE=$(select_storage_target "TPM" "$VMID")
|
TPM_STORAGE=$(select_storage_target "TPM" "$VMID")
|
||||||
@ -249,10 +247,10 @@ function create_vm() {
|
|||||||
|
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Crear discos virtuales o físicos con interfaz seleccionada
|
# Create Diks
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
# Primero seleccionar la interfaz
|
|
||||||
select_interface_type
|
select_interface_type
|
||||||
|
|
||||||
if [[ "$DISK_TYPE" == "virtual" && ${#VIRTUAL_DISKS[@]} -gt 0 ]]; then
|
if [[ "$DISK_TYPE" == "virtual" && ${#VIRTUAL_DISKS[@]} -gt 0 ]]; then
|
||||||
@ -301,12 +299,12 @@ select_interface_type
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Ahora montamos las ISOs
|
|
||||||
if [[ -f "$ISO_PATH" ]]; then
|
if [[ -f "$ISO_PATH" ]]; then
|
||||||
mount_iso_to_vm "$VMID" "$ISO_PATH" "ide2"
|
mount_iso_to_vm "$VMID" "$ISO_PATH" "ide2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Para Windows, preguntar y montar ISO VirtIO
|
|
||||||
if [[ "$OS_TYPE" == "2" ]]; then
|
if [[ "$OS_TYPE" == "2" ]]; then
|
||||||
local VIRTIO_DIR="/var/lib/vz/template/iso"
|
local VIRTIO_DIR="/var/lib/vz/template/iso"
|
||||||
local VIRTIO_SELECTED=""
|
local VIRTIO_SELECTED=""
|
||||||
@ -353,7 +351,7 @@ select_interface_type
|
|||||||
|
|
||||||
if [[ ${#VIRTIO_LIST[@]} -eq 0 ]]; then
|
if [[ ${#VIRTIO_LIST[@]} -eq 0 ]]; then
|
||||||
msg_warn "$(translate "No VirtIO ISO found. Please download one.")"
|
msg_warn "$(translate "No VirtIO ISO found. Please download one.")"
|
||||||
continue # Volver a preguntar
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VIRTIO_FILE=$(whiptail --title "ProxMenux - VirtIO ISOs" --menu "$(translate "Select a VirtIO ISO to use:")" 20 70 10 "${VIRTIO_LIST[@]}" 3>&1 1>&2 2>&3)
|
VIRTIO_FILE=$(whiptail --title "ProxMenux - VirtIO ISOs" --menu "$(translate "Select a VirtIO ISO to use:")" 20 70 10 "${VIRTIO_LIST[@]}" 3>&1 1>&2 2>&3)
|
||||||
@ -378,16 +376,11 @@ select_interface_type
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Configurar el orden de arranque (primer disco, luego CD)
|
|
||||||
local BOOT_FINAL="$BOOT_ORDER"
|
local BOOT_FINAL="$BOOT_ORDER"
|
||||||
[[ -f "$ISO_PATH" ]] && BOOT_FINAL="$BOOT_ORDER;ide2"
|
[[ -f "$ISO_PATH" ]] && BOOT_FINAL="$BOOT_ORDER;ide2"
|
||||||
qm set "$VMID" -boot order="$BOOT_FINAL" >/dev/null
|
qm set "$VMID" -boot order="$BOOT_FINAL" >/dev/null
|
||||||
msg_ok "$(translate "Boot order set to") $BOOT_FINAL"
|
msg_ok "$(translate "Boot order set to") $BOOT_FINAL"
|
||||||
|
|
||||||
# Crear descripción
|
|
||||||
# local DESC="<div align='center'><h1>$HN</h1><p>Created with ProxMenux</p>$DISK_INFO</div>"
|
|
||||||
# qm set "$VMID" -description "$DESC" >/dev/null
|
|
||||||
# msg_ok "$(translate "VM description configured")"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -398,7 +391,7 @@ select_interface_type
|
|||||||
<img src='https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/logo_desc.png' alt='ProxMenux Logo' style='height: 100px;'>
|
<img src='https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/logo_desc.png' alt='ProxMenux Logo' style='height: 100px;'>
|
||||||
</td>
|
</td>
|
||||||
<td style='vertical-align: middle;'>
|
<td style='vertical-align: middle;'>
|
||||||
<h1 style='margin: 0;'>$HN</h1>
|
<h1 style='margin: 0;'>$HN VM</h1>
|
||||||
<p style='margin: 0;'>Created with ProxMenux</p>
|
<p style='margin: 0;'>Created with ProxMenux</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -422,7 +415,7 @@ else
|
|||||||
msg_ok "$(translate "VM description configured")"
|
msg_ok "$(translate "VM description configured")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Arrancar la VM si corresponde
|
|
||||||
if [[ "$START_VM" == "yes" ]]; then
|
if [[ "$START_VM" == "yes" ]]; then
|
||||||
qm start "$VMID"
|
qm start "$VMID"
|
||||||
msg_ok "$(translate "VM started")"
|
msg_ok "$(translate "VM started")"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user