Compare commits

...

13 Commits

Author SHA1 Message Date
MickLesk
cec4a4a69c Checkmk: detect OMD version suffix dynamically on update 2026-05-15 21:26:24 +02:00
community-scripts-pr-app[bot]
e68ea29996 Update CHANGELOG.md (#14485)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-14 18:19:03 +00:00
push-app-to-main[bot]
79926030ae CLIProxyAPI (#14443)
* Add cliproxyapi (ct)

* Fix success message capitalization in cliproxyapi.sh

* Update CLIProxyAPI installation script

Generate random management password and API key for CLIProxyAPI configuration.

---------

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>
2026-05-14 20:18:34 +02:00
community-scripts-pr-app[bot]
4fde0c0427 Update CHANGELOG.md (#14476)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 20:16:50 +00:00
CanbiZ (MickLesk)
0a81ff53fd tools.func: encode GitHub tag, refine pin logic, add Codeberg (#14473)
* Encode GitHub tag, refine pin logic, add Codeberg

Encode pinned GitHub tag slashes for API requests and avoid stripping a leading 'v' unless followed by a digit. Refactor pinned-version handling to match clean tags to raw tags, report missing pins, and set CHECK_UPDATE_RELEASE/messages appropriately. Add a new check_for_codeberg_release function to query Codeberg releases (uses jq, DNS check, handles legacy migration, pinned/latest comparison) so updates can be detected from Codeberg-hosted repos.

* Update tools.func
2026-05-13 22:16:13 +02:00
community-scripts-pr-app[bot]
cd5816b263 Update CHANGELOG.md (#14472)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 14:18:20 +00:00
Michel Roegl-Brunner
d18d473583 Fixes #14435, Broken Manifold update (#14468) 2026-05-13 16:17:37 +02:00
community-scripts-pr-app[bot]
af529716b1 Update CHANGELOG.md (#14467)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 11:04:07 +00:00
community-scripts-pr-app[bot]
2c950db3ac Update CHANGELOG.md (#14466)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 11:03:37 +00:00
Slaviša Arežina
904f0bdd3c fix update (#14465) 2026-05-13 13:03:26 +02:00
CanbiZ (MickLesk)
de08fc45d4 fix(reactive-resume): fix PDF generation timeout in LXC containers (#14278) (#14416)
Two changes to resolve Puppeteer waitForFunction timeout (5000ms exceeded):

1. Use 127.0.0.1 instead of localhost for PRINTER_ENDPOINT to avoid
   potential IPv6 resolution issues in LXC containers where 'localhost'
   may resolve to ::1 while Chromium only listens on 127.0.0.1.

2. Add --no-zygote flag to the chromium-printer service. In LXC
   containers the Zygote process (used by Chrome for process forking)
   can fail silently, causing Puppeteer page rendering to hang until
   the printer timeout is exceeded.
2026-05-13 13:03:09 +02:00
community-scripts-pr-app[bot]
9e009c1dfd Update CHANGELOG.md (#14464)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 09:28:53 +00:00
James Myatt
03ca1543d9 (calibre-web) Add --no-sandbox for PDF conversion (#14461) 2026-05-13 11:28:17 +02:00
10 changed files with 183 additions and 21 deletions

View File

@@ -461,6 +461,29 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-05-14
### 🆕 New Scripts
- CLIProxyAPI ([#14443](https://github.com/community-scripts/ProxmoxVE/pull/14443))
## 2026-05-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix: Broken Manifold update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14468](https://github.com/community-scripts/ProxmoxVE/pull/14468))
- SoulSync: Fix update function [@tremor021](https://github.com/tremor021) ([#14465](https://github.com/community-scripts/ProxmoxVE/pull/14465))
- Reactive-Resume: fix PDF generation timeout in LXC containers [@MickLesk](https://github.com/MickLesk) ([#14416](https://github.com/community-scripts/ProxmoxVE/pull/14416))
- (calibre-web) Add --no-sandbox for PDF conversion [@jamesmyatt](https://github.com/jamesmyatt) ([#14461](https://github.com/community-scripts/ProxmoxVE/pull/14461))
### 💾 Core
- #### 🔧 Refactor
- tools.func: encode GitHub tag, refine pin logic, add Codeberg [@MickLesk](https://github.com/MickLesk) ([#14473](https://github.com/community-scripts/ProxmoxVE/pull/14473))
## 2026-05-12
### 🆕 New Scripts

View File

@@ -35,7 +35,12 @@ function update_script() {
$STD omd cp monitoring monitoringbackup
curl_with_retry "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb" "/opt/checkmk.deb"
$STD apt install -y /opt/checkmk.deb
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
OMD_VERSION=$(omd versions 2>/dev/null | grep "^${RELEASE}" | awk '{print $1}')
if [[ -z "${OMD_VERSION}" ]]; then
msg_error "Could not find installed OMD version for release ${RELEASE}"
exit 1
fi
$STD omd --force -V "${OMD_VERSION}" update --conflict=install monitoring
$STD omd start monitoring
$STD omd -f rm monitoringbackup
$STD omd cleanup

55
ct/cliproxyapi.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/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: mathiasnagler
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/router-for-me/CLIProxyAPI
APP="CLIProxyAPI"
var_tags="${var_tags:-ai;proxy}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
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/cliproxyapi ]]; then
msg_error "No CLIProxyAPI Installation Found!"
exit
fi
if check_for_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI"; then
msg_info "Stopping CLIProxyAPI"
systemctl stop cliproxyapi
msg_ok "Stopped CLIProxyAPI"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_amd64.tar.gz"
msg_info "Starting CLIProxyAPI"
systemctl start cliproxyapi
msg_ok "Started CLIProxyAPI"
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}:8317${CL}"

6
ct/headers/cliproxyapi Normal file
View File

@@ -0,0 +1,6 @@
________ ________ ___ ____ ____
/ ____/ / / _/ __ \_________ _ ____ __/ | / __ \/ _/
/ / / / / // /_/ / ___/ __ \| |/_/ / / / /| | / /_/ // /
/ /___/ /____/ // ____/ / / /_/ /> </ /_/ / ___ |/ ____// /
\____/_____/___/_/ /_/ \____/_/|_|\__, /_/ |_/_/ /___/
/____/

View File

@@ -55,9 +55,20 @@ function update_script() {
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
msg_info "Installing Manyfold"
msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
chown -R manyfold:manyfold /opt/manyfold
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Installing Manyfold"
$STD npm install --global corepack
$STD corepack enable yarn
sudo -u manyfold bash -c '
source /opt/manyfold/.env
@@ -66,7 +77,6 @@ function update_script() {
cd /opt/manyfold/app
gem install bundler sidekiq foreman
bundle install
corepack enable yarn
corepack prepare '"$YARN_VERSION"' --activate
corepack use '"$YARN_VERSION"'
bin/rails db:migrate
@@ -74,16 +84,6 @@ function update_script() {
'
msg_ok "Installed Manyfold"
msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Restarting Services"
source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"

View File

@@ -44,7 +44,7 @@ function update_script() {
msg_info "Updating Python Dependencies"
cd /opt/soulsync
$STD uv venv --clear /opt/soulsync/.venv --python 3.11
$STD /opt/soulsync/.venv/bin/pip install -r requirements.txt
$STD uv pip install -r requirements.txt
msg_ok "Updated Python Dependencies"
mv /opt/soulsync-config.bak /opt/soulsync/config

View File

@@ -52,6 +52,7 @@ After=network.target
[Service]
Type=simple
User=root
Environment="QTWEBENGINE_CHROMIUM_FLAGS=--no-sandbox"
WorkingDirectory=/opt/calibre-web
ExecStart=/opt/calibre-web/.venv/bin/python /opt/calibre-web/cps.py
Restart=on-failure

View File

@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: mathiasnagler
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/router-for-me/CLIProxyAPI
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 openssl
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_amd64.tar.gz"
msg_info "Configuring CLIProxyAPI"
MANAGEMENT_PASSWORD=$(openssl rand -hex 32)
API_KEY="sk-$(openssl rand -hex 16)"
cat <<EOF >/opt/cliproxyapi/config.yaml
host: ""
port: 8317
auth-dir: "/root/.cli-proxy-api"
remote-management:
allow-remote: true
secret-key: "${MANAGEMENT_PASSWORD}"
api-keys:
- "${API_KEY}"
request-retry: 3
quota-exceeded:
switch-project: true
switch-preview-model: true
routing:
strategy: "round-robin"
EOF
msg_ok "Configured CLIProxyAPI"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cliproxyapi.service
[Unit]
Description=CLIProxyAPI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/cliproxyapi
ExecStart=/opt/cliproxyapi/cli-proxy-api
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cliproxyapi
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -55,7 +55,7 @@ DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAM
AUTH_SECRET=${AUTH_SECRET}
# Printer (headless Chromium for PDF generation)
PRINTER_ENDPOINT=http://localhost:9222
PRINTER_ENDPOINT=http://127.0.0.1:9222
# Storage: uses local filesystem (/opt/reactive-resume/data) when S3 is not configured
# S3_ACCESS_KEY_ID=
@@ -92,7 +92,7 @@ After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/chromium --headless --disable-gpu --no-sandbox --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222
ExecStart=/usr/bin/chromium --headless --disable-gpu --no-sandbox --no-zygote --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222
Restart=always
RestartSec=5

View File

@@ -2394,11 +2394,12 @@ check_for_gh_release() {
# For pinned versions, query the specific release tag directly
if [[ -n "$pinned_version_in" ]]; then
local pinned_version_encoded="${pinned_version_in//\//%2F}"
http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gh_check.json \
-H 'Accept: application/vnd.github+json' \
-H 'X-GitHub-Api-Version: 2022-11-28' \
"${header_args[@]}" \
"https://api.github.com/repos/${source}/releases/tags/${pinned_version_in}" 2>/dev/null) || true
"https://api.github.com/repos/${source}/releases/tags/${pinned_version_encoded}" 2>/dev/null) || true
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
releases_json="[$(</tmp/gh_check.json)]"
@@ -2520,11 +2521,19 @@ check_for_gh_release() {
rm -f "${legacy_files[0]}"
fi
fi
current="${current#v}"
if [[ "$current" =~ ^v[0-9] ]]; then
current="${current:1}"
fi
# Pinned version handling
if [[ -n "$pinned_version_in" ]]; then
local pin_clean="${pinned_version_in#v}"
local pin_clean
if [[ "$pinned_version_in" =~ ^v[0-9] ]]; then
pin_clean="${pinned_version_in:1}"
else
pin_clean="$pinned_version_in"
fi
local match_raw=""
for i in "${!clean_tags[@]}"; do
if [[ "${clean_tags[$i]}" == "$pin_clean" ]]; then
@@ -2562,7 +2571,6 @@ check_for_gh_release() {
msg_ok "No update available: ${app} (${latest_clean})"
return 1
}
# ------------------------------------------------------------------------------
# Checks for new Codeberg release (latest tag).
#