Compare commits

...
Author SHA1 Message Date
community-scripts-pr-app[bot]andgithub-actions[bot] 89bf431a18 Update CHANGELOG.md (#17102)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 14:58:25 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 4a3ee0aced Update CHANGELOG.md (#17101)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 14:58:16 +00:00
push-app-to-main[bot]andCanbiZ 20624f3a84 Chatwoot (#17095)
* Add chatwoot (ct)

* Update var_arm64 default value in chatwoot.sh

Uncomment var_arm64 variable and adjust its default value.

---------

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-09-07 16:57:57 +02:00
push-app-to-main[bot] 0b630fc246 Add whisparr-eros (ct) (#17094)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-09-07 16:57:48 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c8722c0828 Update CHANGELOG.md (#17100)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 14:53:40 +00:00
push-app-to-main[bot]andCanbiZ 08dfb5aa90 Matter-Hub (#17093)
* Add matter-hub (ct)

* Enable ARM64 support by default in matter-hub.sh

* Remove Home Assistant setup instruction

Removed instruction to set Home Assistant URL and token.

---------

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-09-07 16:53:13 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 790b329777 Update CHANGELOG.md (#17099)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 14:52:32 +00:00
push-app-to-main[bot]andCanbiZ d458bf5aed Journiv (#17092)
* Add journiv (ct)

* Change default value of var_arm64 to 'yes'

---------

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-09-07 16:51:29 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] aa4dfbf1f3 Update CHANGELOG.md (#17098)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 14:37:36 +00:00
CanbiZ (MickLesk) c039a297b3 flatnotes: follow upstream move to uv and Python 3.13 (#17090) 2026-09-07 16:37:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8910825fd8 Update CHANGELOG.md (#17091)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 12:28:20 +00:00
MickLesk b99dab130c node drift: label bump PRs so they reach the changelog 2026-09-07 14:25:44 +02:00
github-actions[bot]andMickLesk 169f57c2e0 iobroker: bump Node.js from 24 to 26 (#17085)
* iobroker: bump Node.js from 24 to 26

* iobroker: pin npm to 11, npm 12 dropped --unsafe-perm

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
2026-09-07 14:11:03 +02:00
github-actions[bot] 633e9f6a03 kaneo: bump Node.js from 22 to 24 (#17086) 2026-09-07 14:04:26 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 26f5922b1e Update CHANGELOG.md (#17081)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:54:06 +00:00
CanbiZ (MickLesk) 653341829f github: Open per-script Node bump PRs (#17065) 2026-09-07 12:53:38 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] b1c5fc9e01 Update CHANGELOG.md (#17080)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:53:22 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2801c4a2c6 Update CHANGELOG.md (#17079)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:53:08 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2c453c3992 Update CHANGELOG.md (#17078)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:52:53 +00:00
CanbiZ (MickLesk) 9e42f4b4a8 netboot-xyz: add Secure Boot and Legacy assets (#17066) 2026-09-07 12:52:48 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 568ef66ae7 Update CHANGELOG.md (#17077)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:52:44 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7854acfad8 Update CHANGELOG.md (#17076)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:52:31 +00:00
CanbiZ (MickLesk) dfb33d9559 heimdall: set up PHP 8.4 on update, keep only the database, run migrations (#17067) 2026-09-07 12:52:27 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8eec87401c Update CHANGELOG.md (#17075)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:52:16 +00:00
CanbiZ (MickLesk) 7deac8444e reactive-resume: repair any wrong WorkingDirectory on update (#17068) 2026-09-07 12:52:04 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 69dd23395e Update CHANGELOG.md (#17074)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 10:51:53 +00:00
CanbiZ (MickLesk) f6185c0b1d mediamtx: keep mediamtx.yml across updates (#17069) 2026-09-07 12:51:42 +02:00
CanbiZ (MickLesk) 960e50f428 omnitools: allow remote action while npm ci (#17070) 2026-09-07 12:51:24 +02:00
28 changed files with 1000 additions and 45 deletions
+166 -8
View File
@@ -7,8 +7,9 @@ on:
- cron: "0 6 * * 1"
permissions:
contents: read
contents: write
issues: write
pull-requests: write
jobs:
check-node-versions:
@@ -390,6 +391,142 @@ jobs:
cat /tmp/drift_report.md
# One PR per script, not one for all of them: the bumps are judged
# individually (an app can be deliberately held back while the next is a
# safe follow), and a combined PR is blocked by its worst member.
- name: Open a pull request per drifting script
if: steps.check.outputs.drift_count != '0'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
: >/tmp/drift_prs.txt
while IFS='|' read -r slug our upstream hint repo; do
[[ -z "$slug" ]] && continue
# "dynamic" and "unset" have no literal to rewrite, and a missing
# upstream major is nothing to rewrite it to.
if [[ ! "$our" =~ ^[0-9]+$ || ! "$upstream" =~ ^[0-9]+$ ]]; then
printf '%s|manual||\n' "$slug" >>/tmp/drift_prs.txt
continue
fi
# The branch name carries the exact bump, so the PR for it answers
# the question on its own: open means it is waiting for a review,
# closed means someone said no to this bump. A later upstream
# release changes the name and gets its own PR.
branch="node-drift/${slug}-${our}-to-${upstream}"
existing=$(gh pr list --head "$branch" --state all \
--json number,state,url,labels --jq '.[0] // empty' 2>/dev/null || echo "")
if [[ -n "$existing" ]]; then
state=$(jq -r '.state' <<<"$existing")
url=$(jq -r '.url' <<<"$existing")
stale=$(jq -r '[.labels[]?.name] | index("stale") // empty' <<<"$existing")
case "$state" in
OPEN)
printf '%s|open|%s\n' "$slug" "$url" >>/tmp/drift_prs.txt
continue
;;
MERGED)
printf '%s|merged|%s\n' "$slug" "$url" >>/tmp/drift_prs.txt
continue
;;
*)
# The stale bot only closes what a human labelled "stale", so
# that close carries no verdict on the bump — reopen the case.
# A close without it is a decision, and it stands.
if [[ -z "$stale" ]]; then
printf '%s|declined|%s\n' "$slug" "$url" >>/tmp/drift_prs.txt
continue
fi
git push origin --delete "$branch" >/dev/null 2>&1 || true
;;
esac
fi
git checkout -q -B "$branch"
changed=()
for f in "install/${slug}-install.sh" "ct/${slug}.sh"; do
[[ -f "$f" ]] || continue
if grep -qE "NODE_VERSION=\"?${our}\"?" "$f"; then
sed -i -E "s/(NODE_VERSION=)\"?${our}\"?/\1\"${upstream}\"/g" "$f"
changed+=("$f")
fi
done
if [[ ${#changed[@]} -eq 0 ]]; then
printf '%s|manual||\n' "$slug" >>/tmp/drift_prs.txt
git checkout -q main
continue
fi
git add "${changed[@]}"
git commit -q -m "${slug}: bump Node.js from ${our} to ${upstream}"
if ! git push -q -u origin "$branch" 2>/dev/null; then
printf '%s|failed||\n' "$slug" >>/tmp/drift_prs.txt
git checkout -q main
continue
fi
# The test command is written here rather than left to
# pr-test-command.yml: a PR opened with GITHUB_TOKEN does not start
# another workflow, so that comment would never arrive.
body=$(cat <<PR_EOF
\`${slug}\` pins Node **${our}**, upstream indicates **${upstream}** (${hint}) — [upstream repo](https://github.com/${repo}).
Opened automatically by the weekly Node.js version drift check. **Nothing here has been tested.** Run it against a host before merging:
\`\`\`bash
export COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/${branch}
bash -c "\$(curl -fsSL "\$COMMUNITY_SCRIPTS_URL/ct/${slug}.sh")"
\`\`\`
Both lines are needed — each script pins \`_CS_DEFAULT_URL\` to \`main\`, and that pin is what fills \`COMMUNITY_SCRIPTS_URL\` when it is unset.
If the bump is wrong — upstream ships a newer Node than the app needs, or this script is deliberately held back — **close this PR**. It gets recorded on the drift report and this exact bump is not proposed again.
PR_EOF
)
# Labels go on at creation, not in a second call: they are what
# exempts the PR from the template check, and that check runs on
# "opened" — a label added a moment later can arrive too late.
#
# "keep-open" rather than "automated pr" for that exemption: both
# skip the template check, but changelog-pr.yml drops every PR
# carrying "automated pr" (it marks its own PR with it), so that
# label would keep these bumps out of the changelog entirely.
# "update script" and "bugfix" place them under Updated Scripts →
# Bug Fixes; the autolabeler cannot do it, since a PR opened with
# GITHUB_TOKEN never triggers its pull_request_target run.
if url=$(gh pr create \
--title "${slug}: bump Node.js from ${our} to ${upstream}" \
--body "$body" \
--base main \
--head "$branch" \
--label "keep-open" \
--label "update script" \
--label "bugfix" 2>/dev/null); then
printf '%s|open|%s\n' "$slug" "$url" >>/tmp/drift_prs.txt
else
printf '%s|failed||\n' "$slug" >>/tmp/drift_prs.txt
fi
git checkout -q main
done </tmp/drift_scripts.txt
echo "Pull request status per script:"
cat /tmp/drift_prs.txt
- name: Create or update summary issue
if: steps.check.outputs.drift_count != '0'
env:
@@ -403,11 +540,31 @@ jobs:
TOTAL="${{ steps.check.outputs.total }}"
CHECKED="${{ steps.check.outputs.checked }}"
# Build checklist from drift data
# Build checklist from drift data. Each item carries the state of its
# own PR, so the list tracks itself instead of relying on someone
# ticking a box that the next run would overwrite anyway.
CHECKLIST=""
while IFS='|' read -r slug our_version upstream_major upstream_hint repo; do
[[ -z "$slug" ]] && continue
CHECKLIST+="- [ ] **\`${slug}\`** — ours: \`${our_version}\` → upstream: \`${upstream_major}\` (${upstream_hint}) — [repo](https://github.com/${repo})"$'\n'
pr_state=""
pr_url=""
if [[ -f /tmp/drift_prs.txt ]]; then
pr_line=$(grep -m1 "^${slug}|" /tmp/drift_prs.txt || echo "")
pr_state=$(cut -d'|' -f2 <<<"$pr_line")
pr_url=$(cut -d'|' -f3 <<<"$pr_line")
fi
case "$pr_state" in
open) mark="- [ ]"; note="— ${pr_url}" ;;
declined) mark="- [x]"; note="— declined in ${pr_url}, not proposed again" ;;
merged) mark="- [x]"; note="— merged in ${pr_url}" ;;
manual) mark="- [ ]"; note="— needs a manual change (no fixed \`NODE_VERSION\` to rewrite)" ;;
failed) mark="- [ ]"; note="— could not open a PR automatically" ;;
*) mark="- [ ]"; note="" ;;
esac
CHECKLIST+="${mark} **\`${slug}\`** — ours: \`${our_version}\` → upstream: \`${upstream_major}\` (${upstream_hint}) — [repo](https://github.com/${repo}) ${note}"$'\n'
done < /tmp/drift_scripts.txt
# Build full report table
@@ -424,11 +581,12 @@ jobs:
### How to resolve
1. Check upstream Dockerfile / package.json to confirm the required Node.js version
2. Test the script with the new Node version
3. Update \`NODE_VERSION\` in \`install/<slug>-install.sh\`
4. Update \`NODE_VERSION\` in \`ct/<slug>.sh\` (update section) if applicable
5. Check off the item above once done
Each item above has its own pull request with the bump already applied and a ready-to-run test command in the description.
1. Check the upstream Dockerfile / package.json to confirm the required Node.js version
2. Run the test command from the PR against a host
3. Merge the PR if it works — the item disappears from this list on the next run
4. Close the PR if the bump is wrong: the script stays as it is and this exact bump is never proposed again
<details>
<summary>Full report</summary>
+55
View File
@@ -0,0 +1,55 @@
name: Record closed Node.js drift PR
# The drift check opens one PR per script and treats a closed one as a verdict:
# that bump is not proposed again. That decision is invisible on the report
# unless it is written there, so record it as a comment naming the script.
on:
pull_request:
types: [closed]
jobs:
record:
if: >
github.repository == 'community-scripts/ProxmoxVE' &&
github.event.pull_request.merged == false &&
startsWith(github.event.pull_request.head.ref, 'node-drift/')
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/github-script@v9
with:
script: |
const pr = context.payload.pull_request;
const owner = context.repo.owner;
const repo = context.repo.repo;
// node-drift/<slug>-<from>-to-<to>
const m = pr.head.ref.match(/^node-drift\/(.+)-(\d+)-to-(\d+)$/);
if (!m) return;
const [, slug, from, to] = m;
// A close by the stale bot is a lapsed review, not a decision on
// the bump, and the drift check reopens those. Saying "declined"
// here would contradict it.
const stale = pr.labels.some((l) => l.name === 'stale');
const issues = await github.rest.issues.listForRepo({
owner, repo, state: 'open', labels: 'automated,dependencies', per_page: 100,
});
const issue = issues.data.find(
(i) => !i.pull_request && i.title === '[Automated] Node.js Version Drift Report',
);
if (!issue) return;
const body = stale
? `\`${slug}\` — PR #${pr.number} (Node ${from} → ${to}) was closed as stale. `
+ `No decision was recorded, so the next drift check opens it again.`
: `\`${slug}\` — PR #${pr.number} (Node ${from} → ${to}) was closed without merging. `
+ `The script keeps Node ${from} and this bump will not be proposed again. `
+ `If it was closed by mistake, reopen the PR.`;
await github.rest.issues.createComment({
owner, repo, issue_number: issue.number, body,
});
+32
View File
@@ -540,6 +540,38 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-09-07
### 🆕 New Scripts
- Chatwoot ([#17095](https://github.com/community-scripts/ProxmoxVE/pull/17095))
- whisparr-eros ([#17094](https://github.com/community-scripts/ProxmoxVE/pull/17094))
- Matter-Hub ([#17093](https://github.com/community-scripts/ProxmoxVE/pull/17093))
- Journiv ([#17092](https://github.com/community-scripts/ProxmoxVE/pull/17092))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- kaneo: bump Node.js from 22 to 24 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17086](https://github.com/community-scripts/ProxmoxVE/pull/17086))
- iobroker: bump Node.js from 24 to 26 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17085](https://github.com/community-scripts/ProxmoxVE/pull/17085))
- reactive-resume: repair any wrong WorkingDirectory on update [@MickLesk](https://github.com/MickLesk) ([#17068](https://github.com/community-scripts/ProxmoxVE/pull/17068))
- mediamtx: keep mediamtx.yml across updates [@MickLesk](https://github.com/MickLesk) ([#17069](https://github.com/community-scripts/ProxmoxVE/pull/17069))
- omnitools: allow remote action while npm ci [@MickLesk](https://github.com/MickLesk) ([#17070](https://github.com/community-scripts/ProxmoxVE/pull/17070))
- #### ✨ New Features
- netboot-xyz: add Secure Boot and Legacy assets [@MickLesk](https://github.com/MickLesk) ([#17066](https://github.com/community-scripts/ProxmoxVE/pull/17066))
- #### 🔧 Refactor
- flatnotes: follow upstream move to uv and Python 3.13 [@MickLesk](https://github.com/MickLesk) ([#17090](https://github.com/community-scripts/ProxmoxVE/pull/17090))
- heimdall: set up PHP 8.4 on update, keep only the database, run migrations [@MickLesk](https://github.com/MickLesk) ([#17067](https://github.com/community-scripts/ProxmoxVE/pull/17067))
### 📂 Github
- github: Open per-script Node bump PRs [@MickLesk](https://github.com/MickLesk) ([#17065](https://github.com/community-scripts/ProxmoxVE/pull/17065))
## 2026-09-06
### 🚀 Updated Scripts
+76
View File
@@ -0,0 +1,76 @@
#!/usr/bin/env bash
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.chatwoot.com/
APP="Chatwoot"
var_tags="${var_tags:-support;chat;helpdesk;crm}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-6144}"
var_disk="${var_disk:-16}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/chatwoot/.env ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "chatwoot" "chatwoot/chatwoot"; then
msg_info "Stopping Services"
systemctl stop chatwoot-web chatwoot-worker
msg_ok "Stopped Services"
create_backup /opt/chatwoot/.env /opt/chatwoot/storage
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "chatwoot" "chatwoot/chatwoot" "tarball"
RUBY_VERSION=$(tr -d ' \n' </opt/chatwoot/.ruby-version)
RUBY_VERSION="${RUBY_VERSION}" RUBY_INSTALL_RAILS="false" setup_ruby
NODE_VERSION=$(tr -d ' \n' </opt/chatwoot/.nvmrc)
NODE_VERSION="${NODE_VERSION}" NODE_MODULE="pnpm" setup_nodejs
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
restore_backup
msg_info "Updating Application"
cd /opt/chatwoot
$STD bundle config set --local without 'development test'
$STD bundle config set --local deployment 'true'
$STD bundle install
$STD pnpm install --frozen-lockfile
RAILS_ENV=production $STD bundle exec rails db:chatwoot_prepare
RAILS_ENV=production $STD bundle exec rails assets:precompile
msg_ok "Updated Application"
msg_info "Starting Services"
systemctl start chatwoot-web chatwoot-worker
msg_ok "Started Services"
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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
+6 -7
View File
@@ -38,19 +38,18 @@ function update_script() {
create_backup /opt/flatnotes/.env /opt/flatnotes/data
PYTHON_VERSION="3.13" setup_uv
NODE_VERSION="24" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
restore_backup
msg_info "Updating Flatnotes"
cd /opt/flatnotes/client
$STD npm install
$STD npm run build
cd /opt/flatnotes
rm -f uv.lock
sed -i 's/^name = ""$/name = "flatnotes"/' pyproject.toml
$STD /usr/local/bin/uvx migrate-to-uv
$STD /usr/local/bin/uv sync
$STD uv sync --locked --no-dev
$STD npm ci
$STD npm run build
msg_ok "Updated Flatnotes"
msg_info "Starting Service"
+6
View File
@@ -0,0 +1,6 @@
________ __ __
/ ____/ /_ ____ _/ /__ ______ ____ / /_
/ / / __ \/ __ `/ __/ | /| / / __ \/ __ \/ __/
/ /___/ / / / /_/ / /_ | |/ |/ / /_/ / /_/ / /_
\____/_/ /_/\__,_/\__/ |__/|__/\____/\____/\__/
+6
View File
@@ -0,0 +1,6 @@
__ _
/ /___ __ ___________ (_) __
__ / / __ \/ / / / ___/ __ \/ / | / /
/ /_/ / /_/ / /_/ / / / / / / /| |/ /
\____/\____/\__,_/_/ /_/ /_/_/ |___/
+6
View File
@@ -0,0 +1,6 @@
__ ___ __ __ __ __ __
/ |/ /___ _/ /_/ /____ _____ / / / /_ __/ /_
/ /|_/ / __ `/ __/ __/ _ \/ ___/_____/ /_/ / / / / __ \
/ / / / /_/ / /_/ /_/ __/ / /_____/ __ / /_/ / /_/ /
/_/ /_/\__,_/\__/\__/\___/_/ /_/ /_/\__,_/_.___/
+6
View File
@@ -0,0 +1,6 @@
_ ____ _ ______
| | / / /_ (_)________ ____ ___________ / ____/________ _____
| | /| / / __ \/ / ___/ __ \/ __ `/ ___/ ___/_____/ __/ / ___/ __ \/ ___/
| |/ |/ / / / / (__ ) /_/ / /_/ / / / / /_____/ /___/ / / /_/ (__ )
|__/|__/_/ /_/_/____/ .___/\__,_/_/ /_/ /_____/_/ \____/____/
/_/
+8 -16
View File
@@ -37,12 +37,9 @@ function update_script() {
sleep 1
msg_ok "Stopped Service"
msg_info "Backing up Data"
cp -R /opt/Heimdall/database database-backup
cp -R /opt/Heimdall/public public-backup
sleep 1
msg_ok "Backed up Data"
create_backup /opt/Heimdall/database/app.sqlite
PHP_VERSION="8.4" PHP_FPM="YES" setup_php
setup_composer
fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
@@ -52,20 +49,15 @@ function update_script() {
rm -f bootstrap/cache/*.php
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
$STD php artisan optimize:clear
msg_ok "Updated Heimdall-Dashboard"
msg_info "Restoring Data"
cd ~
cp -R database-backup/* /opt/Heimdall/database
cp -R public-backup/* /opt/Heimdall/public
sleep 1
msg_ok "Restored Data"
restore_backup
msg_info "Cleaning Up"
rm -rf {public-backup,database-backup}
sleep 1
msg_ok "Cleaned Up"
msg_info "Migrating Database"
cd /opt/Heimdall
$STD php artisan migrate --force
$STD php artisan optimize:clear
msg_ok "Migrated Database"
msg_info "Starting Service"
systemctl start heimdall.service
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
exit
fi
NODE_VERSION="24" setup_nodejs
NODE_VERSION="26" NPM_VERSION="11" setup_nodejs
msg_info "Updating ${APP} LXC"
$STD apt update
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/journiv/journiv-app
APP="Journiv"
var_tags="${var_tags:-journal;notes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/journiv ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "journiv" "journiv/journiv-app"; then
msg_info "Stopping Services"
systemctl stop journiv journiv-worker journiv-beat
msg_ok "Stopped Services"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "journiv" "journiv/journiv-app" "tarball"
msg_info "Updating Python Environment"
cd /opt/journiv
$STD uv sync --locked --no-editable --no-install-project
msg_ok "Updated Python Environment"
msg_info "Running Database Migrations"
set -a
source /opt/journiv.env
set +a
$STD /opt/journiv/.venv/bin/python -c "from alembic.config import main; main(['upgrade', 'head'])"
msg_ok "Ran Database Migrations"
msg_info "Starting Services"
systemctl start journiv journiv-worker journiv-beat
msg_ok "Started Services"
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 "${GATEWAY}${BGN}http://${IP}:8000${CL}"
+1 -1
View File
@@ -42,7 +42,7 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kaneo" "usekaneo/kaneo" "tarball"
PNPM_VERSION=$(sed -n 's/.*"packageManager": "pnpm@\([^"+]*\).*/\1/p' /opt/kaneo/package.json)
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION:-10.32.1}" setup_nodejs
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION:-10.32.1}" setup_nodejs
restore_backup
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env bash
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/RiDDiX/home-assistant-matter-hub
APP="Matter-Hub"
var_tags="${var_tags:-smarthome;matter}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/matter-hub ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "matter-hub" "RiDDiX/home-assistant-matter-hub"; then
msg_info "Stopping Service"
systemctl stop matter-hub
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "matter-hub" "RiDDiX/home-assistant-matter-hub" "tarball"
msg_info "Building Matter Hub"
cd /opt/matter-hub
MATTER_HUB_VERSION=$(cat ~/.matter-hub)
$STD pnpm install --frozen-lockfile
$STD pnpm run release:version "$MATTER_HUB_VERSION"
APP_VERSION="$MATTER_HUB_VERSION" $STD pnpm build
sed -i "s|^APP_VERSION=.*|APP_VERSION=${MATTER_HUB_VERSION}|" /opt/matter-hub.env
msg_ok "Built Matter Hub"
msg_info "Installing Matter Hub"
rm -rf /opt/matter-hub_app/node_modules /opt/matter-hub_app/package-lock.json
cd /opt/matter-hub_app
$STD npm install --omit=dev --no-audit --no-fund
msg_ok "Installed Matter Hub"
msg_info "Starting Service"
systemctl start matter-hub
msg_ok "Started Service"
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 "${GATEWAY}${BGN}http://${IP}:8482${CL}"
+2
View File
@@ -37,7 +37,9 @@ function update_script() {
systemctl stop mediamtx
msg_ok "Service stopped"
create_backup /opt/mediamtx/mediamtx.yml
fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_$(arch_resolve).tar.gz"
restore_backup
msg_info "Starting service"
systemctl start mediamtx
+14
View File
@@ -58,6 +58,14 @@ function update_script() {
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-linux-bin" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-linux.bin"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-dsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz.dsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-pdsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz.pdsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-efi" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-kpxe" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.kpxe"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-lkrn" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.lkrn"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-dsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.dsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-pdsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.pdsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-metal-legacy-efi" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-metal-legacy.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-metal-legacy-kpxe" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-metal-legacy.kpxe"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-snp" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64-snp.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-snponly" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64-snponly.efi"
@@ -70,6 +78,12 @@ function update_script() {
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-multiarch-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-multiarch.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-multiarch-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-multiarch.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-arm64-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb-arm64.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-arm64-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb-arm64.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-checksums" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sha256-checksums.txt"
msg_info "Restoring Configuration"
+1 -1
View File
@@ -40,7 +40,7 @@ function update_script() {
msg_info "Building OmniTools"
cd /opt/omnitools
export HUSKY=0
$STD npm ci
$STD npm ci --allow-remote=all
$STD npm run build
msg_ok "Built OmniTools"
+1 -1
View File
@@ -55,7 +55,7 @@ function update_script() {
msg_ok "Updated Reactive Resume"
msg_info "Updating Service"
sed -i 's|WorkingDirectory=/opt/reactive-resume/apps/web|WorkingDirectory=/opt/reactive-resume/apps/server|; s|ExecStart=/usr/bin/node .output/server/index.mjs|ExecStart=/usr/bin/node dist/index.mjs|' /etc/systemd/system/reactive-resume.service
sed -i -E 's|^WorkingDirectory=/opt/reactive-resume(/.*)?$|WorkingDirectory=/opt/reactive-resume/apps/server|; s|ExecStart=/usr/bin/node .output/server/index.mjs|ExecStart=/usr/bin/node dist/index.mjs|' /etc/systemd/system/reactive-resume.service
systemctl daemon-reload
msg_ok "Updated Service"
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: angusmaul
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Whisparr/Whisparr-Eros
APP="Whisparr-Eros"
var_tags="${var_tags:-arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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 /var/lib/whisparr-eros ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "whisparr-eros" "Whisparr/Whisparr-Eros"; then
msg_info "Stopping Service"
systemctl stop whisparr-eros
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "whisparr-eros" "Whisparr/Whisparr-Eros" "prebuild" "latest" "/opt/Whisparr-Eros" "Whisparr.eros.*.linux-$(arch_resolve "x64" "arm64").tar.gz"
rm -rf /opt/Whisparr-Eros/Whisparr.Update
chmod +x /opt/Whisparr-Eros/Whisparr
msg_info "Starting Service"
systemctl start whisparr-eros
msg_ok "Started Service"
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}:6969${CL}"
+130
View File
@@ -0,0 +1,130 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.chatwoot.com/
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 \
build-essential \
git \
imagemagick \
libpq-dev \
libvips42 \
pkg-config \
redis-server
msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
PG_DB_NAME="chatwoot_production" PG_DB_USER="chatwoot" PG_DB_EXTENSIONS="vector,pg_stat_statements" setup_postgresql_db
fetch_and_deploy_gh_release "chatwoot" "chatwoot/chatwoot" "tarball"
RUBY_VERSION=$(tr -d ' \n' </opt/chatwoot/.ruby-version)
RUBY_VERSION="${RUBY_VERSION}" RUBY_INSTALL_RAILS="false" setup_ruby
NODE_VERSION=$(grep -oP '"node":\s*"\K[0-9]+' /opt/chatwoot/package.json)
NODE_VERSION="${NODE_VERSION}" NODE_MODULE="pnpm" setup_nodejs
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
msg_info "Installing Application Dependencies"
cd /opt/chatwoot
$STD bundle config set --local without 'development test'
$STD bundle config set --local deployment 'true'
$STD bundle install
$STD pnpm install --frozen-lockfile
msg_ok "Installed Application Dependencies"
msg_info "Configuring Chatwoot"
SECRET_KEY_BASE=$(openssl rand -hex 64)
mkdir -p /opt/chatwoot/storage
cat <<EOF >/opt/chatwoot/.env
RAILS_ENV=production
NODE_ENV=production
RAILS_LOG_TO_STDOUT=true
SECRET_KEY_BASE=${SECRET_KEY_BASE}
FRONTEND_URL=http://${LOCAL_IP}:3000
FORCE_SSL=false
ENABLE_ACCOUNT_SIGNUP=false
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_DATABASE=${PG_DB_NAME}
POSTGRES_USERNAME=${PG_DB_USER}
POSTGRES_PASSWORD=${PG_DB_PASS}
REDIS_URL=redis://127.0.0.1:6379
ACTIVE_STORAGE_SERVICE=local
EOF
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 32)
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=$(openssl rand -hex 32)
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=$(openssl rand -hex 32)
cat <<EOF >>/opt/chatwoot/.env
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=${ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY}
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=${ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY}
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=${ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT}
EOF
chmod 640 /opt/chatwoot/.env
msg_ok "Configured Chatwoot"
msg_info "Preparing Database"
RAILS_ENV=production $STD bundle exec rails db:chatwoot_prepare
msg_ok "Prepared Database"
msg_info "Precompiling Assets"
RAILS_ENV=production NODE_OPTIONS="--max-old-space-size=4096" $STD bundle exec rails assets:precompile
msg_ok "Precompiled Assets"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/chatwoot-web.service
[Unit]
Description=Chatwoot Web
After=network.target postgresql.service redis-server.service
Requires=postgresql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/chatwoot
EnvironmentFile=/opt/chatwoot/.env
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/root/.rbenv/shims/bundle exec rails server -p 3000 -e production
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/chatwoot-worker.service
[Unit]
Description=Chatwoot Worker
After=network.target postgresql.service redis-server.service
Requires=postgresql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/chatwoot
EnvironmentFile=/opt/chatwoot/.env
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/root/.rbenv/shims/bundle exec sidekiq -C config/sidekiq.yml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now chatwoot-web chatwoot-worker redis-server
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
+4 -7
View File
@@ -14,17 +14,14 @@ network_check
update_os
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
USE_UVX="YES" setup_uv
NODE_VERSION="22" setup_nodejs
PYTHON_VERSION="3.13" setup_uv
NODE_VERSION="24" setup_nodejs
msg_info "Setting up Flatnotes"
cd /opt/flatnotes
sed -i 's/^name = ""$/name = "flatnotes"/' pyproject.toml
$STD /usr/local/bin/uvx migrate-to-uv
$STD /usr/local/bin/uv sync
$STD uv sync --locked --no-dev
mkdir -p /opt/flatnotes/data
cd /opt/flatnotes/client
$STD npm install
$STD npm ci
$STD npm run build
cat <<EOF >/opt/flatnotes/.env
+1 -1
View File
@@ -28,7 +28,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
exit 10
fi
NODE_VERSION="24" setup_nodejs
NODE_VERSION="26" NPM_VERSION="11" setup_nodejs
msg_info "Installing ioBroker (Patience)"
$STD bash <(curl -fsSL https://iobroker.net/install.sh)
+131
View File
@@ -0,0 +1,131 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/journiv/journiv-app
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 \
build-essential \
libffi-dev \
libpq-dev \
libmagic1 \
libheif1 \
libde265-0 \
libpango-1.0-0 \
libpangoft2-1.0-0 \
redis-server
systemctl enable -q --now redis-server
msg_ok "Installed Dependencies"
setup_ffmpeg
PG_VERSION="17" setup_postgresql
PG_DB_NAME="journiv" PG_DB_USER="journiv" setup_postgresql_db
UV_PYTHON="3.12" setup_uv
fetch_and_deploy_gh_release "journiv" "journiv/journiv-app" "tarball"
msg_info "Setting up Python Environment"
cd /opt/journiv
$STD uv sync --locked --no-editable --no-install-project
msg_ok "Set up Python Environment"
msg_info "Configuring Journiv"
mkdir -p /opt/journiv_data/{media,logs,exports,imports/temp}
cat <<EOF >/opt/journiv.env
ENVIRONMENT=production
SECRET_KEY=$(openssl rand -hex 32)
DB_DRIVER=postgres
DATABASE_URL=postgresql://journiv:${PG_DB_PASS}@localhost:5432/journiv
REDIS_URL=redis://127.0.0.1:6379/0
MEDIA_ROOT=/opt/journiv_data/media
LOG_DIR=/opt/journiv_data/logs
EXPORT_DIR=/opt/journiv_data/exports
IMPORT_TEMP_DIR=/opt/journiv_data/imports/temp
DOMAIN_NAME=${LOCAL_IP}
DOMAIN_SCHEME=http
PYTHONPATH=/opt/journiv
EOF
chmod 600 /opt/journiv.env
msg_ok "Configured Journiv"
msg_info "Initializing Database"
set -a
source /opt/journiv.env
set +a
$STD /opt/journiv/.venv/bin/python -c "from alembic.config import main; main(['upgrade', 'head'])"
SKIP_DATA_SEEDING=false $STD /opt/journiv/.venv/bin/python -c "from app.core.database import seed_initial_data; seed_initial_data()"
msg_ok "Initialized Database"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/journiv.service
[Unit]
Description=Journiv
Wants=network-online.target
After=network-online.target postgresql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/journiv
EnvironmentFile=/opt/journiv.env
ExecStart=/opt/journiv/.venv/bin/python -m gunicorn app.main:app -w 2 -k uvicorn.workers.UvicornWorker --timeout 300 -b 0.0.0.0:8000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/journiv-worker.service
[Unit]
Description=Journiv Celery Worker
Wants=network-online.target
After=network-online.target journiv.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/journiv
EnvironmentFile=/opt/journiv.env
ExecStart=/opt/journiv/.venv/bin/python -m celery -A app.core.celery_app worker --loglevel=info
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/journiv-beat.service
[Unit]
Description=Journiv Celery Beat
Wants=network-online.target
After=network-online.target journiv.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/journiv
EnvironmentFile=/opt/journiv.env
ExecStart=/opt/journiv/.venv/bin/python -m celery -A app.core.celery_app beat --loglevel=info --scheduler redbeat.RedBeatScheduler --pidfile=/run/journiv-beat.pid
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now journiv journiv-worker journiv-beat
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -22,7 +22,7 @@ PG_DB_NAME="kaneo" PG_DB_USER="kaneo" setup_postgresql_db
fetch_and_deploy_gh_release "kaneo" "usekaneo/kaneo" "tarball"
PNPM_VERSION=$(sed -n 's/.*"packageManager": "pnpm@\([^"+]*\).*/\1/p' /opt/kaneo/package.json)
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION:-10.32.1}" setup_nodejs
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION:-10.32.1}" setup_nodejs
msg_info "Configuring Kaneo"
cat <<EOF >/opt/kaneo/.env
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/RiDDiX/home-assistant-matter-hub
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="24" NODE_MODULE="pnpm@^10" setup_nodejs
fetch_and_deploy_gh_release "matter-hub" "RiDDiX/home-assistant-matter-hub" "tarball"
msg_info "Building Matter Hub"
cd /opt/matter-hub
MATTER_HUB_VERSION=$(cat ~/.matter-hub)
$STD pnpm install --frozen-lockfile
$STD pnpm run release:version "$MATTER_HUB_VERSION"
APP_VERSION="$MATTER_HUB_VERSION" $STD pnpm build
msg_ok "Built Matter Hub"
msg_info "Installing Matter Hub"
mkdir -p /opt/matter-hub_app
cat <<EOF >/opt/matter-hub_app/package.json
{
"name": "hamh-wrapper",
"version": "0.0.0",
"private": true,
"dependencies": {
"home-assistant-matter-hub": "file:/opt/matter-hub/apps/home-assistant-matter-hub/package.tgz"
}
}
EOF
cd /opt/matter-hub_app
$STD npm install --omit=dev --no-audit --no-fund
msg_ok "Installed Matter Hub"
msg_info "Configuring Matter Hub"
mkdir -p /opt/matter-hub_data
cat <<EOF >/opt/matter-hub.env
HAMH_HOME_ASSISTANT_URL=http://CHANGE_ME:8123/
HAMH_HOME_ASSISTANT_ACCESS_TOKEN=CHANGE_ME
HAMH_HTTP_PORT=8482
HAMH_LOG_LEVEL=info
APP_VERSION=${MATTER_HUB_VERSION}
EOF
chmod 600 /opt/matter-hub.env
msg_ok "Configured Matter Hub"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/matter-hub.service
[Unit]
Description=Home Assistant Matter Hub
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/matter-hub_data
EnvironmentFile=/opt/matter-hub.env
ExecStart=/opt/matter-hub_app/node_modules/.bin/home-assistant-matter-hub start --storage-location=/opt/matter-hub_data
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now matter-hub
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+14
View File
@@ -41,6 +41,14 @@ USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-lkrn" "netbo
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-linux-bin" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-linux.bin"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-dsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz.dsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-pdsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz.pdsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-efi" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-kpxe" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.kpxe"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-lkrn" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.lkrn"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-dsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.dsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-pdsk" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.pdsk"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-metal-legacy-efi" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-metal-legacy.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-metal-legacy-kpxe" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-metal-legacy.kpxe"
# ARM64 bootloaders
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64.efi"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-snp" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64-snp.efi"
@@ -55,6 +63,12 @@ USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-iso" "
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-arm64-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-arm64.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-multiarch-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-multiarch.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-multiarch-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-multiarch.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-legacy-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-legacy.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb.img"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-arm64-iso" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb-arm64.iso"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-sb-arm64-img" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sb-arm64.img"
# SHA256 checksums
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "netboot-xyz-checksums" "netbootxyz/netboot.xyz" "singlefile" "latest" "/var/www/html" "netboot.xyz-sha256-checksums.txt"
+1 -1
View File
@@ -23,7 +23,7 @@ fetch_and_deploy_gh_release "omnitools" "iib0011/omni-tools" "tarball"
msg_info "Building OmniTools"
cd /opt/omnitools
export HUSKY=0
$STD npm ci
$STD npm ci --allow-remote=all
$STD npm run build
msg_ok "Built OmniTools"
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: angusmaul
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Whisparr/Whisparr-Eros
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 sqlite3 libicu-dev
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "whisparr-eros" "Whisparr/Whisparr-Eros" "prebuild" "latest" "/opt/Whisparr-Eros" "Whisparr.eros.*.linux-$(arch_resolve "x64" "arm64").tar.gz"
msg_info "Configuring Whisparr-Eros"
rm -rf /opt/Whisparr-Eros/Whisparr.Update
chmod +x /opt/Whisparr-Eros/Whisparr
mkdir -p /var/lib/whisparr-eros/
chmod 775 /var/lib/whisparr-eros/ /opt/Whisparr-Eros/
msg_ok "Configured Whisparr-Eros"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/whisparr-eros.service
[Unit]
Description=Whisparr-Eros Daemon
After=syslog.target network.target
[Service]
UMask=0002
Type=simple
ExecStart=/opt/Whisparr-Eros/Whisparr -nobrowser -data=/var/lib/whisparr-eros/
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now whisparr-eros
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc