mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-28 21:18:06 +00:00
Compare commits
19
Commits
@@ -549,8 +549,34 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-09-28
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Immich: Pin version to 3.2.4 [@vhsdream](https://github.com/vhsdream) ([#17564](https://github.com/community-scripts/ProxmoxVE/pull/17564))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(autocaliweb): wire .env into all service units, not just autocali… [@bobartlett](https://github.com/bobartlett) ([#17561](https://github.com/community-scripts/ProxmoxVE/pull/17561))
|
||||
- Zipline: Change cp command [@Mraedis](https://github.com/Mraedis) ([#17559](https://github.com/community-scripts/ProxmoxVE/pull/17559))
|
||||
- Borg-UI: start through upstream's start.sh so migrations run [@MickLesk](https://github.com/MickLesk) ([#17563](https://github.com/community-scripts/ProxmoxVE/pull/17563))
|
||||
- linkding: serve favicons and preview images [@MickLesk](https://github.com/MickLesk) ([#17557](https://github.com/community-scripts/ProxmoxVE/pull/17557))
|
||||
- SparkyFitness: Fill in the nginx resolver 1.7.3 added [@MickLesk](https://github.com/MickLesk) ([#17556](https://github.com/community-scripts/ProxmoxVE/pull/17556))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Plane: Replace MinIO installation with Silo [@MickLesk](https://github.com/MickLesk) ([#17347](https://github.com/community-scripts/ProxmoxVE/pull/17347))
|
||||
|
||||
## 2026-09-27
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(aurral): bump to Node 26 and bypass strict engine pin [@JodyVanden](https://github.com/JodyVanden) ([#17543](https://github.com/community-scripts/ProxmoxVE/pull/17543))
|
||||
- Tracearr: fetch map tiles on install/update [@durzo](https://github.com/durzo) ([#17544](https://github.com/community-scripts/ProxmoxVE/pull/17544))
|
||||
- fix(autocaliweb): define INSTALL_DIR before first use [@bobartlett](https://github.com/bobartlett) ([#17545](https://github.com/community-scripts/ProxmoxVE/pull/17545))
|
||||
|
||||
## 2026-09-26
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
+4
-1
@@ -38,13 +38,16 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "aurral" "lklynet/aurral" "tarball"
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
|
||||
msg_info "Updating Aurral"
|
||||
cd /opt/aurral
|
||||
export VITE_APP_VERSION="$(cat ~/.aurral)"
|
||||
export VITE_GITHUB_REPO="lklynet/aurral"
|
||||
export VITE_RELEASE_CHANNEL="stable"
|
||||
# aurral's .npmrc sets engine-strict=true and pins an exact node patch (e.g. 26.8.x),
|
||||
# which NodeSource can't match since it only ships the latest patch per major.
|
||||
export npm_config_engine_strict=false
|
||||
$STD npm ci --workspace frontend --include-workspace-root=false
|
||||
$STD npm run build --workspace frontend
|
||||
$STD npm ci --workspace backend --omit=dev --include=optional --include-workspace-root=false
|
||||
|
||||
+31
-9
@@ -32,15 +32,9 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if grep -q -- '--workers 2' /etc/systemd/system/borg-ui.service 2>/dev/null; then
|
||||
msg_info "Reducing Service to a single worker"
|
||||
sed -i 's/--workers 2/--workers 1/' /etc/systemd/system/borg-ui.service
|
||||
systemctl daemon-reload
|
||||
systemctl try-restart borg-ui
|
||||
msg_ok "Reduced Service to a single worker"
|
||||
fi
|
||||
|
||||
local changed=0
|
||||
if check_for_gh_release "borg-ui" "karanhudia/borg-ui"; then
|
||||
changed=1
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop borg-ui
|
||||
msg_ok "Stopped Service"
|
||||
@@ -110,9 +104,37 @@ function update_script() {
|
||||
$STD uv venv --python "$BORG_PYTHON" /opt/borg-ui/.venv
|
||||
$STD uv pip install --python /opt/borg-ui/.venv -r requirements.txt
|
||||
msg_ok "Updated Python Environment"
|
||||
fi
|
||||
|
||||
if [[ -f /opt/borg-ui/packaging/native/start.sh ]] && ! grep -q 'packaging/native/start.sh' /etc/systemd/system/borg-ui.service; then
|
||||
msg_info "Switching Service to the upstream start script"
|
||||
cat <<EOF >/etc/systemd/system/borg-ui.service
|
||||
[Unit]
|
||||
Description=Borg-UI
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/borg-ui
|
||||
EnvironmentFile=/opt/borg-ui/.env
|
||||
Environment=BORG_UI_VENV=/opt/borg-ui/.venv
|
||||
ExecStart=/bin/bash /opt/borg-ui/packaging/native/start.sh
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Switched Service to the upstream start script"
|
||||
changed=1
|
||||
fi
|
||||
|
||||
if [[ "$changed" == 1 ]]; then
|
||||
msg_info "Starting Service"
|
||||
systemctl start borg-ui
|
||||
systemctl restart borg-ui
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ EOF
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
|
||||
RELEASE="v3.2.2"
|
||||
RELEASE="v3.2.4"
|
||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||
msg_info "Enabling Maintenance Mode"
|
||||
|
||||
@@ -32,6 +32,16 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if grep -q 'alias /opt/linkding/static/;' /etc/nginx/sites-available/linkding 2>/dev/null; then
|
||||
msg_info "Serving Favicons and Preview Images"
|
||||
sed -i \
|
||||
-e 's|location /static/ {|location ~ ^/static/(.*)$ {|' \
|
||||
-e 's|alias /opt/linkding/static/;|root /opt/linkding;\n try_files /static/$1 /data/favicons/$1 /data/previews/$1 =404;\n add_header Content-Security-Policy "sandbox";|' \
|
||||
/etc/nginx/sites-available/linkding
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Serving Favicons and Preview Images"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "linkding" "sissbruecker/linkding"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx linkding linkding-tasks
|
||||
|
||||
@@ -62,12 +62,14 @@ function update_script() {
|
||||
|
||||
msg_info "Refreshing Nginx Config"
|
||||
FRONTEND_URL=$(grep -oP '^SPARKY_FITNESS_FRONTEND_URL=\K.*' /etc/sparkyfitness/.env)
|
||||
NGINX_RESOLVER=$(awk '$1=="nameserver" {ns=$2; sub(/%.*/, "", ns); printf "%s%s", sep, (ns ~ /:/ ? "[" ns "]" : ns); sep=" "}' /etc/resolv.conf)
|
||||
sed \
|
||||
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
|
||||
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
|
||||
-e "s|\${SPARKY_FITNESS_FRONTEND_URL}|${FRONTEND_URL}|g" \
|
||||
-e 's|${NGINX_LISTEN_PORT}|80|g' \
|
||||
-e 's|${NGINX_RATE_LIMIT}|5r/s|g' \
|
||||
-e "s|\${NGINX_RESOLVER}|${NGINX_RESOLVER:-127.0.0.1}|g" \
|
||||
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
|
||||
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
|
||||
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
|
||||
|
||||
@@ -123,6 +123,7 @@ EOF
|
||||
$STD pnpm install --frozen-lockfile --force
|
||||
$STD pnpm turbo telemetry disable
|
||||
$STD pnpm turbo run build --no-daemon --filter=@tracearr/shared --filter=@tracearr/server --filter=@tracearr/web
|
||||
$STD ./scripts/fetch-basemap.sh
|
||||
rm -rf /opt/tracearr
|
||||
mkdir -p /opt/tracearr/{packages/shared,packages/emails,apps/server,apps/web,apps/server/src/db}
|
||||
cp -rf package.json /opt/tracearr/
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ function update_script() {
|
||||
|
||||
mkdir -p /opt/zipline-uploads
|
||||
if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then
|
||||
cp -R /opt/zipline/uploads/* /opt/zipline-uploads/
|
||||
cp -R /opt/zipline/uploads/. /opt/zipline-uploads/
|
||||
fi
|
||||
cp /opt/zipline/.env /opt/
|
||||
rm -R /opt/zipline
|
||||
|
||||
@@ -22,7 +22,7 @@ $STD apt install -y \
|
||||
fonts-dejavu-core
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "yt-dlp"
|
||||
fetch_and_deploy_gh_release "aurral" "lklynet/aurral" "tarball"
|
||||
@@ -32,6 +32,9 @@ cd /opt/aurral
|
||||
export VITE_APP_VERSION="$(cat ~/.aurral)"
|
||||
export VITE_GITHUB_REPO="lklynet/aurral"
|
||||
export VITE_RELEASE_CHANNEL="stable"
|
||||
# aurral's .npmrc sets engine-strict=true and pins an exact node patch (e.g. 26.8.x),
|
||||
# which NodeSource can't match since it only ships the latest patch per major.
|
||||
export npm_config_engine_strict=false
|
||||
$STD npm ci --workspace frontend --include-workspace-root=false
|
||||
$STD npm run build --workspace frontend
|
||||
$STD npm ci --workspace backend --omit=dev --include=optional --include-workspace-root=false
|
||||
|
||||
@@ -54,11 +54,11 @@ $STD /opt/calibre/calibre_postinstall
|
||||
CALIBRE_VERSION=$(cat ~/.calibre)
|
||||
msg_ok "Installed Calibre"
|
||||
|
||||
INSTALL_DIR="/opt/autocaliweb"
|
||||
fetch_and_deploy_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
|
||||
setup_uv $INSTALL_DIR
|
||||
|
||||
msg_info "Configuring Autocaliweb"
|
||||
INSTALL_DIR="/opt/autocaliweb"
|
||||
CONFIG_DIR="/etc/autocaliweb"
|
||||
CALIBRE_LIB_DIR="/opt/calibre-library"
|
||||
INGEST_DIR="/opt/acw-book-ingest"
|
||||
@@ -266,6 +266,7 @@ Group=${SERVICE_GROUP}
|
||||
WorkingDirectory=${INSTALL_DIR}
|
||||
Environment=CALIBRE_DBPATH=${CONFIG_DIR}
|
||||
Environment=HOME=${CONFIG_DIR}
|
||||
EnvironmentFile=${INSTALL_DIR}/.env
|
||||
ExecStart=/bin/bash ${SCRIPTS_DIR}/ingest_watcher.sh
|
||||
Restart=always
|
||||
StandardOutput=journal
|
||||
@@ -285,6 +286,7 @@ User=${SERVICE_USER}
|
||||
Group=${SERVICE_GROUP}
|
||||
WorkingDirectory=${INSTALL_DIR}
|
||||
Environment=CALIBRE_DBPATH=${CONFIG_DIR}
|
||||
EnvironmentFile=${INSTALL_DIR}/.env
|
||||
ExecStart=${SCRIPTS_DIR}/auto_zipper_wrapper.sh
|
||||
Restart=always
|
||||
StandardOutput=journal
|
||||
@@ -303,6 +305,7 @@ After=network.target
|
||||
User=${SERVICE_USER}
|
||||
Group=${SERVICE_GROUP}
|
||||
WorkingDirectory=${INSTALL_DIR}
|
||||
EnvironmentFile=${INSTALL_DIR}/.env
|
||||
ExecStart=/bin/bash ${SCRIPTS_DIR}/metadata_change_detector_wrapper.sh
|
||||
Restart=always
|
||||
StandardOutput=journal
|
||||
|
||||
@@ -111,7 +111,8 @@ Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/borg-ui
|
||||
EnvironmentFile=/opt/borg-ui/.env
|
||||
ExecStart=/opt/borg-ui/.venv/bin/gunicorn app.main:app --bind 0.0.0.0:8081 --workers 1 --worker-class uvicorn.workers.UvicornWorker --timeout 300
|
||||
Environment=BORG_UI_VENV=/opt/borg-ui/.venv
|
||||
ExecStart=/bin/bash /opt/borg-ui/packaging/native/start.sh
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
|
||||
@@ -353,7 +353,7 @@ ML_DIR="${APP_DIR}/machine-learning"
|
||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v3.2.2" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v3.2.4" "$SRC_DIR"
|
||||
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1] | split("+")[0]' ${SRC_DIR}/package.json)"
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
|
||||
|
||||
@@ -101,8 +101,10 @@ server {
|
||||
|
||||
client_max_body_size 20M;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/linkding/static/;
|
||||
location ~ ^/static/(.*)$ {
|
||||
root /opt/linkding;
|
||||
try_files /static/$1 /data/favicons/$1 /data/previews/$1 =404;
|
||||
add_header Content-Security-Policy "sandbox";
|
||||
expires 30d;
|
||||
}
|
||||
|
||||
|
||||
+12
-13
@@ -43,9 +43,10 @@ $STD rabbitmqctl add_user plane "${RABBITMQ_PASS}"
|
||||
$STD rabbitmqctl set_permissions -p plane plane ".*" ".*" ".*"
|
||||
msg_ok "Configured RabbitMQ"
|
||||
|
||||
msg_info "Installing MinIO"
|
||||
curl -fsSL https://dl.min.io/server/minio/release/linux-$(arch_resolve)/minio -o /usr/local/bin/minio
|
||||
chmod +x /usr/local/bin/minio
|
||||
fetch_and_deploy_gh_release "silo" "pgsty/silo" "prebuild" "latest" "/opt/silo" "silo_*_linux_$(arch_resolve).tar.gz"
|
||||
fetch_and_deploy_gh_release "mcli" "pgsty/mc" "prebuild" "latest" "/opt/mcli" "mcli_*_linux_$(arch_resolve).tar.gz"
|
||||
|
||||
msg_info "Configuring Silo"
|
||||
mkdir -p /opt/minio/data
|
||||
MINIO_ACCESS_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
||||
MINIO_SECRET_KEY=$(openssl rand -base64 36 | tr -dc 'a-zA-Z0-9' | head -c32)
|
||||
@@ -56,13 +57,13 @@ MINIO_VOLUMES="/opt/minio/data"
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/minio.service
|
||||
[Unit]
|
||||
Description=MinIO Object Storage
|
||||
Description=Silo Object Storage
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
EnvironmentFile=/etc/default/minio
|
||||
ExecStart=/usr/local/bin/minio server \$MINIO_VOLUMES --console-address ":9090"
|
||||
ExecStart=/opt/silo/silo server \$MINIO_VOLUMES --console-address ":9090"
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
@@ -70,7 +71,7 @@ RestartSec=5
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now minio
|
||||
msg_ok "Installed MinIO"
|
||||
msg_ok "Configured Silo"
|
||||
|
||||
fetch_and_deploy_gh_release "plane" "makeplane/plane" "tarball"
|
||||
|
||||
@@ -175,12 +176,10 @@ $STD /opt/plane-venv/bin/python manage.py configure_instance
|
||||
$STD /opt/plane-venv/bin/python manage.py register_instance "${MACHINE_SIG}"
|
||||
msg_ok "Ran Database Migrations"
|
||||
|
||||
msg_info "Creating Services and MinIO Bucket"
|
||||
curl -fsSL https://dl.min.io/client/mc/release/linux-$(arch_resolve)/mc -o /usr/local/bin/mcli
|
||||
chmod +x /usr/local/bin/mcli
|
||||
$STD /usr/local/bin/mcli alias set plane http://localhost:9000 "${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}"
|
||||
$STD /usr/local/bin/mcli mb plane/uploads --ignore-existing
|
||||
$STD /usr/local/bin/mcli anonymous set download plane/uploads
|
||||
msg_info "Creating Services and Bucket"
|
||||
$STD /opt/mcli/mcli alias set plane http://localhost:9000 "${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}"
|
||||
$STD /opt/mcli/mcli mb plane/uploads --ignore-existing
|
||||
$STD /opt/mcli/mcli anonymous set download plane/uploads
|
||||
|
||||
cat <<EOF >/etc/systemd/system/plane-api.service
|
||||
[Unit]
|
||||
@@ -279,7 +278,7 @@ MinIO Secret Key: ${MINIO_SECRET_KEY}
|
||||
Secret Key: ${SECRET_KEY}
|
||||
Config: /opt/plane/apps/api/.env
|
||||
EOF
|
||||
msg_ok "Created Services and MinIO Bucket"
|
||||
msg_ok "Created Services and Bucket"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<'EOF' >/etc/nginx/sites-available/plane.conf
|
||||
|
||||
@@ -81,12 +81,14 @@ systemctl enable -q --now sparkyfitness-server
|
||||
msg_ok "Created SparkyFitness Service"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
NGINX_RESOLVER=$(awk '$1=="nameserver" {ns=$2; sub(/%.*/, "", ns); printf "%s%s", sep, (ns ~ /:/ ? "[" ns "]" : ns); sep=" "}' /etc/resolv.conf)
|
||||
sed \
|
||||
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
|
||||
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
|
||||
-e "s|\${SPARKY_FITNESS_FRONTEND_URL}|http://${LOCAL_IP}:80|g" \
|
||||
-e 's|${NGINX_LISTEN_PORT}|80|g' \
|
||||
-e 's|${NGINX_RATE_LIMIT}|5r/s|g' \
|
||||
-e "s|\${NGINX_RESOLVER}|${NGINX_RESOLVER:-127.0.0.1}|g" \
|
||||
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
|
||||
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
|
||||
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
|
||||
|
||||
@@ -67,6 +67,7 @@ cd /opt/tracearr.build
|
||||
$STD pnpm install --frozen-lockfile --force
|
||||
$STD pnpm turbo telemetry disable
|
||||
$STD pnpm turbo run build --no-daemon --filter=@tracearr/shared --filter=@tracearr/server --filter=@tracearr/web
|
||||
$STD ./scripts/fetch-basemap.sh
|
||||
mkdir -p /opt/tracearr/{packages/shared,packages/emails,apps/server,apps/web,apps/server/src/db}
|
||||
cp -rf package.json /opt/tracearr/
|
||||
cp -rf pnpm-workspace.yaml /opt/tracearr/
|
||||
|
||||
Reference in New Issue
Block a user