mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-07 03:15:57 +01:00
Compare commits
11 Commits
fix/databa
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97ee4369bf | ||
|
|
10b47eae33 | ||
|
|
c61b0e766a | ||
|
|
9ff1d088c5 | ||
|
|
be803ced6f | ||
|
|
5949e9e32e | ||
|
|
bb3276bbbd | ||
|
|
b7a09989cb | ||
|
|
039d046649 | ||
|
|
58301651e4 | ||
|
|
b848c2d1bf |
@@ -410,18 +410,27 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-03-07
|
||||
|
||||
## 2026-03-06
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- RustDesk Server: Fix update script [@tremor021](https://github.com/tremor021) ([#12625](https://github.com/community-scripts/ProxmoxVE/pull/12625))
|
||||
- [Node-RED] Restart service after update [@Aurelien30000](https://github.com/Aurelien30000) ([#12621](https://github.com/community-scripts/ProxmoxVE/pull/12621))
|
||||
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
|
||||
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Semaphore: Move from BoltDB to SQLite [@tremor021](https://github.com/tremor021) ([#12624](https://github.com/community-scripts/ProxmoxVE/pull/12624))
|
||||
|
||||
## 2026-03-05
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -31,6 +31,10 @@ function update_script() {
|
||||
msg_info "Updating Node-RED"
|
||||
$STD npm install -g --unsafe-perm node-red
|
||||
msg_ok "Updated Node-RED"
|
||||
|
||||
msg_info "Restarting Node-RED"
|
||||
$STD rc-service nodered restart
|
||||
msg_ok "Restarted Node-RED"
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
@@ -38,9 +38,9 @@ function update_script() {
|
||||
fi
|
||||
msg_info "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||
|
||||
msg_info "Starting services"
|
||||
|
||||
@@ -28,6 +28,34 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
|
||||
msg_warn "WARNING: Due to bugs with BoltDB database, update script will move your application"
|
||||
msg_warn "to use SQLite database instead. Unfortunately, this will reset your application and make it a fresh"
|
||||
msg_warn "installation. All your data will be lost!"
|
||||
echo ""
|
||||
read -r -p "${TAB3}Do you want to continue? (y/N): " CONFIRM
|
||||
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||
exit 0
|
||||
else
|
||||
msg_info "Moving from BoltDB to SQLite"
|
||||
systemctl stop semaphore
|
||||
rm -rf /opt/semaphore/semaphore_db.bolt
|
||||
sed -i \
|
||||
-e 's|"bolt": {|"sqlite": {|' \
|
||||
-e 's|/semaphore_db.bolt"|/database.sqlite"|' \
|
||||
-e '/semaphore_db.bolt/d' \
|
||||
-e '/"dialect"/d' \
|
||||
-e '/^ },$/a\ "dialect": "sqlite",' \
|
||||
/opt/semaphore/config.json
|
||||
SEM_PW=$(cat ~/semaphore.creds)
|
||||
systemctl start semaphore
|
||||
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password "${SEM_PW}" --config /opt/semaphore/config.json
|
||||
|
||||
msg_ok "Moved from BoltDB to SQLite"
|
||||
fi
|
||||
fi
|
||||
|
||||
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop semaphore
|
||||
|
||||
@@ -29,8 +29,11 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE="3.0.3"
|
||||
if check_for_gh_release "wealthfolio" "afadil/wealthfolio" "${RELEASE}"; then
|
||||
if grep -q '^WF_CORS_ALLOW_ORIGINS=\*$' /opt/wealthfolio/.env; then
|
||||
sed -i "s|^WF_CORS_ALLOW_ORIGINS=\*$|WF_CORS_ALLOW_ORIGINS=http://${LOCAL_IP}:8080|" /opt/wealthfolio/.env
|
||||
fi
|
||||
|
||||
if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop wealthfolio
|
||||
msg_ok "Stopped Service"
|
||||
@@ -40,7 +43,7 @@ function update_script() {
|
||||
cp /opt/wealthfolio/.env /opt/wealthfolio_env_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wealthfolio" "afadil/wealthfolio" "tarball" "v${RELEASE}"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wealthfolio" "afadil/wealthfolio" "tarball"
|
||||
|
||||
msg_info "Building Frontend (patience)"
|
||||
cd /opt/wealthfolio
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-03-06T12:10:39Z",
|
||||
"generated": "2026-03-07T00:19:56Z",
|
||||
"versions": [
|
||||
{
|
||||
"slug": "2fauth",
|
||||
@@ -151,9 +151,9 @@
|
||||
{
|
||||
"slug": "booklore",
|
||||
"repo": "booklore-app/BookLore",
|
||||
"version": "v2.0.5",
|
||||
"version": "v2.0.6",
|
||||
"pinned": false,
|
||||
"date": "2026-03-01T16:13:13Z"
|
||||
"date": "2026-03-06T19:16:29Z"
|
||||
},
|
||||
{
|
||||
"slug": "bookstack",
|
||||
@@ -193,9 +193,9 @@
|
||||
{
|
||||
"slug": "checkmate",
|
||||
"repo": "bluewave-labs/Checkmate",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"pinned": false,
|
||||
"date": "2026-03-04T19:51:22Z"
|
||||
"date": "2026-03-06T21:18:36Z"
|
||||
},
|
||||
{
|
||||
"slug": "cleanuparr",
|
||||
@@ -501,9 +501,9 @@
|
||||
{
|
||||
"slug": "grocy",
|
||||
"repo": "grocy/grocy",
|
||||
"version": "v4.5.0",
|
||||
"version": "v4.6.0",
|
||||
"pinned": false,
|
||||
"date": "2025-03-28T19:02:22Z"
|
||||
"date": "2026-03-06T17:35:19Z"
|
||||
},
|
||||
{
|
||||
"slug": "guardian",
|
||||
@@ -550,9 +550,9 @@
|
||||
{
|
||||
"slug": "homarr",
|
||||
"repo": "homarr-labs/homarr",
|
||||
"version": "v1.54.0",
|
||||
"version": "v1.55.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-27T19:38:50Z"
|
||||
"date": "2026-03-06T19:40:16Z"
|
||||
},
|
||||
{
|
||||
"slug": "homebox",
|
||||
@@ -641,9 +641,9 @@
|
||||
{
|
||||
"slug": "kapowarr",
|
||||
"repo": "Casvt/Kapowarr",
|
||||
"version": "V1.2.0",
|
||||
"version": "V1.3.0",
|
||||
"pinned": false,
|
||||
"date": "2025-04-16T14:55:28Z"
|
||||
"date": "2026-03-06T16:38:21Z"
|
||||
},
|
||||
{
|
||||
"slug": "karakeep",
|
||||
@@ -872,9 +872,9 @@
|
||||
{
|
||||
"slug": "metube",
|
||||
"repo": "alexta69/metube",
|
||||
"version": "2026.03.03",
|
||||
"version": "2026.03.06",
|
||||
"pinned": false,
|
||||
"date": "2026-03-03T19:15:55Z"
|
||||
"date": "2026-03-06T13:52:56Z"
|
||||
},
|
||||
{
|
||||
"slug": "miniflux",
|
||||
@@ -1229,9 +1229,9 @@
|
||||
{
|
||||
"slug": "pulse",
|
||||
"repo": "rcourtman/Pulse",
|
||||
"version": "v5.1.20",
|
||||
"version": "v5.1.21",
|
||||
"pinned": false,
|
||||
"date": "2026-03-06T00:30:32Z"
|
||||
"date": "2026-03-06T12:13:08Z"
|
||||
},
|
||||
{
|
||||
"slug": "pve-scripts-local",
|
||||
@@ -1285,9 +1285,9 @@
|
||||
{
|
||||
"slug": "rclone",
|
||||
"repo": "rclone/rclone",
|
||||
"version": "v1.73.1",
|
||||
"version": "v1.73.2",
|
||||
"pinned": false,
|
||||
"date": "2026-02-17T18:27:21Z"
|
||||
"date": "2026-03-06T20:42:26Z"
|
||||
},
|
||||
{
|
||||
"slug": "rdtclient",
|
||||
@@ -1411,9 +1411,9 @@
|
||||
{
|
||||
"slug": "silverbullet",
|
||||
"repo": "silverbulletmd/silverbullet",
|
||||
"version": "2.5.1",
|
||||
"version": "2.5.2",
|
||||
"pinned": false,
|
||||
"date": "2026-03-05T15:13:22Z"
|
||||
"date": "2026-03-06T12:20:58Z"
|
||||
},
|
||||
{
|
||||
"slug": "slskd",
|
||||
@@ -1474,9 +1474,9 @@
|
||||
{
|
||||
"slug": "stirling-pdf",
|
||||
"repo": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.6.0",
|
||||
"version": "v2.7.0",
|
||||
"pinned": false,
|
||||
"date": "2026-03-03T20:46:42Z"
|
||||
"date": "2026-03-06T11:21:47Z"
|
||||
},
|
||||
{
|
||||
"slug": "streamlink-webui",
|
||||
@@ -1593,9 +1593,9 @@
|
||||
{
|
||||
"slug": "traefik",
|
||||
"repo": "traefik/traefik",
|
||||
"version": "v3.6.9",
|
||||
"version": "v3.6.10",
|
||||
"pinned": false,
|
||||
"date": "2026-02-23T17:21:17Z"
|
||||
"date": "2026-03-06T15:08:35Z"
|
||||
},
|
||||
{
|
||||
"slug": "trilium",
|
||||
@@ -1740,9 +1740,9 @@
|
||||
{
|
||||
"slug": "wealthfolio",
|
||||
"repo": "afadil/wealthfolio",
|
||||
"version": "v3.0.4",
|
||||
"pinned": false,
|
||||
"date": "2026-03-05T19:58:24Z"
|
||||
"version": "v3.0.3",
|
||||
"pinned": true,
|
||||
"date": "2026-03-03T21:47:55Z"
|
||||
},
|
||||
{
|
||||
"slug": "web-check",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "This instance uses BoltDB",
|
||||
"text": "This instance uses SQLite",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -30,11 +30,12 @@ SEM_KEY=$(openssl rand -base64 32)
|
||||
SEM_PW=$(openssl rand -base64 12)
|
||||
cat <<EOF >/opt/semaphore/config.json
|
||||
{
|
||||
"bolt": {
|
||||
"host": "/opt/semaphore/semaphore_db.bolt"
|
||||
"sqlite": {
|
||||
"host": "/opt/semaphore/database.sqlite"
|
||||
},
|
||||
"dialect": "sqlite",
|
||||
"tmp_path": "/opt/semaphore/tmp",
|
||||
"cookie_hash": "${SEM_HASH}",
|
||||
"cookie_hash": "${SEM_HASH}",
|
||||
"cookie_encryption": "${SEM_ENCRYPTION}",
|
||||
"access_key_encryption": "${SEM_KEY}"
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ WF_DB_PATH=/opt/wealthfolio_data/wealthfolio.db
|
||||
WF_SECRET_KEY=${SECRET_KEY}
|
||||
WF_AUTH_PASSWORD_HASH=${WF_PASSWORD_HASH}
|
||||
WF_STATIC_DIR=/opt/wealthfolio/dist
|
||||
WF_CORS_ALLOW_ORIGINS=*
|
||||
WF_REQUEST_TIMEOUT_MS=30000
|
||||
WF_CORS_ALLOW_ORIGINS=http://${LOCAL_IP}:8080
|
||||
EOF
|
||||
echo "WF_PASSWORD=${WF_PASSWORD}" >~/wealthfolio.creds
|
||||
msg_ok "Configured Wealthfolio"
|
||||
|
||||
@@ -2008,8 +2008,6 @@ verify_gpg_fingerprint() {
|
||||
# 0 on success (tag printed to stdout), 1 on failure
|
||||
#
|
||||
# Notes:
|
||||
# - When a prefix is given, uses the matching-refs API for server-side
|
||||
# filtering (avoids pagination issues with repos that have 100+ tags)
|
||||
# - Skips tags containing "rc", "alpha", "beta", "dev", "test"
|
||||
# - Sorts by version number (sort -V) to find the latest
|
||||
# - Respects GITHUB_TOKEN for rate limiting
|
||||
@@ -2023,21 +2021,11 @@ get_latest_gh_tag() {
|
||||
[[ -n "${GITHUB_TOKEN:-}" ]] && header_args=(-H "Authorization: Bearer $GITHUB_TOKEN")
|
||||
|
||||
local http_code=""
|
||||
local api_url=""
|
||||
|
||||
# When a prefix is given, use the matching-refs API for server-side filtering.
|
||||
# This avoids pagination issues with repos that have hundreds of tags (e.g. mongodb/mongo-tools).
|
||||
if [[ -n "$prefix" ]]; then
|
||||
api_url="https://api.github.com/repos/${repo}/git/matching-refs/tags/${prefix}"
|
||||
else
|
||||
api_url="https://api.github.com/repos/${repo}/tags?per_page=100"
|
||||
fi
|
||||
|
||||
http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gh_tags.json \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"${header_args[@]}" \
|
||||
"$api_url" 2>/dev/null) || true
|
||||
"https://api.github.com/repos/${repo}/tags?per_page=100" 2>/dev/null) || true
|
||||
|
||||
if [[ "$http_code" == "401" ]]; then
|
||||
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||
@@ -2075,19 +2063,12 @@ get_latest_gh_tag() {
|
||||
tags_json=$(</tmp/gh_tags.json)
|
||||
rm -f /tmp/gh_tags.json
|
||||
|
||||
# Extract tag names depending on API response format
|
||||
# Extract tag names, filter by prefix, exclude pre-release patterns, sort by version
|
||||
local latest=""
|
||||
if [[ -n "$prefix" ]]; then
|
||||
# matching-refs API returns {"ref": "refs/tags/100.14.1", ...}
|
||||
latest=$(echo "$tags_json" | grep -oP '"ref":\s*"refs/tags/\K[^"]+' |
|
||||
grep -viE '(rc|alpha|beta|dev|test|preview|snapshot)' |
|
||||
sort -V | tail -n1)
|
||||
else
|
||||
# tags API returns {"name": "v1.2.3", ...}
|
||||
latest=$(echo "$tags_json" | grep -oP '"name":\s*"\K[^"]+' |
|
||||
grep -viE '(rc|alpha|beta|dev|test|preview|snapshot)' |
|
||||
sort -V | tail -n1)
|
||||
fi
|
||||
latest=$(echo "$tags_json" | grep -oP '"name":\s*"\K[^"]+' |
|
||||
{ [[ -n "$prefix" ]] && grep "^${prefix}" || cat; } |
|
||||
grep -viE '(rc|alpha|beta|dev|test|preview|snapshot)' |
|
||||
sort -V | tail -n1)
|
||||
|
||||
if [[ -z "$latest" ]]; then
|
||||
msg_warn "No matching tags found for ${repo}${prefix:+ (prefix: $prefix)}"
|
||||
|
||||
Reference in New Issue
Block a user