Compare commits

..

70 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
eb8691493b fix(php): improve module handling and prevent installation failures
Changes to setup_php():
- Add version detection for PHP 8.5+ built-in opcache
- Define BUILTIN_MODULES list for modules included in php-common
  (ctype, fileinfo, iconv, tokenizer, phar, posix, etc.)
- Filter out built-in modules before attempting installation
- Verify each package exists via apt-cache before adding to install list
- Skip unavailable packages with informational message instead of error
- Add extended default modules (mysql, sqlite3, pgsql, redis, imagick,
  bz2, apcu) to cover ~90% of typical use cases
- Improve error handling with graceful degradation

This prevents installation failures when:
- PHP version has module built into core (e.g., opcache in 8.5+)
- Module is provided by php-common (ctype, fileinfo, etc.)
- Package is renamed or unavailable in specific PHP version

Fixes #11359
2026-01-30 09:40:29 +01:00
community-scripts-pr-app[bot]
715159895b chore: update github-versions.json (#11351)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-30 06:16:29 +00:00
community-scripts-pr-app[bot]
eb5de9173a Update CHANGELOG.md (#11348)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-30 00:20:41 +00:00
community-scripts-pr-app[bot]
8dc80b2b7e chore: update github-versions.json (#11347)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-30 00:20:15 +00:00
community-scripts-pr-app[bot]
e2abb46c86 Update CHANGELOG.md (#11343)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 19:35:27 +00:00
Chris
ab5e8cbd7c [FEAT] Immich: Enable Maintenance Mode before update (#11342)
* [FEAT] Immich: enable Maintenance Mode prior to update

- Checks if current version is 2.5.2 or higher
- Also disables Maintenance Mode afterwards

* fix pathing issue; suppress `cd -` output
2026-01-29 20:35:00 +01:00
community-scripts-pr-app[bot]
69e563afb5 chore: update github-versions.json (#11341)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 18:13:37 +00:00
community-scripts-pr-app[bot]
22acb9d728 Update CHANGELOG.md (#11340)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 17:43:27 +00:00
Chris
6fc6bab1bf Refactor: Byparr (#11338)
- Use Camoufox (Firefox in Playwright) as intended
- Remove Chromium and deps
- Adapt dependencies to Debian
2026-01-29 18:43:00 +01:00
community-scripts-pr-app[bot]
c1ad36718e Update CHANGELOG.md (#11339)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 17:03:06 +00:00
Chris
e3b796b842 Immich: Pin version to 2.5.2 (#11335) 2026-01-29 18:02:37 +01:00
community-scripts-pr-app[bot]
d2f02c2ba0 Update CHANGELOG.md (#11337)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 16:15:38 +00:00
CanbiZ (MickLesk)
94b9190e07 cloudflare: Remove deprecated DNS-over-HTTPS proxy option (#11068)
* Remove deprecated DNS-over-HTTPS proxy option from cloudflared installer

* docs(cloudflared): update notes - remove deprecated DoH proxy info

- DoH proxy-dns feature deprecated by Cloudflare (Feb 2026)
- Add tunnel setup instructions instead
2026-01-29 17:15:10 +01:00
CanbiZ (MickLesk)
09b343d150 docs(cloudflared): update notes - remove deprecated DoH proxy info
- DoH proxy-dns feature deprecated by Cloudflare (Feb 2026)
- Add tunnel setup instructions instead
2026-01-29 15:59:05 +01:00
CanbiZ (MickLesk)
c464b95fa3 fix(pve-post-install): check file exists before removing no-nag-script
Fixes script interruption when selecting 'no' to disable subscription nag
on a fresh system where no-nag-script doesn't exist.
2026-01-29 15:56:51 +01:00
community-scripts-pr-app[bot]
24ddcb9d97 Update CHANGELOG.md (#11336)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 14:04:27 +00:00
Michel Roegl-Brunner
a5aa55ffad Kollection: Update to php 8.5 (#11315)
* Upgrade PHP version from 8.4 to 8.5

* Configure PHP version and modules for setup

Added PHP version and configuration for setup.
2026-01-29 15:03:58 +01:00
community-scripts-pr-app[bot]
2412a45a20 Update CHANGELOG.md (#11334)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 13:59:15 +00:00
CanbiZ (MickLesk)
1b87ec7bfd Notifiarr: change installation check from apt to systemd service (#11319) 2026-01-29 14:58:49 +01:00
community-scripts-pr-app[bot]
84966410ed Update CHANGELOG.md (#11333)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 13:43:08 +00:00
CanbiZ (MickLesk)
cc70f84d27 feat(workflow): exclude automated PRs and bot issues from locking 2026-01-29 14:41:35 +01:00
community-scripts-pr-app[bot]
1c4c95723b Update CHANGELOG.md (#11332)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 13:38:19 +00:00
Chris
b67a82123e Immich: v2.5.0 (#11240) 2026-01-29 14:37:54 +01:00
CanbiZ (MickLesk)
33a531960e fix(workflow): use github-script for scheduled lock after 3 days 2026-01-29 14:30:32 +01:00
community-scripts-pr-app[bot]
8ab722fb7c Update CHANGELOG.md (#11331)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 13:29:46 +00:00
CanbiZ (MickLesk)
3294c58713 fix(workflow): use github-script for immediate lock on close 2026-01-29 14:29:19 +01:00
CanbiZ (MickLesk)
845aebd654 fix(workflow): use github.token for lock-threads action 2026-01-29 14:22:10 +01:00
CanbiZ (MickLesk)
dd2def9384 fix(workflow): lock old issues silently, new issues with comment 2026-01-29 13:59:24 +01:00
CanbiZ (MickLesk)
82740302bc Update lock-issue workflow to use new exclusion key
Replaces 'issue-created-after' with 'exclude-issue-created-before' in the lock-issue GitHub Actions workflow for improved clarity and compatibility.
2026-01-29 13:57:33 +01:00
CanbiZ (MickLesk)
610509e834 fix(workflow): only lock issues created after 2026-01-27 2026-01-29 13:53:46 +01:00
CanbiZ (MickLesk)
aed241fdc4 fix(workflow): use dessant/lock-threads for issue locking 2026-01-29 13:52:22 +01:00
community-scripts-pr-app[bot]
e0fb69b6c3 Update CHANGELOG.md (#11328)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 12:47:12 +00:00
Michel Roegl-Brunner
c3c8384f69 Add workflow to lock closed issues (#11316) 2026-01-29 13:46:43 +01:00
community-scripts-pr-app[bot]
99d13903f3 Update CHANGELOG.md (#11327)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 12:40:58 +00:00
CanbiZ (MickLesk)
25ecb12060 feat(jellyfin): add logrotate instead of reducing log level (#11326) 2026-01-29 13:40:32 +01:00
community-scripts-pr-app[bot]
5a5dd8ae87 Update .app files (#11324)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-29 13:38:24 +01:00
community-scripts-pr-app[bot]
42a3a68ce2 Update CHANGELOG.md (#11325)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 12:31:39 +00:00
CanbiZ (MickLesk)
44f5656a56 Alpine-Valkey (#11320) 2026-01-29 13:31:14 +01:00
community-scripts-pr-app[bot]
27bcc09b0c Update CHANGELOG.md (#11323)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 12:29:46 +00:00
Michel Roegl-Brunner
47d63e92bf build.func: Replace storage variable with searchdomain variable (#11322) 2026-01-29 13:29:25 +01:00
community-scripts-pr-app[bot]
03216e05ac chore: update github-versions.json (#11321)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 12:11:17 +00:00
community-scripts-pr-app[bot]
5ba96bb3f2 Update CHANGELOG.md (#11318)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 11:44:16 +00:00
CanbiZ (MickLesk)
8e7dc349ac core: Add config file handling options | Fix Vikunja update with interactive overwrite (#11317) 2026-01-29 12:43:54 +01:00
community-scripts-pr-app[bot]
e1f02bfa77 Update CHANGELOG.md (#11314)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 09:59:10 +00:00
Tobias
b013dcb1e3 fix: vikunja v1 (#11308) 2026-01-29 10:58:41 +01:00
community-scripts-pr-app[bot]
89645dcd92 chore: update github-versions.json (#11311)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 06:16:20 +00:00
community-scripts-pr-app[bot]
718219fec3 Update CHANGELOG.md (#11310)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 00:20:43 +00:00
community-scripts-pr-app[bot]
97138713b4 chore: update github-versions.json (#11309)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-29 00:20:18 +00:00
community-scripts-pr-app[bot]
620bf7ee66 chore: update github-versions.json (#11302)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 18:09:59 +00:00
community-scripts-pr-app[bot]
f52c90b26b Update CHANGELOG.md (#11300)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:36:14 +00:00
community-scripts-pr-app[bot]
af53a669c7 Update CHANGELOG.md (#11299)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:35:49 +00:00
Alexander
cca0d9e584 Fix whiptail menu loop when other interfaces are present (#11237) 2026-01-28 17:35:24 +01:00
community-scripts-pr-app[bot]
56e97764ac Update CHANGELOG.md (#11298)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:31:51 +00:00
Lavacano
bac7f07a74 The added sed command s/^[- ]*// removes any leading dashes or spaces from the description (#11285) 2026-01-28 17:31:26 +01:00
community-scripts-pr-app[bot]
ce4d2350ef Update CHANGELOG.md (#11297)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:28:49 +00:00
Michel Roegl-Brunner
90f7020826 Change START_VM from 'yes' to 'no' (#11292) 2026-01-28 17:28:21 +01:00
community-scripts-pr-app[bot]
393bc4a7e4 Update CHANGELOG.md (#11294)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:22:18 +01:00
community-scripts-pr-app[bot]
89cbd21e17 Update .app files (#11291)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-28 16:17:41 +01:00
community-scripts-pr-app[bot]
eb6bd65415 Update date in json (#11293)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-28 15:17:15 +00:00
community-scripts-pr-app[bot]
5623969bb9 Update CHANGELOG.md (#11290)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 15:12:34 +00:00
community-scripts-pr-app[bot]
a6e7939fce Update date in json (#11289)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-28 15:12:03 +00:00
push-app-to-main[bot]
fd3e6196cc Add nodecast-tv (ct) (#11287)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-01-28 16:10:52 +01:00
CanbiZ (MickLesk)
910723c745 Revert "fix(build): use pct mount to fix Debian 13 root ownership"
This reverts commit 6267250e49.
2026-01-28 14:54:30 +01:00
CanbiZ (MickLesk)
6267250e49 fix(build): use pct mount to fix Debian 13 root ownership 2026-01-28 14:54:15 +01:00
CanbiZ (MickLesk)
b35437c391 fix(build): fix Debian 13 root ownership from host before customization 2026-01-28 14:44:00 +01:00
CanbiZ (MickLesk)
032dfacce2 fix(install): run chown in subshell to avoid ERR trap 2026-01-28 14:42:10 +01:00
CanbiZ (MickLesk)
0ace1009ad fix(frontend): wrap Tooltip in TooltipProvider 2026-01-28 14:37:29 +01:00
CanbiZ (MickLesk)
2938bb29f5 fix(install): ignore chown error in unprivileged containers 2026-01-28 14:34:22 +01:00
community-scripts-pr-app[bot]
ba9618eabd Update CHANGELOG.md (#11282)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-28 13:29:48 +00:00
CanbiZ (MickLesk)
c7669c39c3 Frontend: use github-versions.json for version display (#11281)
* fix(frontend): use github-versions.json for version display

- Update AppVersion type to match new format with slug field
- Switch from versions.json to github-versions.json API
- Simplify version matching by direct slug comparison
- Remove 'Loading versions...' text - show nothing if no version found

* feat(frontend): show tooltip for pinned versions

* fix(api): add github-versions endpoint and fix legacy versions route
2026-01-28 14:29:26 +01:00
29 changed files with 853 additions and 220 deletions

76
.github/workflows/lock-issue.yaml generated vendored Normal file
View File

@@ -0,0 +1,76 @@
name: Lock closed issues
on:
schedule:
- cron: "0 0 * * *" # Run daily at midnight
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
lock:
runs-on: ubuntu-latest
steps:
- name: Lock old issues and PRs
uses: actions/github-script@v7
with:
script: |
const daysBeforeLock = 3;
const cutoffDate = new Date('2026-01-27T00:00:00Z');
const lockDate = new Date();
lockDate.setDate(lockDate.getDate() - daysBeforeLock);
// Exclude patterns (case-insensitive)
const excludePatterns = [
/automated pr/i,
/\[bot\]/i,
/dependabot/i
];
// Search for closed, unlocked issues older than 3 days
const issues = await github.rest.search.issuesAndPullRequests({
q: `repo:${context.repo.owner}/${context.repo.repo} is:closed is:unlocked updated:<${lockDate.toISOString().split('T')[0]}`,
per_page: 50
});
console.log(`Found ${issues.data.items.length} issues/PRs to process`);
for (const item of issues.data.items) {
// Skip excluded items
const shouldExclude = excludePatterns.some(pattern => pattern.test(item.title));
if (shouldExclude) {
console.log(`Skipped #${item.number}: "${item.title}" (matches exclude pattern)`);
continue;
}
const createdAt = new Date(item.created_at);
const isNew = createdAt >= cutoffDate;
try {
// Add comment only for new issues (created after 2026-01-27)
if (isNew) {
const comment = item.pull_request
? 'This pull request has been automatically locked. Please open a new issue for related bugs.'
: 'This issue has been automatically locked. Please open a new issue for related bugs and reference this issue if needed.';
await github.rest.issues.createComment({
...context.repo,
issue_number: item.number,
body: comment
});
}
// Lock the issue/PR
await github.rest.issues.lock({
...context.repo,
issue_number: item.number,
lock_reason: 'resolved'
});
console.log(`Locked #${item.number} (${item.pull_request ? 'PR' : 'Issue'})`);
} catch (error) {
console.log(`Failed to lock #${item.number}: ${error.message}`);
}
}

View File

@@ -391,10 +391,60 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-01-28 ## 2026-01-30
## 2026-01-29
### 🆕 New Scripts
- Alpine-Valkey [@MickLesk](https://github.com/MickLesk) ([#11320](https://github.com/community-scripts/ProxmoxVE/pull/11320))
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.5.2 [@vhsdream](https://github.com/vhsdream) ([#11335](https://github.com/community-scripts/ProxmoxVE/pull/11335))
- Kollection: Update to php 8.5 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11315](https://github.com/community-scripts/ProxmoxVE/pull/11315))
- Notifiarr: change installation check from apt to systemd service [@MickLesk](https://github.com/MickLesk) ([#11319](https://github.com/community-scripts/ProxmoxVE/pull/11319))
- #### ✨ New Features
- [FEAT] Immich: Enable Maintenance Mode before update [@vhsdream](https://github.com/vhsdream) ([#11342](https://github.com/community-scripts/ProxmoxVE/pull/11342))
- jellyfin: add logrotate instead of reducing log level [@MickLesk](https://github.com/MickLesk) ([#11326](https://github.com/community-scripts/ProxmoxVE/pull/11326))
- core: Add config file handling options | Fix Vikunja update with interactive overwrite [@MickLesk](https://github.com/MickLesk) ([#11317](https://github.com/community-scripts/ProxmoxVE/pull/11317))
- Immich: v2.5.0 [@vhsdream](https://github.com/vhsdream) ([#11240](https://github.com/community-scripts/ProxmoxVE/pull/11240))
- #### 💥 Breaking Changes
- fix: vikunja v1 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11308](https://github.com/community-scripts/ProxmoxVE/pull/11308))
- #### 🔧 Refactor
- Refactor: Byparr [@vhsdream](https://github.com/vhsdream) ([#11338](https://github.com/community-scripts/ProxmoxVE/pull/11338))
- cloudflare: Remove deprecated DNS-over-HTTPS proxy option [@MickLesk](https://github.com/MickLesk) ([#11068](https://github.com/community-scripts/ProxmoxVE/pull/11068))
### 💾 Core
- #### 🐞 Bug Fixes
- build.func: Replace storage variable with searchdomain variable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11322](https://github.com/community-scripts/ProxmoxVE/pull/11322))
### 📂 Github
- Add workflow to lock closed issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11316](https://github.com/community-scripts/ProxmoxVE/pull/11316))
## 2026-01-28
### 🆕 New Scripts
- nodecast-tv ([#11287](https://github.com/community-scripts/ProxmoxVE/pull/11287))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Ubuntu 25.04 VM - Change default start from yes to no [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11292](https://github.com/community-scripts/ProxmoxVE/pull/11292))
- #### ✨ New Features - #### ✨ New Features
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259)) - various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
@@ -407,6 +457,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- core: sed patch for ram [@lavacano](https://github.com/lavacano) ([#11285](https://github.com/community-scripts/ProxmoxVE/pull/11285))
- Fix installer loop caused by invalid whiptail menu separator [@Mesteriis](https://github.com/Mesteriis) ([#11237](https://github.com/community-scripts/ProxmoxVE/pull/11237))
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277)) - core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271)) - tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254)) - tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
@@ -422,6 +474,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
### 🌐 Website ### 🌐 Website
- #### ✨ New Features
- Frontend: use github-versions.json for version display [@MickLesk](https://github.com/MickLesk) ([#11281](https://github.com/community-scripts/ProxmoxVE/pull/11281))
- #### 📝 Script Information - #### 📝 Script Information
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253)) - fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))

73
ct/alpine-valkey.sh Normal file
View File

@@ -0,0 +1,73 @@
#!/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: pshankinclarke (lazarillo)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://valkey.io/
APP="Alpine-Valkey"
var_tags="${var_tags:-alpine;database}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.23}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Valkey Management" --menu "Select option" 11 58 3 \
"1" "Update Valkey" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
msg_info "Updating Valkey"
apk update && apk upgrade valkey
rc-service valkey restart
msg_ok "Updated Valkey"
msg_ok "Updated successfully!"
exit
;;
2)
msg_info "Setting Valkey to listen on all interfaces"
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens on all interfaces!"
exit
;;
3)
msg_info "Setting Valkey to listen only on ${LXCIP}"
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens only on ${LXCIP}!"
exit
;;
esac
done
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${APP} should be reachable on port 6379.
${BL}valkey-cli -h ${IP} -p 6379${CL} \n"

View File

@@ -35,6 +35,54 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
if ! dpkg -l | grep -q ffmpeg; then
msg_info "Installing dependencies"
$STD apt install -y --no-install-recommends \
ffmpeg \
libatk1.0-0 \
libcairo-gobject2 \
libcairo2 \
libdbus-glib-1-2 \
libfontconfig1 \
libfreetype6 \
libgdk-pixbuf-xlib-2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libpangoft2-1.0-0 \
libx11-6 \
libx11-xcb1 \
libxcb-shm0 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrender1 \
libxt6 \
libxtst6 \
xvfb \
fonts-noto-color-emoji \
fonts-unifont \
xfonts-cyrillic \
xfonts-scalable \
fonts-liberation \
fonts-ipafont-gothic \
fonts-wqy-zenhei \
fonts-tlwg-loma-otf
$STD apt autoremove -y chromium
msg_ok "Installed dependencies"
fi
msg_info "Configuring Byparr"
cd /opt/Byparr
$STD uv sync --link-mode copy
$STD uv run camoufox fetch
msg_ok "Configured Byparr"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start byparr systemctl start byparr
msg_ok "Started Service" msg_ok "Started Service"

6
ct/headers/alpine-valkey Normal file
View File

@@ -0,0 +1,6 @@
___ __ _ _ __ ____
/ | / /___ (_)___ ___ | | / /___ _/ / /_____ __ __
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / //_/ _ \/ / / /
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / / ,< / __/ /_/ /
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/_/_/|_|\___/\__, /
/_/ /____/

6
ct/headers/nodecast-tv Normal file
View File

@@ -0,0 +1,6 @@
__ __ __
____ ____ ____/ /__ _________ ______/ /_ / /__ __
/ __ \/ __ \/ __ / _ \/ ___/ __ `/ ___/ __/_____/ __/ | / /
/ / / / /_/ / /_/ / __/ /__/ /_/ (__ ) /_/_____/ /_ | |/ /
/_/ /_/\____/\__,_/\___/\___/\__,_/____/\__/ \__/ |___/

View File

@@ -68,7 +68,7 @@ EOF
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
msg_info "Installing Mise" msg_info "Installing Mise"
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" | tee /etc/apt/sources.list.d/mise.list echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list
$STD apt update $STD apt update
$STD apt install -y mise $STD apt install -y mise
msg_ok "Installed Mise" msg_ok "Installed Mise"
@@ -112,8 +112,16 @@ EOF
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="2.4.1" RELEASE="2.5.2"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
msg_info "Enabling Maintenance Mode"
cd /opt/immich/app/bin
$STD bash ./immich-admin enable-maintenance-mode
export MAINT_MODE=1
$STD cd -
msg_ok "Enabled Maintenance Mode"
fi
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop immich-web systemctl stop immich-web
systemctl stop immich-ml systemctl stop immich-ml
@@ -167,7 +175,7 @@ EOF
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
msg_info "Updating ${APP} web and microservices" msg_info "Updating Immich web and microservices"
cd "$SRC_DIR"/server cd "$SRC_DIR"/server
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
export CI=1 export CI=1
@@ -209,7 +217,7 @@ EOF
mkdir -p "$PLUGIN_DIR" mkdir -p "$PLUGIN_DIR"
cp -r ./dist "$PLUGIN_DIR"/dist cp -r ./dist "$PLUGIN_DIR"/dist
cp ./manifest.json "$PLUGIN_DIR" cp ./manifest.json "$PLUGIN_DIR"
msg_ok "Updated ${APP} server, web, cli and plugins" msg_ok "Updated Immich server, web, cli and plugins"
cd "$SRC_DIR"/machine-learning cd "$SRC_DIR"/machine-learning
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR" mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
@@ -217,12 +225,13 @@ EOF
export VIRTUAL_ENV="${ML_DIR}"/ml-venv export VIRTUAL_ENV="${ML_DIR}"/ml-venv
if [[ -f ~/.openvino ]]; then if [[ -f ~/.openvino ]]; then
msg_info "Updating HW-accelerated machine-learning" msg_info "Updating HW-accelerated machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --active -n -p python3.11 --managed-python $STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so" $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
msg_ok "Updated HW-accelerated machine-learning" msg_ok "Updated HW-accelerated machine-learning"
else else
msg_info "Updating machine-learning" msg_info "Updating machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --active -n -p python3.11 --managed-python $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p python3.11 --managed-python
msg_ok "Updated machine-learning" msg_ok "Updated machine-learning"
fi fi
cd "$SRC_DIR" cd "$SRC_DIR"
@@ -241,8 +250,16 @@ EOF
ln -s "$GEO_DIR" "$APP_DIR" ln -s "$GEO_DIR" "$APP_DIR"
chown -R immich:immich "$INSTALL_DIR" chown -R immich:immich "$INSTALL_DIR"
msg_ok "Updated ${APP} to v${RELEASE}" if [[ "$MAINT_MODE" == 1 ]]; then
msg_info "Disabling Maintenance Mode"
cd /opt/immich/app/bin
$STD bash ./immich-admin disable-maintenance-mode
unset MAINT_MODE
$STD cd -
msg_ok "Disabled Maintenance Mode"
fi
systemctl restart immich-ml immich-web systemctl restart immich-ml immich-web
msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -31,7 +31,9 @@ function update_script() {
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Service" msg_ok "Stopped Service"
PHP_VERSION="8.5" PHP_APACHE="YES" PHP_MODULE="apcu,ctype,dom,fileinfo,iconv,pgsql" setup_php
msg_info "Creating a backup" msg_info "Creating a backup"
mv /opt/koillection/ /opt/koillection-backup mv /opt/koillection/ /opt/koillection-backup
msg_ok "Backup created" msg_ok "Backup created"

60
ct/nodecast-tv.sh Normal file
View File

@@ -0,0 +1,60 @@
#!/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: luismco
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/technomancer702/nodecast-tv
APP="nodecast-tv"
var_tags="${var_tags:-media}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/nodecast-tv ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "nodecast-tv" "technomancer702/nodecast-tv"; then
msg_info "Stopping Service"
systemctl stop nodecast-tv
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
msg_info "Updating Modules"
cd /opt/nodecast-tv
$STD npm install
msg_ok "Updated Modules"
msg_info "Starting Service"
systemctl start nodecast-tv
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}:3000${CL}"

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/apt/sources.list.d/golift.list ]]; then if [[ ! -f /usr/lib/systemd/system/notifiarr.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (Canbiz) # Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://vikunja.io/ # Source: https://vikunja.io/
@@ -27,30 +27,51 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then RELEASE="$( [[ -f "$HOME/.vikunja" ]] && cat "$HOME/.vikunja" 2>/dev/null || [[ -f /opt/Vikunja_version ]] && cat /opt/Vikunja_version 2>/dev/null || true)"
if [[ -z "$RELEASE" ]] || [[ "$RELEASE" == "unstable" ]] || dpkg --compare-versions "${RELEASE:-0.0.0}" lt "1.0.0"; then
msg_warn "You are upgrading from Vikunja '$RELEASE'."
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
read -rp "Continue with update? (y to proceed): " -t 30 CONFIRM1 || exit 1
[[ "$CONFIRM1" =~ ^[yY]$ ]] || exit 0
echo
msg_warn "Vikunja may not start after the update until you manually adjust the config."
msg_warn "Details: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
read -rp "Acknowledge and continue? (y): " -t 30 CONFIRM2 || exit 1
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
fi
if check_for_gh_release "vikunja" "go-vikunja/vikunja"; then
echo
msg_warn "The package update may include config file changes."
echo -e "${TAB}${YW}How do you want to handle /etc/vikunja/config.yml?${CL}"
echo -e "${TAB} 1) Keep your current config"
echo -e "${TAB} 2) Install the new package maintainer's config"
read -rp " Choose [1/2] (default: 1): " -t 60 CONFIG_CHOICE || CONFIG_CHOICE="1"
[[ -z "$CONFIG_CHOICE" ]] && CONFIG_CHOICE="1"
if [[ "$CONFIG_CHOICE" == "2" ]]; then
export DPKG_FORCE_CONFNEW="1"
else
export DPKG_FORCE_CONFOLD="1"
fi
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop vikunja systemctl stop vikunja
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating ${APP} to ${RELEASE}" fetch_and_deploy_gh_release "vikunja" "go-vikunja/vikunja" "binary"
cd /opt
rm -rf /opt/vikunja/vikunja
curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o $(basename "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb")
export DEBIAN_FRONTEND=noninteractive
$STD dpkg -i vikunja-"$RELEASE"-amd64.deb
rm -rf /opt/vikunja-"$RELEASE"-amd64.deb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start vikunja systemctl start vikunja
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit 0
} }
start start

View File

@@ -33,7 +33,11 @@
}, },
"notes": [ "notes": [
{ {
"text": "With an option to configure cloudflared as a DNS-over-HTTPS (DoH) proxy", "text": "After install, run: cloudflared tunnel login && cloudflared tunnel create <NAME>",
"type": "info"
},
{
"text": "Or create tunnel via Cloudflare Zero Trust Dashboard",
"type": "info" "type": "info"
} }
] ]

View File

@@ -1,5 +1,5 @@
{ {
"generated": "2026-01-28T12:56:09Z", "generated": "2026-01-30T06:16:23Z",
"versions": [ "versions": [
{ {
"slug": "2fauth", "slug": "2fauth",
@@ -137,9 +137,9 @@
{ {
"slug": "bookstack", "slug": "bookstack",
"repo": "BookStackApp/BookStack", "repo": "BookStackApp/BookStack",
"version": "v25.12.2", "version": "v25.12.3",
"pinned": false, "pinned": false,
"date": "2026-01-24T14:01:03Z" "date": "2026-01-29T15:29:25Z"
}, },
{ {
"slug": "byparr", "slug": "byparr",
@@ -179,9 +179,9 @@
{ {
"slug": "comfyui", "slug": "comfyui",
"repo": "comfyanonymous/ComfyUI", "repo": "comfyanonymous/ComfyUI",
"version": "v0.11.0", "version": "v0.11.1",
"pinned": false, "pinned": false,
"date": "2026-01-27T06:23:53Z" "date": "2026-01-29T07:52:21Z"
}, },
{ {
"slug": "commafeed", "slug": "commafeed",
@@ -235,9 +235,9 @@
{ {
"slug": "discopanel", "slug": "discopanel",
"repo": "nickheyer/discopanel", "repo": "nickheyer/discopanel",
"version": "v1.0.27", "version": "v1.0.29",
"pinned": false, "pinned": false,
"date": "2026-01-28T04:32:34Z" "date": "2026-01-30T04:58:19Z"
}, },
{ {
"slug": "dispatcharr", "slug": "dispatcharr",
@@ -403,9 +403,9 @@
{ {
"slug": "gokapi", "slug": "gokapi",
"repo": "Forceu/Gokapi", "repo": "Forceu/Gokapi",
"version": "v2.1.0", "version": "v2.2.0",
"pinned": false, "pinned": false,
"date": "2025-08-29T12:45:42Z" "date": "2026-01-28T23:59:22Z"
}, },
{ {
"slug": "gotify", "slug": "gotify",
@@ -515,9 +515,9 @@
{ {
"slug": "immich", "slug": "immich",
"repo": "immich-app/immich", "repo": "immich-app/immich",
"version": "v2.4.1", "version": "v2.5.2",
"pinned": true, "pinned": true,
"date": "2025-12-19T15:50:12Z" "date": "2026-01-29T15:24:34Z"
}, },
{ {
"slug": "inspircd", "slug": "inspircd",
@@ -543,9 +543,9 @@
{ {
"slug": "jackett", "slug": "jackett",
"repo": "Jackett/Jackett", "repo": "Jackett/Jackett",
"version": "v0.24.955", "version": "v0.24.988",
"pinned": false, "pinned": false,
"date": "2026-01-27T11:04:42Z" "date": "2026-01-30T05:55:43Z"
}, },
{ {
"slug": "joplin-server", "slug": "joplin-server",
@@ -641,9 +641,9 @@
{ {
"slug": "leantime", "slug": "leantime",
"repo": "Leantime/leantime", "repo": "Leantime/leantime",
"version": "v3.6.0", "version": "v3.6.2",
"pinned": false, "pinned": false,
"date": "2026-01-22T15:16:00Z" "date": "2026-01-29T16:37:00Z"
}, },
{ {
"slug": "librenms", "slug": "librenms",
@@ -732,9 +732,9 @@
{ {
"slug": "manyfold", "slug": "manyfold",
"repo": "manyfold3d/manyfold", "repo": "manyfold3d/manyfold",
"version": "v0.131.0", "version": "v0.132.0",
"pinned": false, "pinned": false,
"date": "2026-01-09T15:00:15Z" "date": "2026-01-29T13:53:21Z"
}, },
{ {
"slug": "mealie", "slug": "mealie",
@@ -760,9 +760,9 @@
{ {
"slug": "meilisearch", "slug": "meilisearch",
"repo": "riccox/meilisearch-ui", "repo": "riccox/meilisearch-ui",
"version": "v0.14.1", "version": "v0.15.0",
"pinned": false, "pinned": false,
"date": "2025-09-22T06:44:33Z" "date": "2026-01-29T03:54:27Z"
}, },
{ {
"slug": "memos", "slug": "memos",
@@ -774,9 +774,9 @@
{ {
"slug": "metube", "slug": "metube",
"repo": "alexta69/metube", "repo": "alexta69/metube",
"version": "2026.01.11", "version": "2026.01.30",
"pinned": false, "pinned": false,
"date": "2026-01-11T18:43:56Z" "date": "2026-01-30T00:17:52Z"
}, },
{ {
"slug": "miniflux", "slug": "miniflux",
@@ -837,9 +837,16 @@
{ {
"slug": "nodebb", "slug": "nodebb",
"repo": "NodeBB/NodeBB", "repo": "NodeBB/NodeBB",
"version": "v4.8.0", "version": "v4.8.1",
"pinned": false, "pinned": false,
"date": "2026-01-14T17:54:36Z" "date": "2026-01-28T14:19:11Z"
},
{
"slug": "nodecast-tv",
"repo": "technomancer702/nodecast-tv",
"version": "v2.1.1",
"pinned": false,
"date": "2026-01-19T23:30:29Z"
}, },
{ {
"slug": "oauth2-proxy", "slug": "oauth2-proxy",
@@ -1089,9 +1096,9 @@
{ {
"slug": "pve-scripts-local", "slug": "pve-scripts-local",
"repo": "community-scripts/ProxmoxVE-Local", "repo": "community-scripts/ProxmoxVE-Local",
"version": "v0.5.5", "version": "v0.5.6",
"pinned": false, "pinned": false,
"date": "2026-01-13T17:03:32Z" "date": "2026-01-29T15:08:44Z"
}, },
{ {
"slug": "qbittorrent", "slug": "qbittorrent",
@@ -1110,9 +1117,9 @@
{ {
"slug": "qui", "slug": "qui",
"repo": "autobrr/qui", "repo": "autobrr/qui",
"version": "v1.13.0", "version": "v1.13.1",
"pinned": false, "pinned": false,
"date": "2026-01-27T20:32:22Z" "date": "2026-01-28T20:12:50Z"
}, },
{ {
"slug": "radarr", "slug": "radarr",
@@ -1264,9 +1271,9 @@
{ {
"slug": "stirling-pdf", "slug": "stirling-pdf",
"repo": "Stirling-Tools/Stirling-PDF", "repo": "Stirling-Tools/Stirling-PDF",
"version": "v2.4.0", "version": "v2.4.2",
"pinned": false, "pinned": false,
"date": "2026-01-24T00:51:05Z" "date": "2026-01-29T23:11:15Z"
}, },
{ {
"slug": "streamlink-webui", "slug": "streamlink-webui",
@@ -1285,9 +1292,9 @@
{ {
"slug": "tandoor", "slug": "tandoor",
"repo": "TandoorRecipes/recipes", "repo": "TandoorRecipes/recipes",
"version": "2.3.6", "version": "2.4.0",
"pinned": false, "pinned": false,
"date": "2025-11-24T19:40:27Z" "date": "2026-01-28T17:07:16Z"
}, },
{ {
"slug": "tasmoadmin", "slug": "tasmoadmin",
@@ -1355,9 +1362,9 @@
{ {
"slug": "tracearr", "slug": "tracearr",
"repo": "connorgallopo/Tracearr", "repo": "connorgallopo/Tracearr",
"version": "v1.4.10", "version": "v1.4.12",
"pinned": false, "pinned": false,
"date": "2026-01-28T06:37:35Z" "date": "2026-01-28T23:29:37Z"
}, },
{ {
"slug": "tracktor", "slug": "tracktor",
@@ -1383,9 +1390,9 @@
{ {
"slug": "trip", "slug": "trip",
"repo": "itskovacs/TRIP", "repo": "itskovacs/TRIP",
"version": "1.36.1", "version": "1.37.0",
"pinned": false, "pinned": false,
"date": "2026-01-26T17:41:48Z" "date": "2026-01-28T22:19:14Z"
}, },
{ {
"slug": "tududi", "slug": "tududi",
@@ -1397,9 +1404,9 @@
{ {
"slug": "tunarr", "slug": "tunarr",
"repo": "chrisbenincasa/tunarr", "repo": "chrisbenincasa/tunarr",
"version": "v1.1.6", "version": "v1.1.10",
"pinned": false, "pinned": false,
"date": "2026-01-23T18:09:11Z" "date": "2026-01-30T02:10:02Z"
}, },
{ {
"slug": "uhf", "slug": "uhf",
@@ -1450,6 +1457,13 @@
"pinned": false, "pinned": false,
"date": "2026-01-19T13:29:43Z" "date": "2026-01-19T13:29:43Z"
}, },
{
"slug": "vikunja",
"repo": "go-vikunja/vikunja",
"version": "v1.0.0",
"pinned": false,
"date": "2026-01-28T11:12:59Z"
},
{ {
"slug": "wallabag", "slug": "wallabag",
"repo": "wallabag/wallabag", "repo": "wallabag/wallabag",
@@ -1467,9 +1481,9 @@
{ {
"slug": "wanderer", "slug": "wanderer",
"repo": "meilisearch/meilisearch", "repo": "meilisearch/meilisearch",
"version": "v1.34.2", "version": "v1.34.3",
"pinned": false, "pinned": false,
"date": "2026-01-28T08:20:49Z" "date": "2026-01-28T17:52:24Z"
}, },
{ {
"slug": "warracker", "slug": "warracker",
@@ -1530,9 +1544,9 @@
{ {
"slug": "yubal", "slug": "yubal",
"repo": "guillevc/yubal", "repo": "guillevc/yubal",
"version": "v0.3.0", "version": "v0.3.1",
"pinned": false, "pinned": false,
"date": "2026-01-26T23:05:35Z" "date": "2026-01-29T12:45:35Z"
}, },
{ {
"slug": "zigbee2mqtt", "slug": "zigbee2mqtt",
@@ -1558,9 +1572,9 @@
{ {
"slug": "zoraxy", "slug": "zoraxy",
"repo": "tobychui/zoraxy", "repo": "tobychui/zoraxy",
"version": "v3.3.1-rc3", "version": "v3.3.1",
"pinned": false, "pinned": false,
"date": "2026-01-24T14:31:01Z" "date": "2026-01-28T13:52:02Z"
}, },
{ {
"slug": "zwave-js-ui", "slug": "zwave-js-ui",
@@ -1569,6 +1583,5 @@
"pinned": false, "pinned": false,
"date": "2026-01-15T15:58:06Z" "date": "2026-01-15T15:58:06Z"
} }
], ]
"date_created": "2026-01-28"
} }

View File

@@ -43,6 +43,10 @@
{ {
"text": "For NVIDIA graphics cards, you'll need to install the same drivers in the container that you did on the host. In the container, run the driver installation script and add the CLI arg --no-kernel-module", "text": "For NVIDIA graphics cards, you'll need to install the same drivers in the container that you did on the host. In the container, run the driver installation script and add the CLI arg --no-kernel-module",
"type": "info" "type": "info"
},
{
"text": "Log rotation is configured in /etc/logrotate.d/jellyfin. To reduce verbosity, change MinimumLevel in /etc/jellyfin/logging.json to Warning or Error (disables fail2ban auth logging).",
"type": "info"
} }
] ]
} }

View File

@@ -0,0 +1,35 @@
{
"name": "nodecast-tv",
"slug": "nodecast-tv",
"categories": [
13
],
"date_created": "2026-01-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/technomancer702/nodecast-tv/blob/main/README.md",
"website": "https://github.com/technomancer702/nodecast-tv",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nodecast-tv.webp",
"config_path": "",
"description": "nodecast-tv is a modern, web-based IPTV player featuring Live TV, EPG, Movies (VOD), and Series support. Built with performance and user experience in mind.",
"install_methods": [
{
"type": "default",
"script": "ct/nodecast-tv.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -25,6 +25,17 @@
"os": "Debian", "os": "Debian",
"version": "13" "version": "13"
} }
},
{
"type": "alpine",
"script": "ct/alpine-valkey.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.23"
}
} }
], ],
"default_credentials": { "default_credentials": {
@@ -35,6 +46,10 @@
{ {
"text": "Show Login Credentials, type `cat ~/valkey.creds` in the LXC console", "text": "Show Login Credentials, type `cat ~/valkey.creds` in the LXC console",
"type": "info" "type": "info"
},
{
"text": "Alpines Valkey package is compiled without TLS support. For TLS, use the Debian-based valkey script instead.",
"type": "info"
} }
] ]
} }

View File

@@ -0,0 +1,45 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: pshankinclarke (lazarillo)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://valkey.io/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Valkey"
$STD apk add valkey valkey-openrc valkey-cli
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
PASS="$(head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c32)"
echo "requirepass $PASS" >>/etc/valkey/valkey.conf
echo "$PASS" >~/valkey.creds
chmod 600 ~/valkey.creds
MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}')
MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100))
{
echo ""
echo "# Memory-optimized settings for small-scale deployments"
echo "maxmemory ${MAXMEMORY_MB}mb"
echo "maxmemory-policy allkeys-lru"
echo "maxmemory-samples 10"
} >>/etc/valkey/valkey.conf
msg_ok "Installed Valkey"
# Note: Alpine's valkey package is compiled without TLS support
# For TLS, use the Debian-based valkey script instead
$STD rc-update add valkey default
$STD rc-service valkey start
motd_ssh
customize
cleanup_lxc

View File

@@ -14,17 +14,52 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt -y install \ $STD apt -y install --no-install-recommends \
xauth \ ffmpeg \
xvfb \ libatk1.0-0 \
scrot \ libcairo-gobject2 \
chromium \ libcairo2 \
chromium-driver \ libdbus-glib-1-2 \
ca-certificates libfontconfig1 \
libfreetype6 \
libgdk-pixbuf-xlib-2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libpangoft2-1.0-0 \
libx11-6 \
libx11-xcb1 \
libxcb-shm0 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrender1 \
libxt6 \
libxtst6 \
xvfb \
fonts-noto-color-emoji \
fonts-unifont \
xfonts-cyrillic \
xfonts-scalable \
fonts-liberation \
fonts-ipafont-gothic \
fonts-wqy-zenhei \
fonts-tlwg-loma-otf
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
setup_uv setup_uv
fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
msg_info "Configuring Byparr"
cd /opt/Byparr
$STD uv sync --link-mode copy
$STD uv run camoufox fetch
msg_ok "Configured Byparr"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/byparr.service cat <<EOF >/etc/systemd/system/byparr.service

View File

@@ -23,41 +23,6 @@ setup_deb822_repo \
$STD apt install -y cloudflared $STD apt install -y cloudflared
msg_ok "Installed Cloudflared" msg_ok "Installed Cloudflared"
read -r -p "${TAB3}Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Creating Service"
cat <<EOF >/usr/local/etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-address: 0.0.0.0
proxy-dns-port: 53
proxy-dns-max-upstream-conns: 5
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
#- https://8.8.8.8/dns-query
#- https://8.8.4.4/dns-query
#- https://9.9.9.9/dns-query
#- https://149.112.112.112/dns-query
EOF
cat <<EOF >/etc/systemd/system/cloudflared.service
[Unit]
Description=cloudflared DNS-over-HTTPS (DoH) proxy
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/cloudflared --config /usr/local/etc/cloudflared/config.yml
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cloudflared
msg_ok "Created Service"
fi
motd_ssh motd_ssh
customize customize
cleanup_lxc cleanup_lxc

View File

@@ -13,6 +13,42 @@ setting_up_container
network_check network_check
update_os update_os
echo ""
echo ""
echo -e "🤖 ${BL}Immich Machine Learning Options${CL}"
echo "─────────────────────────────────────────"
echo "Please choose your machine-learning type:"
echo ""
echo " 1) CPU only (default)"
echo " 2) Intel OpenVINO (requires GPU passthrough)"
echo ""
read -r -p "${TAB3}Select machine-learning type [1]: " ML_TYPE
ML_TYPE="${ML_TYPE:-1}"
if [[ "$ML_TYPE" == "2" ]]; then
msg_info "Installing OpenVINO dependencies"
touch ~/.openvino
$STD apt install -y --no-install-recommends patchelf
tmp_dir=$(mktemp -d)
$STD pushd "$tmp_dir"
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
readarray -t INTEL_URLS < <(
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
)
for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url"
done
$STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb
$STD apt install -y ./*.deb
$STD apt-mark hold libigdgmm12
$STD popd
rm -rf "$tmp_dir"
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
msg_ok "Installed OpenVINO dependencies"
fi
setup_uv setup_uv
msg_info "Installing dependencies" msg_info "Installing dependencies"
@@ -86,36 +122,11 @@ msg_ok "Dependencies Installed"
msg_info "Installing Mise" msg_info "Installing Mise"
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" | tee /etc/apt/sources.list.d/mise.list echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list
$STD apt update $STD apt update
$STD apt install -y mise $STD apt install -y mise
msg_ok "Installed Mise" msg_ok "Installed Mise"
read -r -p "${TAB3}Install OpenVINO dependencies for Intel HW-accelerated machine-learning? y/N " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing OpenVINO dependencies"
touch ~/.openvino
$STD apt install -y --no-install-recommends patchelf
tmp_dir=$(mktemp -d)
$STD pushd "$tmp_dir"
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
readarray -t INTEL_URLS < <(
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
)
for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url"
done
$STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb
$STD apt install -y ./*.deb
$STD apt-mark hold libigdgmm12
$STD popd
rm -rf "$tmp_dir"
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
msg_ok "Installed OpenVINO dependencies"
fi
msg_info "Configuring Debian Testing Repo" msg_info "Configuring Debian Testing Repo"
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
cat <<EOF >/etc/apt/preferences.d/preferences cat <<EOF >/etc/apt/preferences.d/preferences
@@ -137,28 +148,17 @@ PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
msg_info "Setting up Postgresql Database"
VCHORD_RELEASE="0.5.3" VCHORD_RELEASE="0.5.3"
msg_info "Installing Vectorchord v${VCHORD_RELEASE}"
curl -fsSL "https://github.com/tensorchord/VectorChord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb curl -fsSL "https://github.com/tensorchord/VectorChord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
$STD apt install -y ./vchord.deb $STD apt install -y ./vchord.deb
rm vchord.deb rm vchord.deb
echo "$VCHORD_RELEASE" >~/.vchord_version echo "$VCHORD_RELEASE" >~/.vchord_version
DB_NAME="immich" msg_ok "Installed Vectorchord v${VCHORD_RELEASE}"
DB_USER="immich"
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c18)
sed -i -e "/^#shared_preload/s/^#//;/^shared_preload/s/''/'vchord.so'/" /etc/postgresql/16/main/postgresql.conf sed -i -e "/^#shared_preload/s/^#//;/^shared_preload/s/''/'vchord.so'/" /etc/postgresql/16/main/postgresql.conf
systemctl restart postgresql.service systemctl restart postgresql.service
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';" PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
{
echo "${APPLICATION} DB Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
} >>~/"$APPLICATION".creds
msg_ok "Set up Postgresql Database"
msg_info "Compiling Custom Photo-processing Library (extreme patience)" msg_info "Compiling Custom Photo-processing Library (extreme patience)"
LD_LIBRARY_PATH=/usr/local/lib LD_LIBRARY_PATH=/usr/local/lib
@@ -296,9 +296,9 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.4.1" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.5.2" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)" msg_info "Installing Immich (patience)"
cd "$SRC_DIR"/server cd "$SRC_DIR"/server
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
@@ -347,12 +347,13 @@ mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR"
export VIRTUAL_ENV="${ML_DIR}/ml-venv" export VIRTUAL_ENV="${ML_DIR}/ml-venv"
if [[ -f ~/.openvino ]]; then if [[ -f ~/.openvino ]]; then
msg_info "Installing HW-accelerated machine-learning" msg_info "Installing HW-accelerated machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --active -n -p python3.11 --managed-python $STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so" $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
msg_ok "Installed HW-accelerated machine-learning" msg_ok "Installed HW-accelerated machine-learning"
else else
msg_info "Installing machine-learning" msg_info "Installing machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --active -n -p python3.11 --managed-python $STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p python3.11 --managed-python
msg_ok "Installed machine-learning" msg_ok "Installed machine-learning"
fi fi
cd "$SRC_DIR" cd "$SRC_DIR"
@@ -384,7 +385,7 @@ msg_ok "Installed GeoNames data"
mkdir -p /var/log/immich mkdir -p /var/log/immich
touch /var/log/immich/{web.log,ml.log} touch /var/log/immich/{web.log,ml.log}
msg_ok "Installed ${APPLICATION}" msg_ok "Installed Immich"
msg_info "Modifying user, creating env file, scripts & services" msg_info "Modifying user, creating env file, scripts & services"
usermod -aG video,render immich usermod -aG video,render immich
@@ -393,11 +394,12 @@ cat <<EOF >"${INSTALL_DIR}"/.env
TZ=$(cat /etc/timezone) TZ=$(cat /etc/timezone)
IMMICH_VERSION=release IMMICH_VERSION=release
NODE_ENV=production NODE_ENV=production
IMMICH_ALLOW_SETUP=true
DB_HOSTNAME=127.0.0.1 DB_HOSTNAME=127.0.0.1
DB_USERNAME=${DB_USER} DB_USERNAME=${PG_DB_USER}
DB_PASSWORD=${DB_PASS} DB_PASSWORD=${PG_DB_PASS}
DB_DATABASE_NAME=${DB_NAME} DB_DATABASE_NAME=${PG_DB_NAME}
DB_VECTOR_EXTENSION=vectorchord DB_VECTOR_EXTENSION=vectorchord
REDIS_HOSTNAME=127.0.0.1 REDIS_HOSTNAME=127.0.0.1

View File

@@ -39,8 +39,19 @@ EOF
$STD apt update $STD apt update
$STD apt install -y jellyfin $STD apt install -y jellyfin
sed -i 's/"MinimumLevel": "Information"/"MinimumLevel": "Error"/g' /etc/jellyfin/logging.json # Configure log rotation to prevent disk fill (keeps fail2ban compatibility) (PR: #1690 / Issue: #11224)
cat <<EOF >/etc/logrotate.d/jellyfin
/var/log/jellyfin/*.log {
daily
rotate 3
maxsize 100M
missingok
notifempty
compress
delaycompress
copytruncate
}
EOF
chown -R jellyfin:adm /etc/jellyfin chown -R jellyfin:adm /etc/jellyfin
sleep 10 sleep 10
systemctl restart jellyfin systemctl restart jellyfin

View File

@@ -15,7 +15,7 @@ update_os
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="apcu,ctype,dom,fileinfo,iconv,pgsql" setup_php PHP_VERSION="8.5" PHP_APACHE="YES" PHP_MODULE="apcu,ctype,dom,fileinfo,iconv,pgsql" setup_php
setup_composer setup_composer
msg_info "Setting up PostgreSQL" msg_info "Setting up PostgreSQL"

View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: luismco
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/technomancer702/nodecast-tv
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
setup_nodejs
msg_info "Installing Dependencies"
$STD apt install -y ffmpeg
msg_ok "Installed Dependencies"
msg_info "Installing Modules"
cd /opt/nodecast-tv
$STD npm install
msg_ok "Installed Modules"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/nodecast-tv.service
[Unit]
Description=nodecast-tv
After=network.target
Wants=network.target
[Service]
Type=simple
WorkingDirectory=/opt/nodecast-tv
ExecStart=/bin/npm run dev
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now nodecast-tv
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (Canbiz) # Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://vikunja.io/ # Source: https://vikunja.io/
@@ -13,22 +13,14 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies" fetch_and_deploy_gh_release "vikunja" "go-vikunja/vikunja" "binary"
$STD apt install -y make
msg_ok "Installed Dependencies"
msg_info "Setup Vikunja (Patience)" msg_info "Setting up Vikunja"
cd /opt sed -i 's|^# \(service:\)|\1|' /etc/vikunja/config.yml
RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1) sed -i "s|^ # \(publicurl: \).*| \1\"http://$LOCAL_IP\"|" /etc/vikunja/config.yml
curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o vikunja-"$RELEASE"-amd64.deb sed -i "0,/^ # \(timezone: \).*/s|| \1${tz}|" /etc/vikunja/config.yml
$STD dpkg -i vikunja-"$RELEASE"-amd64.deb systemctl enable -q --now vikunja
sed -i 's|^ timezone: .*| timezone: UTC|' /etc/vikunja/config.yml msg_ok "Set up Vikunja"
sed -i 's|"./vikunja.db"|"/etc/vikunja/vikunja.db"|' /etc/vikunja/config.yml
sed -i 's|./files|/etc/vikunja/files|' /etc/vikunja/config.yml
systemctl start vikunja.service
rm -rf /opt/vikunja-"$RELEASE"-amd64.deb
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Installed Vikunja"
motd_ssh motd_ssh
customize customize

View File

@@ -990,7 +990,7 @@ base_settings() {
fi fi
MTU=${var_mtu:-""} MTU=${var_mtu:-""}
SD=${var_storage:-""} SD=${var_searchdomain:-""}
NS=${var_ns:-""} NS=${var_ns:-""}
MAC=${var_mac:-""} MAC=${var_mac:-""}
VLAN=${var_vlan:-""} VLAN=${var_vlan:-""}
@@ -1817,7 +1817,7 @@ advanced_settings() {
if [[ -n "$BRIDGES" ]]; then if [[ -n "$BRIDGES" ]]; then
while IFS= read -r bridge; do while IFS= read -r bridge; do
if [[ -n "$bridge" ]]; then if [[ -n "$bridge" ]]; then
local description=$(grep -A 10 "iface $bridge" /etc/network/interfaces 2>/dev/null | grep '^#' | head -n1 | sed 's/^#\s*//') local description=$(grep -A 10 "iface $bridge" /etc/network/interfaces 2>/dev/null | grep '^#' | head -n1 | sed 's/^#\s*//;s/^[- ]*//')
BRIDGE_MENU_OPTIONS+=("$bridge" "${description:- }") BRIDGE_MENU_OPTIONS+=("$bridge" "${description:- }")
fi fi
done <<<"$BRIDGES" done <<<"$BRIDGES"
@@ -2049,6 +2049,10 @@ advanced_settings() {
"${BRIDGE_MENU_OPTIONS[@]}" \ "${BRIDGE_MENU_OPTIONS[@]}" \
3>&1 1>&2 2>&3); then 3>&1 1>&2 2>&3); then
local bridge_test="${result:-vmbr0}" local bridge_test="${result:-vmbr0}"
# Skip separator entries (e.g., __other__) - re-display menu
if [[ "$bridge_test" == "__other__" || "$bridge_test" == -* ]]; then
continue
fi
if validate_bridge "$bridge_test"; then if validate_bridge "$bridge_test"; then
_bridge="$bridge_test" _bridge="$bridge_test"
((STEP++)) ((STEP++))
@@ -3878,6 +3882,17 @@ EOF
fix_gpu_gids fix_gpu_gids
# Fix Debian 13 LXC template bug where / is owned by nobody:nogroup
# This must be done from the host as unprivileged containers cannot chown /
local rootfs
rootfs=$(pct config "$CTID" | grep -E '^rootfs:' | sed 's/rootfs: //' | cut -d',' -f1)
if [[ -n "$rootfs" ]]; then
local mount_point="/var/lib/lxc/${CTID}/rootfs"
if [[ -d "$mount_point" ]] && [[ "$(stat -c '%U' "$mount_point")" != "root" ]]; then
chown root:root "$mount_point" 2>/dev/null || true
fi
fi
# Continue with standard container setup # Continue with standard container setup
msg_info "Customizing LXC Container" msg_info "Customizing LXC Container"

View File

@@ -81,8 +81,9 @@ setting_up_container() {
msg_info "Setting up Container OS" msg_info "Setting up Container OS"
# Fix Debian 13 LXC template bug where / is owned by nobody # Fix Debian 13 LXC template bug where / is owned by nobody
# Only attempt in privileged containers (unprivileged cannot chown /)
if [[ "$(stat -c '%U' /)" != "root" ]]; then if [[ "$(stat -c '%U' /)" != "root" ]]; then
chown root:root / (chown root:root / 2>/dev/null) || true
fi fi
for ((i = RETRY_NUM; i > 0; i--)); do for ((i = RETRY_NUM; i > 0; i--)); do

View File

@@ -1846,7 +1846,11 @@ function fetch_and_deploy_gh_release() {
chmod 644 "$tmpdir/$filename" chmod 644 "$tmpdir/$filename"
# SYSTEMD_OFFLINE=1 prevents systemd-tmpfiles failures in unprivileged LXC (Debian 13+/systemd 257+) # SYSTEMD_OFFLINE=1 prevents systemd-tmpfiles failures in unprivileged LXC (Debian 13+/systemd 257+)
SYSTEMD_OFFLINE=1 $STD apt install -y "$tmpdir/$filename" || { # Support DPKG_CONFOLD/DPKG_CONFNEW env vars for config file handling during .deb upgrades
local dpkg_opts=""
[[ "${DPKG_FORCE_CONFOLD:-}" == "1" ]] && dpkg_opts="-o Dpkg::Options::=--force-confold"
[[ "${DPKG_FORCE_CONFNEW:-}" == "1" ]] && dpkg_opts="-o Dpkg::Options::=--force-confnew"
DEBIAN_FRONTEND=noninteractive SYSTEMD_OFFLINE=1 $STD apt install -y $dpkg_opts "$tmpdir/$filename" || {
SYSTEMD_OFFLINE=1 $STD dpkg -i "$tmpdir/$filename" || { SYSTEMD_OFFLINE=1 $STD dpkg -i "$tmpdir/$filename" || {
msg_error "Both apt and dpkg installation failed" msg_error "Both apt and dpkg installation failed"
rm -rf "$tmpdir" rm -rf "$tmpdir"
@@ -4456,6 +4460,8 @@ function setup_nodejs() {
# - Adds Sury PHP repo if needed # - Adds Sury PHP repo if needed
# - Installs default and user-defined modules # - Installs default and user-defined modules
# - Patches php.ini for CLI, Apache, and FPM as needed # - Patches php.ini for CLI, Apache, and FPM as needed
# - Handles built-in modules gracefully (e.g., opcache in PHP 8.5+)
# - Skips unavailable packages without failing
# #
# Variables: # Variables:
# PHP_VERSION - PHP version to install (default: 8.4) # PHP_VERSION - PHP version to install (default: 8.4)
@@ -4466,6 +4472,17 @@ function setup_nodejs() {
# PHP_UPLOAD_MAX_FILESIZE - (default: 128M) # PHP_UPLOAD_MAX_FILESIZE - (default: 128M)
# PHP_POST_MAX_SIZE - (default: 128M) # PHP_POST_MAX_SIZE - (default: 128M)
# PHP_MAX_EXECUTION_TIME - (default: 300) # PHP_MAX_EXECUTION_TIME - (default: 300)
#
# Notes on modules:
# - Base modules (always installed): bcmath, cli, curl, gd, intl, mbstring,
# readline, xml, zip, common
# - Extended modules (commonly needed): mysql, sqlite3, pgsql, redis,
# imagick, bz2, ldap, soap, imap, gmp, apcu
# - Some modules are built-in depending on PHP version:
# * PHP 8.5+: opcache is built-in (no separate package)
# * All versions: ctype, fileinfo, iconv, tokenizer, phar, posix, etc.
# are part of php-common
# - Unavailable modules are skipped with a warning, not an error
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function setup_php() { function setup_php() {
@@ -4477,23 +4494,69 @@ function setup_php() {
DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"') DISTRO_ID=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '"')
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release) DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
local DEFAULT_MODULES="bcmath,cli,curl,gd,intl,mbstring,opcache,readline,xml,zip" # Parse version for compatibility checks
local COMBINED_MODULES local PHP_MAJOR="${PHP_VERSION%%.*}"
local PHP_MINOR="${PHP_VERSION#*.}"
PHP_MINOR="${PHP_MINOR%%.*}"
# Modules that are ALWAYS part of php-common (no separate package needed)
# These are either built-in or virtual packages provided by php-common
local BUILTIN_MODULES="calendar,ctype,exif,ffi,fileinfo,ftp,gettext,iconv,pdo,phar,posix,shmop,sockets,sysvmsg,sysvsem,sysvshm,tokenizer"
# Modules that became built-in in specific PHP versions
# PHP 8.5+: opcache is now part of the core
local BUILTIN_85=""
if [[ "$PHP_MAJOR" -gt 8 ]] || [[ "$PHP_MAJOR" -eq 8 && "$PHP_MINOR" -ge 5 ]]; then
BUILTIN_85="opcache"
fi
# Base modules - essential for most PHP applications
# Note: 'common' provides many built-in extensions
local BASE_MODULES="cli,common,bcmath,curl,gd,intl,mbstring,readline,xml,zip"
# Add opcache only for PHP < 8.5 (it's built-in starting from 8.5)
if [[ "$PHP_MAJOR" -lt 8 ]] || [[ "$PHP_MAJOR" -eq 8 && "$PHP_MINOR" -lt 5 ]]; then
BASE_MODULES="${BASE_MODULES},opcache"
fi
# Extended default modules - commonly needed by web applications
# These cover ~90% of typical use cases without bloat
local EXTENDED_MODULES="mysql,sqlite3,pgsql,redis,imagick,bz2,apcu"
local COMBINED_MODULES="${BASE_MODULES},${EXTENDED_MODULES}"
local PHP_MEMORY_LIMIT="${PHP_MEMORY_LIMIT:-512M}" local PHP_MEMORY_LIMIT="${PHP_MEMORY_LIMIT:-512M}"
local PHP_UPLOAD_MAX_FILESIZE="${PHP_UPLOAD_MAX_FILESIZE:-128M}" local PHP_UPLOAD_MAX_FILESIZE="${PHP_UPLOAD_MAX_FILESIZE:-128M}"
local PHP_POST_MAX_SIZE="${PHP_POST_MAX_SIZE:-128M}" local PHP_POST_MAX_SIZE="${PHP_POST_MAX_SIZE:-128M}"
local PHP_MAX_EXECUTION_TIME="${PHP_MAX_EXECUTION_TIME:-300}" local PHP_MAX_EXECUTION_TIME="${PHP_MAX_EXECUTION_TIME:-300}"
# Merge default + user-defined modules # Merge with user-defined modules
if [[ -n "$PHP_MODULE" ]]; then if [[ -n "$PHP_MODULE" ]]; then
COMBINED_MODULES="${DEFAULT_MODULES},${PHP_MODULE}" COMBINED_MODULES="${COMBINED_MODULES},${PHP_MODULE}"
else
COMBINED_MODULES="${DEFAULT_MODULES}"
fi fi
# Filter out built-in modules (they don't have separate packages)
local FILTERED_MODULES=""
IFS=',' read -ra ALL_MODULES <<<"$COMBINED_MODULES"
for mod in "${ALL_MODULES[@]}"; do
mod=$(echo "$mod" | tr -d '[:space:]')
[[ -z "$mod" ]] && continue
# Skip if it's a known built-in module
if echo ",$BUILTIN_MODULES,$BUILTIN_85," | grep -qi ",$mod,"; then
continue
fi
# Add to filtered list
if [[ -z "$FILTERED_MODULES" ]]; then
FILTERED_MODULES="$mod"
else
FILTERED_MODULES="${FILTERED_MODULES},$mod"
fi
done
# Deduplicate # Deduplicate
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -) COMBINED_MODULES=$(echo "$FILTERED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
# Get current PHP-CLI version # Get current PHP-CLI version
local CURRENT_PHP="" local CURRENT_PHP=""
@@ -4551,16 +4614,41 @@ EOF
return 1 return 1
fi fi
# Build module list - without version pinning (preferences.d handles it) # Build module list - verify each package exists before adding
local MODULE_LIST="php${PHP_VERSION}" local MODULE_LIST="php${PHP_VERSION}"
local SKIPPED_MODULES=""
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES" IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
for mod in "${MODULES[@]}"; do for mod in "${MODULES[@]}"; do
MODULE_LIST+=" php${PHP_VERSION}-${mod}" mod=$(echo "$mod" | tr -d '[:space:]')
[[ -z "$mod" ]] && continue
local pkg_name="php${PHP_VERSION}-${mod}"
# Check if package exists in repository
if apt-cache show "$pkg_name" &>/dev/null; then
MODULE_LIST+=" $pkg_name"
else
# Package doesn't exist - could be built-in or renamed
if [[ -z "$SKIPPED_MODULES" ]]; then
SKIPPED_MODULES="$mod"
else
SKIPPED_MODULES="${SKIPPED_MODULES}, $mod"
fi
fi
done done
# Log skipped modules (informational, not an error)
if [[ -n "$SKIPPED_MODULES" ]]; then
msg_info "Skipping unavailable/built-in modules: $SKIPPED_MODULES"
fi
if [[ "$PHP_FPM" == "YES" ]]; then if [[ "$PHP_FPM" == "YES" ]]; then
MODULE_LIST+=" php${PHP_VERSION}-fpm" if apt-cache show "php${PHP_VERSION}-fpm" &>/dev/null; then
MODULE_LIST+=" php${PHP_VERSION}-fpm"
else
msg_warn "php${PHP_VERSION}-fpm not available"
fi
# Create systemd override for PHP-FPM to fix runtime directory issues in LXC containers # Create systemd override for PHP-FPM to fix runtime directory issues in LXC containers
mkdir -p /etc/systemd/system/php${PHP_VERSION}-fpm.service.d/ mkdir -p /etc/systemd/system/php${PHP_VERSION}-fpm.service.d/
cat <<EOF >/etc/systemd/system/php${PHP_VERSION}-fpm.service.d/override.conf cat <<EOF >/etc/systemd/system/php${PHP_VERSION}-fpm.service.d/override.conf
@@ -4587,38 +4675,31 @@ EOF
# Install PHP packages (pinning via preferences.d ensures correct version) # Install PHP packages (pinning via preferences.d ensures correct version)
msg_info "Installing PHP ${PHP_VERSION} packages" msg_info "Installing PHP ${PHP_VERSION} packages"
if ! install_packages_with_retry $MODULE_LIST; then
msg_warn "Failed to install PHP packages, attempting individual installation" # First attempt: Install all verified packages at once
if ! $STD apt install -y $MODULE_LIST 2>/dev/null; then
msg_warn "Bulk installation failed, attempting individual installation"
# Install main package first (critical) # Install main package first (critical)
install_packages_with_retry "php${PHP_VERSION}" || { if ! $STD apt install -y "php${PHP_VERSION}" 2>/dev/null; then
msg_error "Failed to install php${PHP_VERSION}" msg_error "Failed to install php${PHP_VERSION}"
return 1 return 1
} fi
# Try to install Apache module individually if requested # Try to install Apache module individually if requested
if [[ "$PHP_APACHE" == "YES" ]]; then if [[ "$PHP_APACHE" == "YES" ]]; then
install_packages_with_retry "libapache2-mod-php${PHP_VERSION}" || { $STD apt install -y "libapache2-mod-php${PHP_VERSION}" 2>/dev/null || {
msg_warn "Could not install libapache2-mod-php${PHP_VERSION}" msg_warn "Could not install libapache2-mod-php${PHP_VERSION}"
} }
fi fi
# Try to install modules individually - skip those that don't exist # Try to install each package individually
for pkg in "${MODULES[@]}"; do for pkg in $MODULE_LIST; do
if apt-cache search "^php${PHP_VERSION}-${pkg}\$" 2>/dev/null | grep -q "^php${PHP_VERSION}-${pkg}"; then [[ "$pkg" == "php${PHP_VERSION}" ]] && continue # Already installed
install_packages_with_retry "php${PHP_VERSION}-${pkg}" || { $STD apt install -y "$pkg" 2>/dev/null || {
msg_warn "Could not install php${PHP_VERSION}-${pkg}" msg_warn "Could not install $pkg - continuing without it"
} }
fi
done done
if [[ "$PHP_FPM" == "YES" ]]; then
if apt-cache search "^php${PHP_VERSION}-fpm\$" 2>/dev/null | grep -q "^php${PHP_VERSION}-fpm"; then
install_packages_with_retry "php${PHP_VERSION}-fpm" || {
msg_warn "Could not install php${PHP_VERSION}-fpm"
}
fi
fi
fi fi
cache_installed_version "php" "$PHP_VERSION" cache_installed_version "php" "$PHP_VERSION"

View File

@@ -595,7 +595,7 @@ EOF
no) no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag" msg_error "Selected no to Disabling subscription nag"
rm /etc/apt/apt.conf.d/no-nag-script 2>/dev/null [[ -f /etc/apt/apt.conf.d/no-nag-script ]] && rm /etc/apt/apt.conf.d/no-nag-script
;; ;;
esac esac
apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed" apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed"

View File

@@ -213,7 +213,7 @@ function default_settings() {
MAC="$GEN_MAC" MAC="$GEN_MAC"
VLAN="" VLAN=""
MTU="" MTU=""
START_VM="yes" START_VM="no"
METHOD="default" METHOD="default"
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}" echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}" echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"