mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-05 23:10:59 +00:00
Compare commits
28 Commits
fix-romm-v
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6d538f5c4 | ||
|
|
f100076ae3 | ||
|
|
e4c52cbe0b | ||
|
|
1fa93da239 | ||
|
|
1a5fafa8ec | ||
|
|
ba84aca0f5 | ||
|
|
d4771cbf98 | ||
|
|
7878f3095f | ||
|
|
535f2f2d2e | ||
|
|
166c798e35 | ||
|
|
bcb82ac446 | ||
|
|
eeafdafcd0 | ||
|
|
89f179e05e | ||
|
|
a5cde1fa8c | ||
|
|
a81a11649e | ||
|
|
9c750ffaf5 | ||
|
|
f3742af941 | ||
|
|
40160b0a58 | ||
|
|
d9c276c49c | ||
|
|
cfb0bfe4ac | ||
|
|
1d973f42a8 | ||
|
|
1d1fd98d05 | ||
|
|
d01e9a2c33 | ||
|
|
06cafd68c4 | ||
|
|
455039d11f | ||
|
|
c272987bad | ||
|
|
02c54f3be5 | ||
|
|
734e43004e |
32
CHANGELOG.md
32
CHANGELOG.md
@@ -530,13 +530,45 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-09-05
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- authentik: scope blueprints chown to avoid recursing into the mp0 bind mount [@MickLesk](https://github.com/MickLesk) ([#17008](https://github.com/community-scripts/ProxmoxVE/pull/17008))
|
||||||
|
- iventoy: run iventoy.sh with bash instead of dash [@MickLesk](https://github.com/MickLesk) ([#17034](https://github.com/community-scripts/ProxmoxVE/pull/17034))
|
||||||
|
- frigate: restart go2rtc.service before frigate starts [@MickLesk](https://github.com/MickLesk) ([#17035](https://github.com/community-scripts/ProxmoxVE/pull/17035))
|
||||||
|
- snapotter: seed AI venv base packages on arm64, warn amd64 has no working CPU bundle [@MickLesk](https://github.com/MickLesk) ([#16903](https://github.com/community-scripts/ProxmoxVE/pull/16903))
|
||||||
|
- tolgee: bump required JDK from 21 to 25 [@MickLesk](https://github.com/MickLesk) ([#17005](https://github.com/community-scripts/ProxmoxVE/pull/17005))
|
||||||
|
- romm: write real version into backend/__version__.py placeholder [@MickLesk](https://github.com/MickLesk) ([#17009](https://github.com/community-scripts/ProxmoxVE/pull/17009))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor FileFlows: Stop Spinner before read -rp / Switch from "Node" to "Agent" [@MickLesk](https://github.com/MickLesk) ([#17007](https://github.com/community-scripts/ProxmoxVE/pull/17007))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- update helper: follow renamed ct/ scripts instead of curling a 404 [@MickLesk](https://github.com/MickLesk) ([core#22](https://github.com/community-scripts/core/pull/22))
|
||||||
|
- Use Proxmox for a template before reaching for linuxcontainers.org [@MickLesk](https://github.com/MickLesk) ([core#23](https://github.com/community-scripts/core/pull/23))
|
||||||
|
- implement exponential backoff for curl retries in _cs_curl_retry function [@MickLesk](https://github.com/MickLesk) ([core#26](https://github.com/community-scripts/core/pull/26))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- update-apps: follow renamed ct/ scripts instead of erroring out [@MickLesk](https://github.com/MickLesk) ([#16991](https://github.com/community-scripts/ProxmoxVE/pull/16991))
|
||||||
|
|
||||||
## 2026-09-04
|
## 2026-09-04
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix(shlink): preserve servers.json across web-client updates [@Corgei](https://github.com/Corgei) ([#17023](https://github.com/community-scripts/ProxmoxVE/pull/17023))
|
||||||
- fix-update-authentik-2026.8.1 [@thieneret](https://github.com/thieneret) ([#16999](https://github.com/community-scripts/ProxmoxVE/pull/16999))
|
- fix-update-authentik-2026.8.1 [@thieneret](https://github.com/thieneret) ([#16999](https://github.com/community-scripts/ProxmoxVE/pull/16999))
|
||||||
|
- Fix npm v12 allow-git/allow-remote restrictions across affected scripts [@MickLesk](https://github.com/MickLesk) ([#17014](https://github.com/community-scripts/ProxmoxVE/pull/17014))
|
||||||
|
- 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))
|
||||||
|
|
||||||
### 💾 Core
|
### 💾 Core
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ function update_script() {
|
|||||||
msg_info "Moving blueprints to presistent directory"
|
msg_info "Moving blueprints to presistent directory"
|
||||||
cp -r /opt/authentik/blueprints /opt/authentik-data/
|
cp -r /opt/authentik/blueprints /opt/authentik-data/
|
||||||
rm -r /opt/authentik/blueprints
|
rm -r /opt/authentik/blueprints
|
||||||
chown -Rf authentik:authentik /opt/authentik-data
|
$STD find /opt/authentik-data -path '*/lost+found' -prune -o -exec chown authentik:authentik {} +
|
||||||
yq -i ".blueprints_dir = \"/opt/authentik-data/blueprints\"" /etc/authentik/config.yml
|
yq -i ".blueprints_dir = \"/opt/authentik-data/blueprints\"" /etc/authentik/config.yml
|
||||||
msg_ok "blueprints moved to presistent directory"
|
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."
|
msg_warn "The blueprints provided by authentik are always overwritten when updated! Only manually created custom blueprints remain unchanged between updates."
|
||||||
@@ -155,8 +155,8 @@ function update_script() {
|
|||||||
|
|
||||||
cp -r /opt/authentik/blueprints /opt/authentik-data/
|
cp -r /opt/authentik/blueprints /opt/authentik-data/
|
||||||
rm -r /opt/authentik/blueprints
|
rm -r /opt/authentik/blueprints
|
||||||
chown -Rf authentik:authentik /opt/authentik-data
|
$STD find /opt/authentik-data -path '*/lost+found' -prune -o -exec chown authentik:authentik {} +
|
||||||
|
|
||||||
if [[ $MAJOR == 2026 && $MINOR -lt 8 ]]; then
|
if [[ $MAJOR == 2026 && $MINOR -lt 8 ]]; then
|
||||||
msg_info "Updating Worker and Server config (from $MAJOR.$MINOR)"
|
msg_info "Updating Worker and Server config (from $MAJOR.$MINOR)"
|
||||||
cat <<EOF >>/etc/default/authentik-server
|
cat <<EOF >>/etc/default/authentik-server
|
||||||
@@ -178,8 +178,8 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Worker and Server config"
|
msg_info "Updating Worker and Server config"
|
||||||
sed -i "s|/dev/shm$|/dev/shm/authentik-server|g" /etc/default/authentik-server
|
sed -i "s|/dev/shm\/\?$|/dev/shm/authentik-server|g" /etc/default/authentik-server
|
||||||
sed -i "s|/dev/shm$|/dev/shm/authentik-worker|g" /etc/default/authentik-worker
|
sed -i "s|/dev/shm\/\?$|/dev/shm/authentik-worker|g" /etc/default/authentik-worker
|
||||||
msg_ok "Updated Worker and Server config"
|
msg_ok "Updated Worker and Server config"
|
||||||
|
|
||||||
msg_info "Updating services"
|
msg_info "Updating services"
|
||||||
@@ -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 /opt/authentik/tests/GeoLite2-City-Test.mmdb /opt/authentik-data/geoip/GeoLite2-City.mmdb; \
|
||||||
cp -r /opt/authentik/blueprints /opt/authentik-data/; \
|
cp -r /opt/authentik/blueprints /opt/authentik-data/; \
|
||||||
rm -r /opt/authentik/blueprints; \
|
rm -r /opt/authentik/blueprints; \
|
||||||
chown -Rf authentik:authentik /opt/authentik-data"
|
find /opt/authentik-data -path '*/lost+found' -prune -o -exec chown authentik:authentik {} +"
|
||||||
msg_ok "Attached data storage volume"
|
msg_ok "Attached data storage volume"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Rebuilding Frontend"
|
msg_info "Rebuilding Frontend"
|
||||||
cd /opt/baserow/web-frontend
|
cd /opt/baserow/web-frontend
|
||||||
$STD npm install
|
$STD npm install --allow-remote=all
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Rebuilt Frontend"
|
msg_ok "Rebuilt Frontend"
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Configuring BentoPDF"
|
msg_info "Configuring BentoPDF"
|
||||||
cd /opt/bentopdf
|
cd /opt/bentopdf
|
||||||
$STD npm ci --no-audit --no-fund
|
$STD npm ci --no-audit --no-fund --allow-remote=all
|
||||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
export SIMPLE_MODE=true
|
export SIMPLE_MODE=true
|
||||||
export VITE_USE_CDN=true
|
export VITE_USE_CDN=true
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating CryptPad"
|
msg_info "Updating CryptPad"
|
||||||
cd /opt/cryptpad
|
cd /opt/cryptpad
|
||||||
$STD npm ci
|
$STD npm ci --allow-git=all
|
||||||
$STD npm run install:components
|
$STD npm run install:components
|
||||||
if [ -f "/opt/cryptpad/install-onlyoffice.sh" ]; then
|
if [ -f "/opt/cryptpad/install-onlyoffice.sh" ]; then
|
||||||
$STD bash /opt/cryptpad/install-onlyoffice.sh --accept-license
|
$STD bash /opt/cryptpad/install-onlyoffice.sh --accept-license
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
cd /opt/librechat
|
cd /opt/librechat
|
||||||
$STD npm ci
|
$STD npm ci --allow-remote=all
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Pangolin"
|
msg_info "Updating Pangolin"
|
||||||
cd /opt/pangolin
|
cd /opt/pangolin
|
||||||
$STD npm ci
|
$STD npm ci --allow-remote=all
|
||||||
$STD npm run set:pg
|
$STD npm run set:pg
|
||||||
$STD npm run set:oss
|
$STD npm run set:oss
|
||||||
rm -rf server/private
|
rm -rf server/private
|
||||||
|
|||||||
171
ct/poznote.sh
171
ct/poznote.sh
@@ -35,6 +35,7 @@ function update_script() {
|
|||||||
if check_for_gh_release "poznote" "timothepoznanski/poznote"; then
|
if check_for_gh_release "poznote" "timothepoznanski/poznote"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
|
systemctl stop poznote-reminder-worker poznote-s3-backup-worker 2>/dev/null || true
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
create_backup /var/www/html/data
|
create_backup /var/www/html/data
|
||||||
@@ -48,8 +49,178 @@ function update_script() {
|
|||||||
|
|
||||||
restore_backup
|
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"
|
msg_info "Starting Service"
|
||||||
systemctl start nginx
|
systemctl start nginx
|
||||||
|
systemctl enable -q --now poznote-reminder-worker poznote-s3-backup-worker
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ function update_script() {
|
|||||||
/opt/romm/frontend/dist/assets/ruffle
|
/opt/romm/frontend/dist/assets/ruffle
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
||||||
|
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||||
|
|
||||||
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '1.*.py' -delete 2>/dev/null || true
|
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '1.*.py' -delete 2>/dev/null || true
|
||||||
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '2.0.0_.py' -delete 2>/dev/null || true
|
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '2.0.0_.py' -delete 2>/dev/null || true
|
||||||
|
|||||||
@@ -61,7 +61,12 @@ function update_script() {
|
|||||||
|
|
||||||
if [[ -d /opt/shlink-web-client ]]; then
|
if [[ -d /opt/shlink-web-client ]]; then
|
||||||
if check_for_gh_release "shlink-web-client" "shlinkio/shlink-web-client"; then
|
if check_for_gh_release "shlink-web-client" "shlinkio/shlink-web-client"; then
|
||||||
|
create_backup /opt/shlink-web-client/servers.json
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shlink-web-client" "shlinkio/shlink-web-client" "prebuild" "latest" "/opt/shlink-web-client" "shlink-web-client_*_dist.zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shlink-web-client" "shlinkio/shlink-web-client" "prebuild" "latest" "/opt/shlink-web-client" "shlink-web-client_*_dist.zip"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
msg_ok "Updated Web Client"
|
msg_ok "Updated Web Client"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -88,6 +88,13 @@ EOF
|
|||||||
msg_info "Updating SnapOtter"
|
msg_info "Updating SnapOtter"
|
||||||
$STD uv python install 3.11
|
$STD uv python install 3.11
|
||||||
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
||||||
|
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||||
|
$STD uv pip install --python /opt/snapotter_data/ai/venv/bin/python \
|
||||||
|
numpy==1.26.4 Pillow==12.3.0 opencv-python-headless==4.10.0.84 fonttools \
|
||||||
|
'huggingface-hub[hf_xet,hf_transfer]==0.36.2'
|
||||||
|
else
|
||||||
|
msg_warn "SnapOtter AI Features have no working CPU-only bundle for amd64 upstream (published bundle is Python 3.12/GPU-CUDA only). Use the official Docker image instead: https://docs.snapotter.com"
|
||||||
|
fi
|
||||||
ln -sfn /opt/snapotter /app
|
ln -sfn /opt/snapotter /app
|
||||||
msg_ok "Updated SnapOtter"
|
msg_ok "Updated SnapOtter"
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ function update_script() {
|
|||||||
systemctl stop tolgee
|
systemctl stop tolgee
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
JAVA_VERSION="25" setup_java
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tolgee" "tolgee/tolgee-platform" "singlefile" "latest" "/opt/tolgee" "tolgee-*.jar"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tolgee" "tolgee/tolgee-platform" "singlefile" "latest" "/opt/tolgee" "tolgee-*.jar"
|
||||||
find /opt/tolgee -maxdepth 1 -type f -name 'tolgee-*.jar' -exec mv {} /opt/tolgee/tolgee.jar \;
|
find /opt/tolgee -maxdepth 1 -type f -name 'tolgee-*.jar' -exec mv {} /opt/tolgee/tolgee.jar \;
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ msg_ok "Installed Backend Dependencies"
|
|||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
cd /opt/baserow/web-frontend
|
cd /opt/baserow/web-frontend
|
||||||
NODE_OPTIONS="--max-old-space-size=4096" $STD npm install --legacy-peer-deps
|
NODE_OPTIONS="--max-old-space-size=4096" $STD npm install --legacy-peer-deps --allow-remote=all
|
||||||
NODE_OPTIONS="--max-old-space-size=4096" $STD npm run build
|
NODE_OPTIONS="--max-old-space-size=4096" $STD npm run build
|
||||||
msg_ok "Built Frontend"
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "
|
|||||||
|
|
||||||
msg_info "Setup BentoPDF"
|
msg_info "Setup BentoPDF"
|
||||||
cd /opt/bentopdf
|
cd /opt/bentopdf
|
||||||
$STD npm ci --no-audit --no-fund
|
$STD npm ci --no-audit --no-fund --allow-remote=all
|
||||||
cp ./.env.example ./.env.production
|
cp ./.env.example ./.env.production
|
||||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
export SIMPLE_MODE=true
|
export SIMPLE_MODE=true
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
|||||||
|
|
||||||
msg_info "Setup CryptPad"
|
msg_info "Setup CryptPad"
|
||||||
cd /opt/cryptpad
|
cd /opt/cryptpad
|
||||||
$STD npm ci
|
$STD npm ci --allow-git=all
|
||||||
$STD npm run install:components
|
$STD npm run install:components
|
||||||
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
|
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
|
||||||
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
|
|||||||
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
||||||
$STD rm -rf /opt/fileflows/Server/runtimes/win-*
|
$STD rm -rf /opt/fileflows/Server/runtimes/win-*
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you want to install FileFlows Server or Node? (S/N): " install_server
|
read -r -p "${TAB3}Do you want to install FileFlows Server or Agent? (S/A): " install_server
|
||||||
|
|
||||||
if [[ "$install_server" =~ ^[Ss]$ ]]; then
|
if [[ "$install_server" =~ ^[Ss]$ ]]; then
|
||||||
msg_info "Installing FileFlows Server"
|
msg_info "Installing FileFlows Server"
|
||||||
@@ -54,15 +54,23 @@ if [[ "$install_server" =~ ^[Ss]$ ]]; then
|
|||||||
systemctl enable -q --now fileflows
|
systemctl enable -q --now fileflows
|
||||||
msg_ok "Installed FileFlows Server"
|
msg_ok "Installed FileFlows Server"
|
||||||
else
|
else
|
||||||
msg_info "Installing FileFlows Node"
|
msg_info "Installing FileFlows Agent"
|
||||||
|
stop_spinner
|
||||||
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
||||||
while [[ -z "${server_url// /}" ]]; do
|
while [[ -z "${server_url// /}" ]]; do
|
||||||
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
||||||
done
|
done
|
||||||
cd /opt/fileflows/Node
|
cd /opt/fileflows/Agent
|
||||||
$STD dotnet FileFlows.Node.dll --server "$server_url" --systemd install --root true
|
before_units="$(systemctl list-unit-files 'fileflows*' --no-legend 2>/dev/null | awk '{print $1}' | sort || true)"
|
||||||
systemctl enable -q --now fileflows-node
|
$STD dotnet FileFlows.Agent.dll --server "$server_url" --systemd install --root true
|
||||||
msg_ok "Installed FileFlows Node"
|
after_units="$(systemctl list-unit-files 'fileflows*' --no-legend 2>/dev/null | awk '{print $1}' | sort || true)"
|
||||||
|
agent_unit="$(comm -13 <(echo "$before_units") <(echo "$after_units") | head -n1)"
|
||||||
|
if [[ -n "$agent_unit" ]]; then
|
||||||
|
systemctl enable -q --now "$agent_unit"
|
||||||
|
else
|
||||||
|
msg_warn "Could not detect the FileFlows Agent systemd unit; start it manually (systemctl list-unit-files 'fileflows*')."
|
||||||
|
fi
|
||||||
|
msg_ok "Installed FileFlows Agent"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -362,6 +362,7 @@ Restart=always
|
|||||||
RestartSec=1
|
RestartSec=1
|
||||||
User=root
|
User=root
|
||||||
EnvironmentFile=/etc/frigate.env
|
EnvironmentFile=/etc/frigate.env
|
||||||
|
ExecStartPre=+/usr/bin/systemctl restart go2rtc.service
|
||||||
ExecStartPre=+rm -f /dev/shm/logs/frigate/current
|
ExecStartPre=+rm -f /dev/shm/logs/frigate/current
|
||||||
ExecStart=/bin/bash -c "bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run 2> >(/usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S ' >&2) | /usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S '"
|
ExecStart=/bin/bash -c "bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run 2> >(/usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S ' >&2) | /usr/bin/ts '%%Y-%%m-%%d %%H:%%M:%%.S '"
|
||||||
StandardOutput=file:/dev/shm/logs/frigate/current
|
StandardOutput=file:/dev/shm/logs/frigate/current
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ Environment=IVENTOY_API_ALL=1
|
|||||||
Environment=IVENTOY_AUTO_RUN=1
|
Environment=IVENTOY_AUTO_RUN=1
|
||||||
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
|
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||||
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
|
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||||
ExecStart=/bin/sh /opt/iventoy/iventoy.sh -R start
|
ExecStart=/bin/bash /opt/iventoy/iventoy.sh -R start
|
||||||
ExecStop=/bin/sh /opt/iventoy/iventoy.sh stop
|
ExecStop=/bin/bash /opt/iventoy/iventoy.sh stop
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ fetch_and_deploy_gh_release "rag-api" "danny-avila/rag_api" "tarball"
|
|||||||
|
|
||||||
msg_info "Installing LibreChat Dependencies"
|
msg_info "Installing LibreChat Dependencies"
|
||||||
cd /opt/librechat
|
cd /opt/librechat
|
||||||
$STD npm ci
|
$STD npm ci --allow-remote=all
|
||||||
msg_ok "Installed LibreChat Dependencies"
|
msg_ok "Installed LibreChat Dependencies"
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ SECRET_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32)
|
|||||||
BADGER_VERSION=$(get_latest_github_release "fosrl/badger" "false")
|
BADGER_VERSION=$(get_latest_github_release "fosrl/badger" "false")
|
||||||
cd /opt/pangolin
|
cd /opt/pangolin
|
||||||
mkdir -p /opt/pangolin/config/{traefik,db,letsencrypt,logs}
|
mkdir -p /opt/pangolin/config/{traefik,db,letsencrypt,logs}
|
||||||
$STD npm ci
|
$STD npm ci --allow-remote=all
|
||||||
$STD npm run set:pg
|
$STD npm run set:pg
|
||||||
$STD npm run set:oss
|
$STD npm run set:oss
|
||||||
rm -rf server/private
|
rm -rf server/private
|
||||||
|
|||||||
@@ -28,16 +28,73 @@ touch /var/www/html/data/database/poznote.db
|
|||||||
chown -R www-data:www-data /var/www/html
|
chown -R www-data:www-data /var/www/html
|
||||||
msg_ok "Deployed Poznote"
|
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"
|
msg_info "Configuring Nginx"
|
||||||
PHP_SOCK=$(get_php_fpm_socket)
|
PHP_SOCK=$(get_php_fpm_socket)
|
||||||
cat <<EOF >/etc/nginx/sites-available/poznote
|
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 {
|
server {
|
||||||
listen 8040;
|
listen 8040;
|
||||||
root /var/www/html;
|
root /var/www/html;
|
||||||
index index.php index.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 / {
|
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$ {
|
location ~ \.php$ {
|
||||||
@@ -45,16 +102,93 @@ server {
|
|||||||
fastcgi_pass unix:${PHP_SOCK};
|
fastcgi_pass unix:${PHP_SOCK};
|
||||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||||
fastcgi_param DOCUMENT_ROOT \$document_root;
|
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;
|
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
|
EOF
|
||||||
nginx_enable_site poznote
|
nginx_enable_site poznote
|
||||||
msg_ok "Configured Nginx"
|
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
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
cleanup_lxc
|
cleanup_lxc
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
|
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
|
||||||
|
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||||
|
|
||||||
msg_info "Creating environment file"
|
msg_info "Creating environment file"
|
||||||
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf
|
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ $STD apt install -y \
|
|||||||
python3 \
|
python3 \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
gcc \
|
gcc \
|
||||||
g++
|
g++ \
|
||||||
|
libavif-bin \
|
||||||
|
libavif-dev \
|
||||||
|
libopencv-dev \
|
||||||
|
python3-opencv \
|
||||||
|
libgles2
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PYTHON_VERSION="3.11" setup_uv
|
PYTHON_VERSION="3.11" setup_uv
|
||||||
@@ -59,11 +64,13 @@ msg_info "Setting up Python Environment"
|
|||||||
mkdir -p /opt/snapotter_data/ai/models/rembg
|
mkdir -p /opt/snapotter_data/ai/models/rembg
|
||||||
$STD uv python install 3.11
|
$STD uv python install 3.11
|
||||||
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
||||||
#if [[ -f /opt/snapotter/packages/ai/python/requirements.txt ]]; then
|
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||||
# $STD uv pip install \
|
$STD uv pip install --python /opt/snapotter_data/ai/venv/bin/python \
|
||||||
# --python /opt/snapotter_data/ai/venv/bin/python \
|
numpy==1.26.4 Pillow==12.3.0 opencv-python-headless==4.10.0.84 fonttools \
|
||||||
# -r /opt/snapotter/packages/ai/python/requirements.txt
|
'huggingface-hub[hf_xet,hf_transfer]==0.36.2'
|
||||||
#fi
|
else
|
||||||
|
msg_warn "SnapOtter AI Features have no working CPU-only bundle for amd64 upstream (published bundle is Python 3.12/GPU-CUDA only). Use the official Docker image instead: https://docs.snapotter.com"
|
||||||
|
fi
|
||||||
ln -sfn /opt/snapotter /app
|
ln -sfn /opt/snapotter /app
|
||||||
msg_ok "Set up Python Environment"
|
msg_ok "Set up Python Environment"
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
JAVA_VERSION="21" setup_java
|
JAVA_VERSION="25" setup_java
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
PG_DB_NAME="tolgee" PG_DB_USER="tolgee" setup_postgresql_db
|
PG_DB_NAME="tolgee" PG_DB_USER="tolgee" setup_postgresql_db
|
||||||
|
|
||||||
|
|||||||
@@ -155,13 +155,29 @@ function sanitize_service_name() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function validate_service_script() {
|
function script_exists() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
sanitize_service_name "$name" || return 1
|
sanitize_service_name "$name" || return 1
|
||||||
curl -fsSL --max-time 10 -o /dev/null \
|
curl -fsSL --max-time 10 -o /dev/null \
|
||||||
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${name}.sh" 2>/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() {
|
function detect_service() {
|
||||||
local container="$1"
|
local container="$1"
|
||||||
local tmpdir update_file
|
local tmpdir update_file
|
||||||
@@ -484,12 +500,18 @@ for container in $CHOICE; do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! validate_service_script "${service}"; then
|
resolved_service="$(resolve_service_script "${service}")"
|
||||||
|
if [ -z "${resolved_service}" ]; then
|
||||||
echo -e "${RD}[ERROR]${CL} Service '${service}' does not resolve to ct/${service}.sh"
|
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_result "$container" "${service}" "ERROR" "No matching ct/${service}.sh script found"
|
||||||
log_write "Container $container: ERROR — ct/${service}.sh not found"
|
log_write "Container $container: ERROR — ct/${service}.sh not found"
|
||||||
continue
|
continue
|
||||||
fi
|
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}"
|
echo -e "${BL}[INFO]${CL} Detected service: ${GN}${service}${CL}"
|
||||||
log_write "Container $container: detected service '${service}'"
|
log_write "Container $container: detected service '${service}'"
|
||||||
|
|||||||
Reference in New Issue
Block a user