Compare commits

...

51 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
30fdd3ae66 fix(linkwarden): remove broken npx playwright install commands
Linkwarden's apps/web/package.json has a postinstall hook that runs
'playwright install --with-deps chromium' automatically during yarn
install. The explicit 'npx playwright install-deps' and
'npx playwright install' are redundant and break under Yarn 4 PnP,
where npx gets intercepted by Yarn's command resolution resulting in:
  Usage Error: Couldn't find a script named 'playwright'.

Fixes #12586
2026-03-05 15:10:46 +01:00
community-scripts-pr-app[bot]
0be065bbef Update .app files (#12583)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-03-05 14:13:16 +01:00
community-scripts-pr-app[bot]
10118f4350 Update CHANGELOG.md (#12584)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 12:51:11 +00:00
community-scripts-pr-app[bot]
ac435455a0 Update CHANGELOG.md (#12582)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 12:50:46 +00:00
community-scripts-pr-app[bot]
929cd08718 Update date in json (#12581)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-03-05 12:50:42 +00:00
push-app-to-main[bot]
299e7bfabe Papra (#12577)
* Add papra (ct)

* Update papra.sh

* Enhance update_script with configuration backup

Added backup and restore of configuration during update process.

* Update install/papra-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Format

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: tremor021 <arezina.slavisa@gmail.com>
2026-03-05 13:50:20 +01:00
community-scripts-pr-app[bot]
3465f053f5 chore: update github-versions.json (#12580)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 12:12:38 +00:00
CanbiZ (MickLesk)
18801eb4ff fix(powerdns): fix SQLite directory permissions for pdns user
The /opt/poweradmin/ directory was owned by www-data:www-data (755),
but pdns runs as the 'pdns' user which had no write access to the
directory. SQLite requires write access to the database directory to
create journal/WAL files (powerdns.db-journal, powerdns.db-wal).
Without this, pdns fails to start.

Changes:
- Set directory group to 'pdns' instead of 'www-data' so pdns user
  can create SQLite journal/WAL files (via group write 775)
- Apply same permissions fix in update_script (ct/powerdns.sh)
- Fix msg_info -> msg_ok for 'Created Service' completion message

Fixes #12572
2026-03-05 09:34:29 +01:00
CanbiZ (MickLesk)
87e14ba12f fix(core): remove duplicate -nameserver/-searchdomain prefix in pct create
The NS and SD variables already contain the -nameserver= and
-searchdomain= prefixes (set in advanced_settings). PR #12521
incorrectly added a second prefix when building PCT_OPTIONS_STRING,
resulting in '-nameserver -nameserver=8.8.8.8' which pct rejects.

Also fixes the misleading comment ('Add storage' -> 'Add searchdomain').

Fixes #12572
2026-03-05 08:53:48 +01:00
community-scripts-pr-app[bot]
438a519c65 chore: update github-versions.json (#12575)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 06:17:46 +00:00
community-scripts-pr-app[bot]
572ea7c2be Update CHANGELOG.md (#12569)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 00:22:29 +00:00
community-scripts-pr-app[bot]
fc8b5af5fe chore: update github-versions.json (#12568)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 00:22:07 +00:00
community-scripts-pr-app[bot]
554dfc5b0e chore: update github-versions.json (#12562)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 18:14:45 +00:00
community-scripts-pr-app[bot]
4855fdb50d Update CHANGELOG.md (#12560)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 16:34:44 +00:00
Slaviša Arežina
4dbb536922 NodeJS update (#12558) 2026-03-04 17:34:06 +01:00
community-scripts-pr-app[bot]
154f46d6b8 chore: update github-versions.json (#12557)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 12:11:27 +00:00
community-scripts-pr-app[bot]
bb8ac9696f Update CHANGELOG.md (#12556)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 11:05:15 +00:00
Tobias
41b5e5d8b9 fix: gitea-mirror (#12549)
* fix: gitea-mirror

* add: git
2026-03-04 12:04:45 +01:00
community-scripts-pr-app[bot]
e07b2325c1 Update CHANGELOG.md (#12555)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 09:27:03 +00:00
Slaviša Arežina
8c9c85c1c7 Refactor: LiteLLM (#12550)
* Refactor

* remove tremors drunken links

---------

Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-03-04 10:26:34 +01:00
community-scripts-pr-app[bot]
2d38e509f0 Update CHANGELOG.md (#12554)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 09:24:40 +00:00
community-scripts-pr-app[bot]
4396108113 Update CHANGELOG.md (#12553)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 09:24:13 +00:00
Tobias
f82c15ca98 update: stirling-pdf: java 25 (#12552) 2026-03-04 10:24:04 +01:00
CanbiZ (MickLesk)
1a09b112b6 fix(docmost): register NoopAuditService globally when EE submodule is missing (#12551) 2026-03-04 10:23:29 +01:00
community-scripts-pr-app[bot]
c70c488648 Update CHANGELOG.md (#12545)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 07:40:41 +00:00
CanbiZ (MickLesk)
91db277446 jellyseer/overseer migration corrupting /usr/bin/update (#12539) 2026-03-04 08:40:15 +01:00
community-scripts-pr-app[bot]
35ce20391c Update CHANGELOG.md (#12544)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 07:40:00 +00:00
CanbiZ (MickLesk)
783ba03e92 fix(postgresql): fall back to distro packages instead of bookworm-pgdg on Trixie (#12524) (#12542) 2026-03-04 08:39:33 +01:00
community-scripts-pr-app[bot]
e344d3661c Update CHANGELOG.md (#12543)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 07:12:38 +00:00
CanbiZ (MickLesk)
c62418069d fix(powerdns): use gsqlite3 backend instead of BIND (#12533) (#12538)
- Comment out empty 'launch=' in pdns.conf that overrides launch+= directives
- Remove default bind.conf and create gsqlite3.conf pointing to the
  Poweradmin SQLite database (/opt/poweradmin/powerdns.db)
- Set correct ownership (pdns:pdns) and permissions (664) on the
  database file so pdns_server can read/write it
- Add www-data to pdns group for shared database access
- Restart pdns service alongside apache2
2026-03-04 08:12:11 +01:00
community-scripts-pr-app[bot]
41611d2682 Update CHANGELOG.md (#12541)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 07:00:19 +00:00
CanbiZ (MickLesk)
cf8043a22e fix(migration): atomic /usr/bin/update replacement to prevent syntax errors (#12540) 2026-03-04 07:59:51 +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
38 changed files with 551 additions and 152 deletions

View File

@@ -410,16 +410,69 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-03-05
### 🆕 New Scripts
- Papra ([#12577](https://github.com/community-scripts/ProxmoxVE/pull/12577))
## 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
### 🆕 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

@@ -48,6 +48,17 @@ function update_script() {
cd /opt/docmost
mv /opt/.env /opt/docmost/.env
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 build
msg_ok "Updated ${APP}"

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

@@ -28,6 +28,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then
msg_info "Stopping Service"
systemctl stop fluid-calendar
@@ -45,7 +48,7 @@ function update_script() {
$STD npx prisma migrate deploy
$STD npm run build:os
msg_ok "Updated Fluid Calendar"
msg_info "Starting Service"
systemctl start fluid-calendar
msg_ok "Started Service"

View File

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

6
ct/headers/papra 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
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

@@ -57,8 +57,6 @@ function update_script() {
$STD corepack prepare "yarn@${yarn_ver}" --activate || true
fi
$STD yarn
$STD npx playwright install-deps
$STD npx playwright install
mv /opt/.env /opt/linkwarden/.env
$STD yarn prisma:generate
$STD yarn web:build

View File

@@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Service"
VENV_PATH="/opt/litellm/.venv"
PYTHON_VERSION="3.13" setup_uv
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv
msg_info "Updating LiteLLM"
$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_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"

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"

68
ct/papra.sh Normal file
View File

@@ -0,0 +1,68 @@
#!/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/papra-hq/papra
APP="Papra"
var_tags="${var_tags:-document-management}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
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/papra ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "papra" "papra-hq/papra"; then
msg_info "Stopping Service"
systemctl stop papra
msg_ok "Stopped Service"
msg_info "Backing up Configuration"
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
msg_info "Building Application"
cd /opt/papra
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
$STD pnpm install --frozen-lockfile
$STD pnpm --filter "@papra/app-client..." run build
$STD pnpm --filter "@papra/app-server..." run build
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
rm -f /opt/papra_env.bak
msg_ok "Built Application"
msg_info "Starting Service"
systemctl start papra
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 "${TAB}${GATEWAY}${BGN}http://${IP}:1221${CL}"

View File

@@ -47,7 +47,10 @@ function update_script() {
cp /opt/poweradmin_powerdns.db.bak /opt/poweradmin/powerdns.db
rm -rf /opt/poweradmin/install
rm -f /opt/poweradmin_settings.php.bak /opt/poweradmin_powerdns.db.bak
chown -R www-data:www-data /opt/poweradmin
chown -R www-data:pdns /opt/poweradmin
chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
msg_ok "Updated Poweradmin"
msg_info "Restarting Services"

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

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

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-03-03T12:12:16Z",
"generated": "2026-03-05T12:12:30Z",
"versions": [
{
"slug": "2fauth",
@@ -39,9 +39,9 @@
{
"slug": "ampache",
"repo": "ampache/ampache",
"version": "7.9.1",
"version": "7.9.2",
"pinned": false,
"date": "2026-02-25T08:52:58Z"
"date": "2026-03-05T03:54:03Z"
},
{
"slug": "argus",
@@ -193,9 +193,9 @@
{
"slug": "checkmate",
"repo": "bluewave-labs/Checkmate",
"version": "v3.4.0",
"version": "v3.5.0",
"pinned": false,
"date": "2026-02-20T21:08:55Z"
"date": "2026-03-04T19:51:22Z"
},
{
"slug": "cleanuparr",
@@ -214,9 +214,9 @@
{
"slug": "comfyui",
"repo": "comfyanonymous/ComfyUI",
"version": "v0.15.1",
"version": "v0.16.0",
"pinned": false,
"date": "2026-02-26T22:01:35Z"
"date": "2026-03-05T10:35:07Z"
},
{
"slug": "commafeed",
@@ -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.1",
"pinned": false,
"date": "2026-02-10T02:58:23Z"
"date": "2026-03-04T12:54:49Z"
},
{
"slug": "domain-locker",
@@ -382,9 +382,9 @@
{
"slug": "firefly",
"repo": "firefly-iii/firefly-iii",
"version": "v6.5.2",
"version": "v6.5.3",
"pinned": false,
"date": "2026-03-03T05:42:27Z"
"date": "2026-03-04T06:53:02Z"
},
{
"slug": "fladder",
@@ -438,9 +438,9 @@
{
"slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio",
"version": "2.245.0",
"version": "2.247.0",
"pinned": false,
"date": "2026-03-01T09:09:57Z"
"date": "2026-03-04T07:48:00Z"
},
{
"slug": "gitea",
@@ -452,9 +452,9 @@
{
"slug": "gitea-mirror",
"repo": "RayLabsHQ/gitea-mirror",
"version": "v3.11.0",
"version": "v3.12.2",
"pinned": false,
"date": "2026-03-02T10:19:59Z"
"date": "2026-03-05T04:26:50Z"
},
{
"slug": "glance",
@@ -473,9 +473,9 @@
{
"slug": "gokapi",
"repo": "Forceu/Gokapi",
"version": "v2.2.2",
"version": "v2.2.3",
"pinned": false,
"date": "2026-01-31T21:11:27Z"
"date": "2026-03-04T21:29:16Z"
},
{
"slug": "gotify",
@@ -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.1287",
"pinned": false,
"date": "2026-03-03T05:54:20Z"
"date": "2026-03-05T05:49:33Z"
},
{
"slug": "jellystat",
@@ -669,9 +669,9 @@
{
"slug": "kima-hub",
"repo": "Chevron7Locked/kima-hub",
"version": "v1.6.0",
"version": "v1.6.2",
"pinned": false,
"date": "2026-03-02T05:43:31Z"
"date": "2026-03-05T05:38:02Z"
},
{
"slug": "kimai",
@@ -690,9 +690,9 @@
{
"slug": "koel",
"repo": "koel/koel",
"version": "v8.3.0",
"version": "v8.3.1",
"pinned": false,
"date": "2026-01-08T21:32:58Z"
"date": "2026-03-04T08:22:06Z"
},
{
"slug": "koillection",
@@ -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",
@@ -1061,9 +1061,9 @@
{
"slug": "paperless-ngx",
"repo": "paperless-ngx/paperless-ngx",
"version": "v2.20.9",
"version": "v2.20.10",
"pinned": false,
"date": "2026-02-28T10:17:35Z"
"date": "2026-03-04T19:20:57Z"
},
{
"slug": "patchmon",
@@ -1229,9 +1229,9 @@
{
"slug": "pulse",
"repo": "rcourtman/Pulse",
"version": "v5.1.17",
"version": "v5.1.19",
"pinned": false,
"date": "2026-03-02T20:15:31Z"
"date": "2026-03-05T11:14:54Z"
},
{
"slug": "pve-scripts-local",
@@ -1355,9 +1355,9 @@
{
"slug": "scanopy",
"repo": "scanopy/scanopy",
"version": "v0.14.11",
"version": "v0.14.12",
"pinned": false,
"date": "2026-03-02T08:48:42Z"
"date": "2026-03-05T07:24:59Z"
},
{
"slug": "scraparr",
@@ -1369,9 +1369,9 @@
{
"slug": "seaweedfs",
"repo": "seaweedfs/seaweedfs",
"version": "4.13",
"version": "4.15",
"pinned": false,
"date": "2026-02-17T01:09:45Z"
"date": "2026-03-05T06:30:30Z"
},
{
"slug": "seelf",
@@ -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,16 +1467,16 @@
{
"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",
"repo": "Stirling-Tools/Stirling-PDF",
"version": "v2.5.3",
"version": "v2.6.0",
"pinned": false,
"date": "2026-02-23T23:23:39Z"
"date": "2026-03-03T20:46:42Z"
},
{
"slug": "streamlink-webui",
@@ -1565,9 +1565,9 @@
{
"slug": "tinyauth",
"repo": "steveiliop56/tinyauth",
"version": "v5.0.0",
"version": "v5.0.1",
"pinned": false,
"date": "2026-03-02T18:43:57Z"
"date": "2026-03-04T21:05:05Z"
},
{
"slug": "traccar",
@@ -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",
@@ -1607,9 +1607,9 @@
{
"slug": "trip",
"repo": "itskovacs/TRIP",
"version": "1.41.0",
"version": "1.41.1",
"pinned": false,
"date": "2026-02-23T17:57:31Z"
"date": "2026-03-04T07:25:35Z"
},
{
"slug": "tududi",
@@ -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",
@@ -1663,9 +1663,9 @@
{
"slug": "uptimekuma",
"repo": "louislam/uptime-kuma",
"version": "2.1.3",
"version": "2.2.0",
"pinned": false,
"date": "2026-02-19T05:37:30Z"
"date": "2026-03-05T02:08:14Z"
},
{
"slug": "vaultwarden",
@@ -1719,9 +1719,9 @@
{
"slug": "watcharr",
"repo": "sbondCo/Watcharr",
"version": "v2.1.1",
"version": "v3.0.0",
"pinned": false,
"date": "2025-07-15T22:38:01Z"
"date": "2026-03-04T09:29:14Z"
},
{
"slug": "watchyourlan",
@@ -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",
@@ -1824,9 +1824,9 @@
{
"slug": "zitadel",
"repo": "zitadel/zitadel",
"version": "v4.12.0",
"version": "v4.12.1",
"pinned": false,
"date": "2026-03-02T08:16:10Z"
"date": "2026-03-04T12:40:17Z"
},
{
"slug": "zoraxy",
@@ -1838,9 +1838,9 @@
{
"slug": "zwave-js-ui",
"repo": "zwave-js/zwave-js-ui",
"version": "v11.12.0",
"version": "v11.13.0",
"pinned": false,
"date": "2026-02-19T10:14:19Z"
"date": "2026-03-04T15:09:54Z"
}
]
}

View File

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

View File

@@ -0,0 +1,56 @@
{
"name": "Papra",
"slug": "papra",
"categories": [
12
],
"date_created": "2026-03-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 1221,
"documentation": "https://github.com/CorentinTh/papra",
"website": "https://github.com/CorentinTh/papra",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/papra.webp",
"config_path": "/opt/papra/.env",
"description": "Papra is a modern, self-hosted document management system with full-text search, OCR support, and automatic document processing. Built with Node.js and featuring a clean web interface for organizing and managing your documents.",
"install_methods": [
{
"type": "default",
"script": "ct/papra.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "First visit will prompt you to create an account",
"type": "info"
},
{
"text": "Tesseract OCR is pre-installed for all languages",
"type": "info"
},
{
"text": "Documents are stored in /opt/papra/app-data/documents",
"type": "info"
},
{
"text": "Ingestion folder available at /opt/papra/ingestion for automatic document import",
"type": "info"
},
{
"text": "Email functionality runs in dry-run mode by default",
"type": "warning"
}
]
}

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

@@ -26,6 +26,17 @@ fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
msg_info "Configuring Docmost (Patience)"
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
mkdir data
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_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
NODE_VERSION="20" setup_nodejs
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
msg_info "Configuring fluid-calendar"

View File

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

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

@@ -48,8 +48,6 @@ if command -v corepack >/dev/null 2>&1; then
$STD corepack prepare "yarn@${yarn_ver}" --activate || true
fi
$STD yarn
$STD npx playwright install-deps
$STD npx playwright install
cat <<EOF >/opt/linkwarden/.env
NEXTAUTH_SECRET=${SECRET_KEY}
NEXTAUTH_URL=http://${LOCAL_IP}:3000

View File

@@ -20,24 +20,8 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
PYTHON_VERSION="3.13" 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"
PG_DB_NAME="litellm_db" PG_DB_USER="litellm" setup_postgresql_db
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv
msg_info "Setting up Virtual Environment"
mkdir -p /opt/litellm
@@ -53,10 +37,9 @@ mkdir -p /opt
cat <<EOF >/opt/litellm/litellm.yaml
general_settings:
master_key: sk-1234
database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME
database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME
store_model_in_db: true
EOF
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "Configured LiteLLM"
@@ -73,7 +56,6 @@ Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now litellm
msg_ok "Created Service"

79
install/papra-install.sh Normal file
View File

@@ -0,0 +1,79 @@
#!/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/papra-hq/papra
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 \
tesseract-ocr \
tesseract-ocr-all
msg_ok "Installed Dependencies"
RELEASE=$(curl -fsSL https://api.github.com/repos/papra-hq/papra/releases | grep -oP '"tag_name":\s*"\K@papra/app@[^"]+' | head -n1)
fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" "${RELEASE}" "/opt/papra"
pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json)
NODE_VERSION="24" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs
msg_info "Installing Papra (Patience)"
cd /opt/papra
$STD pnpm install --frozen-lockfile
$STD pnpm --filter "@papra/app-client..." run build
$STD pnpm --filter "@papra/app-server..." run build
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
msg_ok "Installed Papra"
msg_info "Configuring Papra"
mkdir -p /opt/papra_data/{db,documents,ingestion}
[[ ! -f /opt/papra_data/.secret ]] && openssl rand -hex 32 >/opt/papra_data/.secret
cat <<EOF >/opt/papra/apps/papra-server/.env
NODE_ENV=production
SERVER_SERVE_PUBLIC_DIR=true
PORT=1221
DATABASE_URL=file:/opt/papra_data/db/db.sqlite
DOCUMENT_STORAGE_FILESYSTEM_ROOT=/opt/papra_data/documents
PAPRA_CONFIG_DIR=/opt/papra_data
AUTH_SECRET=$(cat /opt/papra_data/.secret)
BETTER_AUTH_SECRET=$(cat /opt/papra_data/.secret)
BETTER_AUTH_TELEMETRY=0
CLIENT_BASE_URL=http://${LOCAL_IP}:1221
SERVER_BASE_URL=http://${LOCAL_IP}:1221
EMAILS_DRY_RUN=true
INGESTION_FOLDER_IS_ENABLED=true
INGESTION_FOLDER_ROOT_PATH=/opt/papra_data/ingestion
EOF
msg_ok "Configured Papra"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/papra.service
[Unit]
Description=Papra Document Management
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/papra/apps/papra-server
EnvironmentFile=/opt/papra/apps/papra-server/.env
ExecStartPre=/usr/bin/pnpm run migrate:up
ExecStart=/usr/bin/node dist/index.js
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now papra
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -38,6 +38,12 @@ msg_info "Setting up PowerDNS"
$STD apt install -y \
pdns-server \
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"
fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
@@ -125,9 +131,13 @@ cat <<EOF >/etc/apache2/sites-enabled/poweradmin.conf
</VirtualHost>
EOF
$STD a2enmod rewrite headers
chown -R www-data:www-data /opt/poweradmin
$STD systemctl restart apache2
msg_info "Created Service"
chown -R www-data:pdns /opt/poweradmin
chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
usermod -aG pdns www-data
$STD systemctl restart pdns apache2
msg_ok "Created Service"
motd_ssh
customize

View File

@@ -31,7 +31,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="21" setup_java
JAVA_VERSION="25" setup_java
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

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
@@ -3617,7 +3617,7 @@ build_container() {
$PCT_OPTIONS_STRING"
fi
# Add storage if specified
# Add searchdomain if specified
if [ -n "$SD" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
$SD"
@@ -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

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

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