Compare commits

..

11 Commits

Author SHA1 Message Date
github-actions[bot]
ecd58fc076 Update CHANGELOG.md 2026-09-04 12:39:36 +00:00
lucas-at-3x-eye
734e43004e Fix/poznote - 1st party Docker parity (#17011)
* fix(poznote): align nginx config with upstream Docker defaults

* fix(poznote): run init.sh on install and update, not just in Docker

* fix(poznote): add systemd units for the reminder-email and s3-backup workers

* fix(poznote): retrofit nginx config and worker services on update, sanitize timeout comment

* fix(poznote): silence init.sh output and consolidate worker enable/start

* fix(poznote): update ct/poznote.sh to use new default bootstrapper
2026-09-04 14:39:17 +02:00
community-scripts-pr-app[bot]
205839c29a Update CHANGELOG.md (#17004)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-04 07:26:41 +00:00
community-scripts-pr-app[bot]
a73f6a7e70 Update CHANGELOG.md (#17002)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-04 00:41:33 +00:00
thieneret
60d84967c6 fix chown (#16999) 2026-09-04 10:41:04 +10:00
community-scripts-pr-app[bot]
ab1db4582f Update CHANGELOG.md (#16997)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-03 18:22:47 +00:00
Chris
91ee0e46df Immich: bump libheif and libraw (#16996)
- To match upstream
2026-09-03 20:22:16 +02:00
community-scripts-pr-app[bot]
cae37ed968 Update CHANGELOG.md (#16994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-03 14:05:21 +00:00
CanbiZ (MickLesk)
15b457b46d romm: allow git-based npm dependency for rom-patcher under npm v12 (#16990) 2026-09-03 16:04:50 +02:00
community-scripts-pr-app[bot]
bfc6bd176b Update CHANGELOG.md (#16992)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-03 13:46:34 +00:00
CanbiZ (MickLesk)
d1855048f0 Pin Go to the version each project declares in go.mod (#16976) 2026-09-03 15:45:59 +02:00
38 changed files with 368 additions and 54 deletions

View File

@@ -530,12 +530,29 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-09-03
## 2026-09-04
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix/poznote - 1st party Docker parity [@lucas-at-3x-eye](https://github.com/lucas-at-3x-eye) ([#17011](https://github.com/community-scripts/ProxmoxVE/pull/17011))
- fix-update-authentik-2026.8.1 [@thieneret](https://github.com/thieneret) ([#16999](https://github.com/community-scripts/ProxmoxVE/pull/16999))
### 💾 Core
- setup_go: resolve bare major.minor versions to the latest patch release [@MickLesk](https://github.com/MickLesk) ([core#24](https://github.com/community-scripts/core/pull/24))
## 2026-09-03
### 🚀 Updated Scripts
- Immich: bump libheif and libraw [@vhsdream](https://github.com/vhsdream) ([#16996](https://github.com/community-scripts/ProxmoxVE/pull/16996))
- #### 🐞 Bug Fixes
- romm: allow git-based npm dependency for rom-patcher under npm v12 [@MickLesk](https://github.com/MickLesk) ([#16990](https://github.com/community-scripts/ProxmoxVE/pull/16990))
- Pin Go to the version each project declares in go.mod [@MickLesk](https://github.com/MickLesk) ([#16976](https://github.com/community-scripts/ProxmoxVE/pull/16976))
- Authentik update 2026.8.1 [@thieneret](https://github.com/thieneret) ([#16980](https://github.com/community-scripts/ProxmoxVE/pull/16980))
## 2026-09-02

View File

@@ -44,7 +44,6 @@ function update_script() {
msg_ok "Update dependencies"
NODE_VERSION="26" NODE_MODULE=pnpm@11 setup_nodejs
setup_go
$STD uv cache clean
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" setup_uv
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
@@ -89,13 +88,14 @@ function update_script() {
msg_info "Moving blueprints to presistent directory"
cp -r /opt/authentik/blueprints /opt/authentik-data/
rm -r /opt/authentik/blueprints
chown -R authentik:authentik /opt/authentik-data
chown -Rf authentik:authentik /opt/authentik-data
yq -i ".blueprints_dir = \"/opt/authentik-data/blueprints\"" /etc/authentik/config.yml
msg_ok "blueprints moved to presistent directory"
msg_warn "The blueprints provided by authentik are always overwritten when updated! Only manually created custom blueprints remain unchanged between updates."
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
msg_info "Configuring rust"
cd /opt/authentik
@@ -155,7 +155,7 @@ function update_script() {
cp -r /opt/authentik/blueprints /opt/authentik-data/
rm -r /opt/authentik/blueprints
chown -R authentik:authentik /opt/authentik-data
chown -Rf authentik:authentik /opt/authentik-data
if [[ $MAJOR == 2026 && $MINOR -lt 8 ]]; then
msg_info "Updating Worker and Server config (from $MAJOR.$MINOR)"
@@ -228,7 +228,7 @@ $STD pct exec "$CTID" -- bash -c "mkdir -p /opt/authentik-data/{certs,media,geoi
cp /opt/authentik/tests/GeoLite2-City-Test.mmdb /opt/authentik-data/geoip/GeoLite2-City.mmdb; \
cp -r /opt/authentik/blueprints /opt/authentik-data/; \
rm -r /opt/authentik/blueprints; \
chown -R authentik:authentik /opt/authentik-data"
chown -Rf authentik:authentik /opt/authentik-data"
msg_ok "Attached data storage volume"
msg_info "Starting Services"

View File

@@ -71,6 +71,7 @@ update_deb_based() {
msg_ok "Data backed up"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/bitmagnet/go.mod | awk '{print $2}')" setup_go
restore_backup
msg_info "Configuring Bitmagnet"

View File

@@ -37,8 +37,8 @@ function update_script() {
systemctl stop cloudflare-ddns
msg_ok "Stopped Service"
setup_go
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/cloudflare-ddns/go.mod | awk '{print $2}')" setup_go
msg_info "Updating ${APP}"
cd /opt/cloudflare-ddns

View File

@@ -70,6 +70,7 @@ function update_script() {
msg_ok "Ensured Database Clients"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "databasus" "databasus/databasus" "tarball" "latest" "/opt/databasus"
GO_VERSION="$(grep -m1 '^go ' /opt/databasus/backend/go.mod | awk '{print $2}')" setup_go
msg_info "Updating Databasus"
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0

View File

@@ -42,6 +42,7 @@ function update_script() {
create_backup /opt/firecrawl/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "firecrawl" "firecrawl/firecrawl" "tarball" "latest" "/opt/firecrawl"
GO_VERSION="$(grep -m1 '^go ' /opt/firecrawl/apps/api/sharedLibs/go-html-to-md/go.mod | awk '{print $2}')" setup_go
restore_backup

View File

@@ -39,6 +39,7 @@ function update_script() {
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gluetun" "qdm12/gluetun" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/gluetun/go.mod | awk '{print $2}')" setup_go
msg_info "Building Gluetun"
cd /opt/gluetun

View File

@@ -477,7 +477,7 @@ function compile_jpegli() {
function compile_libheif() {
SOURCE=${SOURCE_DIR}/libheif
ensure_dependencies libaom-dev
LIBHEIF_REVISION="62f1b8c76ed4d8305071fdacbe74ef9717bacac5"
LIBHEIF_REVISION="ac1cb05c39008f01525c991ff8b88f84ddf70fd2"
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libheif"
@@ -509,7 +509,7 @@ function compile_libheif() {
function compile_libraw() {
SOURCE=${SOURCE_DIR}/libraw
LIBRAW_REVISION="b860248a89d9082b8e0a1e202e516f46af9adb29"
LIBRAW_REVISION="e419de08001de28ae6988ecb22df47e52b9c5eaa"
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libraw"

View File

@@ -40,6 +40,7 @@ function update_script() {
create_backup /opt/koffan/data
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koffan" "PanSalut/Koffan" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/koffan/go.mod | awk '{print $2}')" setup_go
restore_backup
msg_info "Rebuilding Koffan"

View File

@@ -40,6 +40,7 @@ function update_script() {
create_backup /opt/localagi/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "localagi" "mudler/LocalAGI" "tarball" "latest" "/opt/localagi"
GO_VERSION="$(grep -m1 '^go ' /opt/localagi/go.mod | awk '{print $2}')" setup_go
restore_backup
msg_info "Building LocalAGI"

View File

@@ -39,6 +39,7 @@ function update_script() {
create_backup /opt/networkoptimizer/networkoptimizer.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "networkoptimizer" "Ozark-Connect/NetworkOptimizer" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/networkoptimizer/src/uwnspeedtest/go.mod | awk '{print $2}')" setup_go
restore_backup
msg_info "Rebuilding NetworkOptimizer"

View File

@@ -41,6 +41,7 @@ function update_script() {
fi
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/paperless-gpt/go.mod | awk '{print $2}')" setup_go
msg_info "Updating Paperless-GPT"
cd /opt/paperless-gpt/web-app

View File

@@ -35,6 +35,7 @@ function update_script() {
if check_for_gh_release "poznote" "timothepoznanski/poznote"; then
msg_info "Stopping Service"
systemctl stop nginx
systemctl stop poznote-reminder-worker poznote-s3-backup-worker 2>/dev/null || true
msg_ok "Stopped Service"
create_backup /var/www/html/data
@@ -48,8 +49,178 @@ function update_script() {
restore_backup
msg_info "Running Poznote Initialization"
chmod +x /opt/poznote/init.sh
$STD /opt/poznote/init.sh
msg_ok "Initialized Poznote Data Directory"
msg_info "Updating Nginx Configuration"
[[ -f /etc/nginx/sites-available/poznote ]] && cp /etc/nginx/sites-available/poznote /etc/nginx/sites-available/poznote.bak
PHP_SOCK=$(get_php_fpm_socket)
cat <<EOF >/etc/nginx/sites-available/poznote
# The Excalidraw editor must keep its window.opener relationship with
# libraries.excalidraw.com so "Add to Excalidraw" can hand the chosen library
# back to the already-open editor tab; COOP same-origin would sever it.
map \$uri \$poznote_coop {
default "same-origin";
/excalidraw_editor.php "unsafe-none";
}
server {
listen 8040;
root /var/www/html;
index index.php index.html;
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_vary on;
gzip_proxied any;
gzip_types text/css application/javascript text/javascript application/json
image/svg+xml application/manifest+json font/ttf font/otf;
location ~* \.webmanifest$ {
default_type application/manifest+json;
try_files \$uri =404;
}
client_max_body_size 800M;
location /api/v1 {
try_files \$uri \$uri/ /api/v1/index.php?\$query_string;
}
location = /api/health {
rewrite ^ /api_health.php last;
}
location = /api/info {
rewrite ^ /api_health.php last;
}
location / {
try_files \$uri \$uri/ @poznote_public;
}
location @poznote_public {
rewrite ^/folder/([^/]+)/?$ /public_folder.php?token=\$1 last;
rewrite ^/workspace/([^/]+)/?$ /public_note.php?token=\$1 last;
rewrite ^/([^/]+)/?$ /public_slug.php?slug=\$1 last;
}
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Cross-Origin-Opener-Policy \$poznote_coop always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;
location ~* ^/data/.*\.(php[0-9]?|phtml|phar|pht)$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:${PHP_SOCK};
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT \$document_root;
fastcgi_param PATH_INFO \$fastcgi_path_info;
fastcgi_param HTTP_X_FORWARDED_FOR \$http_x_forwarded_for;
fastcgi_param HTTP_X_FORWARDED_PROTO \$http_x_forwarded_proto;
fastcgi_param HTTP_X_FORWARDED_HOST \$http_x_forwarded_host;
fastcgi_param HTTP_X_FORWARDED_PORT \$http_x_forwarded_port;
fastcgi_param HTTP_X_REAL_IP \$http_x_real_ip;
fastcgi_param HTTPS \$https if_not_empty;
# fastcgi_read_timeout 600;
# fastcgi_send_timeout 600;
# Left at nginx's 60s default, not Docker's 600s:
# a stalled git-sync request can hold the PHP session lock, otherwise
}
location ~ /\. {
deny all;
}
location ~ ^/data/users/[0-9]+/backgrounds/ {
try_files \$uri =404;
}
location ~ ^/data/css/[A-Za-z0-9._-]+\.css$ {
try_files \$uri =404;
}
location ~ ^/(data|config)/ {
deny all;
}
location ~* ^/pwa/poznote(-[0-9]+)?\.png$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options "nosniff" always;
add_header Cross-Origin-Resource-Policy "cross-origin" always;
try_files \$uri =404;
}
location ~* \.(?:js|css|png|jpg|jpeg|gif|svg|ico|woff2?|ttf|otf|eot|webp|webmanifest)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options "nosniff" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
try_files \$uri =404;
}
}
EOF
msg_ok "Updated Nginx Configuration"
if [[ ! -f /etc/systemd/system/poznote-reminder-worker.service ]]; then
msg_info "Creating Reminder Worker Service"
cat <<EOF >/etc/systemd/system/poznote-reminder-worker.service
[Unit]
Description=Poznote Reminder Email Worker
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/html/workers/reminder-email-worker.php
WorkingDirectory=/var/www/html
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
msg_ok "Created Reminder Worker Service"
fi
if [[ ! -f /etc/systemd/system/poznote-s3-backup-worker.service ]]; then
msg_info "Creating S3 Backup Worker Service"
cat <<EOF >/etc/systemd/system/poznote-s3-backup-worker.service
[Unit]
Description=Poznote S3 Backup Worker
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/html/workers/s3-backup-worker.php
WorkingDirectory=/var/www/html
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
msg_ok "Created S3 Backup Worker Service"
fi
msg_info "Starting Service"
systemctl start nginx
systemctl enable -q --now poznote-reminder-worker poznote-s3-backup-worker
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi

View File

@@ -65,7 +65,7 @@ function update_script() {
$STD uv run alembic upgrade head
if [[ -f /opt/romm/backend/utils/rom_patcher/package.json ]]; then
cd /opt/romm/backend/utils/rom_patcher
$STD npm install --ignore-scripts --no-audit --no-fund
$STD npm install --ignore-scripts --no-audit --no-fund --allow-git=all
if [[ -d node_modules/rom-patcher/rom-patcher-js ]]; then
rm -rf rom-patcher-js
cp -r node_modules/rom-patcher/rom-patcher-js ./rom-patcher-js

View File

@@ -44,6 +44,7 @@ function update_script() {
msg_ok "Stopped Service"
CLEAN_INSTALL=1 GITLAB_URL="https://gitlab.torproject.org" fetch_and_deploy_gl_release "tor-snowflake" "tpo/anti-censorship/pluggable-transports/snowflake" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/tor-snowflake/proxy/go.mod | awk '{print $2}')" setup_go
msg_info "Building Snowflake"
cd /opt/tor-snowflake/proxy

View File

@@ -158,6 +158,8 @@ EOF
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest"
restore_backup
GO_VERSION="$(grep -m1 '^go ' /opt/wanderer/db/go.mod | awk '{print $2}')" setup_go
msg_info "Updating wanderer"
cd /opt/wanderer/db
$STD go mod tidy

View File

@@ -40,6 +40,7 @@ function update_script() {
create_backup /opt/watcharr/server/data
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/watcharr/server/go.mod | awk '{print $2}')" setup_go
restore_backup
msg_info "Updating Watcharr"

View File

@@ -38,6 +38,7 @@ function update_script() {
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yopass" "jhaals/yopass" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/yopass/go.mod | awk '{print $2}')" setup_go
msg_info "Building Yopass"
cd /opt/yopass

View File

@@ -52,7 +52,6 @@ msg_ok "Installed Dependencies"
NODE_VERSION="26" NODE_MODULE=pnpm@11 setup_nodejs
setup_yq
setup_go
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" setup_uv
PG_VERSION="17" setup_postgresql
@@ -62,6 +61,7 @@ XMLSEC_VERSION="1.3.12"
AUTHENTIK_VERSION="version/2026.8.1"
fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec"
fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
msg_info "Setting up xmlsec"

View File

@@ -23,9 +23,9 @@ setup_deb_based() {
PG_VERSION="16" setup_postgresql
PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db
setup_go
fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/bitmagnet/go.mod | awk '{print $2}')" setup_go
RELEASE=$(cat ~/.bitmagnet)
msg_info "Configuring bitmagnet"

View File

@@ -51,8 +51,8 @@ while true; do
done
msg_ok "Configured Application"
setup_go
fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/cloudflare-ddns/go.mod | awk '{print $2}')" setup_go
msg_info "Building ${APPLICATION}"
cd /opt/cloudflare-ddns

View File

@@ -22,7 +22,6 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
setup_go
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
msg_info "Installing Database Clients"
@@ -52,6 +51,7 @@ done
msg_ok "Installed Database Clients"
fetch_and_deploy_gh_release "databasus" "databasus/databasus" "tarball" "latest" "/opt/databasus"
GO_VERSION="$(grep -m1 '^go ' /opt/databasus/backend/go.mod | awk '{print $2}')" setup_go
msg_info "Building Databasus (Patience)"
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0

View File

@@ -28,11 +28,11 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="pnpm@11.4.0" setup_nodejs
setup_go
RUST_PROFILE="minimal" setup_rust
PG_VERSION="17" PG_MODULES="cron" setup_postgresql
fetch_and_deploy_gh_release "firecrawl" "firecrawl/firecrawl" "tarball" "latest" "/opt/firecrawl"
GO_VERSION="$(grep -m1 '^go ' /opt/firecrawl/apps/api/sharedLibs/go-html-to-md/go.mod | awk '{print $2}')" setup_go
msg_info "Configuring FDB"
FDB_VERSION="$(awk -F= '/^ARG FDB_VERSION=/{print $2; exit}' /opt/firecrawl/apps/api/Dockerfile)"

View File

@@ -26,9 +26,9 @@ $STD update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
ln -sf /usr/sbin/openvpn /usr/sbin/openvpn2.6
msg_ok "Configured iptables"
setup_go
fetch_and_deploy_gh_release "gluetun" "qdm12/gluetun" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/gluetun/go.mod | awk '{print $2}')" setup_go
msg_info "Building Gluetun"
cd /opt/gluetun

View File

@@ -266,7 +266,7 @@ msg_ok "(2/6) Compiled jpegli"
msg_info "(3/6) Compiling libheif"
SOURCE=${SOURCE_DIR}/libheif
LIBHEIF_REVISION="62f1b8c76ed4d8305071fdacbe74ef9717bacac5"
LIBHEIF_REVISION="ac1cb05c39008f01525c991ff8b88f84ddf70fd2"
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
@@ -292,7 +292,7 @@ msg_ok "(3/6) Compiled libheif"
msg_info "(4/6) Compiling libraw"
SOURCE=${SOURCE_DIR}/libraw
LIBRAW_REVISION="b860248a89d9082b8e0a1e202e516f46af9adb29"
LIBRAW_REVISION="e419de08001de28ae6988ecb22df47e52b9c5eaa"
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
$STD git clone https://github.com/LibRaw/LibRaw.git "$SOURCE"
cd "$SOURCE"

View File

@@ -17,8 +17,8 @@ msg_info "Installing Dependencies"
$STD apt install -y build-essential
msg_ok "Installed Dependencies"
setup_go
fetch_and_deploy_gh_release "koffan" "PanSalut/Koffan" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/koffan/go.mod | awk '{print $2}')" setup_go
msg_info "Building Koffan"
cd /opt/koffan

View File

@@ -19,7 +19,6 @@ $STD apt install -y build-essential
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
setup_go
msg_info "Installing Bun"
export BUN_INSTALL="/root/.bun"
@@ -29,6 +28,7 @@ ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx
msg_ok "Installed Bun"
fetch_and_deploy_gh_release "localagi" "mudler/LocalAGI" "tarball" "latest" "/opt/localagi"
GO_VERSION="$(grep -m1 '^go ' /opt/localagi/go.mod | awk '{print $2}')" setup_go
msg_info "Configuring LocalAGI"
mkdir -p /opt/localagi/pool

View File

@@ -48,9 +48,9 @@ $STD apt install -y \
msg_ok "Installed Build Dependencies"
NODE_VERSION="22" setup_nodejs
setup_go
fetch_and_deploy_gh_release "neko" "m1k1o/neko" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/neko/server/go.mod | awk '{print $2}')" setup_go
msg_info "Building Client"
cd /opt/neko/client

View File

@@ -27,9 +27,9 @@ setup_deb822_repo \
$STD apt install -y dotnet-sdk-10.0
msg_ok "Installed Dependencies"
setup_go
fetch_and_deploy_gh_release "networkoptimizer" "Ozark-Connect/NetworkOptimizer" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/networkoptimizer/src/uwnspeedtest/go.mod | awk '{print $2}')" setup_go
msg_info "Building NetworkOptimizer"
RID="linux-x64"

View File

@@ -23,8 +23,8 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
setup_go
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/paperless-gpt/go.mod | awk '{print $2}')" setup_go
msg_info "Setup Paperless-GPT"
cd /opt/paperless-gpt/web-app

View File

@@ -28,16 +28,73 @@ touch /var/www/html/data/database/poznote.db
chown -R www-data:www-data /var/www/html
msg_ok "Deployed Poznote"
msg_info "Running Poznote Initialization"
chmod +x /opt/poznote/init.sh
$STD /opt/poznote/init.sh
msg_ok "Initialized Poznote Data Directory"
msg_info "Configuring Nginx"
PHP_SOCK=$(get_php_fpm_socket)
cat <<EOF >/etc/nginx/sites-available/poznote
# The Excalidraw editor must keep its window.opener relationship with
# libraries.excalidraw.com so "Add to Excalidraw" can hand the chosen library
# back to the already-open editor tab; COOP same-origin would sever it.
map \$uri \$poznote_coop {
default "same-origin";
/excalidraw_editor.php "unsafe-none";
}
server {
listen 8040;
root /var/www/html;
index index.php index.html;
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_vary on;
gzip_proxied any;
gzip_types text/css application/javascript text/javascript application/json
image/svg+xml application/manifest+json font/ttf font/otf;
location ~* \.webmanifest$ {
default_type application/manifest+json;
try_files \$uri =404;
}
client_max_body_size 800M;
location /api/v1 {
try_files \$uri \$uri/ /api/v1/index.php?\$query_string;
}
location = /api/health {
rewrite ^ /api_health.php last;
}
location = /api/info {
rewrite ^ /api_health.php last;
}
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
try_files \$uri \$uri/ @poznote_public;
}
location @poznote_public {
rewrite ^/folder/([^/]+)/?$ /public_folder.php?token=\$1 last;
rewrite ^/workspace/([^/]+)/?$ /public_note.php?token=\$1 last;
rewrite ^/([^/]+)/?$ /public_slug.php?slug=\$1 last;
}
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Cross-Origin-Opener-Policy \$poznote_coop always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;
location ~* ^/data/.*\.(php[0-9]?|phtml|phar|pht)$ {
deny all;
}
location ~ \.php$ {
@@ -45,16 +102,93 @@ server {
fastcgi_pass unix:${PHP_SOCK};
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT \$document_root;
fastcgi_param PATH_INFO \$fastcgi_path_info;
fastcgi_param HTTP_X_FORWARDED_FOR \$http_x_forwarded_for;
fastcgi_param HTTP_X_FORWARDED_PROTO \$http_x_forwarded_proto;
fastcgi_param HTTP_X_FORWARDED_HOST \$http_x_forwarded_host;
fastcgi_param HTTP_X_FORWARDED_PORT \$http_x_forwarded_port;
fastcgi_param HTTP_X_REAL_IP \$http_x_real_ip;
fastcgi_param HTTPS \$https if_not_empty;
# fastcgi_read_timeout 600;
# fastcgi_send_timeout 600;
# Left at nginx's 60s default, not Docker's 600s:
# a stalled git-sync request can hold the PHP session lock, otherwise
}
location ~ /\.ht {
location ~ /\. {
deny all;
}
location ~ ^/data/users/[0-9]+/backgrounds/ {
try_files \$uri =404;
}
location ~ ^/data/css/[A-Za-z0-9._-]+\.css$ {
try_files \$uri =404;
}
location ~ ^/(data|config)/ {
deny all;
}
location ~* ^/pwa/poznote(-[0-9]+)?\.png$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options "nosniff" always;
add_header Cross-Origin-Resource-Policy "cross-origin" always;
try_files \$uri =404;
}
location ~* \.(?:js|css|png|jpg|jpeg|gif|svg|ico|woff2?|ttf|otf|eot|webp|webmanifest)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options "nosniff" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
try_files \$uri =404;
}
}
EOF
nginx_enable_site poznote
msg_ok "Configured Nginx"
msg_info "Creating Background Worker Services"
cat <<EOF >/etc/systemd/system/poznote-reminder-worker.service
[Unit]
Description=Poznote Reminder Email Worker
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/html/workers/reminder-email-worker.php
WorkingDirectory=/var/www/html
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/poznote-s3-backup-worker.service
[Unit]
Description=Poznote S3 Backup Worker
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/html/workers/s3-backup-worker.php
WorkingDirectory=/var/www/html
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now poznote-reminder-worker poznote-s3-backup-worker
msg_ok "Created Background Worker Services"
motd_ssh
customize
cleanup_lxc

View File

@@ -214,7 +214,7 @@ msg_ok "Set up RomM Backend"
if [[ -f /opt/romm/backend/utils/rom_patcher/package.json ]]; then
msg_info "Building ROM Patcher helper"
cd /opt/romm/backend/utils/rom_patcher
$STD npm install --ignore-scripts --no-audit --no-fund
$STD npm install --ignore-scripts --no-audit --no-fund --allow-git=all
if [[ -d node_modules/rom-patcher/rom-patcher-js ]]; then
rm -rf rom-patcher-js
cp -r node_modules/rom-patcher/rom-patcher-js ./rom-patcher-js

View File

@@ -19,9 +19,9 @@ $STD apt install -y \
gcc
msg_ok "Installed Dependencies"
setup_go
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "seelf" "YuukanOO/seelf" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/seelf/go.mod | awk '{print $2}')" setup_go
msg_info "Setting up seelf. Patience"
cd /opt/seelf

View File

@@ -13,10 +13,10 @@ setting_up_container
network_check
update_os
setup_go
msg_info "Building Snowflake"
GITLAB_URL="https://gitlab.torproject.org" fetch_and_deploy_gl_release "tor-snowflake" "tpo/anti-censorship/pluggable-transports/snowflake" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/tor-snowflake/proxy/go.mod | awk '{print $2}')" setup_go
cd /opt/tor-snowflake/proxy
$STD go build -o snowflake-proxy .
msg_ok "Built Snowflake Proxy"

View File

@@ -13,7 +13,6 @@ setting_up_container
network_check
update_os
setup_go
NODE_VERSION="22" setup_nodejs
mkdir -p /opt/{wanderer,wanderer_data/pb_data,wanderer_data/meili_data,wanderer_data/plugins}
MEILISEARCH_DB_PATH="/opt/wanderer_data/meili_data" setup_meilisearch
@@ -21,6 +20,8 @@ fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "lates
mkdir -p /opt/wanderer/db/data
[[ -e /opt/wanderer/db/data/plugins ]] || ln -sfn /opt/wanderer_data/plugins /opt/wanderer/db/data/plugins
GO_VERSION="$(grep -m1 '^go ' /opt/wanderer/db/go.mod | awk '{print $2}')" setup_go
msg_info "Installing wanderer (patience)"
cd /opt/wanderer/db
$STD go mod tidy

View File

@@ -17,9 +17,9 @@ msg_info "Installing Dependencies"
$STD apt install -y gcc
msg_ok "Installed Dependencies"
setup_go
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/watcharr/server/go.mod | awk '{print $2}')" setup_go
msg_info "Setup Watcharr"
cd /opt/watcharr

View File

@@ -18,10 +18,10 @@ $STD apt install -y redis-server
systemctl enable -q --now redis-server
msg_ok "Installed Dependencies"
setup_go
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
fetch_and_deploy_gh_release "yopass" "jhaals/yopass" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/yopass/go.mod | awk '{print $2}')" setup_go
msg_info "Building Yopass"
cd /opt/yopass

View File

@@ -155,29 +155,13 @@ function sanitize_service_name() {
return 0
}
function script_exists() {
function validate_service_script() {
local name="$1"
sanitize_service_name "$name" || return 1
curl -fsSL --max-time 10 -o /dev/null \
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${name}.sh" 2>/dev/null
}
# A container keeps the slug it was built with, so a renamed ct/ script leaves it
# pointing at a name that no longer exists. Try the successors, but only accept one
# that is really there -- guessing wrong would run a foreign app's updater.
function resolve_service_script() {
local n="$1" c
script_exists "$n" && { printf '%s' "$n"; return 0; }
for c in "${n#alpine-}" "$(printf '%s' "$n" | sed -E 's/-v[0-9]+$//')"; do
[[ -n "$c" && "$c" != "$n" ]] || continue
script_exists "$c" && { printf '%s' "$c"; return 0; }
done
case "$n" in
pbs) script_exists proxmox-backup-server && { printf '%s' proxmox-backup-server; return 0; } ;;
esac
return 1
}
function detect_service() {
local container="$1"
local tmpdir update_file
@@ -500,18 +484,12 @@ for container in $CHOICE; do
continue
fi
resolved_service="$(resolve_service_script "${service}")"
if [ -z "${resolved_service}" ]; then
if ! validate_service_script "${service}"; then
echo -e "${RD}[ERROR]${CL} Service '${service}' does not resolve to ct/${service}.sh"
log_result "$container" "${service}" "ERROR" "No matching ct/${service}.sh script found"
log_write "Container $container: ERROR — ct/${service}.sh not found"
continue
fi
if [ "${resolved_service}" != "${service}" ]; then
echo -e "${BL}[INFO]${CL} Script was renamed: ${service} -> ${GN}${resolved_service}${CL}"
log_write "Container $container: slug ${service} resolved to ${resolved_service}"
service="${resolved_service}"
fi
echo -e "${BL}[INFO]${CL} Detected service: ${GN}${service}${CL}"
log_write "Container $container: detected service '${service}'"