Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
a6d7cec2a3 Tinyauth: v5 Support & add Debian Version 2026-03-03 09:49:01 +01:00
37 changed files with 336 additions and 395 deletions

View File

@@ -410,65 +410,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-03-05
## 2026-03-04
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix: gitea-mirror [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12549](https://github.com/community-scripts/ProxmoxVE/pull/12549))
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
- update: stirling-pdf: java 25 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12552](https://github.com/community-scripts/ProxmoxVE/pull/12552))
- Docmost: register NoopAuditService globally when EE submodule is missing [@MickLesk](https://github.com/MickLesk) ([#12551](https://github.com/community-scripts/ProxmoxVE/pull/12551))
- jellyseer/overseer migration corrupting /usr/bin/update [@MickLesk](https://github.com/MickLesk) ([#12539](https://github.com/community-scripts/ProxmoxVE/pull/12539))
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
- #### 🔧 Refactor
- Fluid-Calendar: NodeJS bump [@tremor021](https://github.com/tremor021) ([#12558](https://github.com/community-scripts/ProxmoxVE/pull/12558))
- Refactor: LiteLLM [@tremor021](https://github.com/tremor021) ([#12550](https://github.com/community-scripts/ProxmoxVE/pull/12550))
### 💾 Core
- #### 🐞 Bug Fixes
- tools: fall back to distro packages for psql [@MickLesk](https://github.com/MickLesk) ([#12542](https://github.com/community-scripts/ProxmoxVE/pull/12542))
- 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 ## 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 ### 🌐 Website
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes

View File

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

View File

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

View File

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

View File

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

View File

@@ -48,17 +48,6 @@ function update_script() {
cd /opt/docmost cd /opt/docmost
mv /opt/.env /opt/docmost/.env mv /opt/.env /opt/docmost/.env
mv /opt/data /opt/docmost/data mv /opt/data /opt/docmost/data
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
# included in GitHub tarballs. The community NoopAuditService exists but
# is only exported by CoreModule child modules such as UserModule cannot
# resolve it. Making CoreModule @Global() exposes the token app-wide.
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
fi
$STD pnpm install --force $STD pnpm install --force
$STD pnpm build $STD pnpm build
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

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

View File

@@ -28,9 +28,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop fluid-calendar systemctl stop fluid-calendar

View File

@@ -87,8 +87,6 @@ EOF
msg_ok "Old Enviroment fixed" msg_ok "Old Enviroment fixed"
fi fi
ensure_dependencies git
if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop gitea-mirror systemctl stop gitea-mirror
@@ -96,7 +94,7 @@ EOF
msg_info "Backup Data" msg_info "Backup Data"
mkdir -p /opt/gitea-mirror-backup/data mkdir -p /opt/gitea-mirror-backup/data
cp -r /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/ cp /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/
msg_ok "Backup Data" msg_ok "Backup Data"
msg_info "Installing Bun" msg_info "Installing Bun"
@@ -113,11 +111,12 @@ EOF
$STD bun run setup $STD bun run setup
$STD bun run build $STD bun run build
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4) APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
sudo sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
msg_ok "Updated and rebuilt ${APP}" msg_ok "Updated and rebuilt ${APP}"
msg_info "Restoring Data" msg_info "Restoring Data"
cp -r /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
msg_ok "Restored Data" msg_ok "Restored Data"
msg_info "Starting Service" msg_info "Starting Service"

View File

@@ -1,6 +0,0 @@
_______ __ __
/_ __(_)___ __ ______ ___ __/ /_/ /_
/ / / / __ \/ / / / __ `/ / / / __/ __ \
/ / / / / / / /_/ / /_/ / /_/ / /_/ / / /
/_/ /_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/
/____/

6
ct/headers/unifi Normal file
View File

@@ -0,0 +1,6 @@
__ __ _ _____
/ / / /___ (_) __(_)
/ / / / __ \/ / /_/ /
/ /_/ / / / / / __/ /
\____/_/ /_/_/_/ /_/

View File

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

View File

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

View File

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

View File

@@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Service" msg_ok "Stopped Service"
VENV_PATH="/opt/litellm/.venv" VENV_PATH="/opt/litellm/.venv"
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv PYTHON_VERSION="3.13" setup_uv
msg_info "Updating LiteLLM" msg_info "Updating LiteLLM"
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma

View File

@@ -9,7 +9,7 @@ APP="MeshCentral"
var_tags="${var_tags:-remote-management}" var_tags="${var_tags:-remote-management}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"

View File

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

View File

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

View File

@@ -35,7 +35,7 @@ function update_script() {
fi fi
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="25" setup_java JAVA_VERSION="21" setup_java
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop stirlingpdf libreoffice-listener unoserver systemctl stop stirlingpdf libreoffice-listener unoserver

47
ct/unifi.sh Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ui.com/download/unifi
APP="Unifi"
var_tags="${var_tags:-network;unifi}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /usr/lib/unifi ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
JAVA_VERSION="21" setup_java
msg_info "Updating ${APP}"
$STD apt update --allow-releaseinfo-change
ensure_dependencies unifi
msg_ok "Updated successfully!"
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"

View File

@@ -1,5 +1,5 @@
{ {
"generated": "2026-03-05T06:17:38Z", "generated": "2026-03-03T06:17:56Z",
"versions": [ "versions": [
{ {
"slug": "2fauth", "slug": "2fauth",
@@ -39,9 +39,9 @@
{ {
"slug": "ampache", "slug": "ampache",
"repo": "ampache/ampache", "repo": "ampache/ampache",
"version": "7.9.2", "version": "7.9.1",
"pinned": false, "pinned": false,
"date": "2026-03-05T03:54:03Z" "date": "2026-02-25T08:52:58Z"
}, },
{ {
"slug": "argus", "slug": "argus",
@@ -193,9 +193,9 @@
{ {
"slug": "checkmate", "slug": "checkmate",
"repo": "bluewave-labs/Checkmate", "repo": "bluewave-labs/Checkmate",
"version": "v3.5.0", "version": "v3.4.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T19:51:22Z" "date": "2026-02-20T21:08:55Z"
}, },
{ {
"slug": "cleanuparr", "slug": "cleanuparr",
@@ -242,9 +242,9 @@
{ {
"slug": "cosmos", "slug": "cosmos",
"repo": "azukaar/Cosmos-Server", "repo": "azukaar/Cosmos-Server",
"version": "v0.21.7", "version": "v0.21.6",
"pinned": false, "pinned": false,
"date": "2026-03-03T18:15:29Z" "date": "2026-02-28T22:00:49Z"
}, },
{ {
"slug": "cronicle", "slug": "cronicle",
@@ -298,9 +298,9 @@
{ {
"slug": "docmost", "slug": "docmost",
"repo": "docmost/docmost", "repo": "docmost/docmost",
"version": "v0.70.1", "version": "v0.25.3",
"pinned": false, "pinned": false,
"date": "2026-03-04T12:54:49Z" "date": "2026-02-10T02:58:23Z"
}, },
{ {
"slug": "domain-locker", "slug": "domain-locker",
@@ -382,9 +382,9 @@
{ {
"slug": "firefly", "slug": "firefly",
"repo": "firefly-iii/firefly-iii", "repo": "firefly-iii/firefly-iii",
"version": "v6.5.3", "version": "v6.5.2",
"pinned": false, "pinned": false,
"date": "2026-03-04T06:53:02Z" "date": "2026-03-03T05:42:27Z"
}, },
{ {
"slug": "fladder", "slug": "fladder",
@@ -438,9 +438,9 @@
{ {
"slug": "ghostfolio", "slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio", "repo": "ghostfolio/ghostfolio",
"version": "2.247.0", "version": "2.245.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T07:48:00Z" "date": "2026-03-01T09:09:57Z"
}, },
{ {
"slug": "gitea", "slug": "gitea",
@@ -452,9 +452,9 @@
{ {
"slug": "gitea-mirror", "slug": "gitea-mirror",
"repo": "RayLabsHQ/gitea-mirror", "repo": "RayLabsHQ/gitea-mirror",
"version": "v3.12.2", "version": "v3.11.0",
"pinned": false, "pinned": false,
"date": "2026-03-05T04:26:50Z" "date": "2026-03-02T10:19:59Z"
}, },
{ {
"slug": "glance", "slug": "glance",
@@ -473,9 +473,9 @@
{ {
"slug": "gokapi", "slug": "gokapi",
"repo": "Forceu/Gokapi", "repo": "Forceu/Gokapi",
"version": "v2.2.3", "version": "v2.2.2",
"pinned": false, "pinned": false,
"date": "2026-03-04T21:29:16Z" "date": "2026-01-31T21:11:27Z"
}, },
{ {
"slug": "gotify", "slug": "gotify",
@@ -557,9 +557,9 @@
{ {
"slug": "homebox", "slug": "homebox",
"repo": "sysadminsmedia/homebox", "repo": "sysadminsmedia/homebox",
"version": "v0.24.0", "version": "v0.23.1",
"pinned": false, "pinned": false,
"date": "2026-03-03T16:09:55Z" "date": "2026-02-01T22:53:32Z"
}, },
{ {
"slug": "homepage", "slug": "homepage",
@@ -613,9 +613,9 @@
{ {
"slug": "jackett", "slug": "jackett",
"repo": "Jackett/Jackett", "repo": "Jackett/Jackett",
"version": "v0.24.1287", "version": "v0.24.1261",
"pinned": false, "pinned": false,
"date": "2026-03-05T05:49:33Z" "date": "2026-03-03T05:54:20Z"
}, },
{ {
"slug": "jellystat", "slug": "jellystat",
@@ -669,9 +669,9 @@
{ {
"slug": "kima-hub", "slug": "kima-hub",
"repo": "Chevron7Locked/kima-hub", "repo": "Chevron7Locked/kima-hub",
"version": "v1.6.2", "version": "v1.6.0",
"pinned": false, "pinned": false,
"date": "2026-03-05T05:38:02Z" "date": "2026-03-02T05:43:31Z"
}, },
{ {
"slug": "kimai", "slug": "kimai",
@@ -690,9 +690,9 @@
{ {
"slug": "koel", "slug": "koel",
"repo": "koel/koel", "repo": "koel/koel",
"version": "v8.3.1", "version": "v8.3.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T08:22:06Z" "date": "2026-01-08T21:32:58Z"
}, },
{ {
"slug": "koillection", "slug": "koillection",
@@ -753,9 +753,9 @@
{ {
"slug": "libretranslate", "slug": "libretranslate",
"repo": "LibreTranslate/LibreTranslate", "repo": "LibreTranslate/LibreTranslate",
"version": "v1.9.5", "version": "v1.9.4",
"pinned": false, "pinned": false,
"date": "2026-03-03T18:25:04Z" "date": "2026-02-24T17:06:05Z"
}, },
{ {
"slug": "lidarr", "slug": "lidarr",
@@ -872,9 +872,9 @@
{ {
"slug": "metube", "slug": "metube",
"repo": "alexta69/metube", "repo": "alexta69/metube",
"version": "2026.03.03", "version": "2026.03.02",
"pinned": false, "pinned": false,
"date": "2026-03-03T19:15:55Z" "date": "2026-03-02T19:19:10Z"
}, },
{ {
"slug": "miniflux", "slug": "miniflux",
@@ -921,9 +921,9 @@
{ {
"slug": "netbox", "slug": "netbox",
"repo": "netbox-community/netbox", "repo": "netbox-community/netbox",
"version": "v4.5.4", "version": "v4.5.3",
"pinned": false, "pinned": false,
"date": "2026-03-03T20:32:16Z" "date": "2026-02-17T15:39:18Z"
}, },
{ {
"slug": "nextcloud-exporter", "slug": "nextcloud-exporter",
@@ -942,9 +942,9 @@
{ {
"slug": "nightscout", "slug": "nightscout",
"repo": "nightscout/cgm-remote-monitor", "repo": "nightscout/cgm-remote-monitor",
"version": "v15.0.6", "version": "v15.0.5",
"pinned": false, "pinned": false,
"date": "2026-03-03T23:04:35Z" "date": "2026-03-01T21:22:37Z"
}, },
{ {
"slug": "nocodb", "slug": "nocodb",
@@ -1061,9 +1061,9 @@
{ {
"slug": "paperless-ngx", "slug": "paperless-ngx",
"repo": "paperless-ngx/paperless-ngx", "repo": "paperless-ngx/paperless-ngx",
"version": "v2.20.10", "version": "v2.20.9",
"pinned": false, "pinned": false,
"date": "2026-03-04T19:20:57Z" "date": "2026-02-28T10:17:35Z"
}, },
{ {
"slug": "patchmon", "slug": "patchmon",
@@ -1229,9 +1229,9 @@
{ {
"slug": "pulse", "slug": "pulse",
"repo": "rcourtman/Pulse", "repo": "rcourtman/Pulse",
"version": "v5.1.18", "version": "v5.1.17",
"pinned": false, "pinned": false,
"date": "2026-03-03T22:09:15Z" "date": "2026-03-02T20:15:31Z"
}, },
{ {
"slug": "pve-scripts-local", "slug": "pve-scripts-local",
@@ -1369,9 +1369,9 @@
{ {
"slug": "seaweedfs", "slug": "seaweedfs",
"repo": "seaweedfs/seaweedfs", "repo": "seaweedfs/seaweedfs",
"version": "4.14", "version": "4.13",
"pinned": false, "pinned": false,
"date": "2026-03-05T04:49:27Z" "date": "2026-02-17T01:09:45Z"
}, },
{ {
"slug": "seelf", "slug": "seelf",
@@ -1446,9 +1446,9 @@
{ {
"slug": "sonobarr", "slug": "sonobarr",
"repo": "Dodelidoo-Labs/sonobarr", "repo": "Dodelidoo-Labs/sonobarr",
"version": "0.12.1", "version": "0.11.0",
"pinned": false, "pinned": false,
"date": "2026-03-03T13:43:02Z" "date": "2026-01-21T19:07:21Z"
}, },
{ {
"slug": "speedtest-tracker", "slug": "speedtest-tracker",
@@ -1467,16 +1467,16 @@
{ {
"slug": "sportarr", "slug": "sportarr",
"repo": "Sportarr/Sportarr", "repo": "Sportarr/Sportarr",
"version": "v4.0.985.1060", "version": "v4.0.983.1057",
"pinned": false, "pinned": false,
"date": "2026-03-04T01:00:04Z" "date": "2026-01-26T18:54:50Z"
}, },
{ {
"slug": "stirling-pdf", "slug": "stirling-pdf",
"repo": "Stirling-Tools/Stirling-PDF", "repo": "Stirling-Tools/Stirling-PDF",
"version": "v2.6.0", "version": "v2.5.3",
"pinned": false, "pinned": false,
"date": "2026-03-03T20:46:42Z" "date": "2026-02-23T23:23:39Z"
}, },
{ {
"slug": "streamlink-webui", "slug": "streamlink-webui",
@@ -1562,13 +1562,6 @@
"pinned": false, "pinned": false,
"date": "2026-02-13T16:30:09Z" "date": "2026-02-13T16:30:09Z"
}, },
{
"slug": "tinyauth",
"repo": "steveiliop56/tinyauth",
"version": "v5.0.1",
"pinned": false,
"date": "2026-03-04T21:05:05Z"
},
{ {
"slug": "traccar", "slug": "traccar",
"repo": "traccar/traccar", "repo": "traccar/traccar",
@@ -1579,9 +1572,9 @@
{ {
"slug": "tracearr", "slug": "tracearr",
"repo": "connorgallopo/Tracearr", "repo": "connorgallopo/Tracearr",
"version": "v1.4.21", "version": "v1.4.19",
"pinned": false, "pinned": false,
"date": "2026-03-03T18:43:20Z" "date": "2026-02-28T21:25:47Z"
}, },
{ {
"slug": "tracktor", "slug": "tracktor",
@@ -1607,9 +1600,9 @@
{ {
"slug": "trip", "slug": "trip",
"repo": "itskovacs/TRIP", "repo": "itskovacs/TRIP",
"version": "1.41.1", "version": "1.41.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T07:25:35Z" "date": "2026-02-23T17:57:31Z"
}, },
{ {
"slug": "tududi", "slug": "tududi",
@@ -1649,9 +1642,9 @@
{ {
"slug": "upgopher", "slug": "upgopher",
"repo": "wanetty/upgopher", "repo": "wanetty/upgopher",
"version": "v1.15.2", "version": "v1.14.0",
"pinned": false, "pinned": false,
"date": "2026-03-03T13:40:45Z" "date": "2026-02-24T22:43:34Z"
}, },
{ {
"slug": "upsnap", "slug": "upsnap",
@@ -1663,9 +1656,9 @@
{ {
"slug": "uptimekuma", "slug": "uptimekuma",
"repo": "louislam/uptime-kuma", "repo": "louislam/uptime-kuma",
"version": "2.2.0", "version": "2.1.3",
"pinned": false, "pinned": false,
"date": "2026-03-05T02:08:14Z" "date": "2026-02-19T05:37:30Z"
}, },
{ {
"slug": "vaultwarden", "slug": "vaultwarden",
@@ -1719,9 +1712,9 @@
{ {
"slug": "watcharr", "slug": "watcharr",
"repo": "sbondCo/Watcharr", "repo": "sbondCo/Watcharr",
"version": "v3.0.0", "version": "v2.1.1",
"pinned": false, "pinned": false,
"date": "2026-03-04T09:29:14Z" "date": "2025-07-15T22:38:01Z"
}, },
{ {
"slug": "watchyourlan", "slug": "watchyourlan",
@@ -1740,9 +1733,9 @@
{ {
"slug": "wealthfolio", "slug": "wealthfolio",
"repo": "afadil/wealthfolio", "repo": "afadil/wealthfolio",
"version": "v3.0.3", "version": "v3.0.2",
"pinned": false, "pinned": false,
"date": "2026-03-03T21:47:55Z" "date": "2026-03-03T05:01:49Z"
}, },
{ {
"slug": "web-check", "slug": "web-check",
@@ -1824,9 +1817,9 @@
{ {
"slug": "zitadel", "slug": "zitadel",
"repo": "zitadel/zitadel", "repo": "zitadel/zitadel",
"version": "v4.12.1", "version": "v4.12.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T12:40:17Z" "date": "2026-03-02T08:16:10Z"
}, },
{ {
"slug": "zoraxy", "slug": "zoraxy",
@@ -1838,9 +1831,9 @@
{ {
"slug": "zwave-js-ui", "slug": "zwave-js-ui",
"repo": "zwave-js/zwave-js-ui", "repo": "zwave-js/zwave-js-ui",
"version": "v11.13.0", "version": "v11.12.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T15:09:54Z" "date": "2026-02-19T10:14:19Z"
} }
] ]
} }

View File

@@ -21,7 +21,7 @@
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 4, "hdd": 2,
"os": "debian", "os": "debian",
"version": "13" "version": "13"
} }

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.rxresume.org/", "documentation": "https://docs.rxresume.org/",
"website": "https://rxresume.org", "website": "https://rxresume.org",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/reactive-resume.webp", "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.", "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": [ "install_methods": [
{ {

View File

@@ -4,7 +4,7 @@
"categories": [ "categories": [
6 6
], ],
"date_created": "2026-03-03", "date_created": "2025-05-06",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,

View File

@@ -0,0 +1,42 @@
{
"name": "UniFi Network Server",
"slug": "unifi",
"categories": [
4
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8443,
"documentation": "https://help.ui.com/hc/en-us/articles/360012282453-Self-Hosting-a-UniFi-Network-Server",
"website": "https://www.ui.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ubiquiti-unifi.webp",
"config_path": "",
"description": "UniFi Network Server is a software that helps manage and monitor UniFi networks (Wi-Fi, Ethernet, etc.) by providing an intuitive user interface and advanced features. It allows network administrators to configure, monitor, and upgrade network devices, as well as view network statistics, client devices, and historical events. The aim of the application is to make the management of UniFi networks easier and more efficient.",
"disable": true,
"disable_description": "This script is disabled because UniFi no longer delivers APT packages for Debian systems. The installation relies on APT repositories that are no longer maintained or available. For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11876",
"install_methods": [
{
"type": "default",
"script": "ct/unifi.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "For non-AVX CPUs, MongoDB 4.4 is installed. Please note this is a legacy solution that may present security risks and could become unsupported in future updates.",
"type": "warning"
}
]
}

View File

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

View File

@@ -26,17 +26,6 @@ fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
msg_info "Configuring Docmost (Patience)" msg_info "Configuring Docmost (Patience)"
cd /opt/docmost cd /opt/docmost
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
# included in GitHub tarballs. The community NoopAuditService exists but
# is only exported by CoreModule child modules such as UserModule cannot
# resolve it. Making CoreModule @Global() exposes the token app-wide.
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
fi
mv .env.example .env mv .env.example .env
mkdir data mkdir data
sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \

View File

@@ -19,7 +19,7 @@ msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
NODE_VERSION="24" setup_nodejs NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball" fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
msg_info "Configuring fluid-calendar" msg_info "Configuring fluid-calendar"

View File

@@ -18,8 +18,7 @@ $STD apt install -y \
build-essential \ build-essential \
openssl \ openssl \
sqlite3 \ sqlite3 \
unzip \ unzip
git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Bun" msg_info "Installing Bun"

View File

@@ -232,7 +232,7 @@ msg_ok "(2/5) Compiled libheif"
msg_info "(3/5) Compiling libraw" msg_info "(3/5) Compiling libraw"
SOURCE=${SOURCE_DIR}/libraw SOURCE=${SOURCE_DIR}/libraw
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}" : "${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" cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION" $STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install $STD autoreconf --install

View File

@@ -20,8 +20,24 @@ $STD apt install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="litellm_db" PG_DB_USER="litellm" setup_postgresql_db PYTHON_VERSION="3.13" setup_uv
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv
msg_info "Setting up PostgreSQL"
DB_NAME="litellm_db"
DB_USER="litellm"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
{
echo "${APPLICATION} Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/litellm.creds
msg_ok "Set up PostgreSQL"
msg_info "Setting up Virtual Environment" msg_info "Setting up Virtual Environment"
mkdir -p /opt/litellm mkdir -p /opt/litellm
@@ -37,9 +53,10 @@ mkdir -p /opt
cat <<EOF >/opt/litellm/litellm.yaml cat <<EOF >/opt/litellm/litellm.yaml
general_settings: general_settings:
master_key: sk-1234 master_key: sk-1234
database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME
store_model_in_db: true store_model_in_db: true
EOF EOF
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "Configured LiteLLM" msg_ok "Configured LiteLLM"
@@ -56,6 +73,7 @@ Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now litellm systemctl enable -q --now litellm
msg_ok "Created Service" msg_ok "Created Service"

View File

@@ -38,12 +38,6 @@ msg_info "Setting up PowerDNS"
$STD apt install -y \ $STD apt install -y \
pdns-server \ pdns-server \
pdns-backend-sqlite3 pdns-backend-sqlite3
sed -i 's/^launch=$/# launch=/' /etc/powerdns/pdns.conf
rm -f /etc/powerdns/pdns.d/bind.conf
cat <<EOF >/etc/powerdns/pdns.d/gsqlite3.conf
launch+=gsqlite3
gsqlite3-database=/opt/poweradmin/powerdns.db
EOF
msg_ok "Setup PowerDNS" msg_ok "Setup PowerDNS"
fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball" fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
@@ -132,10 +126,7 @@ cat <<EOF >/etc/apache2/sites-enabled/poweradmin.conf
EOF EOF
$STD a2enmod rewrite headers $STD a2enmod rewrite headers
chown -R www-data:www-data /opt/poweradmin chown -R www-data:www-data /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db $STD systemctl restart apache2
chmod 664 /opt/poweradmin/powerdns.db
usermod -aG pdns www-data
$STD systemctl restart pdns apache2
msg_info "Created Service" msg_info "Created Service"
motd_ssh motd_ssh

View File

@@ -31,7 +31,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="25" setup_java JAVA_VERSION="21" setup_java
read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response
response=${response,,} # Convert to lowercase response=${response,,} # Convert to lowercase

53
install/unifi-install.sh Normal file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ui.com/download/unifi
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y apt-transport-https
curl -fsSL "https://dl.ui.com/unifi/unifi-repo.gpg" -o "/usr/share/keyrings/unifi-repo.gpg"
cat <<EOF | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.sources >/dev/null
Types: deb
URIs: https://www.ui.com/downloads/unifi/debian
Suites: stable
Components: ubiquiti
Architectures: amd64
Signed-By: /usr/share/keyrings/unifi-repo.gpg
EOF
$STD apt update
msg_ok "Installed Dependencies"
JAVA_VERSION="21" setup_java
if lscpu | grep -q 'avx'; then
MONGO_VERSION="8.0" setup_mongodb
else
msg_error "No AVX detected (CPU-Flag)! We have discontinued support for this. You are welcome to try it manually with a Debian LXC, but due to the many issues with Unifi, we currently only support AVX CPUs."
exit 10
fi
if ! dpkg -l | grep -q 'libssl1.1'; then
msg_info "Installing libssl (if needed)"
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "/tmp/libssl.deb"
$STD dpkg -i /tmp/libssl.deb
rm -f /tmp/libssl.deb
msg_ok "Installed libssl1.1"
fi
msg_info "Installing UniFi Network Server"
$STD apt install -y unifi
msg_ok "Installed UniFi Network Server"
motd_ssh
customize
cleanup_lxc

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_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_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_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_searchdomain var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
) )
# Whitelist check helper # Whitelist check helper
@@ -3620,13 +3620,13 @@ $PCT_OPTIONS_STRING"
# Add storage if specified # Add storage if specified
if [ -n "$SD" ]; then if [ -n "$SD" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
-searchdomain $SD" $SD"
fi fi
# Add nameserver if specified # Add nameserver if specified
if [ -n "$NS" ]; then if [ -n "$NS" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
-nameserver $NS" $NS"
fi fi
# Network configuration # Network configuration
@@ -4222,7 +4222,6 @@ EOF'
local is_network_issue=false local is_network_issue=false
local is_apt_issue=false local is_apt_issue=false
local is_cmd_not_found=false local is_cmd_not_found=false
local is_disk_full=false
local error_explanation="" local error_explanation=""
if declare -f explain_exit_code >/dev/null 2>&1; then if declare -f explain_exit_code >/dev/null 2>&1; then
error_explanation="$(explain_exit_code "$install_exit_code")" error_explanation="$(explain_exit_code "$install_exit_code")"
@@ -4243,14 +4242,6 @@ EOF'
;; ;;
esac 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 # Command not found detection
if [[ $install_exit_code -eq 127 ]]; then if [[ $install_exit_code -eq 127 ]]; then
is_cmd_not_found=true is_cmd_not_found=true
@@ -4287,9 +4278,6 @@ EOF'
if grep -qiE ': command not found|No such file or directory.*/s?bin/' "$combined_log"; then if grep -qiE ': command not found|No such file or directory.*/s?bin/' "$combined_log"; then
is_cmd_not_found=true is_cmd_not_found=true
fi fi
if grep -qiE 'ENOSPC|no space left on device|Disk quota exceeded|errno -28' "$combined_log"; then
is_disk_full=true
fi
fi fi
# Show error explanation if available # Show error explanation if available
@@ -4311,12 +4299,6 @@ EOF'
echo "" echo ""
fi 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 if [[ "$is_cmd_not_found" == true ]]; then
local missing_cmd="" local missing_cmd=""
if [[ -f "$combined_log" ]]; then if [[ -f "$combined_log" ]]; then
@@ -4336,7 +4318,7 @@ EOF'
echo -e " ${GN}3)${CL} Retry with verbose mode (full rebuild)" echo -e " ${GN}3)${CL} Retry with verbose mode (full rebuild)"
local next_option=4 local next_option=4
local APT_OPTION="" OOM_OPTION="" DNS_OPTION="" DISK_OPTION="" local APT_OPTION="" OOM_OPTION="" DNS_OPTION=""
if [[ "$is_apt_issue" == true ]]; then if [[ "$is_apt_issue" == true ]]; then
if [[ "$var_os" == "alpine" ]]; then if [[ "$var_os" == "alpine" ]]; then
@@ -4361,18 +4343,6 @@ EOF'
fi fi
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 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)" echo -e " ${GN}${next_option})${CL} Retry with DNS override in LXC (8.8.8.8 / 1.1.1.1)"
DNS_OPTION=$next_option DNS_OPTION=$next_option
@@ -4533,35 +4503,6 @@ EOF'
return $? return $?
fi 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 if [[ -n "${DNS_OPTION}" && "${response}" == "${DNS_OPTION}" ]]; then
# Retry with DNS override in LXC # Retry with DNS override in LXC
handled=true handled=true

View File

@@ -6500,13 +6500,14 @@ function setup_postgresql() {
local SUITE local SUITE
case "$DISTRO_CODENAME" in case "$DISTRO_CODENAME" in
trixie | forky | sid) trixie | forky | sid)
if verify_repo_available "https://apt.postgresql.org/pub/repos/apt" "trixie-pgdg"; then if verify_repo_available "https://apt.postgresql.org/pub/repos/apt" "trixie-pgdg"; then
SUITE="trixie-pgdg" SUITE="trixie-pgdg"
else else
msg_warn "PGDG repo not available for ${DISTRO_CODENAME}, falling back to distro packages" SUITE="bookworm-pgdg"
USE_PGDG_REPO=false setup_postgresql
return $?
fi fi
;; ;;
*) *)
SUITE=$(get_fallback_suite "$DISTRO_ID" "$DISTRO_CODENAME" "https://apt.postgresql.org/pub/repos/apt") SUITE=$(get_fallback_suite "$DISTRO_ID" "$DISTRO_CODENAME" "https://apt.postgresql.org/pub/repos/apt")

View File

@@ -105,15 +105,7 @@ function check_disk_space() {
return 0 return 0
} }
# 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) 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 pushd $TEMP_DIR >/dev/null
function send_line_to_vm() { function send_line_to_vm() {
echo -e "${DGN}Sending line: ${YW}$1${CL}" echo -e "${DGN}Sending line: ${YW}$1${CL}"
@@ -268,10 +260,6 @@ function exit-script() {
exit exit
} }
function get_available_bridges() {
ip -o link show type bridge 2>/dev/null | awk -F': ' '{print $2}' | sort
}
function default_settings() { function default_settings() {
VMID=$(get_valid_nextid) VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
@@ -291,17 +279,11 @@ function default_settings() {
VLAN="" VLAN=""
MAC=$GEN_MAC MAC=$GEN_MAC
WAN_MAC=$GEN_MAC_LAN WAN_MAC=$GEN_MAC_LAN
WAN_BRG="" WAN_BRG="vmbr1"
MTU="" MTU=""
START_VM="yes" START_VM="yes"
METHOD="default" 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 Virtual Machine ID: ${BGN}${VMID}${CL}"
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}" echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}" echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
@@ -315,22 +297,20 @@ function default_settings() {
echo -e "${DGN}Using LAN VLAN: ${BGN}Default${CL}" echo -e "${DGN}Using LAN VLAN: ${BGN}Default${CL}"
echo -e "${DGN}Using LAN MAC Address: ${BGN}${MAC}${CL}" echo -e "${DGN}Using LAN MAC Address: ${BGN}${MAC}${CL}"
# 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 \ 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 \ "Choose network setup mode for OPNsense:\n" 14 70 2 \
"dual" "Dual Interface (Firewall/Router) - uses ${DEFAULT_WAN_BRG}" ON \ "dual" "Dual Interface (Traditional Firewall/Router)" ON \
"single" "Single Interface (Proxy/VPN/IDS Server)" OFF \ "single" "Single Interface (Proxy/VPN/IDS Server)" OFF \
3>&1 1>&2 2>&3); then 3>&1 1>&2 2>&3); then
if [ "$NETWORK_MODE" = "dual" ]; then if [ "$NETWORK_MODE" = "dual" ]; then
WAN_BRG="$DEFAULT_WAN_BRG"
echo -e "${DGN}Network Mode: ${BGN}Dual Interface (Firewall)${CL}" 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}" 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
echo -e "${DGN}Using WAN Bridge: ${BGN}${WAN_BRG}${CL}"
fi
else else
echo -e "${DGN}Network Mode: ${BGN}Single Interface (Proxy/VPN/IDS)${CL}" echo -e "${DGN}Network Mode: ${BGN}Single Interface (Proxy/VPN/IDS)${CL}"
WAN_BRG="" WAN_BRG=""
@@ -338,12 +318,6 @@ function default_settings() {
else else
exit-script exit-script
fi fi
else
# 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}Using Interface MTU Size: ${BGN}Default${CL}"
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}" echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
echo -e "${BL}Creating a OPNsense VM using the above default settings${CL}" echo -e "${BL}Creating a OPNsense VM using the above default settings${CL}"
@@ -496,30 +470,14 @@ function advanced_settings() {
exit-script exit-script
fi fi
# Build WAN bridge selection from available bridges (excluding LAN bridge) 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
local WAN_BRIDGES if [ -z $WAN_BRG ]; then
WAN_BRIDGES=$(get_available_bridges | grep -v "^${BRG}$") WAN_BRG="vmbr1"
if [ -z "$WAN_BRIDGES" ]; then fi
msg_error "No additional bridge available for WAN. Only '${BRG}' exists." if ! ip link show "${WAN_BRG}" &>/dev/null; then
msg_error "Create a second bridge (e.g. vmbr1) in Proxmox network config first." msg_error "WAN Bridge '${WAN_BRG}' does not exist"
exit exit
fi 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
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}" echo -e "${DGN}Using WAN Bridge: ${BGN}$WAN_BRG${CL}"
else else
exit-script exit-script