Compare commits

..

21 Commits

Author SHA1 Message Date
MickLesk eb8a211ce5 core: Handle LXC upgrade prompt cancellation
Clarify the upgrade prompt options in `create_lxc_container`, treat empty or unrecognized input as ignore instead of implicit cancel, and explicitly abort container creation when the user chooses Cancel.
2026-07-27 09:02:13 +02:00
community-scripts-pr-app[bot] 7715c37553 Update CHANGELOG.md (#16057)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-27 06:41:38 +00:00
push-app-to-main[bot] 5be03046e4 PasswordPusher (#16031)
* Add passwordpusher (ct)

* Update install/passwordpusher-install.sh

* Update ct/passwordpusher.sh

* Refactor passwordpusher.sh to streamline sourcing

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-07-27 08:41:11 +02:00
community-scripts-pr-app[bot] 1ea195e7a6 Update CHANGELOG.md (#16055)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 20:37:14 +00:00
Andy Grunwald cad309b6a5 Remove software-properties-common from Apache Tika install (#16054)
The container was switched from bookworm to trixie in #16036, but
software-properties-common does not exist in Debian 13. apt aborts the
whole dependency line on the single missing package (exit code 100), so
a fresh install never gets past "Installing Dependencies".

The package only provides add-apt-repository, which this script never
calls — no PPAs or custom repos are configured anywhere. It is a dead
dependency, so dropping it needs no replacement; every other package on
that line exists in trixie.

Fixes #16053

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 22:36:46 +02:00
community-scripts-pr-app[bot] 24c5abbcc1 Update CHANGELOG.md (#16049)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 17:05:19 +00:00
push-app-to-main[bot] 49e04e6202 Satisfactory (#16023)
* Add satisfactory (ct)

* Refactor messages for Satisfactory application

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-07-26 19:04:53 +02:00
community-scripts-pr-app[bot] aeccbf72d5 Update CHANGELOG.md (#16048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 16:53:30 +00:00
push-app-to-main[bot] 3e1feef953 OmniTools (#16032)
* Add omnitools (ct)

* Fix sourcing of build.func in omnitools.sh

* Remove redundant line in omnitools.sh

* Fix Nginx configuration script formatting

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-07-26 18:53:08 +02:00
community-scripts-pr-app[bot] 10287dd48a Update CHANGELOG.md (#16047)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 16:51:58 +00:00
Marco C. d325c03944 Improve command description for disabling pve-enterprise repo (#16020)
The "disable" option description stated "Comment out (disable) this repo" but the implementation uses `Enabled: false` (deb822 format) instead of commenting. Update description to better reflect the action.
2026-07-26 18:51:33 +02:00
community-scripts-pr-app[bot] f6e1f86310 Update CHANGELOG.md (#16045)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 16:42:37 +00:00
CanbiZ (MickLesk) 300744cc7c build.func: fix OS mismatch message when script target moved to an older OS (#16035) 2026-07-26 18:42:11 +02:00
community-scripts-pr-app[bot] 640dc68bdc Update CHANGELOG.md (#16044)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 16:35:55 +00:00
Andy Grunwald f5390ebdbf Apache Tika: Switch from Debian Bookworm to Debian Trixie and replace manual install of OpenJDK with setup_java (#16036)
* Install Java via setup_java instead of distro openjdk

Apache Tika's Java runtime was installed by calling apt directly for
openjdk-17-jre-headless. This tied the JDK to whatever Debian ships, and
that coupling has now broken: openjdk-17 is no longer available on Debian
13 (Trixie), where openjdk-21 is current. It also made this the only
script in install/ that installs Java by hand, while every other Java
application in the repository uses the shared setup_java helper.

Switch to setup_java, which installs Eclipse Temurin from the Adoptium
repository. Temurin is versioned independently of the Debian release, so
a future distribution upgrade cannot remove the JDK out from under the
application the way this one did.

Java 21 satisfies both current and upcoming Tika: 3.x requires Java 11 or
newer, and 4.x raises the floor to Java 17.

The surrounding msg_info/msg_ok pair is dropped because setup_java emits
its own progress messages; keeping them would nest the output.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Bump Apache-Tika container to Debian 13

The container declared Debian 12 (Bookworm) as its base, which had become
an outlier: 475 of the repository's ct scripts target Debian 13 and only
22 still target 12. build.func also sets trixie as the default ARM64
template codename, so this script's declared base had drifted away from
the repository default.

The declared version is not cosmetic. check_container_os_guard() reads
var_os/var_version as the script's recommended OS and compares them
against a container's /etc/os-release, prompting on interactive runs and
aborting headless ones when they disagree. Debian 12 was also the reason
the previous openjdk-17 dependency looked valid; on Debian 13 that
package no longer exists, which is addressed in the preceding commit.

Existing Debian 12 containers keep working, because update_script only
replaces the Tika jar and never touches the operating system or Java.
They will, however, now hit the OS mismatch guard on update and be asked
to move to Debian 13 first. That is intended rather than a regression,
but it is a visible change for existing users.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 18:35:32 +02:00
community-scripts-pr-app[bot] 9fafffbe04 Update CHANGELOG.md (#16043)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 16:34:32 +00:00
CanbiZ (MickLesk) 62690cfafb InvenTree: populate database engine/name in config.yaml before invoke update (#16022) 2026-07-26 18:34:05 +02:00
community-scripts-pr-app[bot] b0db823934 Update CHANGELOG.md (#16040)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 14:57:50 +00:00
CanbiZ (MickLesk) 2dd9d98e8a OPNsense VM: answer console password prompt explicitly (#16021) 2026-07-26 16:57:29 +02:00
community-scripts-pr-app[bot] 5919f0773e Update CHANGELOG.md (#16039)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-26 13:39:16 +00:00
Johann Grobe 895ecdc71e add node update to update script (#16014) 2026-07-26 23:38:55 +10:00
20 changed files with 545 additions and 311 deletions
+36
View File
@@ -508,8 +508,44 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-07-27
### 🆕 New Scripts
- PasswordPusher ([#16031](https://github.com/community-scripts/ProxmoxVE/pull/16031))
## 2026-07-26
### 🆕 New Scripts
- Satisfactory ([#16023](https://github.com/community-scripts/ProxmoxVE/pull/16023))
- OmniTools ([#16032](https://github.com/community-scripts/ProxmoxVE/pull/16032))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Apache Tika: Remove software-properties-common from Apache Tika install [@andygrunwald](https://github.com/andygrunwald) ([#16054](https://github.com/community-scripts/ProxmoxVE/pull/16054))
- Fix inventree missing db engine (upstream issue / postinstall) [@MickLesk](https://github.com/MickLesk) ([#16022](https://github.com/community-scripts/ProxmoxVE/pull/16022))
- OPNsense VM: answer console password prompt explicitly, add inter-key delay [@MickLesk](https://github.com/MickLesk) ([#16021](https://github.com/community-scripts/ProxmoxVE/pull/16021))
- [endurain] add node update to update script [@johanngrobe](https://github.com/johanngrobe) ([#16014](https://github.com/community-scripts/ProxmoxVE/pull/16014))
- #### 🔧 Refactor
- Apache Tika: Switch from Debian Bookworm to Debian Trixie and replace manual install of OpenJDK with setup_java [@andygrunwald](https://github.com/andygrunwald) ([#16036](https://github.com/community-scripts/ProxmoxVE/pull/16036))
### 💾 Core
- #### 🔧 Refactor
- core: improve OS mismatch message [@MickLesk](https://github.com/MickLesk) ([#16035](https://github.com/community-scripts/ProxmoxVE/pull/16035))
### 🧰 Tools
- #### 🔧 Refactor
- Improve command description for disabling pve-enterprise repo [@Marcondiro](https://github.com/Marcondiro) ([#16020](https://github.com/community-scripts/ProxmoxVE/pull/16020))
## 2026-07-25
### 🚀 Updated Scripts
+1 -1
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
-71
View File
@@ -1,71 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.discourse.org/
APP="Discourse"
var_tags="${var_tags:-forum;community;discussion}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
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 /opt/discourse ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ ! -f /opt/discourse/.env ]]; then
msg_error "No Discourse Configuration Found!"
exit
fi
msg_info "Stopping Service"
systemctl stop discourse
msg_ok "Stopped Service"
create_backup /opt/discourse/.env
msg_info "Updating Discourse"
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
cd /opt/discourse
git pull origin main
$STD bundle install --deployment --without test development
$STD yarn install
$STD runuser -u postgres -- psql -d discourse -c "CREATE EXTENSION IF NOT EXISTS vector;"
$STD bundle exec rails assets:precompile
$STD bundle exec rails db:migrate
msg_ok "Updated Discourse"
restore_backup
msg_info "Starting Service"
systemctl start discourse
msg_ok "Started Service"
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 "${GATEWAY}${BGN}http://${IP}${CL}"
+2
View File
@@ -34,6 +34,8 @@ function update_script() {
systemctl stop endurain
msg_ok "Stopped Service"
NODE_VERSION="24" setup_nodejs
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
-6
View File
@@ -1,6 +0,0 @@
____ _
/ __ \(_)_____________ __ _______________
/ / / / / ___/ ___/ __ \/ / / / ___/ ___/ _ \
/ /_/ / (__ ) /__/ /_/ / /_/ / / (__ ) __/
/_____/_/____/\___/\____/\__,_/_/ /____/\___/
+6
View File
@@ -0,0 +1,6 @@
____ _ ______ __
/ __ \____ ___ ____ (_)_ __/___ ____ / /____
/ / / / __ `__ \/ __ \/ / / / / __ \/ __ \/ / ___/
/ /_/ / / / / / / / / / / / / / /_/ / /_/ / (__ )
\____/_/ /_/ /_/_/ /_/_/ /_/ \____/\____/_/____/
+6
View File
@@ -0,0 +1,6 @@
____ ______ __
/ __ \____ ____________ ______ _________/ / __ \__ _______/ /_ ___ _____
/ /_/ / __ `/ ___/ ___/ | /| / / __ \/ ___/ __ / /_/ / / / / ___/ __ \/ _ \/ ___/
/ ____/ /_/ (__ |__ )| |/ |/ / /_/ / / / /_/ / ____/ /_/ (__ ) / / / __/ /
/_/ \__,_/____/____/ |__/|__/\____/_/ \__,_/_/ \__,_/____/_/ /_/\___/_/
+6
View File
@@ -0,0 +1,6 @@
_____ __ _ ____ __
/ ___/____ _/ /_(_)____/ __/___ ______/ /_____ _______ __
\__ \/ __ `/ __/ / ___/ /_/ __ `/ ___/ __/ __ \/ ___/ / / /
___/ / /_/ / /_/ (__ ) __/ /_/ / /__/ /_/ /_/ / / / /_/ /
/____/\__,_/\__/_/____/_/ \__,_/\___/\__/\____/_/ \__, /
/____/
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Majiiin
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/iib0011/omni-tools
APP="OmniTools"
var_tags="${var_tags:-utilities;tools;converter}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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 /opt/omnitools ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "omnitools" "iib0011/omni-tools"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "omnitools" "iib0011/omni-tools" "tarball"
msg_info "Building OmniTools"
cd /opt/omnitools
export HUSKY=0
$STD npm ci
$STD npm run build
msg_ok "Built OmniTools"
msg_info "Publishing Web Assets"
rm -rf /usr/share/nginx/html
mkdir -p /usr/share/nginx/html
cp -a /opt/omnitools/dist/. /usr/share/nginx/html/
rm -rf /opt/omnitools/node_modules
systemctl reload nginx
msg_ok "Published Web Assets"
msg_ok "Updated successfully!"
fi
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 "${GATEWAY}${BGN}http://${IP}${CL}"
+79
View File
@@ -0,0 +1,79 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pglombardo/PasswordPusher
APP="PasswordPusher"
var_tags="${var_tags:-security;sharing;password}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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 /opt/passwordpusher ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "passwordpusher" "pglombardo/PasswordPusher"; then
msg_info "Stopping Service"
systemctl stop passwordpusher
msg_ok "Stopped Service"
create_backup /opt/passwordpusher/storage /opt/passwordpusher/.env.production
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "passwordpusher" "pglombardo/PasswordPusher" "tarball"
msg_info "Installing Gem Dependencies"
cd /opt/passwordpusher
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
$STD bundle config set --local without 'development test'
$STD bundle config set --local deployment 'true'
$STD bundle install
msg_ok "Installed Gem Dependencies"
msg_info "Installing JS Dependencies"
$STD yarn install --frozen-lockfile
msg_ok "Installed JS Dependencies"
msg_info "Running Database Migrations"
RAILS_ENV=production $STD bundle exec rails db:migrate
msg_ok "Ran Database Migrations"
msg_info "Precompiling Assets"
RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1 $STD bundle exec rails assets:precompile
msg_ok "Precompiled Assets"
restore_backup
msg_info "Starting Service"
systemctl start passwordpusher
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
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 "${GATEWAY}${BGN}http://${IP}:5100${CL}"
+70
View File
@@ -0,0 +1,70 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: n8flx
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.satisfactorygame.com/
APP="Satisfactory"
var_tags="${var_tags:-gaming;server}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -x /opt/steamcmd/steamcmd.sh || ! -d /opt/satisfactory/server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Satisfactory"
systemctl stop satisfactory
msg_ok "Stopped Satisfactory"
create_backup /home/steam/.config/Epic/FactoryGame/Saved
msg_info "Updating Satisfactory"
if $STD runuser -u steam -- /opt/steamcmd/steamcmd.sh \
+force_install_dir /opt/satisfactory/server \
+login anonymous \
+app_update 1690800 -beta public validate \
+quit; then
msg_ok "Updated Satisfactory"
else
restore_backup
systemctl start satisfactory
msg_error "Failed to update Satisfactory"
exit 1
fi
restore_backup
msg_info "Starting Satisfactory"
systemctl start satisfactory
msg_ok "Started Satisfactory"
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} Add the server in Satisfactory Server Manager:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:7777${CL}"
echo -e "${INFO}${YW} Required ports:${CL} ${BGN}7777 TCP/UDP and 8888 TCP${CL}"
+1 -5
View File
@@ -15,7 +15,6 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
software-properties-common \
gdal-bin \
tesseract-ocr \
tesseract-ocr-eng \
@@ -33,10 +32,7 @@ $STD apt-get install -y \
cabextract
msg_ok "Installed Dependencies"
msg_info "Setup OpenJDK"
$STD apt-get install -y \
openjdk-17-jre-headless
msg_ok "Setup OpenJDK"
JAVA_VERSION="21" setup_java
msg_info "Installing Apache Tika"
mkdir -p /opt/apache-tika
-218
View File
@@ -1,218 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.discourse.org/
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 \
build-essential \
git \
libssl-dev \
libreadline-dev \
zlib1g-dev \
libyaml-dev \
imagemagick \
gsfonts \
brotli \
nginx \
redis-server
msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
NODE_VERSION="24" setup_nodejs
RUBY_VERSION="3.4.4" setup_ruby
msg_info "Configuring PostgreSQL for Discourse"
DISCOURSE_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
PG_HBA=$(find /etc/postgresql -name pg_hba.conf 2>/dev/null | head -n1)
sed -i 's/^local\s\+all\s\+all\s\+peer$/local all all md5/' "$PG_HBA"
$STD systemctl restart postgresql
PG_DB_NAME="discourse" PG_DB_USER="discourse" PG_DB_PASS="$DISCOURSE_DB_PASS" PG_DB_EXTENSIONS="vector" setup_postgresql_db
msg_ok "Configured PostgreSQL for Discourse"
msg_info "Configuring Discourse"
DISCOURSE_SECRET_KEY=$(openssl rand -hex 64)
$STD git clone --depth 1 https://github.com/discourse/discourse.git /opt/discourse
cd /opt/discourse
cat <<EOF >/opt/discourse/.env
RAILS_ENV=production
RAILS_LOG_TO_STDOUT=true
RAILS_SERVE_STATIC_FILES=true
SECRET_KEY_BASE=${DISCOURSE_SECRET_KEY}
DISCOURSE_DB_HOST=/var/run/postgresql
DISCOURSE_DB_PORT=5432
DISCOURSE_DB_NAME=discourse
DISCOURSE_DB_USERNAME=discourse
DISCOURSE_DB_PASSWORD=${DISCOURSE_DB_PASS}
DISCOURSE_REDIS_URL=redis://localhost:6379
DISCOURSE_DEVELOPER_EMAILS=admin@discourse.local
DISCOURSE_HOSTNAME=${LOCAL_IP}
DISCOURSE_SMTP_ADDRESS=localhost
DISCOURSE_SMTP_PORT=25
DISCOURSE_SMTP_AUTHENTICATION=none
DISCOURSE_NOTIFICATION_EMAIL=noreply@${LOCAL_IP}
DISCOURSE_SKIP_NEW_ACCOUNT_EMAIL=true
APP_ROOT=/opt/discourse
EOF
mkdir -p /opt/discourse/tmp/sockets /opt/discourse/tmp/pids /opt/discourse/log
chown -R root:root /opt/discourse
chmod 755 /opt/discourse
msg_ok "Configured Discourse"
msg_info "Installing Discourse Dependencies"
$STD systemctl enable --now redis-server
cd /opt/discourse
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init - bash)" 2>/dev/null || true
export RAILS_ENV=production
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
$STD corepack enable
$STD bundle config set --local deployment true
$STD bundle config set --local without 'test development'
$STD bundle install
$STD pnpm install
msg_ok "Installed Discourse Dependencies"
msg_info "Setting Up Database"
cd /opt/discourse
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init - bash)" 2>/dev/null || true
export RAILS_ENV=production
set -a
source /opt/discourse/.env
set +a
$STD bundle exec rails db:migrate
$STD bundle exec rails db:seed
msg_ok "Set Up Database"
msg_info "Creating Admin Account"
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
$STD bundle exec rails runner "
user = User.new(email: 'admin@discourse.local', username: 'admin', password: '${ADMIN_PASS}')
user.active = true
user.admin = true
user.approved = true
user.save!(validate: false)
user.activate
user.grant_admin!
user.change_trust_level!(TrustLevel[4])
SiteSetting.has_login_hint = false
SiteSetting.wizard_enabled = false
"
cat <<EOF >~/discourse.creds
Discourse Credentials
Admin Username: admin
Admin Email: admin@discourse.local
Admin Password: ${ADMIN_PASS}
Database Password: ${DISCOURSE_DB_PASS}
EOF
msg_ok "Created Admin Account"
msg_info "Building Discourse Assets"
cd /opt/discourse
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init - bash)" 2>/dev/null || true
export RAILS_ENV=production
set -a && source /opt/discourse/.env && set +a
$STD bundle exec rails assets:precompile
msg_ok "Built Discourse Assets"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/discourse.service
[Unit]
Description=Discourse Forum
After=network.target postgresql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/discourse
EnvironmentFile=/opt/discourse/.env
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/root/.rbenv/shims/bundle exec pitchfork -c config/pitchfork.conf.rb
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/discourse-sidekiq.service
[Unit]
Description=Discourse Sidekiq
After=network.target postgresql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/discourse
EnvironmentFile=/opt/discourse/.env
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/root/.rbenv/shims/bundle exec sidekiq -q critical -q default -q low -q ultra_low
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now discourse discourse-sidekiq
msg_ok "Created Services"
msg_info "Configuring Nginx"
cat <<EOF >/etc/nginx/sites-available/discourse
server {
listen 80 default_server;
server_name _;
root /opt/discourse/public;
client_max_body_size 100M;
proxy_busy_buffers_size 512k;
proxy_buffers 4 512k;
location /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public,immutable;
}
location /uploads/ {
expires 1h;
}
location / {
try_files \$uri @discourse;
}
location @discourse {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Accel-Mapping /opt/discourse/public/=/downloads/;
}
}
EOF
ln -sf /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/discourse
rm -f /etc/nginx/sites-enabled/default
$STD systemctl enable --now nginx
$STD systemctl reload nginx
msg_ok "Configured Nginx"
motd_ssh
customize
cleanup_lxc
+5
View File
@@ -30,6 +30,11 @@ msg_ok "Installed InvenTree"
msg_info "Configuring InvenTree"
if [[ -f /etc/inventree/config.yaml ]]; then
sed -i "s|site_url:.*|site_url: http://${LOCAL_IP}|" /etc/inventree/config.yaml
if ! grep -q "^ engine:" /etc/inventree/config.yaml; then
mkdir -p /home/inventree/data
chown inventree:inventree /home/inventree/data
sed -i "/^database:$/a\\ engine: sqlite3\\n name: '/home/inventree/data/database.sqlite3'" /etc/inventree/config.yaml
fi
fi
$STD inventree run invoke update
msg_ok "Configured InvenTree"
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Majiiin
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/iib0011/omni-tools
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 nginx
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "omnitools" "iib0011/omni-tools" "tarball"
msg_info "Building OmniTools"
cd /opt/omnitools
export HUSKY=0
$STD npm ci
$STD npm run build
msg_ok "Built OmniTools"
msg_info "Publishing Web Assets"
rm -rf /usr/share/nginx/html
mkdir -p /usr/share/nginx/html
cp -a /opt/omnitools/dist/. /usr/share/nginx/html/
rm -rf /opt/omnitools/node_modules
msg_ok "Published Web Assets"
msg_info "Configuring Nginx"
sed -i \
's/application\/javascript.*js;/application\/javascript js mjs;/' \
/etc/nginx/mime.types
cat <<'EOF' >/etc/nginx/sites-available/omnitools
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
ln -sf /etc/nginx/sites-available/omnitools /etc/nginx/sites-enabled/omnitools
rm -f /etc/nginx/sites-enabled/default
$STD nginx -t
systemctl enable -q --now nginx
systemctl reload nginx
msg_ok "Configured Nginx"
motd_ssh
customize
cleanup_lxc
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pglombardo/PasswordPusher
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 \
default-libmysqlclient-dev \
git \
libpq-dev \
libsqlite3-dev \
pkg-config
msg_ok "Installed Dependencies"
RUBY_VERSION="4.0.5" RUBY_INSTALL_RAILS="false" setup_ruby
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
fetch_and_deploy_gh_release "passwordpusher" "pglombardo/PasswordPusher" "tarball"
msg_info "Installing Gem Dependencies"
cd /opt/passwordpusher
$STD bundle config set --local without 'development test'
$STD bundle config set --local deployment 'true'
$STD bundle install
msg_ok "Installed Gem Dependencies"
msg_info "Installing JS Dependencies"
$STD yarn install --frozen-lockfile
msg_ok "Installed JS Dependencies"
msg_info "Configuring PasswordPusher"
mkdir -p /opt/passwordpusher/storage/db
SECRET_KEY_BASE=$(bundle exec rails secret)
MASTER_KEY=$(openssl rand -hex 32)
cat <<EOF >/opt/passwordpusher/.env.production
SECRET_KEY_BASE=${SECRET_KEY_BASE}
PWPUSH_MASTER_KEY=${MASTER_KEY}
PWP__FILES__STORAGE=local
RAILS_LOG_TO_STDOUT=true
PORT=5100
EOF
msg_ok "Configured PasswordPusher"
msg_info "Setting up Database"
RAILS_ENV=production $STD bundle exec rails db:setup
msg_ok "Set up Database"
msg_info "Precompiling Assets"
RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1 $STD bundle exec rails assets:precompile
msg_ok "Precompiled Assets"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/passwordpusher.service
[Unit]
Description=Password Pusher
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/passwordpusher
Environment=RAILS_ENV=production
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EnvironmentFile=/opt/passwordpusher/.env.production
ExecStart=/root/.rbenv/shims/bundle exec puma -C config/puma.rb -e production
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now passwordpusher
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: n8flx
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.satisfactorygame.com/
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 \
lib32gcc-s1 \
lib32stdc++6
msg_ok "Installed Dependencies"
msg_info "Creating Steam User and Application Directories"
useradd --system \
--create-home \
--home-dir /home/steam \
--shell /usr/sbin/nologin \
steam
mkdir -p /opt/satisfactory/server /opt/steamcmd
chown -R steam:steam /opt/satisfactory /opt/steamcmd /home/steam
msg_ok "Created Steam User and Application Directories"
fetch_and_deploy_from_url \
"https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" \
"/opt/steamcmd"
chown -R steam:steam /opt/steamcmd
msg_info "Installing Satisfactory Dedicated Server"
$STD runuser -u steam -- /opt/steamcmd/steamcmd.sh \
+force_install_dir /opt/satisfactory/server \
+login anonymous \
+app_update 1690800 -beta public validate \
+quit
msg_ok "Installed Satisfactory Dedicated Server"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/satisfactory.service
[Unit]
Description=Satisfactory Dedicated Server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/opt/satisfactory/server
Environment=LANG=C.UTF-8
Environment=HOME=/home/steam
ExecStart=/opt/satisfactory/server/FactoryServer.sh -log
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=120
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now satisfactory
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+35 -9
View File
@@ -3858,6 +3858,13 @@ check_container_os_guard() {
return 0
fi
local downgraded_target=0
if [[ "$cur_os" == "$rec_os" ]] && [[ "$cur_ver" != "$rec_ver" ]]; then
if [[ "$(printf '%s\n%s\n' "$cur_ver" "$rec_ver" | sort -V | tail -n1)" == "$cur_ver" ]]; then
downgraded_target=1
fi
fi
case "${var_ignore_os_mismatch:-}" in
1 | yes | true | on)
msg_warn "Container OS is ${cur_os} ${cur_ver} but the script recommends ${rec_os} ${rec_ver} — continuing via var_ignore_os_mismatch (may break, no support)."
@@ -3873,10 +3880,19 @@ check_container_os_guard() {
return 0
fi
local mismatch_detail remediation
if [[ "$downgraded_target" -eq 1 ]]; then
mismatch_detail="Your container runs ${cur_os} ${cur_ver}, which is newer than what this script now targets (${rec_os} ${rec_ver}).\n\nThe target was likely lowered on purpose, e.g. because ${APP:-the app} had problems on newer OS versions - check the GitHub issues for ${APP:-this app} for details.\n\nContinuing on ${cur_ver} often still works, but isn't guaranteed. If you are unsure, ask in our Discord (https://discord.gg/3AnUqsXnmK) before continuing."
remediation="This script now targets the older ${rec_os} ${rec_ver}. Check the GitHub issues for ${APP:-this app}, or ask in Discord (https://discord.gg/3AnUqsXnmK) if you are unsure"
else
mismatch_detail="This container runs ${cur_os} ${cur_ver}, but this script now targets ${rec_os} ${rec_ver}.\n\nUpdating on the older base OS may fail or leave ${APP:-the application} broken (e.g. required runtime versions are not available).\n\nRecommended: upgrade the container OS to ${rec_os} ${rec_ver} first, then run this update again."
remediation="Upgrade the container OS to ${rec_os} ${rec_ver} first, then run this update again"
fi
if [[ "${PHS_SILENT:-0}" != "1" ]] && command -v whiptail &>/dev/null && [ -t 0 ] && [[ "$TERM" != "dumb" ]]; then
local choice
choice=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "OS VERSION MISMATCH" --menu \
"This container runs ${cur_os} ${cur_ver}, but this script now targets ${rec_os} ${rec_ver}.\n\nUpdating on the older base OS may fail or leave ${APP:-the application} broken (e.g. required runtime versions are not available).\n\nRecommended: upgrade the container OS to ${rec_os} ${rec_ver} first, then run this update again.\n\nIf you continue anyway, it may break — no support is provided in that case.\n\nContinue anyway?" \
"${mismatch_detail}\n\nIf you continue anyway, it may break — no support is provided in that case.\n\nContinue anyway?" \
20 70 3 \
"1" "No (cancel update)" \
"2" "Yes (continue this time)" \
@@ -3899,7 +3915,7 @@ check_container_os_guard() {
fi
msg_error "Container OS ${cur_os} ${cur_ver} does not match the recommended ${rec_os} ${rec_ver} — skipping update."
msg_error "Upgrade the container OS to ${rec_os} ${rec_ver} first, then run this update again — or bypass this check (may break, no support) with: echo \"${rec_os} ${rec_ver}\" > ${ignore_file}"
msg_error "${remediation} — or bypass this check (may break, no support) with: echo \"${rec_os} ${rec_ver}\" > ${ignore_file}"
return 1
}
@@ -6054,14 +6070,14 @@ create_lxc_container() {
_has_fallback_option=true
echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packages on your host!"
echo " [2] Use an older ${PCT_OSTYPE} template instead (may not work with all scripts)"
echo " [3] Ignore"
echo " [4] Cancel"
echo " [3] Ignore (continue without upgrading)"
echo " [4] Cancel (abort the script)"
echo
read -rp "Select option [1/2/3/4]: " _ans </dev/tty
else
echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packages on your host!"
echo " [2] Ignore"
echo " [3] Cancel"
echo " [2] Ignore (continue without upgrading)"
echo " [3] Cancel (abort the script)"
echo
read -rp "Select option [1/2/3]: " _ans </dev/tty
fi
@@ -6085,7 +6101,8 @@ create_lxc_container() {
return 4
;;
*)
return 4
# Unrecognized/empty input: treat as ignore, never as an implicit cancel
return 2
;;
esac
else
@@ -6096,9 +6113,13 @@ create_lxc_container() {
2)
return 2
;;
*)
3)
return 4
;;
*)
# Unrecognized/empty input: treat as ignore, never as an implicit cancel
return 2
;;
esac
fi
@@ -6685,7 +6706,12 @@ create_lxc_container() {
if [[ "$PCT_OSTYPE" == "debian" ]]; then
OSVER="$(parse_template_osver "$TEMPLATE")"
if [[ -n "$OSVER" ]]; then
offer_lxc_stack_upgrade_and_maybe_retry "no" || true
local _lxc_stack_rc=0
offer_lxc_stack_upgrade_and_maybe_retry "no" || _lxc_stack_rc=$?
# 4 = user chose "Cancel" -> honor it and abort before creating the container
if [[ $_lxc_stack_rc -eq 4 ]]; then
exit_script
fi
fi
fi
+1 -1
View File
@@ -300,7 +300,7 @@ EOF
--title "PVE-ENTERPRISE" \
--menu "'pve-enterprise' repository already exists.\n\nWhat do you want to do?" 14 58 2 \
"keep" "Keep as is" \
"disable" "Comment out (disable) this repo" \
"disable" "Disable this repo (set Enabled: false)" \
"delete" "Delete this repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
+2
View File
@@ -810,6 +810,8 @@ msg_ok "Starting OPNsense VM (Patience this takes 20-30 minutes)"
qm start $VMID
sleep 90
send_line_to_vm "root"
sleep 2
send_line_to_vm ""
send_line_to_vm "fetch https://raw.githubusercontent.com/opnsense/update/master/src/bootstrap/opnsense-bootstrap.sh.in"
if [ -n "$WAN_BRG" ]; then
msg_info "Adding WAN interface"