Compare commits

..

20 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
8d6675ffb7 fix(migration): atomic /usr/bin/update replacement to prevent syntax errors
All 8 migration scripts (runtipi, dockge, dokploy, coolify, komodo,
alpine-komodo, overseerr, jellyseerr) overwrote /usr/bin/update in-place
while the parent shell still had the file open for reading. Since the
new content is longer than the original, bash would read leftover bytes
after the child process exited, causing garbled output or syntax errors
like: /usr/bin/update: line 2: syntax error near unexpected token )

Fix:
- Write to a temp file first, then mv over /usr/bin/update (atomic
  inode replacement so parent shell sees EOF on old fd)
- Remove unnecessary shebang from heredoc content in overseerr/jellyseerr
  (consistent with all other update scripts and install.func)
2026-03-04 07:44:14 +01:00
community-scripts-pr-app[bot]
2521412747 Update CHANGELOG.md (#12537)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 06:31:35 +00:00
Tom
199483be82 fix: whitelist var_searchdomain and fix the handling of var_ns and var_searchdomain in build.func (#12521) 2026-03-04 07:31:11 +01:00
community-scripts-pr-app[bot]
821b2b4415 chore: update github-versions.json (#12536)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 06:16:45 +00:00
community-scripts-pr-app[bot]
866ae47dd4 Update CHANGELOG.md (#12535)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 04:50:05 +00:00
Denislav Denev
fbc8133a86 fix(immich): correct LibRaw clone URL to official upstream (#12526)
* fix(immich): correct LibRaw clone URL to official upstream

The Immich helper script clones LibRaw from:

  https://github.com/libraw/libraw.git

This repository does not exist and results in:

  fatal: unable to access ... error: 500
  exit code: 128

The correct upstream repository is:

  https://github.com/LibRaw/LibRaw.git

This should resolve installation failure during the LibRaw compilation stage.

* Fix repository URL for libraw in install script

---------

Co-authored-by: Chris <punk.sand7393@fastmail.com>
2026-03-04 05:49:45 +01:00
community-scripts-pr-app[bot]
7044b6e017 Update CHANGELOG.md (#12534)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 00:21:05 +00:00
community-scripts-pr-app[bot]
3ff140101d chore: update github-versions.json (#12532)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 00:20:41 +00:00
community-scripts-pr-app[bot]
c4b6528bf0 Update CHANGELOG.md (#12530)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 22:38:41 +00:00
Cybirdtech
7a85e33791 Fix config_path casing in reactive-resume.json (#12525) 2026-03-03 23:38:15 +01:00
community-scripts-pr-app[bot]
bbfffb97a5 Update CHANGELOG.md (#12527)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 20:55:33 +00:00
Copilot
4306b4018d cross-seed: install build-essential to resolve missing make error (#12522)
* Initial plan

* fix(cross-seed): add build-essential to resolve missing make error

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>

* fix(cross-seed): use apt and ensure_dependencies per review feedback

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
2026-03-03 21:55:06 +01:00
community-scripts-pr-app[bot]
3722533431 chore: update github-versions.json (#12523)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 18:16:29 +00:00
community-scripts-pr-app[bot]
f773af17b2 Update CHANGELOG.md (#12517)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 14:49:20 +00:00
CanbiZ (MickLesk)
56b4490554 opnsense-vm: harden temp dir, bridge detection and network selection (#12513) 2026-03-03 15:48:50 +01:00
community-scripts-pr-app[bot]
b45842d76a Update CHANGELOG.md (#12516)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 14:34:30 +00:00
community-scripts-pr-app[bot]
ea279ace89 Update CHANGELOG.md (#12515)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 14:34:19 +00:00
CanbiZ (MickLesk)
034061e744 meshcentral: increased disk space to 4GB (#12509) 2026-03-03 15:34:02 +01:00
community-scripts-pr-app[bot]
dd07ba4453 Update CHANGELOG.md (#12514)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-03 14:33:48 +00:00
CanbiZ (MickLesk)
380aa4bc0f feat(recovery): add ENOSPC disk-full detection with auto-retry using doubled disk size (#12511) 2026-03-03 15:33:19 +01:00
17 changed files with 231 additions and 76 deletions

View File

@@ -410,16 +410,51 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-03-04
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
### 💾 Core
- #### 🐞 Bug Fixes
- fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521))
## 2026-03-03
### 🆕 New Scripts
- Tinyauth: v5 Support & add Debian Version [@MickLesk](https://github.com/MickLesk) ([#12501](https://github.com/community-scripts/ProxmoxVE/pull/12501))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- cross-seed: install build-essential to resolve missing `make` error [@Copilot](https://github.com/Copilot) ([#12522](https://github.com/community-scripts/ProxmoxVE/pull/12522))
- meshcentral: increased disk space to 4GB [@MickLesk](https://github.com/MickLesk) ([#12509](https://github.com/community-scripts/ProxmoxVE/pull/12509))
- #### 🔧 Refactor
- opnsense-vm: harden temp dir, bridge detection and network selection [@MickLesk](https://github.com/MickLesk) ([#12513](https://github.com/community-scripts/ProxmoxVE/pull/12513))
### 🗑️ Deleted Scripts
- Remove Unifi Network Server scripts (dead APT repo) [@Copilot](https://github.com/Copilot) ([#12500](https://github.com/community-scripts/ProxmoxVE/pull/12500))
### 💾 Core
- #### ✨ New Features
- core: recovery - add ENOSPC disk-full detection with auto-retry using * 2 hdd [@MickLesk](https://github.com/MickLesk) ([#12511](https://github.com/community-scripts/ProxmoxVE/pull/12511))
### 📚 Documentation
- Fix config_path casing in reactive-resume.json [@ScubyG](https://github.com/ScubyG) ([#12525](https://github.com/community-scripts/ProxmoxVE/pull/12525))
### 🌐 Website
- #### 🐞 Bug Fixes

View File

@@ -48,9 +48,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_komodo 2>/dev/null || true

View File

@@ -46,9 +46,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/coolify.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_coolify 2>/dev/null || true

View File

@@ -25,6 +25,7 @@ function update_script() {
check_container_resources
NODE_VERSION="24" setup_nodejs
ensure_dependencies build-essential
if command -v cross-seed &>/dev/null; then
current_version=$(cross-seed --version)

View File

@@ -48,9 +48,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dockge.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_dockge 2>/dev/null || true

View File

@@ -46,9 +46,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dokploy.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_dokploy 2>/dev/null || true

View File

@@ -337,7 +337,7 @@ function compile_libraw() {
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libraw"
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
$STD git clone https://github.com/LibRaw/LibRaw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install

View File

@@ -45,14 +45,15 @@ function update_script() {
fi
msg_info "Switching update script to Seerr"
cat <<'EOF' >/usr/bin/update
#!/usr/bin/env bash
TMP_UPDATE=$(mktemp)
cat <<'EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
msg_ok "Switched update script to Seerr"
msg_warn "Please type 'update' again to complete the migration"
exit
exit 0
fi
msg_info "Updating Jellyseerr"

View File

@@ -52,9 +52,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_komodo 2>/dev/null || true

View File

@@ -44,10 +44,11 @@ function update_script() {
fi
msg_info "Switching update script to Seerr"
cat <<'EOF' >/usr/bin/update
#!/usr/bin/env bash
TMP_UPDATE=$(mktemp)
cat <<'EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
msg_ok "Switched update script to Seerr"
msg_warn "Please type 'update' again to complete the migration"

View File

@@ -46,9 +46,11 @@ function update_script() {
fi
msg_info "Migrating update function"
cat <<'MIGRATION_EOF' >/usr/bin/update
TMP_UPDATE=$(mktemp)
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/runtipi.sh)"
MIGRATION_EOF
mv "$TMP_UPDATE" /usr/bin/update
chmod +x /usr/bin/update
ln -sf /usr/bin/update /usr/bin/update_runtipi 2>/dev/null || true

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-03-03T12:12:16Z",
"generated": "2026-03-04T06:16:35Z",
"versions": [
{
"slug": "2fauth",
@@ -242,9 +242,9 @@
{
"slug": "cosmos",
"repo": "azukaar/Cosmos-Server",
"version": "v0.21.6",
"version": "v0.21.7",
"pinned": false,
"date": "2026-02-28T22:00:49Z"
"date": "2026-03-03T18:15:29Z"
},
{
"slug": "cronicle",
@@ -298,9 +298,9 @@
{
"slug": "docmost",
"repo": "docmost/docmost",
"version": "v0.25.3",
"version": "v0.70.0",
"pinned": false,
"date": "2026-02-10T02:58:23Z"
"date": "2026-03-03T20:33:08Z"
},
{
"slug": "domain-locker",
@@ -438,9 +438,9 @@
{
"slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio",
"version": "2.245.0",
"version": "2.246.0",
"pinned": false,
"date": "2026-03-01T09:09:57Z"
"date": "2026-03-03T19:37:20Z"
},
{
"slug": "gitea",
@@ -452,9 +452,9 @@
{
"slug": "gitea-mirror",
"repo": "RayLabsHQ/gitea-mirror",
"version": "v3.11.0",
"version": "v3.12.0",
"pinned": false,
"date": "2026-03-02T10:19:59Z"
"date": "2026-03-04T02:53:42Z"
},
{
"slug": "glance",
@@ -557,9 +557,9 @@
{
"slug": "homebox",
"repo": "sysadminsmedia/homebox",
"version": "v0.23.1",
"version": "v0.24.0",
"pinned": false,
"date": "2026-02-01T22:53:32Z"
"date": "2026-03-03T16:09:55Z"
},
{
"slug": "homepage",
@@ -613,9 +613,9 @@
{
"slug": "jackett",
"repo": "Jackett/Jackett",
"version": "v0.24.1261",
"version": "v0.24.1275",
"pinned": false,
"date": "2026-03-03T05:54:20Z"
"date": "2026-03-04T05:53:40Z"
},
{
"slug": "jellystat",
@@ -669,9 +669,9 @@
{
"slug": "kima-hub",
"repo": "Chevron7Locked/kima-hub",
"version": "v1.6.0",
"version": "v1.6.1",
"pinned": false,
"date": "2026-03-02T05:43:31Z"
"date": "2026-03-03T16:13:53Z"
},
{
"slug": "kimai",
@@ -753,9 +753,9 @@
{
"slug": "libretranslate",
"repo": "LibreTranslate/LibreTranslate",
"version": "v1.9.4",
"version": "v1.9.5",
"pinned": false,
"date": "2026-02-24T17:06:05Z"
"date": "2026-03-03T18:25:04Z"
},
{
"slug": "lidarr",
@@ -872,9 +872,9 @@
{
"slug": "metube",
"repo": "alexta69/metube",
"version": "2026.03.02",
"version": "2026.03.03",
"pinned": false,
"date": "2026-03-02T19:19:10Z"
"date": "2026-03-03T19:15:55Z"
},
{
"slug": "miniflux",
@@ -921,9 +921,9 @@
{
"slug": "netbox",
"repo": "netbox-community/netbox",
"version": "v4.5.3",
"version": "v4.5.4",
"pinned": false,
"date": "2026-02-17T15:39:18Z"
"date": "2026-03-03T20:32:16Z"
},
{
"slug": "nextcloud-exporter",
@@ -942,9 +942,9 @@
{
"slug": "nightscout",
"repo": "nightscout/cgm-remote-monitor",
"version": "v15.0.5",
"version": "v15.0.6",
"pinned": false,
"date": "2026-03-01T21:22:37Z"
"date": "2026-03-03T23:04:35Z"
},
{
"slug": "nocodb",
@@ -1229,9 +1229,9 @@
{
"slug": "pulse",
"repo": "rcourtman/Pulse",
"version": "v5.1.17",
"version": "v5.1.18",
"pinned": false,
"date": "2026-03-02T20:15:31Z"
"date": "2026-03-03T22:09:15Z"
},
{
"slug": "pve-scripts-local",
@@ -1446,9 +1446,9 @@
{
"slug": "sonobarr",
"repo": "Dodelidoo-Labs/sonobarr",
"version": "0.11.0",
"version": "0.12.1",
"pinned": false,
"date": "2026-01-21T19:07:21Z"
"date": "2026-03-03T13:43:02Z"
},
{
"slug": "speedtest-tracker",
@@ -1467,9 +1467,9 @@
{
"slug": "sportarr",
"repo": "Sportarr/Sportarr",
"version": "v4.0.983.1057",
"version": "v4.0.985.1060",
"pinned": false,
"date": "2026-01-26T18:54:50Z"
"date": "2026-03-04T01:00:04Z"
},
{
"slug": "stirling-pdf",
@@ -1579,9 +1579,9 @@
{
"slug": "tracearr",
"repo": "connorgallopo/Tracearr",
"version": "v1.4.19",
"version": "v1.4.21",
"pinned": false,
"date": "2026-02-28T21:25:47Z"
"date": "2026-03-03T18:43:20Z"
},
{
"slug": "tracktor",
@@ -1649,9 +1649,9 @@
{
"slug": "upgopher",
"repo": "wanetty/upgopher",
"version": "v1.14.0",
"version": "v1.15.2",
"pinned": false,
"date": "2026-02-24T22:43:34Z"
"date": "2026-03-03T13:40:45Z"
},
{
"slug": "upsnap",
@@ -1740,9 +1740,9 @@
{
"slug": "wealthfolio",
"repo": "afadil/wealthfolio",
"version": "v3.0.2",
"version": "v3.0.3",
"pinned": false,
"date": "2026-03-03T05:01:49Z"
"date": "2026-03-03T21:47:55Z"
},
{
"slug": "web-check",

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.rxresume.org/",
"website": "https://rxresume.org",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/reactive-resume.webp",
"config_path": "/opt/reactive-resume/.env",
"config_path": "/opt/Reactive-Resume/.env",
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
"install_methods": [
{

View File

@@ -13,6 +13,10 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y build-essential
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
msg_info "Setup Cross-Seed"

View File

@@ -232,7 +232,7 @@ msg_ok "(2/5) Compiled libheif"
msg_info "(3/5) Compiling libraw"
SOURCE=${SOURCE_DIR}/libraw
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
$STD git clone https://github.com/LibRaw/LibRaw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install

View File

@@ -1033,7 +1033,7 @@ load_vars_file() {
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl
var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu
var_net var_nesting var_ns var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged
var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain
)
# Whitelist check helper
@@ -3620,13 +3620,13 @@ $PCT_OPTIONS_STRING"
# Add storage if specified
if [ -n "$SD" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
$SD"
-searchdomain $SD"
fi
# Add nameserver if specified
if [ -n "$NS" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
$NS"
-nameserver $NS"
fi
# Network configuration
@@ -4222,6 +4222,7 @@ EOF'
local is_network_issue=false
local is_apt_issue=false
local is_cmd_not_found=false
local is_disk_full=false
local error_explanation=""
if declare -f explain_exit_code >/dev/null 2>&1; then
error_explanation="$(explain_exit_code "$install_exit_code")"
@@ -4242,6 +4243,14 @@ EOF'
;;
esac
# Disk full / ENOSPC detection: errno -28 (ENOSPC), exit 228 (custom handler), exit 23 (curl write error)
if [[ $install_exit_code -eq 228 || $install_exit_code -eq 23 ]]; then
is_disk_full=true
fi
if [[ -f "$combined_log" ]] && grep -qiE 'ENOSPC|no space left on device|No space left on device|Disk quota exceeded|errno -28' "$combined_log"; then
is_disk_full=true
fi
# Command not found detection
if [[ $install_exit_code -eq 127 ]]; then
is_cmd_not_found=true
@@ -4278,6 +4287,9 @@ EOF'
if grep -qiE ': command not found|No such file or directory.*/s?bin/' "$combined_log"; then
is_cmd_not_found=true
fi
if grep -qiE 'ENOSPC|no space left on device|Disk quota exceeded|errno -28' "$combined_log"; then
is_disk_full=true
fi
fi
# Show error explanation if available
@@ -4299,6 +4311,12 @@ EOF'
echo ""
fi
if [[ "$is_disk_full" == true ]]; then
echo -e "${TAB}${INFO} The container ran out of disk space during installation (${GN}ENOSPC${CL})."
echo -e "${TAB}${INFO} Current disk size: ${GN}${DISK_SIZE} GB${CL}. A rebuild with doubled disk may resolve this."
echo ""
fi
if [[ "$is_cmd_not_found" == true ]]; then
local missing_cmd=""
if [[ -f "$combined_log" ]]; then
@@ -4318,7 +4336,7 @@ EOF'
echo -e " ${GN}3)${CL} Retry with verbose mode (full rebuild)"
local next_option=4
local APT_OPTION="" OOM_OPTION="" DNS_OPTION=""
local APT_OPTION="" OOM_OPTION="" DNS_OPTION="" DISK_OPTION=""
if [[ "$is_apt_issue" == true ]]; then
if [[ "$var_os" == "alpine" ]]; then
@@ -4343,6 +4361,18 @@ EOF'
fi
fi
if [[ "$is_disk_full" == true ]]; then
local disk_recovery_attempt="${DISK_RECOVERY_ATTEMPT:-0}"
if [[ $disk_recovery_attempt -lt 2 ]]; then
local new_disk=$((DISK_SIZE * 2))
echo -e " ${GN}${next_option})${CL} Retry with more disk space (Disk: ${DISK_SIZE}${new_disk} GB)"
DISK_OPTION=$next_option
next_option=$((next_option + 1))
else
echo -e " ${DGN}-)${CL} ${DGN}Disk resize retry exhausted (already retried ${disk_recovery_attempt}x)${CL}"
fi
fi
if [[ "$is_network_issue" == true ]]; then
echo -e " ${GN}${next_option})${CL} Retry with DNS override in LXC (8.8.8.8 / 1.1.1.1)"
DNS_OPTION=$next_option
@@ -4503,6 +4533,35 @@ EOF'
return $?
fi
if [[ -n "${DISK_OPTION}" && "${response}" == "${DISK_OPTION}" ]]; then
# Retry with doubled disk size
handled=true
echo -e "\n${TAB}${HOLD}${YW}Removing container ${CTID} for rebuild with more disk space...${CL}"
pct stop "$CTID" &>/dev/null || true
pct destroy "$CTID" &>/dev/null || true
echo -e "${BFR}${CM}${GN}Container ${CTID} removed${CL}"
echo ""
local old_ctid="$CTID"
local old_disk="$DISK_SIZE"
export CTID=$(get_valid_container_id "$CTID")
export DISK_SIZE=$((DISK_SIZE * 2))
export var_disk="$DISK_SIZE"
export VERBOSE="yes"
export var_verbose="yes"
export DISK_RECOVERY_ATTEMPT=$((${DISK_RECOVERY_ATTEMPT:-0} + 1))
echo -e "${YW}Rebuilding with increased disk space (attempt ${DISK_RECOVERY_ATTEMPT}/2):${CL}"
echo -e " Container ID: ${old_ctid}${CTID}"
echo -e " Disk: ${old_disk}${GN}${DISK_SIZE}${CL} GB (x2)"
echo -e " RAM: ${RAM_SIZE} MiB | CPU: ${CORE_COUNT} cores"
echo -e " Network: ${NET:-dhcp} | Bridge: ${BRG:-vmbr0}"
echo -e " Verbose: ${GN}enabled${CL}"
echo ""
msg_info "Restarting installation..."
build_container
return $?
fi
if [[ -n "${DNS_OPTION}" && "${response}" == "${DNS_OPTION}" ]]; then
# Retry with DNS override in LXC
handled=true

View File

@@ -105,7 +105,15 @@ function check_disk_space() {
return 0
}
TEMP_DIR=$(mktemp -d)
# Use disk-backed temp directory to avoid tmpfs/RAM size limits in /tmp
if [ -d "/var/tmp" ] && check_disk_space "/var/tmp" 20; then
TEMP_DIR=$(mktemp -d /var/tmp/opnsense-vm.XXXXXX)
elif [ -d "/tmp" ] && check_disk_space "/tmp" 20; then
TEMP_DIR=$(mktemp -d)
else
# Fallback: try /var/tmp anyway, disk space check will catch it later
TEMP_DIR=$(mktemp -d /var/tmp/opnsense-vm.XXXXXX)
fi
pushd $TEMP_DIR >/dev/null
function send_line_to_vm() {
echo -e "${DGN}Sending line: ${YW}$1${CL}"
@@ -260,6 +268,10 @@ function exit-script() {
exit
}
function get_available_bridges() {
ip -o link show type bridge 2>/dev/null | awk -F': ' '{print $2}' | sort
}
function default_settings() {
VMID=$(get_valid_nextid)
FORMAT=",efitype=4m"
@@ -279,11 +291,17 @@ function default_settings() {
VLAN=""
MAC=$GEN_MAC
WAN_MAC=$GEN_MAC_LAN
WAN_BRG="vmbr1"
WAN_BRG=""
MTU=""
START_VM="yes"
METHOD="default"
# Detect available bridges
local AVAILABLE_BRIDGES
AVAILABLE_BRIDGES=$(get_available_bridges)
local BRIDGE_COUNT
BRIDGE_COUNT=$(echo "$AVAILABLE_BRIDGES" | wc -l)
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
@@ -297,26 +315,34 @@ function default_settings() {
echo -e "${DGN}Using LAN VLAN: ${BGN}Default${CL}"
echo -e "${DGN}Using LAN MAC Address: ${BGN}${MAC}${CL}"
if NETWORK_MODE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NETWORK CONFIGURATION" --radiolist --cancel-button Exit-Script \
"Choose network setup mode for OPNsense:\n" 14 70 2 \
"dual" "Dual Interface (Traditional Firewall/Router)" ON \
"single" "Single Interface (Proxy/VPN/IDS Server)" OFF \
3>&1 1>&2 2>&3); then
if [ "$NETWORK_MODE" = "dual" ]; then
echo -e "${DGN}Network Mode: ${BGN}Dual Interface (Firewall)${CL}"
echo -e "${DGN}Using WAN MAC Address: ${BGN}${WAN_MAC}${CL}"
if ! ip link show "${WAN_BRG}" &>/dev/null; then
msg_error "Bridge '${WAN_BRG}' does not exist"
exit
else
# Determine available network modes based on bridge count
local DEFAULT_WAN_BRG
DEFAULT_WAN_BRG=$(echo "$AVAILABLE_BRIDGES" | grep -v "^${BRG}$" | head -n1)
if [ "$BRIDGE_COUNT" -ge 2 ]; then
# Multiple bridges available - offer dual or single mode
if NETWORK_MODE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NETWORK CONFIGURATION" --radiolist --cancel-button Exit-Script \
"Choose network setup mode for OPNsense:\n" 14 70 2 \
"dual" "Dual Interface (Firewall/Router) - uses ${DEFAULT_WAN_BRG}" ON \
"single" "Single Interface (Proxy/VPN/IDS Server)" OFF \
3>&1 1>&2 2>&3); then
if [ "$NETWORK_MODE" = "dual" ]; then
WAN_BRG="$DEFAULT_WAN_BRG"
echo -e "${DGN}Network Mode: ${BGN}Dual Interface (Firewall)${CL}"
echo -e "${DGN}Using WAN Bridge: ${BGN}${WAN_BRG}${CL}"
echo -e "${DGN}Using WAN MAC Address: ${BGN}${WAN_MAC}${CL}"
else
echo -e "${DGN}Network Mode: ${BGN}Single Interface (Proxy/VPN/IDS)${CL}"
WAN_BRG=""
fi
else
echo -e "${DGN}Network Mode: ${BGN}Single Interface (Proxy/VPN/IDS)${CL}"
WAN_BRG=""
exit-script
fi
else
exit-script
# Only one bridge available - single interface mode only
echo -e "${DGN}Network Mode: ${BGN}Single Interface (Proxy/VPN/IDS)${CL}"
echo -e "${YW} (Only one bridge detected, dual interface requires a second bridge)${CL}"
WAN_BRG=""
fi
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
@@ -470,13 +496,29 @@ function advanced_settings() {
exit-script
fi
if WAN_BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr1 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z $WAN_BRG ]; then
WAN_BRG="vmbr1"
# Build WAN bridge selection from available bridges (excluding LAN bridge)
local WAN_BRIDGES
WAN_BRIDGES=$(get_available_bridges | grep -v "^${BRG}$")
if [ -z "$WAN_BRIDGES" ]; then
msg_error "No additional bridge available for WAN. Only '${BRG}' exists."
msg_error "Create a second bridge (e.g. vmbr1) in Proxmox network config first."
exit
fi
local WAN_MENU=()
local first=true
while IFS= read -r brg; do
if $first; then
WAN_MENU+=("$brg" "" "ON")
first=false
else
WAN_MENU+=("$brg" "" "OFF")
fi
if ! ip link show "${WAN_BRG}" &>/dev/null; then
msg_error "WAN Bridge '${WAN_BRG}' does not exist"
exit
done <<<"$WAN_BRIDGES"
if WAN_BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "WAN BRIDGE" --radiolist "Select WAN Bridge" 14 58 6 \
"${WAN_MENU[@]}" 3>&1 1>&2 2>&3); then
if [ -z "$WAN_BRG" ]; then
WAN_BRG=$(echo "$WAN_BRIDGES" | head -n1)
fi
echo -e "${DGN}Using WAN Bridge: ${BGN}$WAN_BRG${CL}"
else