mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-07-21 21:35:08 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bd707070dc | |||
| 992b0a87a3 |
+1
-1
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
|
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
|
||||||
|
|
||||||
APP="Pangolin"
|
APP="Pangolin"
|
||||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.20.0}"
|
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.21.0}"
|
||||||
var_tags="${var_tags:-proxy}"
|
var_tags="${var_tags:-proxy}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
|
|||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
PG_VERSION="17" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
PG_DB_NAME="pangolin" PG_DB_USER="pangolin" setup_postgresql_db
|
PG_DB_NAME="pangolin" PG_DB_USER="pangolin" setup_postgresql_db
|
||||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.20.0}"
|
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.21.0}"
|
||||||
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
|
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
|
||||||
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
|
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
|
||||||
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz"
|
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz"
|
||||||
|
|||||||
+19
-83
@@ -25,7 +25,6 @@ METHOD=""
|
|||||||
NSAPP="opnsense-vm"
|
NSAPP="opnsense-vm"
|
||||||
var_os="opnsense"
|
var_os="opnsense"
|
||||||
var_version="26.7"
|
var_version="26.7"
|
||||||
FREEBSD_MAJOR="15"
|
|
||||||
#
|
#
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
@@ -491,7 +490,7 @@ function advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
echo -e "${DGN}Using LAN GATEWAY ADDRESS: ${BGN}$LAN_GW${CL}"
|
echo -e "${DGN}Using LAN GATEWAY ADDRESS: ${BGN}$LAN_GW${CL}"
|
||||||
fi
|
fi
|
||||||
if NETMASK=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a LAN netmask (24 for example)" 8 58 $NETMASK --title "LAN NETMASK" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if NETMASK=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a LAN netmmask (24 for example)" 8 58 $NETMASK --title "LAN NETMASK" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $NETMASK ]; then
|
if [ -z $NETMASK ]; then
|
||||||
echo -e "${DGN}Netmask needs to be set if ip is not dhcp${CL}"
|
echo -e "${DGN}Netmask needs to be set if ip is not dhcp${CL}"
|
||||||
fi
|
fi
|
||||||
@@ -559,7 +558,7 @@ function advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit-script
|
exit-script
|
||||||
fi
|
fi
|
||||||
if WAN_NETMASK=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN netmask (24 for example)" 8 58 $WAN_NETMASK --title "WAN NETMASK" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if WAN_NETMASK=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN netmmask (24 for example)" 8 58 $WAN_NETMASK --title "WAN NETMASK" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $WAN_NETMASK ]; then
|
if [ -z $WAN_NETMASK ]; then
|
||||||
echo -e "${DGN}WAN Netmask needs to be set if ip is not dhcp${CL}"
|
echo -e "${DGN}WAN Netmask needs to be set if ip is not dhcp${CL}"
|
||||||
fi
|
fi
|
||||||
@@ -575,7 +574,7 @@ function advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit-script
|
exit-script
|
||||||
fi
|
fi
|
||||||
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a LAN MAC Address" 8 58 $GEN_MAC --title "LAN MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN MAC Address" 8 58 $GEN_MAC --title "WAN MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MAC1 ]; then
|
if [ -z $MAC1 ]; then
|
||||||
MAC="$GEN_MAC"
|
MAC="$GEN_MAC"
|
||||||
else
|
else
|
||||||
@@ -586,7 +585,7 @@ function advanced_settings() {
|
|||||||
exit-script
|
exit-script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if MAC2=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN MAC Address" 8 58 $GEN_MAC_LAN --title "WAN MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if MAC2=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a LAN MAC Address" 8 58 $GEN_MAC_LAN --title "LAN MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MAC2 ]; then
|
if [ -z $MAC2 ]; then
|
||||||
WAN_MAC="$GEN_MAC_LAN"
|
WAN_MAC="$GEN_MAC_LAN"
|
||||||
else
|
else
|
||||||
@@ -653,26 +652,23 @@ fi
|
|||||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
||||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
||||||
msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image"
|
msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image"
|
||||||
# Use latest stable FreeBSD amd64 qcow2 VM image matching FREEBSD_MAJOR
|
# Use latest stable FreeBSD amd64 qcow2 VM image (generic, not UFS/ZFS)
|
||||||
RELEASE_LIST="$(curl -s https://download.freebsd.org/releases/VM-IMAGES/ |
|
RELEASE_LIST="$(curl -s https://download.freebsd.org/releases/VM-IMAGES/ |
|
||||||
grep -Eo "${FREEBSD_MAJOR}\.[0-9]+-RELEASE" |
|
grep -Eo '[0-9]+\.[0-9]+-RELEASE' |
|
||||||
sort -Vr |
|
sort -Vr |
|
||||||
uniq)"
|
uniq)"
|
||||||
URL=""
|
URL=""
|
||||||
FREEBSD_VER=""
|
FREEBSD_VER=""
|
||||||
for ver in $RELEASE_LIST; do
|
for ver in $RELEASE_LIST; do
|
||||||
# FreeBSD 15+ publishes separate -ufs/-zfs images instead of a generic one
|
candidate="https://download.freebsd.org/releases/VM-IMAGES/${ver}/amd64/Latest/FreeBSD-${ver}-amd64.qcow2.xz"
|
||||||
for variant in "" "-ufs" "-zfs"; do
|
if curl -fsI "$candidate" >/dev/null 2>&1; then
|
||||||
candidate="https://download.freebsd.org/releases/VM-IMAGES/${ver}/amd64/Latest/FreeBSD-${ver}-amd64${variant}.qcow2.xz"
|
FREEBSD_VER="$ver"
|
||||||
if curl -fsI "$candidate" >/dev/null 2>&1; then
|
URL="$candidate"
|
||||||
FREEBSD_VER="$ver"
|
break
|
||||||
URL="$candidate"
|
fi
|
||||||
break 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
done
|
||||||
if [ -z "$URL" ]; then
|
if [ -z "$URL" ]; then
|
||||||
msg_error "Could not find a FreeBSD ${FREEBSD_MAJOR}.x amd64 qcow2 image."
|
msg_error "Could not find generic FreeBSD amd64 qcow2 image (non-UFS/ZFS)."
|
||||||
exit 115
|
exit 115
|
||||||
fi
|
fi
|
||||||
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
|
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
|
||||||
@@ -772,7 +768,7 @@ DESCRIPTION=$(
|
|||||||
cat <<EOF
|
cat <<EOF
|
||||||
<div align='center'>
|
<div align='center'>
|
||||||
<a href='https://community-scripts.org' target='_blank' rel='noopener noreferrer'>
|
<a href='https://community-scripts.org' target='_blank' rel='noopener noreferrer'>
|
||||||
<img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
|
<img src='https://raw.githubusercontent.com/michelroegl-brunner/ProxmoxVE/refs/heads/develop/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<h2 style='font-size: 24px; margin: 20px 0;'>OPNsense VM</h2>
|
<h2 style='font-size: 24px; margin: 20px 0;'>OPNsense VM</h2>
|
||||||
@@ -818,70 +814,10 @@ if [ -n "$WAN_BRG" ]; then
|
|||||||
msg_ok "WAN interface added"
|
msg_ok "WAN interface added"
|
||||||
sleep 5 # Brief pause after adding network interface
|
sleep 5 # Brief pause after adding network interface
|
||||||
fi
|
fi
|
||||||
# FreeBSD 15+ VM images ship the base system as pkgbase packages; the bootstrap's
|
send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r 26.7"
|
||||||
# "delete all packages" step would remove the running base system (/bin/rm etc.)
|
|
||||||
# and brick the VM. Deregister them from the pkg db first - the files stay in
|
|
||||||
# place and OPNsense replaces base and kernel with its own sets afterwards.
|
|
||||||
send_line_to_vm "echo \"PRAGMA foreign_keys=ON; DELETE FROM packages WHERE name LIKE 'FreeBSD-%';\" | pkg shell"
|
|
||||||
sleep 5
|
|
||||||
send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r ${var_version}"
|
|
||||||
msg_ok "OPNsense VM is being installed, do not close the terminal, or the installation will fail."
|
msg_ok "OPNsense VM is being installed, do not close the terminal, or the installation will fail."
|
||||||
# The bootstrap ends with an automatic reboot into OPNsense. While it runs the
|
#We need to wait for the OPNsense build proccess to finish, this takes a few minutes
|
||||||
# console keeps changing (download progress, package installs); once the VM has
|
sleep 1000
|
||||||
# settled at the login prompt the screen stays static. Poll a screendump hash
|
|
||||||
# and continue after 3 minutes without change, bounded by a floor (the build
|
|
||||||
# never finishes faster) and a ceiling for slow machines. If no screendump can
|
|
||||||
# be captured at all, fall back to a fixed wait.
|
|
||||||
SCREEN_PPM="${TEMP_DIR}/screen-${VMID}.ppm"
|
|
||||||
|
|
||||||
function screen_hash() {
|
|
||||||
# Remove the previous dump first: a stale file from an earlier successful
|
|
||||||
# dump must not simulate a static screen when later dumps start failing.
|
|
||||||
# Note: "qm monitor" is unusable here - its readline attaches to /dev/tty
|
|
||||||
# even with piped stdin and captures the terminal, so use the API instead.
|
|
||||||
rm -f "$SCREEN_PPM"
|
|
||||||
timeout 10 pvesh create /nodes/$(hostname -s)/qemu/$VMID/monitor --command "screendump ${SCREEN_PPM}" >/dev/null 2>&1 || true
|
|
||||||
md5sum "$SCREEN_PPM" 2>/dev/null | cut -d' ' -f1 || true
|
|
||||||
}
|
|
||||||
|
|
||||||
build_elapsed=300
|
|
||||||
build_stable=0
|
|
||||||
screen_ok=0
|
|
||||||
hash_a=""
|
|
||||||
hash_b=""
|
|
||||||
sleep 300
|
|
||||||
while [ $build_stable -lt 6 ] && [ $build_elapsed -lt 2400 ]; do
|
|
||||||
sleep 30
|
|
||||||
build_elapsed=$((build_elapsed + 30))
|
|
||||||
new_hash=$(screen_hash)
|
|
||||||
if [ -n "$new_hash" ]; then
|
|
||||||
screen_ok=1
|
|
||||||
# The login prompt cursor may blink: a screen alternating between the same
|
|
||||||
# two frames (A/B/A/B) counts as stable, anything new resets the counter
|
|
||||||
if [ "$new_hash" = "$hash_a" ] || [ "$new_hash" = "$hash_b" ]; then
|
|
||||||
build_stable=$((build_stable + 1))
|
|
||||||
else
|
|
||||||
build_stable=0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
build_stable=0
|
|
||||||
fi
|
|
||||||
hash_b="$hash_a"
|
|
||||||
hash_a="$new_hash"
|
|
||||||
if [ -n "$new_hash" ]; then
|
|
||||||
echo -e "${DGN}Waiting for OPNsense build: ${YW}$((build_elapsed / 60))min elapsed, screen ${new_hash:0:8}, stable ${build_stable}/6${CL}"
|
|
||||||
else
|
|
||||||
echo -e "${DGN}Waiting for OPNsense build: ${YW}$((build_elapsed / 60))min elapsed, screendump failed${CL}"
|
|
||||||
fi
|
|
||||||
# No working screendump after several attempts: fixed wait instead
|
|
||||||
if [ $screen_ok -eq 0 ] && [ $build_elapsed -ge 480 ]; then
|
|
||||||
msg_error "Console screendump not available on this system - falling back to a fixed wait (12 minutes)."
|
|
||||||
sleep 720
|
|
||||||
build_elapsed=$((build_elapsed + 720))
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
msg_ok "OPNsense build finished after $((build_elapsed / 60)) minutes"
|
|
||||||
send_line_to_vm "root"
|
send_line_to_vm "root"
|
||||||
send_line_to_vm "opnsense"
|
send_line_to_vm "opnsense"
|
||||||
send_line_to_vm "2"
|
send_line_to_vm "2"
|
||||||
@@ -919,8 +855,8 @@ if [ -n "$WAN_BRG" ] && [ "$WAN_IP_ADDR" != "" ]; then
|
|||||||
send_line_to_vm "2"
|
send_line_to_vm "2"
|
||||||
send_line_to_vm "n"
|
send_line_to_vm "n"
|
||||||
send_line_to_vm "${WAN_IP_ADDR}"
|
send_line_to_vm "${WAN_IP_ADDR}"
|
||||||
send_line_to_vm "${WAN_NETMASK}"
|
send_line_to_vm "${NETMASK}"
|
||||||
send_line_to_vm "${WAN_GW}"
|
send_line_to_vm "${LAN_GW}"
|
||||||
send_line_to_vm "n"
|
send_line_to_vm "n"
|
||||||
send_line_to_vm " "
|
send_line_to_vm " "
|
||||||
send_line_to_vm "n"
|
send_line_to_vm "n"
|
||||||
|
|||||||
Reference in New Issue
Block a user