Compare commits

...

85 Commits

Author SHA1 Message Date
ec0c64e2b7 Update icon URLs from master to main branch
Replaces all occurrences of the icon CDN URLs referencing the 'master' branch with 'main'.
2025-12-10 07:35:13 +01:00
8b858f4a65 add redis 2025-12-10 07:19:55 +01:00
96dc87ddd5 Update CHANGELOG.md (#9830)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-10 00:15:36 +00:00
f0f1708c31 Update versions.json (#9829)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-10 01:15:09 +01:00
76c4277f4b Update CHANGELOG.md (#9825)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 18:27:57 +00:00
10ee5f2eb4 Disable Palmr (#9824) 2025-12-09 19:27:30 +01:00
9611267657 Update CHANGELOG.md (#9822)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:05:21 +00:00
4dce90530b Update CHANGELOG.md (#9821)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:05:09 +00:00
cb28199964 Refactor: Zigbee2MQTT (#9803) 2025-12-09 16:04:47 +01:00
c28e404bd9 Update CHANGELOG.md (#9820)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:04:36 +00:00
42d1f2980a Refactor: Zerotier-One (#9804) 2025-12-09 16:04:15 +01:00
0ab80c814b Update CHANGELOG.md (#9819)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:04:11 +00:00
0f183d0b2f Update CHANGELOG.md (#9818)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:03:51 +00:00
fd75b03435 Refactor (#9807) 2025-12-09 16:03:43 +01:00
2abb7db794 Update CHANGELOG.md (#9817)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:03:34 +00:00
f07e6a92b0 Refactor (#9808) 2025-12-09 16:03:13 +01:00
ee3c4f843d Update CHANGELOG.md (#9816)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:03:00 +00:00
5ad841da76 Fixes (#9809) 2025-12-09 16:02:38 +01:00
02da3fc888 Update CHANGELOG.md (#9815)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:02:31 +00:00
d51c37d134 Refactor (#9810) 2025-12-09 16:02:07 +01:00
938a66a67e Update CHANGELOG.md (#9814)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 15:01:58 +00:00
bea9a62cce Feature: extend advanced settings with more options & inherit app defaults (#9776) 2025-12-09 16:01:31 +01:00
1458aade19 Update CHANGELOG.md (#9813)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 14:58:35 +00:00
cf7d32548f Refactor (#9805) 2025-12-09 15:58:13 +01:00
3be34bdac8 Update CHANGELOG.md (#9812)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 14:53:43 +00:00
6cdc26badc Refactor: Zipline (#9801)
* Refactor

* Update icon URL
2025-12-09 15:53:19 +01:00
92a26677f7 Update CHANGELOG.md (#9811)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 14:50:10 +00:00
0bcffdc8b0 fix(tools): handle repos with 30+ pre-releases in check_for_gh_release (#9786) 2025-12-09 15:49:43 +01:00
f2597f4d35 Update CHANGELOG.md (#9806)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 14:24:46 +00:00
7b139fa763 fix(json): correct updateable flags for 11 apps with working update scripts (#9777)
Changed updateable from false to true for:
- aria2 (apt-get update/upgrade)
- casaos (apt-get update/upgrade)
- daemonsync (apt-get update/upgrade)
- iobroker (apt update/upgrade)
- librenms (daily.sh update)
- meshcentral (apt update/upgrade)
- nextcloudpi (apt update/upgrade)
- podman (apt update/upgrade)
- tasmoadmin (apt update/upgrade)
- wazuh (apt-get update/upgrade)
- whisparr (apt update/upgrade)
2025-12-09 15:24:19 +01:00
f6f131efab Update CHANGELOG.md (#9800)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 13:22:50 +00:00
e4d5ce221b fixed grammar on one of the alerts (#9799) 2025-12-09 14:22:23 +01:00
4e182bd5b9 Update versions.json (#9797)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 13:06:31 +01:00
12a7ecd85d Update .app files (#9795)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-12-09 10:08:03 +01:00
b658959c7b Update CHANGELOG.md (#9796)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 09:07:33 +00:00
5eb9d2bcdf Add dokploy (ct) (#9793)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-12-09 10:07:04 +01:00
7d37743981 Update CHANGELOG.md (#9794)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 09:05:57 +00:00
b0e7cdfe13 Coolify (#9792)
* Add coolify (ct)

* Update logo URL to use WebP format

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-12-09 10:05:36 +01:00
31c19bed09 Update CHANGELOG.md (#9788)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 00:13:26 +00:00
bff0650d72 Update versions.json (#9787)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-09 01:13:01 +01:00
d9b05882a3 Update CHANGELOG.md (#9782)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 18:36:34 +00:00
31dbf2554c Tandoor: Remove postgres17-contrib package (#9781)
* Remove contrib

* Update

* Update

* Upda
2025-12-08 19:36:06 +01:00
f95cc5a7ad Update CHANGELOG.md (#9775)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 13:20:30 +00:00
3fb9d02f36 fix: always show SSH access dialog in advanced settings (#9765)
- SSH access dialog is now always displayed regardless of password or SSH keys
- Added step indicator to SSH settings dialogs for consistency
- configure_ssh_settings() now accepts optional step_info parameter
- Updated documentation for SSH configuration functions

Fixes #9753
2025-12-08 14:20:05 +01:00
a748be9a1f Update CHANGELOG.md (#9774)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 12:52:51 +00:00
4d4ced6b63 feat: Add var_gpu flag for GPU passthrough configuration (#9764)
* feat: Add var_gpu flag for GPU passthrough configuration

Changes:
- Add var_gpu variable to CT scripts for explicit GPU control
- Remove hardcoded GPU_APPS list - GPU detection now uses var_gpu flag
- Add var_gpu to VAR_WHITELIST for persistence in default.vars and app.vars
- Add GPU Passthrough option (Step 19) to advanced_settings wizard (now 20 steps)
- Update documentation

Apps with var_gpu=yes (GPU enabled by default):
- Media: jellyfin, plex, emby, channels, ersatztv, tunarr
- Transcoding: tdarr, unmanic, fileflows
- AI/ML: ollama, openwebui
- NVR: frigate, immich

Usage:
- Disable GPU: var_gpu=no bash -c '$(curl -fsSL ...jellyfin.sh)'
- Enable GPU: var_gpu=yes bash -c '$(curl -fsSL ...debian.sh)'
- Via default.vars: echo 'var_gpu=yes' >> /usr/local/community-scripts/default.vars
- Via advanced settings wizard (Step 19)

* fix: tput rmcup timing, GPU line indentation, echo_default GPU display

* style: add GPU icon variable for consistent formatting
2025-12-08 13:52:30 +01:00
a5d017c83b Update versions.json (#9773)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 13:06:10 +01:00
5378d822f8 Update CHANGELOG.md (#9772)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 10:38:33 +00:00
243cb34d47 tandoor instead of trandoor (#9771) 2025-12-08 11:38:08 +01:00
59699425f8 Update CHANGELOG.md (#9768)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 00:14:20 +00:00
155a8571ba Update versions.json (#9767)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-08 01:13:57 +01:00
1cae72bdec Update CHANGELOG.md (#9762)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:48:24 +00:00
531ecad4c7 Refactor: Inventree (uses now ubuntu 24.04) (#9752) 2025-12-07 21:48:00 +01:00
9e8ab9de01 Update CHANGELOG.md (#9761)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:31:58 +00:00
70557798ec FAQ update (#9742) 2025-12-07 21:31:36 +01:00
4b554900ca Update CHANGELOG.md (#9760)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:30:44 +00:00
9f84eae07f Update CHANGELOG.md (#9759)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:30:37 +00:00
ba5bdd94ad fix(tools.func): handle empty grep results in stop_all_services (#9748) 2025-12-07 21:30:23 +01:00
d18baa2177 Update CHANGELOG.md (#9758)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:30:18 +00:00
779c06f232 fix(wanderer): add meilisearch dumpless upgrade for database migration (#9749) 2025-12-07 21:30:01 +01:00
9e2b6524c4 Update CHANGELOG.md (#9757)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:29:58 +00:00
a328d7b8ba fix(zammad): use Debian 12 and dynamic APT source version (#9750) 2025-12-07 21:29:39 +01:00
dfa4d82951 Update CHANGELOG.md (#9756)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:29:35 +00:00
5e5a8cd104 feat(motd): dynamically read OS version on each login (#9751) 2025-12-07 21:29:09 +01:00
0da3231d3c Update CHANGELOG.md (#9755)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 20:11:38 +00:00
5a6a30e594 Remove Debian from GPU passthrough (#9754) 2025-12-07 21:11:12 +01:00
97ac2520ec Update CHANGELOG.md (#9747)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 15:09:37 +00:00
bd5fe17228 ComfyUI: Fix update script (#9740)
* Update error messages for ComfyUI installation check

* Update comfyui.json

* Change updateable status to true in comfyui.json

* Update comfyui.json
2025-12-07 16:09:14 +01:00
f42586c083 Update versions.json (#9745)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 13:05:30 +01:00
fab5539c82 Update CHANGELOG.md (#9744)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 11:39:00 +00:00
1ecb5bbeab Add DJANGO_SECRET_KEY support for Dispatcharr v0.13.1+ (#9730)
* Initial plan

* Add DJANGO_SECRET_KEY support for Dispatcharr v0.13.1+

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>

* Improve DJANGO_SECRET_KEY generation to ensure consistent 50 character length

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>

* short

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
2025-12-07 12:38:37 +01:00
64dbd4e9f7 Update CHANGELOG.md (#9737)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 08:37:17 +00:00
2ba63b28f0 Update OPNsense version from 25.1 to 25.7 (#9736) 2025-12-07 09:36:47 +01:00
2a3b09b413 Update CHANGELOG.md (#9735)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 00:16:08 +00:00
d6ca5676df Update versions.json (#9734)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-07 01:15:43 +01:00
478194ba1a Update composer command path in bookstack.sh (#9656) 2025-12-06 16:55:45 +01:00
d241c03b3d Update CHANGELOG.md (#9724)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-06 15:40:28 +00:00
8cd037ff88 Remove InfluxData source list post-installation (#9723) 2025-12-06 16:40:06 +01:00
fb15c13833 Update CHANGELOG.md (#9722)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-06 15:04:53 +00:00
e95541260b Update InfluxDB repository key URL (#9720) 2025-12-06 16:04:27 +01:00
a37ac14907 Update versions.json (#9718)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-06 13:05:20 +01:00
74a870bc5c Update CHANGELOG.md (#9717)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-06 10:42:04 +00:00
e0f65f2db8 pin Portainer Update to CE Version only (#9710) 2025-12-06 11:41:43 +01:00
01b246f375 Update CHANGELOG.md (#9716)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-06 10:09:12 +00:00
53dd0efddd Update domain-locker-install.sh to enable auto-start after reboot (#9715)
* Update domain-locker-install.sh

It should be `systemctl enable --now`, so service would start again after reboot.

* Apply suggestion from @tremor021

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-12-06 11:08:40 +01:00
478 changed files with 2380 additions and 1212 deletions

View File

@ -10,8 +10,113 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-10
## 2025-12-09
### 🆕 New Scripts
- Dokploy ([#9793](https://github.com/community-scripts/ProxmoxVE/pull/9793))
- Coolify ([#9792](https://github.com/community-scripts/ProxmoxVE/pull/9792))
### 🚀 Updated Scripts
- #### ✨ New Features
- Refactor: Zerotier-One [@tremor021](https://github.com/tremor021) ([#9804](https://github.com/community-scripts/ProxmoxVE/pull/9804))
- Refactor: Zabbix [@tremor021](https://github.com/tremor021) ([#9807](https://github.com/community-scripts/ProxmoxVE/pull/9807))
- #### 🔧 Refactor
- Refactor: Zigbee2MQTT [@tremor021](https://github.com/tremor021) ([#9803](https://github.com/community-scripts/ProxmoxVE/pull/9803))
- Refactor: Wordpress [@tremor021](https://github.com/tremor021) ([#9808](https://github.com/community-scripts/ProxmoxVE/pull/9808))
- Wizarr: Various fixes [@tremor021](https://github.com/tremor021) ([#9809](https://github.com/community-scripts/ProxmoxVE/pull/9809))
- Refactor: Wiki.js [@tremor021](https://github.com/tremor021) ([#9810](https://github.com/community-scripts/ProxmoxVE/pull/9810))
- Zammad: Various fixes [@tremor021](https://github.com/tremor021) ([#9805](https://github.com/community-scripts/ProxmoxVE/pull/9805))
- Refactor: Zipline [@tremor021](https://github.com/tremor021) ([#9801](https://github.com/community-scripts/ProxmoxVE/pull/9801))
### 💾 Core
- #### 🐞 Bug Fixes
- fix(tools): handle repos with 30+ pre-releases in check_for_gh_release [@vidonnus](https://github.com/vidonnus) ([#9786](https://github.com/community-scripts/ProxmoxVE/pull/9786))
- #### ✨ New Features
- Feature: extend advanced settings with more options & inherit app defaults [@MickLesk](https://github.com/MickLesk) ([#9776](https://github.com/community-scripts/ProxmoxVE/pull/9776))
### 📚 Documentation
- website: fix/check updateable flags [@MickLesk](https://github.com/MickLesk) ([#9777](https://github.com/community-scripts/ProxmoxVE/pull/9777))
- fixed grammar on alert that pops up when you copy the curl command [@Sarthak-Sidhant](https://github.com/Sarthak-Sidhant) ([#9799](https://github.com/community-scripts/ProxmoxVE/pull/9799))
### ❔ Uncategorized
- Website: Remove Palmr script [@tremor021](https://github.com/tremor021) ([#9824](https://github.com/community-scripts/ProxmoxVE/pull/9824))
## 2025-12-08
### 🚀 Updated Scripts
- typo: tandoor instead of trandoor [@Neonize](https://github.com/Neonize) ([#9771](https://github.com/community-scripts/ProxmoxVE/pull/9771))
- #### 🐞 Bug Fixes
- Tandoor: Remove postgres17-contrib package [@tremor021](https://github.com/tremor021) ([#9781](https://github.com/community-scripts/ProxmoxVE/pull/9781))
- #### ✨ New Features
- feat: Add var_gpu flag for GPU passthrough configuration [@MickLesk](https://github.com/MickLesk) ([#9764](https://github.com/community-scripts/ProxmoxVE/pull/9764))
### 💾 Core
- #### 🐞 Bug Fixes
- fix: always show SSH access dialog in advanced settings [@MickLesk](https://github.com/MickLesk) ([#9765](https://github.com/community-scripts/ProxmoxVE/pull/9765))
## 2025-12-07
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- wanderer: add meilisearch dumpless upgrade for database migration [@MickLesk](https://github.com/MickLesk) ([#9749](https://github.com/community-scripts/ProxmoxVE/pull/9749))
- #### 💥 Breaking Changes
- Refactor: Inventree (uses now ubuntu 24.04) [@MickLesk](https://github.com/MickLesk) ([#9752](https://github.com/community-scripts/ProxmoxVE/pull/9752))
- Revert Zammad: use Debian 12 and dynamic APT source version [@MickLesk](https://github.com/MickLesk) ([#9750](https://github.com/community-scripts/ProxmoxVE/pull/9750))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: handle empty grep results in stop_all_services [@MickLesk](https://github.com/MickLesk) ([#9748](https://github.com/community-scripts/ProxmoxVE/pull/9748))
- Remove Debian from GPU passthrough [@MickLesk](https://github.com/MickLesk) ([#9754](https://github.com/community-scripts/ProxmoxVE/pull/9754))
- #### ✨ New Features
- core: motd - dynamically read OS version on each login [@MickLesk](https://github.com/MickLesk) ([#9751](https://github.com/community-scripts/ProxmoxVE/pull/9751))
### 🌐 Website
- FAQ update [@tremor021](https://github.com/tremor021) ([#9742](https://github.com/community-scripts/ProxmoxVE/pull/9742))
## 2025-12-06 ## 2025-12-06
### 🚀 Updated Scripts
- Update domain-locker-install.sh to enable auto-start after reboot [@alexindigo](https://github.com/alexindigo) ([#9715](https://github.com/community-scripts/ProxmoxVE/pull/9715))
- #### 🐞 Bug Fixes
- InfluxDB: Remove InfluxData source list post-installation [@tremor021](https://github.com/tremor021) ([#9723](https://github.com/community-scripts/ProxmoxVE/pull/9723))
- InfluxDB: Update InfluxDB repository key URL [@tremor021](https://github.com/tremor021) ([#9720](https://github.com/community-scripts/ProxmoxVE/pull/9720))
- #### ✨ New Features
- pin Portainer Update to CE Version only [@sgaert](https://github.com/sgaert) ([#9710](https://github.com/community-scripts/ProxmoxVE/pull/9710))
## 2025-12-05 ## 2025-12-05
### 🆕 New Scripts ### 🆕 New Scripts

View File

@ -51,7 +51,7 @@ function update_script() {
msg_info "Configuring BookStack" msg_info "Configuring BookStack"
cd /opt/bookstack cd /opt/bookstack
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev $STD /usr/local/bin/composer install --no-dev
$STD php artisan migrate --force $STD php artisan migrate --force
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables
@ -38,4 +39,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}"

View File

@ -24,11 +24,11 @@ function update_script() {
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /opt/${APP} ]]; then if [[ ! -d /opt/ComfyUI ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "To update use the ${APP} Manager." msg_error "To update use the ComfyUI Manager."
exit exit
} }

46
ct/coolify.sh Normal file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://coolify.io/
APP="Coolify"
var_tags="${var_tags:-docker;paas}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-30}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /data/coolify ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Coolify"
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
msg_ok "Updated Coolify"
msg_ok "Updated successfully!"
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}:8000${CL}"

View File

@ -87,6 +87,11 @@ function update_script() {
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
fi fi
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >> /opt/dispatcharr/.env
fi
cd /opt/dispatcharr cd /opt/dispatcharr
rm -rf .venv rm -rf .venv
$STD uv venv $STD uv venv

View File

@ -47,7 +47,7 @@ function update_script() {
msg_ok "Docker Compose updated" msg_ok "Docker Compose updated"
fi fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then if docker ps -a --format '{{.Image}}' | grep -q '^portainer/portainer-ce:latest$'; then
msg_info "Updating Portainer" msg_info "Updating Portainer"
$STD docker pull portainer/portainer-ce:latest $STD docker pull portainer/portainer-ce:latest
$STD docker stop portainer && docker rm portainer $STD docker stop portainer && docker rm portainer

46
ct/dokploy.sh Normal file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dokploy.com/
APP="Dokploy"
var_tags="${var_tags:-docker;paas}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/dokploy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Dokploy"
$STD bash <(curl -sSL https://dokploy.com/install.sh)
msg_ok "Updated Dokploy"
msg_ok "Updated successfully!"
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

@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
var_os="${var_os:-ubuntu}" var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}" var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-5}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-20}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-11}" var_version="${var_version:-11}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables
@ -38,4 +39,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"

6
ct/headers/coolify Normal file
View File

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

6
ct/headers/dokploy Normal file
View File

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

View File

@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -10,8 +10,8 @@ var_tags="${var_tags:-inventory}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}" var_disk="${var_disk:-6}"
var_os="${var_os:-debian}" var_os="${var_os:-ubuntu}"
var_version="${var_version:-13}" var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -28,10 +28,16 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP"
if ! grep -qE "^ID=(ubuntu)$" /etc/os-release; then
msg_error "Unsupported OS. InvenTree requires Ubuntu (20.04/22.04/24.04)."
exit
fi
msg_info "Updating InvenTree"
$STD apt update $STD apt update
$STD apt install --only-upgrade inventree -y $STD apt install --only-upgrade inventree -y
msg_ok "Updated $APP" msg_ok "Updated InvenTree"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-16}"
var_os="${var_os:-ubuntu}" var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}" var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}"
var_disk="${var_disk:-35}" var_disk="${var_disk:-35}"
var_os="${var_os:-ubuntu}" var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}" var_version="${var_version:-24.04}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-25}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
var_os="${var_os:-ubuntu}" var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}" var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables
@ -23,8 +24,8 @@ 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/plexmediaserver.list ]] \ if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] &&
&& [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi

View File

@ -55,7 +55,7 @@ function update_script() {
cd /opt/tandoor/vue3 cd /opt/tandoor/vue3
$STD yarn install $STD yarn install
$STD yarn build $STD yarn build
TANDOOR_VERSION="$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r .tag_name)" TANDOOR_VERSION=$(get_latest_github_release "TandoorRecipes/recipes")
cat <<EOF >/opt/tandoor/cookbook/version_info.py cat <<EOF >/opt/tandoor/cookbook/version_info.py
TANDOOR_VERSION = "$TANDOOR_VERSION" TANDOOR_VERSION = "$TANDOOR_VERSION"
TANDOOR_REF = "bare-metal" TANDOOR_REF = "bare-metal"
@ -65,7 +65,7 @@ EOF
$STD /opt/tandoor/.venv/bin/python manage.py migrate $STD /opt/tandoor/.venv/bin/python manage.py migrate
$STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input $STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input
rm -rf /opt/tandoor.bak rm -rf /opt/tandoor.bak
msg_ok "Updated Trandoor" msg_ok "Updated Tandoor"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start tandoor systemctl start tandoor

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-5}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -55,7 +55,8 @@ function update_script() {
systemctl stop wanderer-web systemctl stop wanderer-web
msg_ok "Stopped service" msg_ok "Stopped service"
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search" fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search"
grep -q -- '--experimental-dumpless-upgrade' /opt/wanderer/start.sh || sed -i 's|meilisearch --master-key|meilisearch --experimental-dumpless-upgrade --master-key|' /opt/wanderer/start.sh
msg_info "Starting service" msg_info "Starting service"
systemctl start wanderer-web systemctl start wanderer-web

View File

@ -11,7 +11,7 @@ var_disk="${var_disk:-8}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -27,21 +27,22 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop zammad systemctl stop zammad
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating ${APP}" msg_info "Updating Zammad"
$STD apt update $STD apt update
$STD apt-mark hold zammad $STD apt-mark hold zammad
$STD apt -y upgrade $STD apt upgrade -y
$STD apt-mark unhold zammad $STD apt-mark unhold zammad
$STD apt -y upgrade $STD apt upgrade -y
msg_ok "Updated ${APP}" msg_ok "Updated Zammad"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start zammad systemctl start zammad
msg_ok "Updated ${APP} LXC" msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@ -33,10 +33,10 @@ function update_script() {
systemctl stop zerotier-one systemctl stop zerotier-one
msg_ok "Stopping Service" msg_ok "Stopping Service"
msg_info "Updating ${APP}" msg_info "Updating Zerotier-One"
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt upgrade -y
msg_ok "Updated ${APP}" msg_ok "Updated Zerotier-One"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start zerotier-one systemctl start zerotier-one

View File

@ -43,7 +43,7 @@ function update_script() {
fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
msg_info "Updating ${APP}" msg_info "Updating Zigbee2MQTT"
rm -rf /opt/zigbee2mqtt/data rm -rf /opt/zigbee2mqtt/data
mv /opt/z2m_backup/data /opt/zigbee2mqtt mv /opt/z2m_backup/data /opt/zigbee2mqtt
cd /opt/zigbee2mqtt cd /opt/zigbee2mqtt

View File

@ -1,8 +1,8 @@
# Technical Reference: Configuration System Architecture # Technical Reference: Configuration System Architecture
> **For Developers and Advanced Users** > **For Developers and Advanced Users**
> >
> *Deep dive into how the defaults and configuration system works* > _Deep dive into how the defaults and configuration system works_
--- ---
@ -123,13 +123,13 @@ VAR_VALUE := [^\n]* # Any printable characters except newline
**Constraints**: **Constraints**:
| Constraint | Value | | Constraint | Value |
|-----------|-------| | ----------------- | ------------------------ |
| Max file size | 64 KB | | Max file size | 64 KB |
| Max line length | 1024 bytes | | Max line length | 1024 bytes |
| Max variables | 100 | | Max variables | 100 |
| Allowed var names | `var_[a-z_]+` | | Allowed var names | `var_[a-z_]+` |
| Value validation | Whitelist + Sanitization | | Value validation | Whitelist + Sanitization |
**Example Valid File**: **Example Valid File**:
@ -206,21 +206,24 @@ var_tags=dns,pihole
**Purpose**: Safely load variables from .vars files without using `source` or `eval` **Purpose**: Safely load variables from .vars files without using `source` or `eval`
**Signature**: **Signature**:
```bash ```bash
load_vars_file(filepath) load_vars_file(filepath)
``` ```
**Parameters**: **Parameters**:
| Param | Type | Required | Example | | Param | Type | Required | Example |
|-------|------|----------|---------| | -------- | ------ | -------- | ------------------------------------------- |
| filepath | String | Yes | `/usr/local/community-scripts/default.vars` | | filepath | String | Yes | `/usr/local/community-scripts/default.vars` |
**Returns**: **Returns**:
- `0` on success - `0` on success
- `1` on error (file missing, parse error, etc.) - `1` on error (file missing, parse error, etc.)
**Environment Side Effects**: **Environment Side Effects**:
- Sets all parsed `var_*` variables as shell variables - Sets all parsed `var_*` variables as shell variables
- Does NOT unset variables if file missing (safe) - Does NOT unset variables if file missing (safe)
- Does NOT affect other variables - Does NOT affect other variables
@ -230,25 +233,25 @@ load_vars_file(filepath)
```bash ```bash
load_vars_file() { load_vars_file() {
local file="$1" local file="$1"
# File must exist # File must exist
[ -f "$file" ] || return 0 [ -f "$file" ] || return 0
# Parse line by line (not with source/eval) # Parse line by line (not with source/eval)
local line key val local line key val
while IFS='=' read -r key val || [ -n "$key" ]; do while IFS='=' read -r key val || [ -n "$key" ]; do
# Skip comments and empty lines # Skip comments and empty lines
[[ "$key" =~ ^[[:space:]]*# ]] && continue [[ "$key" =~ ^[[:space:]]*# ]] && continue
[[ -z "$key" ]] && continue [[ -z "$key" ]] && continue
# Validate key is in whitelist # Validate key is in whitelist
_is_whitelisted_key "$key" || continue _is_whitelisted_key "$key" || continue
# Sanitize and export value # Sanitize and export value
val="$(_sanitize_value "$val")" val="$(_sanitize_value "$val")"
[ $? -eq 0 ] && export "$key=$val" [ $? -eq 0 ] && export "$key=$val"
done < "$file" done < "$file"
return 0 return 0
} }
``` ```
@ -281,6 +284,7 @@ echo "Allocating ${var_ram} MB RAM"
**Purpose**: Get the full path for app-specific defaults file **Purpose**: Get the full path for app-specific defaults file
**Signature**: **Signature**:
```bash ```bash
get_app_defaults_path() get_app_defaults_path()
``` ```
@ -288,6 +292,7 @@ get_app_defaults_path()
**Parameters**: None **Parameters**: None
**Returns**: **Returns**:
- String: Full path to app defaults file - String: Full path to app defaults file
**Implementation**: **Implementation**:
@ -322,6 +327,7 @@ load_vars_file "$(get_app_defaults_path)"
**Purpose**: Load and display user global defaults **Purpose**: Load and display user global defaults
**Signature**: **Signature**:
```bash ```bash
default_var_settings() default_var_settings()
``` ```
@ -329,6 +335,7 @@ default_var_settings()
**Parameters**: None **Parameters**: None
**Returns**: **Returns**:
- `0` on success - `0` on success
- `1` on error - `1` on error
@ -337,15 +344,15 @@ default_var_settings()
``` ```
1. Find default.vars location 1. Find default.vars location
(usually /usr/local/community-scripts/default.vars) (usually /usr/local/community-scripts/default.vars)
2. Create if missing 2. Create if missing
3. Load variables from file 3. Load variables from file
4. Map var_verbose → VERBOSE variable 4. Map var_verbose → VERBOSE variable
5. Call base_settings (apply to container config) 5. Call base_settings (apply to container config)
6. Call echo_default (display summary) 6. Call echo_default (display summary)
``` ```
@ -354,20 +361,20 @@ default_var_settings()
```bash ```bash
default_var_settings() { default_var_settings() {
local VAR_WHITELIST=( local VAR_WHITELIST=(
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu
var_gateway var_hostname var_ipv6_method var_mac var_mtu var_gateway var_hostname var_ipv6_method var_mac var_mtu
var_net var_ns var_pw var_ram var_tags var_tun var_unprivileged var_net var_ns var_pw var_ram var_tags var_tun var_unprivileged
var_verbose var_vlan var_ssh var_ssh_authorized_key var_verbose var_vlan var_ssh var_ssh_authorized_key
var_container_storage var_template_storage var_container_storage var_template_storage
) )
# Ensure file exists # Ensure file exists
_ensure_default_vars _ensure_default_vars
# Find and load # Find and load
local dv="$(_find_default_vars)" local dv="$(_find_default_vars)"
load_vars_file "$dv" load_vars_file "$dv"
# Map verbose flag # Map verbose flag
if [[ -n "${var_verbose:-}" ]]; then if [[ -n "${var_verbose:-}" ]]; then
case "${var_verbose,,}" in case "${var_verbose,,}" in
@ -375,7 +382,7 @@ default_var_settings() {
*) VERBOSE="${var_verbose}" ;; *) VERBOSE="${var_verbose}" ;;
esac esac
fi fi
# Apply and display # Apply and display
base_settings "$VERBOSE" base_settings "$VERBOSE"
echo_default echo_default
@ -389,6 +396,7 @@ default_var_settings() {
**Purpose**: Offer to save current settings as app-specific defaults **Purpose**: Offer to save current settings as app-specific defaults
**Signature**: **Signature**:
```bash ```bash
maybe_offer_save_app_defaults() maybe_offer_save_app_defaults()
``` ```
@ -413,10 +421,10 @@ maybe_offer_save_app_defaults()
```bash ```bash
maybe_offer_save_app_defaults() { maybe_offer_save_app_defaults() {
local app_vars_path="$(get_app_defaults_path)" local app_vars_path="$(get_app_defaults_path)"
# Build current settings from memory # Build current settings from memory
local new_tmp="$(_build_current_app_vars_tmp)" local new_tmp="$(_build_current_app_vars_tmp)"
# Check if already exists # Check if already exists
if [ -f "$app_vars_path" ]; then if [ -f "$app_vars_path" ]; then
# Show diff and ask: Update? Keep? View Diff? # Show diff and ask: Update? Keep? View Diff?
@ -438,29 +446,31 @@ maybe_offer_save_app_defaults() {
**Purpose**: Remove dangerous characters/patterns from configuration values **Purpose**: Remove dangerous characters/patterns from configuration values
**Signature**: **Signature**:
```bash ```bash
_sanitize_value(value) _sanitize_value(value)
``` ```
**Parameters**: **Parameters**:
| Param | Type | Required | | Param | Type | Required |
|-------|------|----------| | ----- | ------ | -------- |
| value | String | Yes | | value | String | Yes |
**Returns**: **Returns**:
- `0` (success) + sanitized value on stdout - `0` (success) + sanitized value on stdout
- `1` (failure) + nothing if dangerous - `1` (failure) + nothing if dangerous
**Dangerous Patterns**: **Dangerous Patterns**:
| Pattern | Threat | Example | | Pattern | Threat | Example |
|---------|--------|---------| | --------- | -------------------- | -------------------- |
| `$(...)` | Command substitution | `$(rm -rf /)` | | `$(...)` | Command substitution | `$(rm -rf /)` |
| `` ` ` `` | Command substitution | `` `whoami` `` | | `` ` ` `` | Command substitution | `` `whoami` `` |
| `;` | Command separator | `value; rm -rf /` | | `;` | Command separator | `value; rm -rf /` |
| `&` | Background execution | `value & malicious` | | `&` | Background execution | `value & malicious` |
| `<(` | Process substitution | `<(cat /etc/passwd)` | | `<(` | Process substitution | `<(cat /etc/passwd)` |
**Implementation**: **Implementation**:
@ -501,17 +511,19 @@ fi
**Purpose**: Check if variable name is in allowed whitelist **Purpose**: Check if variable name is in allowed whitelist
**Signature**: **Signature**:
```bash ```bash
_is_whitelisted_key(key) _is_whitelisted_key(key)
``` ```
**Parameters**: **Parameters**:
| Param | Type | Required | Example | | Param | Type | Required | Example |
|-------|------|----------|---------| | ----- | ------ | -------- | --------- |
| key | String | Yes | `var_cpu` | | key | String | Yes | `var_cpu` |
**Returns**: **Returns**:
- `0` if key is whitelisted - `0` if key is whitelisted
- `1` if key is NOT whitelisted - `1` if key is NOT whitelisted
@ -573,6 +585,7 @@ Step 4: Use BUILT-IN DEFAULTS
### Precedence Examples ### Precedence Examples
**Example 1: Environment Variable Wins** **Example 1: Environment Variable Wins**
```bash ```bash
# Shell environment has highest priority # Shell environment has highest priority
$ export var_cpu=16 $ export var_cpu=16
@ -583,6 +596,7 @@ $ bash pihole-install.sh
``` ```
**Example 2: App Defaults Override User Defaults** **Example 2: App Defaults Override User Defaults**
```bash ```bash
# User Defaults: var_cpu=4 # User Defaults: var_cpu=4
# App Defaults: var_cpu=2 # App Defaults: var_cpu=2
@ -593,6 +607,7 @@ $ bash pihole-install.sh
``` ```
**Example 3: All Defaults Missing (Built-ins Used)** **Example 3: All Defaults Missing (Built-ins Used)**
```bash ```bash
# No environment variables set # No environment variables set
# No app defaults file # No app defaults file
@ -611,21 +626,21 @@ $ bash pihole-install.sh
base_settings() { base_settings() {
# Priority 1: Environment variables (already set if export used) # Priority 1: Environment variables (already set if export used)
CT_TYPE=${var_unprivileged:-"1"} # Use existing or default CT_TYPE=${var_unprivileged:-"1"} # Use existing or default
# Priority 2: Load app defaults (may override above) # Priority 2: Load app defaults (may override above)
if [ -f "$(get_app_defaults_path)" ]; then if [ -f "$(get_app_defaults_path)" ]; then
load_vars_file "$(get_app_defaults_path)" load_vars_file "$(get_app_defaults_path)"
fi fi
# Priority 3: Load user defaults # Priority 3: Load user defaults
if [ -f "/usr/local/community-scripts/default.vars" ]; then if [ -f "/usr/local/community-scripts/default.vars" ]; then
load_vars_file "/usr/local/community-scripts/default.vars" load_vars_file "/usr/local/community-scripts/default.vars"
fi fi
# Priority 4: Apply built-in defaults (lowest) # Priority 4: Apply built-in defaults (lowest)
CORE_COUNT=${var_cpu:-"${APP_CPU_DEFAULT:-2}"} CORE_COUNT=${var_cpu:-"${APP_CPU_DEFAULT:-2}"}
RAM_SIZE=${var_ram:-"${APP_RAM_DEFAULT:-1024}"} RAM_SIZE=${var_ram:-"${APP_RAM_DEFAULT:-1024}"}
# Result: var_cpu has been set through precedence chain # Result: var_cpu has been set through precedence chain
} }
``` ```
@ -734,14 +749,14 @@ CONTAINER CREATION STARTED
### Threat Model ### Threat Model
| Threat | Mitigation | | Threat | Mitigation |
|--------|-----------| | ---------------------------- | ------------------------------------------------- |
| **Arbitrary Code Execution** | No `source` or `eval`; manual parsing only | | **Arbitrary Code Execution** | No `source` or `eval`; manual parsing only |
| **Variable Injection** | Whitelist of allowed variable names | | **Variable Injection** | Whitelist of allowed variable names |
| **Command Substitution** | `_sanitize_value()` blocks `$()`, backticks, etc. | | **Command Substitution** | `_sanitize_value()` blocks `$()`, backticks, etc. |
| **Path Traversal** | Files locked to `/usr/local/community-scripts/` | | **Path Traversal** | Files locked to `/usr/local/community-scripts/` |
| **Permission Escalation** | Files created with restricted permissions | | **Permission Escalation** | Files created with restricted permissions |
| **Information Disclosure** | Sensitive variables not logged | | **Information Disclosure** | Sensitive variables not logged |
### Security Controls ### Security Controls
@ -798,6 +813,7 @@ fi
### Module: `build.func` ### Module: `build.func`
**Load Order** (in actual scripts): **Load Order** (in actual scripts):
1. `#!/usr/bin/env bash` - Shebang 1. `#!/usr/bin/env bash` - Shebang
2. `source /dev/stdin <<<$(curl ... api.func)` - API functions 2. `source /dev/stdin <<<$(curl ... api.func)` - API functions
3. `source /dev/stdin <<<$(curl ... build.func)` - Build functions 3. `source /dev/stdin <<<$(curl ... build.func)` - Build functions
@ -832,17 +848,17 @@ fi
# Section 6: Installation Flow # Section 6: Installation Flow
- install_script() # Main entry point - install_script() # Main entry point
- advanced_settings() # 19-step wizard - advanced_settings() # 20-step wizard
``` ```
### Regex Patterns Used ### Regex Patterns Used
| Pattern | Purpose | Example Match | | Pattern | Purpose | Example Match |
|---------|---------|---| | ---------------------- | --------------------- | ----------------------- |
| `^[0-9]+([.][0-9]+)?$` | Integer validation | `4`, `192.168` | | `^[0-9]+([.][0-9]+)?$` | Integer validation | `4`, `192.168` |
| `^var_[a-z_]+$` | Variable name | `var_cpu`, `var_ssh` | | `^var_[a-z_]+$` | Variable name | `var_cpu`, `var_ssh` |
| `*'$('*` | Command substitution | `$(whoami)` | | `*'$('*` | Command substitution | `$(whoami)` |
| `*\`*` | Backtick substitution | `` `cat /etc/passwd` `` | | `*\`\*` | Backtick substitution | `` `cat /etc/passwd` `` |
--- ---
@ -869,12 +885,12 @@ fi
### Function Mapping ### Function Mapping
| Old | New | Location | | Old | New | Location |
|-----|-----|----------| | ---------------- | --------------------------------- | ---------- |
| `read_config()` | `load_vars_file()` | build.func | | `read_config()` | `load_vars_file()` | build.func |
| `write_config()` | `_build_current_app_vars_tmp()` | build.func | | `write_config()` | `_build_current_app_vars_tmp()` | build.func |
| None | `maybe_offer_save_app_defaults()` | build.func | | None | `maybe_offer_save_app_defaults()` | build.func |
| None | `get_app_defaults_path()` | build.func | | None | `get_app_defaults_path()` | build.func |
--- ---

View File

@ -0,0 +1,164 @@
# Advanced Settings Wizard Reference
## Overview
The Advanced Settings wizard provides a 28-step interactive configuration for LXC container creation. It allows users to customize every aspect of the container while inheriting sensible defaults from the CT script.
## Key Features
- **Inherit App Defaults**: All `var_*` values from CT scripts pre-populate wizard fields
- **Back Navigation**: Press Cancel/Back to return to previous step
- **App Default Hints**: Each dialog shows `(App default: X)` to indicate script defaults
- **Full Customization**: Every configurable option is accessible
## Wizard Steps
| Step | Title | Variable(s) | Description |
| ---- | ------------------------ | --------------------------------- | ----------------------------------------------------- |
| 1 | Container Type | `var_unprivileged` | Privileged (0) or Unprivileged (1) container |
| 2 | Root Password | `var_pw` | Set password or use automatic login |
| 3 | Container ID | `var_ctid` | Unique container ID (auto-suggested) |
| 4 | Hostname | `var_hostname` | Container hostname |
| 5 | Disk Size | `var_disk` | Disk size in GB |
| 6 | CPU Cores | `var_cpu` | Number of CPU cores |
| 7 | RAM Size | `var_ram` | RAM size in MiB |
| 8 | Network Bridge | `var_brg` | Network bridge (vmbr0, etc.) |
| 9 | IPv4 Configuration | `var_net`, `var_gateway` | DHCP or static IP with gateway |
| 10 | IPv6 Configuration | `var_ipv6_method` | Auto, DHCP, Static, or None |
| 11 | MTU Size | `var_mtu` | Network MTU (default: 1500) |
| 12 | DNS Search Domain | `var_searchdomain` | DNS search domain |
| 13 | DNS Server | `var_ns` | Custom DNS server IP |
| 14 | MAC Address | `var_mac` | Custom MAC address (auto-generated if empty) |
| 15 | VLAN Tag | `var_vlan` | VLAN tag ID |
| 16 | Tags | `var_tags` | Container tags (comma/semicolon separated) |
| 17 | SSH Settings | `var_ssh` | SSH key selection and root access |
| 18 | FUSE Support | `var_fuse` | Enable FUSE for rclone, mergerfs, AppImage |
| 19 | TUN/TAP Support | `var_tun` | Enable for VPN apps (WireGuard, OpenVPN, Tailscale) |
| 20 | Nesting Support | `var_nesting` | Enable for Docker, LXC in LXC, Podman |
| 21 | GPU Passthrough | `var_gpu` | Auto-detect and pass through Intel/AMD/NVIDIA GPUs |
| 22 | Keyctl Support | `var_keyctl` | Enable for Docker, systemd-networkd |
| 23 | APT Cacher Proxy | `var_apt_cacher`, `var_apt_cacher_ip` | Use apt-cacher-ng for faster downloads |
| 24 | Container Timezone | `var_timezone` | Set timezone (e.g., Europe/Berlin) |
| 25 | Container Protection | `var_protection` | Prevent accidental deletion |
| 26 | Device Node Creation | `var_mknod` | Allow mknod (experimental, kernel 5.3+) |
| 27 | Mount Filesystems | `var_mount_fs` | Allow specific mounts: nfs, cifs, fuse, etc. |
| 28 | Verbose Mode & Confirm | `var_verbose` | Enable verbose output + final confirmation |
## Default Value Inheritance
The wizard inherits defaults from multiple sources:
```text
CT Script (var_*) → default.vars → app.vars → User Input
```
### Example: VPN Container (alpine-wireguard.sh)
```bash
# CT script sets:
var_tun="${var_tun:-1}" # TUN enabled by default
# In Advanced Settings Step 19:
# Dialog shows: "(App default: 1)" and pre-selects "Yes"
```
### Example: Media Server (jellyfin.sh)
```bash
# CT script sets:
var_gpu="${var_gpu:-yes}" # GPU enabled by default
# In Advanced Settings Step 21:
# Dialog shows: "(App default: yes)" and pre-selects "Yes"
```
## Feature Matrix
| Feature | Variable | When to Enable |
| ----------------- | ---------------- | --------------------------------------------------- |
| FUSE | `var_fuse` | rclone, mergerfs, AppImage, SSHFS |
| TUN/TAP | `var_tun` | WireGuard, OpenVPN, Tailscale, VPN containers |
| Nesting | `var_nesting` | Docker, Podman, LXC-in-LXC, systemd-nspawn |
| GPU Passthrough | `var_gpu` | Plex, Jellyfin, Emby, Frigate, Ollama, ComfyUI |
| Keyctl | `var_keyctl` | Docker (unprivileged), systemd-networkd |
| Protection | `var_protection` | Production containers, prevent accidental deletion |
| Mknod | `var_mknod` | Device node creation (experimental) |
| Mount FS | `var_mount_fs` | NFS mounts, CIFS shares, custom filesystems |
| APT Cacher | `var_apt_cacher` | Speed up downloads with local apt-cacher-ng |
## Confirmation Summary
Step 28 displays a comprehensive summary before creation:
```text
Container Type: Unprivileged
Container ID: 100
Hostname: jellyfin
Resources:
Disk: 8 GB
CPU: 2 cores
RAM: 2048 MiB
Network:
Bridge: vmbr0
IPv4: dhcp
IPv6: auto
Features:
FUSE: no | TUN: no
Nesting: Enabled | Keyctl: Disabled
GPU: yes | Protection: No
Advanced:
Timezone: Europe/Berlin
APT Cacher: no
Verbose: no
```
## Usage Examples
### Skip to Advanced Settings
```bash
# Run script, select "Advanced" from menu
bash -c "$(curl -fsSL https://...jellyfin.sh)"
# Then select option 3 "Advanced"
```
### Pre-set Defaults via Environment
```bash
# Set defaults before running
export var_cpu=4
export var_ram=4096
export var_gpu=yes
bash -c "$(curl -fsSL https://...jellyfin.sh)"
# Advanced settings will inherit these values
```
### Non-Interactive with All Options
```bash
# Set all variables for fully automated deployment
export var_unprivileged=1
export var_cpu=2
export var_ram=2048
export var_disk=8
export var_net=dhcp
export var_fuse=no
export var_tun=no
export var_gpu=yes
export var_nesting=1
export var_protection=no
export var_verbose=no
bash -c "$(curl -fsSL https://...jellyfin.sh)"
```
## Notes
- **Cancel at Step 1**: Exits the script entirely
- **Cancel at Steps 2-28**: Goes back to previous step
- **Empty fields**: Use default value
- **Keyctl**: Automatically enabled for unprivileged containers
- **Nesting**: Enabled by default (required for many apps)

View File

@ -8,103 +8,142 @@ This document provides a comprehensive reference of all environment variables us
### Core Container Variables ### Core Container Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | --------- | -------------------------------------------- | --------- | ----------- | ------------------ |
| `APP` | Application name (e.g., "plex", "nextcloud") | - | Environment | Throughout | | `APP` | Application name (e.g., "plex", "nextcloud") | - | Environment | Throughout |
| `NSAPP` | Namespace application name | `$APP` | Environment | Throughout | | `NSAPP` | Namespace application name | `$APP` | Environment | Throughout |
| `CTID` | Container ID | - | Environment | Container creation | | `CTID` | Container ID | - | Environment | Container creation |
| `CT_TYPE` | Container type ("install" or "update") | "install" | Environment | Entry point | | `CT_TYPE` | Container type ("install" or "update") | "install" | Environment | Entry point |
| `CT_NAME` | Container name | `$APP` | Environment | Container creation | | `CT_NAME` | Container name | `$APP` | Environment | Container creation |
### Operating System Variables ### Operating System Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | -------------- | -------------------------- | -------------- | --------------- | ------------------ |
| `var_os` | Operating system selection | "debian" | base_settings() | OS selection | | `var_os` | Operating system selection | "debian" | base_settings() | OS selection |
| `var_version` | OS version | "12" | base_settings() | Template selection | | `var_version` | OS version | "12" | base_settings() | Template selection |
| `var_template` | Template name | Auto-generated | base_settings() | Template download | | `var_template` | Template name | Auto-generated | base_settings() | Template download |
### Resource Configuration Variables ### Resource Configuration Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ------------ | ----------------------- | ----------- | --------------- | ------------------ |
| `var_cpu` | CPU cores | "2" | base_settings() | Container creation | | `var_cpu` | CPU cores | "2" | base_settings() | Container creation |
| `var_ram` | RAM in MB | "2048" | base_settings() | Container creation | | `var_ram` | RAM in MB | "2048" | base_settings() | Container creation |
| `var_disk` | Disk size in GB | "8" | base_settings() | Container creation | | `var_disk` | Disk size in GB | "8" | base_settings() | Container creation |
| `DISK_SIZE` | Disk size (alternative) | `$var_disk` | Environment | Container creation | | `DISK_SIZE` | Disk size (alternative) | `$var_disk` | Environment | Container creation |
| `CORE_COUNT` | CPU cores (alternative) | `$var_cpu` | Environment | Container creation | | `CORE_COUNT` | CPU cores (alternative) | `$var_cpu` | Environment | Container creation |
| `RAM_SIZE` | RAM size (alternative) | `$var_ram` | Environment | Container creation | | `RAM_SIZE` | RAM size (alternative) | `$var_ram` | Environment | Container creation |
### Network Configuration Variables ### Network Configuration Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ------------- | ------------------------------- | -------------- | --------------- | -------------- |
| `var_net` | Network interface | "vmbr0" | base_settings() | Network config | | `var_net` | Network interface | "vmbr0" | base_settings() | Network config |
| `var_bridge` | Bridge interface | "vmbr0" | base_settings() | Network config | | `var_bridge` | Bridge interface | "vmbr0" | base_settings() | Network config |
| `var_gateway` | Gateway IP | "192.168.1.1" | base_settings() | Network config | | `var_gateway` | Gateway IP | "192.168.1.1" | base_settings() | Network config |
| `var_ip` | Container IP address | - | User input | Network config | | `var_ip` | Container IP address | - | User input | Network config |
| `var_ipv6` | IPv6 address | - | User input | Network config | | `var_ipv6` | IPv6 address | - | User input | Network config |
| `var_vlan` | VLAN ID | - | User input | Network config | | `var_vlan` | VLAN ID | - | User input | Network config |
| `var_mtu` | MTU size | "1500" | base_settings() | Network config | | `var_mtu` | MTU size | "1500" | base_settings() | Network config |
| `var_mac` | MAC address | Auto-generated | base_settings() | Network config | | `var_mac` | MAC address | Auto-generated | base_settings() | Network config |
| `NET` | Network interface (alternative) | `$var_net` | Environment | Network config | | `NET` | Network interface (alternative) | `$var_net` | Environment | Network config |
| `BRG` | Bridge interface (alternative) | `$var_bridge` | Environment | Network config | | `BRG` | Bridge interface (alternative) | `$var_bridge` | Environment | Network config |
| `GATE` | Gateway IP (alternative) | `$var_gateway` | Environment | Network config | | `GATE` | Gateway IP (alternative) | `$var_gateway` | Environment | Network config |
| `IPV6_METHOD` | IPv6 configuration method | "none" | Environment | Network config | | `IPV6_METHOD` | IPv6 configuration method | "none" | Environment | Network config |
| `VLAN` | VLAN ID (alternative) | `$var_vlan` | Environment | Network config | | `VLAN` | VLAN ID (alternative) | `$var_vlan` | Environment | Network config |
| `MTU` | MTU size (alternative) | `$var_mtu` | Environment | Network config | | `MTU` | MTU size (alternative) | `$var_mtu` | Environment | Network config |
| `MAC` | MAC address (alternative) | `$var_mac` | Environment | Network config | | `MAC` | MAC address (alternative) | `$var_mac` | Environment | Network config |
### Storage Configuration Variables ### Storage Configuration Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ----------------------- | ------------------------------- | ------------------------ | ---------------- | ----------------- |
| `var_template_storage` | Storage for templates | - | select_storage() | Template storage | | `var_template_storage` | Storage for templates | - | select_storage() | Template storage |
| `var_container_storage` | Storage for container disks | - | select_storage() | Container storage | | `var_container_storage` | Storage for container disks | - | select_storage() | Container storage |
| `TEMPLATE_STORAGE` | Template storage (alternative) | `$var_template_storage` | Environment | Template storage | | `TEMPLATE_STORAGE` | Template storage (alternative) | `$var_template_storage` | Environment | Template storage |
| `CONTAINER_STORAGE` | Container storage (alternative) | `$var_container_storage` | Environment | Container storage | | `CONTAINER_STORAGE` | Container storage (alternative) | `$var_container_storage` | Environment | Container storage |
### Feature Flags ### Feature Flags
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ---------------- | ------------------------------ | ------- | ------------------------------- | ------------------ |
| `ENABLE_FUSE` | Enable FUSE support | "true" | base_settings() | Container features | | `var_fuse` | Enable FUSE support | "no" | CT script / Advanced Settings | Container features |
| `ENABLE_TUN` | Enable TUN/TAP support | "true" | base_settings() | Container features | | `var_tun` | Enable TUN/TAP support | "no" | CT script / Advanced Settings | Container features |
| `ENABLE_KEYCTL` | Enable keyctl support | "true" | base_settings() | Container features | | `var_nesting` | Enable nesting support | "1" | CT script / Advanced Settings | Container features |
| `ENABLE_MOUNT` | Enable mount support | "true" | base_settings() | Container features | | `var_keyctl` | Enable keyctl support | "0" | CT script / Advanced Settings | Container features |
| `ENABLE_NESTING` | Enable nesting support | "false" | base_settings() | Container features | | `var_mknod` | Allow device node creation | "0" | CT script / Advanced Settings | Container features |
| `ENABLE_PRIVILEGED` | Enable privileged mode | "false" | base_settings() | Container features | | `var_mount_fs` | Allowed filesystem mounts | "" | CT script / Advanced Settings | Container features |
| `ENABLE_UNPRIVILEGED` | Enable unprivileged mode | "true" | base_settings() | Container features | | `var_protection` | Enable container protection | "no" | CT script / Advanced Settings | Container creation |
| `VERBOSE` | Enable verbose output | "false" | Environment | Logging | | `var_timezone` | Container timezone | "" | CT script / Advanced Settings | Container creation |
| `SSH` | Enable SSH key provisioning | "true" | base_settings() | SSH setup | | `var_verbose` | Enable verbose output | "no" | Environment / Advanced Settings | Logging |
| `var_ssh` | Enable SSH key provisioning | "no" | CT script / Advanced Settings | SSH setup |
| `ENABLE_FUSE` | FUSE flag (internal) | "no" | Advanced Settings | Container creation |
| `ENABLE_TUN` | TUN/TAP flag (internal) | "no" | Advanced Settings | Container creation |
| `ENABLE_NESTING` | Nesting flag (internal) | "1" | Advanced Settings | Container creation |
| `ENABLE_KEYCTL` | Keyctl flag (internal) | "0" | Advanced Settings | Container creation |
| `ENABLE_MKNOD` | Mknod flag (internal) | "0" | Advanced Settings | Container creation |
| `PROTECT_CT` | Protection flag (internal) | "no" | Advanced Settings | Container creation |
| `CT_TIMEZONE` | Timezone setting (internal) | "" | Advanced Settings | Container creation |
| `VERBOSE` | Verbose mode flag | "no" | Environment | Logging |
| `SSH` | SSH access flag | "no" | Advanced Settings | SSH setup |
### APT Cacher Configuration
| Variable | Description | Default | Set In | Used In |
| ------------------ | ------------------------ | ------- | ----------------------------- | ------------------- |
| `var_apt_cacher` | Enable APT cacher proxy | "no" | CT script / Advanced Settings | Package management |
| `var_apt_cacher_ip`| APT cacher server IP | "" | CT script / Advanced Settings | Package management |
| `APT_CACHER` | APT cacher flag | "no" | Advanced Settings | Container creation |
| `APT_CACHER_IP` | APT cacher IP (internal) | "" | Advanced Settings | Container creation |
### GPU Passthrough Variables ### GPU Passthrough Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ------------ | ------------------------------- | ------- | ------------------------------------------- | ------------------ |
| `GPU_APPS` | List of apps that support GPU | - | Environment | GPU detection | | `var_gpu` | Enable GPU passthrough | "no" | CT script / Environment / Advanced Settings | GPU passthrough |
| `var_gpu` | GPU selection | - | User input | GPU passthrough | | `ENABLE_GPU` | GPU passthrough flag (internal) | "no" | Advanced Settings | Container creation |
| `var_gpu_type` | GPU type (intel/amd/nvidia) | - | detect_gpu_devices() | GPU passthrough |
| `var_gpu_devices` | GPU device list | - | detect_gpu_devices() | GPU passthrough | **Note**: GPU passthrough is controlled via `var_gpu`. Apps that benefit from GPU acceleration (media servers, AI/ML, transcoding) have `var_gpu=yes` as default in their CT scripts.
**Apps with GPU enabled by default**:
- Media: jellyfin, plex, emby, channels, ersatztv, tunarr, immich
- Transcoding: tdarr, unmanic, fileflows
- AI/ML: ollama, openwebui
- NVR: frigate
**Usage Examples**:
```bash
# Disable GPU for a specific installation
var_gpu=no bash -c "$(curl -fsSL https://...jellyfin.sh)"
# Enable GPU for apps without default GPU support
var_gpu=yes bash -c "$(curl -fsSL https://...debian.sh)"
# Set in default.vars for all apps
echo "var_gpu=yes" >> /usr/local/community-scripts/default.vars
```
### API and Diagnostics Variables ### API and Diagnostics Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ------------- | ------------------------ | --------- | ----------- | ----------------- |
| `DIAGNOSTICS` | Enable diagnostics mode | "false" | Environment | Diagnostics | | `DIAGNOSTICS` | Enable diagnostics mode | "false" | Environment | Diagnostics |
| `METHOD` | Installation method | "install" | Environment | Installation flow | | `METHOD` | Installation method | "install" | Environment | Installation flow |
| `RANDOM_UUID` | Random UUID for tracking | - | Environment | Logging | | `RANDOM_UUID` | Random UUID for tracking | - | Environment | Logging |
| `API_TOKEN` | Proxmox API token | - | Environment | API calls | | `API_TOKEN` | Proxmox API token | - | Environment | API calls |
| `API_USER` | Proxmox API user | - | Environment | API calls | | `API_USER` | Proxmox API user | - | Environment | API calls |
### Settings Persistence Variables ### Settings Persistence Variables
| Variable | Description | Default | Set In | Used In | | Variable | Description | Default | Set In | Used In |
|----------|-------------|---------|---------|---------| | ------------------- | -------------------------- | ------------------------------------------------- | ----------- | -------------------- |
| `SAVE_DEFAULTS` | Save settings as defaults | "false" | User input | Settings persistence | | `SAVE_DEFAULTS` | Save settings as defaults | "false" | User input | Settings persistence |
| `SAVE_APP_DEFAULTS` | Save app-specific defaults | "false" | User input | Settings persistence | | `SAVE_APP_DEFAULTS` | Save app-specific defaults | "false" | User input | Settings persistence |
| `DEFAULT_VARS_FILE` | Path to default.vars | "/usr/local/community-scripts/default.vars" | Environment | Settings persistence | | `DEFAULT_VARS_FILE` | Path to default.vars | "/usr/local/community-scripts/default.vars" | Environment | Settings persistence |
| `APP_DEFAULTS_FILE` | Path to app.vars | "/usr/local/community-scripts/defaults/$APP.vars" | Environment | Settings persistence | | `APP_DEFAULTS_FILE` | Path to app.vars | "/usr/local/community-scripts/defaults/$APP.vars" | Environment | Settings persistence |
## Variable Precedence Chain ## Variable Precedence Chain
@ -152,6 +191,7 @@ export SSH="true"
## Environment Variable Usage Patterns ## Environment Variable Usage Patterns
### 1. Container Creation ### 1. Container Creation
```bash ```bash
# Basic container creation # Basic container creation
export APP="nextcloud" export APP="nextcloud"
@ -170,6 +210,7 @@ export var_container_storage="local"
``` ```
### 2. GPU Passthrough ### 2. GPU Passthrough
```bash ```bash
# Enable GPU passthrough # Enable GPU passthrough
export GPU_APPS="plex,jellyfin,emby" export GPU_APPS="plex,jellyfin,emby"
@ -178,6 +219,7 @@ export ENABLE_PRIVILEGED="true"
``` ```
### 3. Advanced Network Configuration ### 3. Advanced Network Configuration
```bash ```bash
# VLAN and IPv6 configuration # VLAN and IPv6 configuration
export var_vlan="100" export var_vlan="100"
@ -187,6 +229,7 @@ export var_mtu="9000"
``` ```
### 4. Storage Configuration ### 4. Storage Configuration
```bash ```bash
# Custom storage locations # Custom storage locations
export var_template_storage="nfs-storage" export var_template_storage="nfs-storage"
@ -206,6 +249,7 @@ The script validates variables at several points:
## Common Variable Combinations ## Common Variable Combinations
### Development Container ### Development Container
```bash ```bash
export APP="dev-container" export APP="dev-container"
export CTID="200" export CTID="200"
@ -220,6 +264,7 @@ export ENABLE_PRIVILEGED="true"
``` ```
### Media Server with GPU ### Media Server with GPU
```bash ```bash
export APP="plex" export APP="plex"
export CTID="300" export CTID="300"
@ -235,6 +280,7 @@ export ENABLE_PRIVILEGED="true"
``` ```
### Lightweight Service ### Lightweight Service
```bash ```bash
export APP="nginx" export APP="nginx"
export CTID="400" export CTID="400"

View File

@ -9,30 +9,35 @@ This document provides a comprehensive reference of all functions in `build.func
### Initialization Functions ### Initialization Functions
#### `start()` #### `start()`
**Purpose**: Main entry point when build.func is sourced or executed **Purpose**: Main entry point when build.func is sourced or executed
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Detects execution context (Proxmox host vs container) - Detects execution context (Proxmox host vs container)
- Captures hard environment variables - Captures hard environment variables
- Sets CT_TYPE based on context - Sets CT_TYPE based on context
- Routes to appropriate workflow (install_script or update_script) - Routes to appropriate workflow (install_script or update_script)
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `CT_TYPE`, `APP`, `CTID` **Environment Variables Used**: `CT_TYPE`, `APP`, `CTID`
#### `variables()` #### `variables()`
**Purpose**: Load and resolve all configuration variables using precedence chain **Purpose**: Load and resolve all configuration variables using precedence chain
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Loads app-specific .vars file - Loads app-specific .vars file
- Loads global default.vars file - Loads global default.vars file
- Applies variable precedence chain - Applies variable precedence chain
- Sets all configuration variables - Sets all configuration variables
**Dependencies**: `base_settings()` **Dependencies**: `base_settings()`
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `base_settings()` #### `base_settings()`
**Purpose**: Set built-in default values for all configuration variables **Purpose**: Set built-in default values for all configuration variables
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
@ -43,28 +48,33 @@ This document provides a comprehensive reference of all functions in `build.func
### UI and Menu Functions ### UI and Menu Functions
#### `install_script()` #### `install_script()`
**Purpose**: Main installation workflow coordinator **Purpose**: Main installation workflow coordinator
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Displays installation mode selection menu - Displays installation mode selection menu
- Coordinates the entire installation process - Coordinates the entire installation process
- Handles user interaction and validation - Handles user interaction and validation
**Dependencies**: `variables()`, `build_container()`, `default_var_settings()` **Dependencies**: `variables()`, `build_container()`, `default_var_settings()`
**Environment Variables Used**: `APP`, `CTID`, `var_hostname` **Environment Variables Used**: `APP`, `CTID`, `var_hostname`
#### `advanced_settings()` #### `advanced_settings()`
**Purpose**: Provide advanced configuration options via whiptail menus **Purpose**: Provide advanced configuration options via whiptail menus
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Displays whiptail menus for configuration - Displays whiptail menus for configuration
- Updates configuration variables based on user input - Updates configuration variables based on user input
- Validates user selections - Validates user selections
**Dependencies**: `select_storage()`, `detect_gpu_devices()` **Dependencies**: `select_storage()`, `detect_gpu_devices()`
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `settings_menu()` #### `settings_menu()`
**Purpose**: Display and handle settings configuration menu **Purpose**: Display and handle settings configuration menu
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
@ -75,58 +85,68 @@ This document provides a comprehensive reference of all functions in `build.func
### Storage Functions ### Storage Functions
#### `select_storage()` #### `select_storage()`
**Purpose**: Handle storage selection for templates and containers **Purpose**: Handle storage selection for templates and containers
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Resolves storage preselection - Resolves storage preselection
- Prompts user for storage selection if needed - Prompts user for storage selection if needed
- Validates storage availability - Validates storage availability
- Sets var_template_storage and var_container_storage - Sets var_template_storage and var_container_storage
**Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()` **Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()`
**Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE` **Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE`
#### `resolve_storage_preselect()` #### `resolve_storage_preselect()`
**Purpose**: Resolve preselected storage options **Purpose**: Resolve preselected storage options
**Parameters**: **Parameters**:
- `storage_type`: Type of storage (template or container) - `storage_type`: Type of storage (template or container)
**Returns**: Storage name if valid, empty if invalid **Returns**: Storage name if valid, empty if invalid
**Side Effects**: Validates storage availability **Side Effects**: Validates storage availability
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `var_template_storage`, `var_container_storage` **Environment Variables Used**: `var_template_storage`, `var_container_storage`
#### `choose_and_set_storage_for_file()` #### `choose_and_set_storage_for_file()`
**Purpose**: Interactive storage selection via whiptail **Purpose**: Interactive storage selection via whiptail
**Parameters**: **Parameters**:
- `storage_type`: Type of storage (template or container) - `storage_type`: Type of storage (template or container)
- `content_type`: Content type (vztmpl or rootdir) - `content_type`: Content type (vztmpl or rootdir)
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Displays whiptail menu - Displays whiptail menu
- Updates storage variables - Updates storage variables
- Validates selection - Validates selection
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `var_template_storage`, `var_container_storage` **Environment Variables Used**: `var_template_storage`, `var_container_storage`
### Container Creation Functions ### Container Creation Functions
#### `build_container()` #### `build_container()`
**Purpose**: Validate settings and prepare container creation **Purpose**: Validate settings and prepare container creation
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Validates all configuration - Validates all configuration
- Checks for conflicts - Checks for conflicts
- Prepares container configuration - Prepares container configuration
- Calls create_lxc_container() - Calls create_lxc_container()
**Dependencies**: `create_lxc_container()` **Dependencies**: `create_lxc_container()`
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `create_lxc_container()` #### `create_lxc_container()`
**Purpose**: Create the actual LXC container **Purpose**: Create the actual LXC container
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Creates LXC container with basic configuration - Creates LXC container with basic configuration
- Configures network settings - Configures network settings
- Sets up storage and mount points - Sets up storage and mount points
@ -134,108 +154,176 @@ This document provides a comprehensive reference of all functions in `build.func
- Sets resource limits - Sets resource limits
- Configures startup options - Configures startup options
- Starts container - Starts container
**Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()` **Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()`
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
### GPU and Hardware Functions ### GPU and Hardware Functions
#### `detect_gpu_devices()` #### `detect_gpu_devices()`
**Purpose**: Detect available GPU hardware on the system **Purpose**: Detect available GPU hardware on the system
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Scans for Intel, AMD, and NVIDIA GPUs - Scans for Intel, AMD, and NVIDIA GPUs
- Updates var_gpu_type and var_gpu_devices - Updates var_gpu_type and var_gpu_devices
- Determines GPU capabilities - Determines GPU capabilities
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS` **Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS`
#### `configure_gpu_passthrough()` #### `configure_gpu_passthrough()`
**Purpose**: Configure GPU passthrough for the container **Purpose**: Configure GPU passthrough for the container
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Adds GPU device entries to container config - Adds GPU device entries to container config
- Configures proper device permissions - Configures proper device permissions
- Sets up device mapping - Sets up device mapping
- Updates /etc/pve/lxc/<ctid>.conf - Updates /etc/pve/lxc/<ctid>.conf
**Dependencies**: `detect_gpu_devices()` **Dependencies**: `detect_gpu_devices()`
**Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID` **Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID`
#### `fix_gpu_gids()` #### `fix_gpu_gids()`
**Purpose**: Fix GPU group IDs after container creation **Purpose**: Fix GPU group IDs after container creation
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Updates GPU group IDs in container - Updates GPU group IDs in container
- Ensures proper GPU access permissions - Ensures proper GPU access permissions
- Configures video and render groups - Configures video and render groups
**Dependencies**: `configure_gpu_passthrough()` **Dependencies**: `configure_gpu_passthrough()`
**Environment Variables Used**: `CTID`, `var_gpu_type` **Environment Variables Used**: `CTID`, `var_gpu_type`
### SSH Configuration Functions
#### `configure_ssh_settings()`
**Purpose**: Interactive SSH key and access configuration wizard
**Parameters**:
- `step_info` (optional): Step indicator string (e.g., "Step 17/19") for consistent dialog headers
**Returns**: None
**Side Effects**:
- Creates temporary file for SSH keys
- Discovers and presents available SSH keys from host
- Allows manual key entry or folder/glob scanning
- Sets `SSH` variable to "yes" or "no" based on user selection
- Sets `SSH_AUTHORIZED_KEY` if manual key provided
- Populates `SSH_KEYS_FILE` with selected keys
**Dependencies**: `ssh_discover_default_files()`, `ssh_build_choices_from_files()`
**Environment Variables Used**: `SSH`, `SSH_AUTHORIZED_KEY`, `SSH_KEYS_FILE`
**SSH Key Source Options**:
1. `found` - Select from auto-detected host keys
2. `manual` - Paste a single public key
3. `folder` - Scan custom folder or glob pattern
4. `none` - No SSH keys
**Note**: The "Enable root SSH access?" dialog is always shown, regardless of whether SSH keys or password are configured. This ensures users can always enable SSH access even with automatic login.
#### `ssh_discover_default_files()`
**Purpose**: Discover SSH public key files on the host system
**Parameters**: None
**Returns**: Array of discovered key file paths
**Side Effects**: Scans common SSH key locations
**Dependencies**: None
**Environment Variables Used**: `var_ssh_import_glob`
#### `ssh_build_choices_from_files()`
**Purpose**: Build whiptail checklist choices from SSH key files
**Parameters**:
- Array of file paths to process
**Returns**: None
**Side Effects**:
- Sets `CHOICES` array for whiptail checklist
- Sets `COUNT` variable with number of keys found
- Creates `MAPFILE` for key tag to content mapping
**Dependencies**: None
**Environment Variables Used**: `CHOICES`, `COUNT`, `MAPFILE`
### Settings Persistence Functions ### Settings Persistence Functions
#### `default_var_settings()` #### `default_var_settings()`
**Purpose**: Offer to save current settings as defaults **Purpose**: Offer to save current settings as defaults
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Prompts user to save settings - Prompts user to save settings
- Saves to default.vars file - Saves to default.vars file
- Saves to app-specific .vars file - Saves to app-specific .vars file
**Dependencies**: `maybe_offer_save_app_defaults()` **Dependencies**: `maybe_offer_save_app_defaults()`
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `maybe_offer_save_app_defaults()` #### `maybe_offer_save_app_defaults()`
**Purpose**: Offer to save app-specific defaults **Purpose**: Offer to save app-specific defaults
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Prompts user to save app-specific settings - Prompts user to save app-specific settings
- Saves to app.vars file - Saves to app.vars file
- Updates app-specific configuration - Updates app-specific configuration
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS` **Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS`
### Utility Functions ### Utility Functions
#### `validate_settings()` #### `validate_settings()`
**Purpose**: Validate all configuration settings **Purpose**: Validate all configuration settings
**Parameters**: None **Parameters**: None
**Returns**: 0 if valid, 1 if invalid **Returns**: 0 if valid, 1 if invalid
**Side Effects**: **Side Effects**:
- Checks for configuration conflicts - Checks for configuration conflicts
- Validates resource limits - Validates resource limits
- Validates network configuration - Validates network configuration
- Validates storage configuration - Validates storage configuration
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `check_conflicts()` #### `check_conflicts()`
**Purpose**: Check for configuration conflicts **Purpose**: Check for configuration conflicts
**Parameters**: None **Parameters**: None
**Returns**: 0 if no conflicts, 1 if conflicts found **Returns**: 0 if no conflicts, 1 if conflicts found
**Side Effects**: **Side Effects**:
- Checks for conflicting settings - Checks for conflicting settings
- Validates resource allocation - Validates resource allocation
- Checks network configuration - Checks network configuration
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: All configuration variables **Environment Variables Used**: All configuration variables
#### `cleanup_on_error()` #### `cleanup_on_error()`
**Purpose**: Clean up resources on error **Purpose**: Clean up resources on error
**Parameters**: None **Parameters**: None
**Returns**: None **Returns**: None
**Side Effects**: **Side Effects**:
- Removes partially created containers - Removes partially created containers
- Cleans up temporary files - Cleans up temporary files
- Resets configuration - Resets configuration
**Dependencies**: None **Dependencies**: None
**Environment Variables Used**: `CTID` **Environment Variables Used**: `CTID`
## Function Call Flow ## Function Call Flow
### Main Installation Flow ### Main Installation Flow
``` ```
start() start()
├── variables() ├── variables()
@ -259,6 +347,7 @@ start()
``` ```
### Error Handling Flow ### Error Handling Flow
``` ```
Error Detection Error Detection
├── validate_settings() ├── validate_settings()
@ -271,24 +360,29 @@ Error Detection
## Function Dependencies ## Function Dependencies
### Core Dependencies ### Core Dependencies
- `start()``install_script()``build_container()``create_lxc_container()` - `start()``install_script()``build_container()``create_lxc_container()`
- `variables()``base_settings()` - `variables()``base_settings()`
- `advanced_settings()``select_storage()``detect_gpu_devices()` - `advanced_settings()``select_storage()``detect_gpu_devices()`
### Storage Dependencies ### Storage Dependencies
- `select_storage()``resolve_storage_preselect()` - `select_storage()``resolve_storage_preselect()`
- `select_storage()``choose_and_set_storage_for_file()` - `select_storage()``choose_and_set_storage_for_file()`
### GPU Dependencies ### GPU Dependencies
- `configure_gpu_passthrough()``detect_gpu_devices()` - `configure_gpu_passthrough()``detect_gpu_devices()`
- `fix_gpu_gids()``configure_gpu_passthrough()` - `fix_gpu_gids()``configure_gpu_passthrough()`
### Settings Dependencies ### Settings Dependencies
- `default_var_settings()``maybe_offer_save_app_defaults()` - `default_var_settings()``maybe_offer_save_app_defaults()`
## Function Usage Examples ## Function Usage Examples
### Basic Container Creation ### Basic Container Creation
```bash ```bash
# Set required variables # Set required variables
export APP="plex" export APP="plex"
@ -304,6 +398,7 @@ start() # Entry point
``` ```
### Advanced Configuration ### Advanced Configuration
```bash ```bash
# Set advanced variables # Set advanced variables
export var_os="debian" export var_os="debian"
@ -319,6 +414,7 @@ advanced_settings() # Interactive configuration
``` ```
### GPU Passthrough ### GPU Passthrough
```bash ```bash
# Enable GPU passthrough # Enable GPU passthrough
export GPU_APPS="plex" export GPU_APPS="plex"
@ -331,6 +427,7 @@ fix_gpu_gids() # Fix permissions
``` ```
### Settings Persistence ### Settings Persistence
```bash ```bash
# Save settings as defaults # Save settings as defaults
export SAVE_DEFAULTS="true" export SAVE_DEFAULTS="true"
@ -344,15 +441,18 @@ maybe_offer_save_app_defaults() # Save app defaults
## Function Error Handling ## Function Error Handling
### Validation Functions ### Validation Functions
- `validate_settings()`: Returns 0 for valid, 1 for invalid - `validate_settings()`: Returns 0 for valid, 1 for invalid
- `check_conflicts()`: Returns 0 for no conflicts, 1 for conflicts - `check_conflicts()`: Returns 0 for no conflicts, 1 for conflicts
### Error Recovery ### Error Recovery
- `cleanup_on_error()`: Cleans up on any error - `cleanup_on_error()`: Cleans up on any error
- Error codes are propagated up the call stack - Error codes are propagated up the call stack
- Critical errors cause script termination - Critical errors cause script termination
### Error Types ### Error Types
1. **Configuration Errors**: Invalid settings or conflicts 1. **Configuration Errors**: Invalid settings or conflicts
2. **Resource Errors**: Insufficient resources or conflicts 2. **Resource Errors**: Insufficient resources or conflicts
3. **Network Errors**: Invalid network configuration 3. **Network Errors**: Invalid network configuration

View File

@ -6,6 +6,16 @@ This directory contains comprehensive documentation for the `build.func` script,
## Documentation Files ## Documentation Files
### 🎛️ [BUILD_FUNC_ADVANCED_SETTINGS.md](./BUILD_FUNC_ADVANCED_SETTINGS.md)
Complete reference for the 28-step Advanced Settings wizard, including all configurable options and their inheritance behavior.
**Contents:**
- All 28 wizard steps explained
- Default value inheritance
- Feature matrix (when to enable each feature)
- Confirmation summary format
- Usage examples
### 📊 [BUILD_FUNC_FLOWCHART.md](./BUILD_FUNC_FLOWCHART.md) ### 📊 [BUILD_FUNC_FLOWCHART.md](./BUILD_FUNC_FLOWCHART.md)
Visual ASCII flowchart showing the main execution flow, decision trees, and key decision points in the build.func script. Visual ASCII flowchart showing the main execution flow, decision trees, and key decision points in the build.func script.

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://docs.2fauth.app/", "documentation": "https://docs.2fauth.app/",
"website": "https://2fauth.app/", "website": "https://2fauth.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/2fauth.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/2fauth.webp",
"config_path": "cat /opt/2fauth/.env", "config_path": "cat /opt/2fauth/.env",
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.", "description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807", "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
"website": "https://actualbudget.org/", "website": "https://actualbudget.org/",
"config_path": "/opt/actualbudget-data/config.json", "config_path": "/opt/actualbudget-data/config.json",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/actual-budget.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/actual-budget.webp",
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.", "description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/proxmox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/proxmox.webp",
"config_path": "/opt/iptag/iptag.conf", "config_path": "/opt/iptag/iptag.conf",
"description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.", "description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://docs.netbird.io/", "documentation": "https://docs.netbird.io/",
"website": "https://netbird.io/", "website": "https://netbird.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/netbird.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/netbird.webp",
"config_path": "", "config_path": "",
"description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.", "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://tailscale.com/kb/1017/install", "documentation": "https://tailscale.com/kb/1017/install",
"website": "https://tailscale.com/", "website": "https://tailscale.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/tailscale.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tailscale.webp",
"config_path": "", "config_path": "",
"description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.", "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started", "documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started",
"website": "https://adguard.com/en/adguard-home/overview.html", "website": "https://adguard.com/en/adguard-home/overview.html",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/adguard-home.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adguard-home.webp",
"config_path": "/opt/AdGuardHome/AdGuardHome.yaml", "config_path": "/opt/AdGuardHome/AdGuardHome.yaml",
"description": "AdGuard Home is an open-source, self-hosted network-wide ad blocker. It blocks advertisements, trackers, phishing and malware websites, and provides protection against online threats. AdGuard Home is a DNS-based solution, which means it blocks ads and malicious content at the network level, before it even reaches your device. It runs on your home network and can be easily configured and managed through a web-based interface. It provides detailed statistics and logs, allowing you to see which websites are being blocked, and why. AdGuard Home is designed to be fast, lightweight, and easy to use, making it an ideal solution for home users who want to block ads, protect their privacy, and improve the speed and security of their online experience.", "description": "AdGuard Home is an open-source, self-hosted network-wide ad blocker. It blocks advertisements, trackers, phishing and malware websites, and provides protection against online threats. AdGuard Home is a DNS-based solution, which means it blocks ads and malicious content at the network level, before it even reaches your device. It runs on your home network and can be easily configured and managed through a web-based interface. It provides detailed statistics and logs, allowing you to see which websites are being blocked, and why. AdGuard Home is designed to be fast, lightweight, and easy to use, making it an ideal solution for home users who want to block ads, protect their privacy, and improve the speed and security of their online experience.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://adventurelog.app/docs/intro/adventurelog_overview.html", "documentation": "https://adventurelog.app/docs/intro/adventurelog_overview.html",
"website": "https://adventurelog.app/", "website": "https://adventurelog.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/adventurelog.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adventurelog.webp",
"config_path": "/opt/adventurelog/backend/server/.env", "config_path": "/opt/adventurelog/backend/server/.env",
"description": "Adventure Log is an app designed to track outdoor activities and personal achievements, allowing users to log their adventures with photos, notes, and location data. It focuses on enhancing outdoor experiences by preserving memories and sharing them with others.", "description": "Adventure Log is an app designed to track outdoor activities and personal achievements, allowing users to log their adventures with photos, notes, and location data. It focuses on enhancing outdoor experiences by preserving memories and sharing them with others.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8090, "interface_port": 8090,
"documentation": "https://www.ispyconnect.com/docs/agent/about", "documentation": "https://www.ispyconnect.com/docs/agent/about",
"website": "https://www.ispyconnect.com/", "website": "https://www.ispyconnect.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/agent-dvr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/agent-dvr.webp",
"config_path": "/opt/agentdvr/agent/Media/XML/config.json", "config_path": "/opt/agentdvr/agent/Media/XML/config.json",
"description": "AgentDVR a new video surveillance solution for the Internet Of Things.", "description": "AgentDVR a new video surveillance solution for the Internet Of Things.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/proxmox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/proxmox.webp",
"config_path": "", "config_path": "",
"description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.", "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": null,
"website": "https://sharevb-it-tools.vercel.app/", "website": "https://sharevb-it-tools.vercel.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/it-tools.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/it-tools.webp",
"config_path": "", "config_path": "",
"description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.", "description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://tinyauth.app", "documentation": "https://tinyauth.app",
"config_path": "/opt/tinyauth/.env", "config_path": "/opt/tinyauth/.env",
"website": "https://tinyauth.app", "website": "https://tinyauth.app",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/tinyauth.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tinyauth.webp",
"description": "Tinyauth is a simple authentication middleware that adds simple username/password login or OAuth with Google, Github and any generic provider to all of your docker apps.", "description": "Tinyauth is a simple authentication middleware that adds simple username/password login or OAuth with Google, Github and any generic provider to all of your docker apps.",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": "https://www.alpinelinux.org/", "website": "https://www.alpinelinux.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/alpine-linux.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/alpine-linux.webp",
"config_path": "", "config_path": "",
"description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.", "description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://cassandra.apache.org/doc/latest/", "documentation": "https://cassandra.apache.org/doc/latest/",
"website": "https://cassandra.apache.org/", "website": "https://cassandra.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/apache-cassandra.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/apache-cassandra.webp",
"config_path": "/etc/cassandra/cassandra.yaml", "config_path": "/etc/cassandra/cassandra.yaml",
"description": "Apache-Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance.", "description": "Apache-Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 5984, "interface_port": 5984,
"documentation": "https://docs.couchdb.org/en/stable/", "documentation": "https://docs.couchdb.org/en/stable/",
"website": "https://couchdb.apache.org/", "website": "https://couchdb.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/couchdb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/couchdb.webp",
"config_path": "etc/default.ini", "config_path": "etc/default.ini",
"description": "Apache-CouchDB Seamless multi-master sync, that scales from Big Data to Mobile, with an Intuitive HTTP/JSON API and designed for Reliability.", "description": "Apache-CouchDB Seamless multi-master sync, that scales from Big Data to Mobile, with an Intuitive HTTP/JSON API and designed for Reliability.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://guacamole.apache.org/doc/gug/", "documentation": "https://guacamole.apache.org/doc/gug/",
"website": "https://guacamole.apache.org/", "website": "https://guacamole.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/apache-guacamole.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/apache-guacamole.webp",
"config_path": "/etc/guacamole/guacd.conf", "config_path": "/etc/guacamole/guacd.conf",
"description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.", "description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 9998, "interface_port": 9998,
"documentation": "https://cwiki.apache.org/confluence/display/tika", "documentation": "https://cwiki.apache.org/confluence/display/tika",
"website": "https://tika.apache.org/", "website": "https://tika.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/apache-tika.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/apache-tika.webp",
"config_path": "/opt/apache-tika/tika-config.xml", "config_path": "/opt/apache-tika/tika-config.xml",
"description": "The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more.", "description": "The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://cwiki.apache.org/confluence/display/TOMCAT", "documentation": "https://cwiki.apache.org/confluence/display/TOMCAT",
"website": "https://tomcat.apache.org/", "website": "https://tomcat.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/apache-tomcat.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/apache-tomcat.webp",
"config_path": "", "config_path": "",
"description": "Apache Tomcat is an open-source application server that runs Java Servlets and JavaServer Pages (JSP). It allows developers to deploy and manage Java web applications by handling HTTP requests and serving dynamic content. Tomcat is widely used for lightweight web applications and supports various Java EE features like WebSockets and JNDI.", "description": "Apache Tomcat is an open-source application server that runs Java Servlets and JavaServer Pages (JSP). It allows developers to deploy and manage Java web applications by handling HTTP requests and serving dynamic content. Tomcat is widely used for lightweight web applications and supports various Java EE features like WebSockets and JNDI.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3142, "interface_port": 3142,
"documentation": "https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html", "documentation": "https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html",
"website": "https://www.unix-ag.uni-kl.de/~bloch/acng/", "website": "https://www.unix-ag.uni-kl.de/~bloch/acng/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/linux.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/linux.webp",
"config_path": "/etc/apt-cacher-ng/acng.conf", "config_path": "/etc/apt-cacher-ng/acng.conf",
"description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.", "description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8000, "interface_port": 8000,
"documentation": "https://github.com/ArchiveBox/ArchiveBox/wiki", "documentation": "https://github.com/ArchiveBox/ArchiveBox/wiki",
"website": "https://archivebox.io/", "website": "https://archivebox.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/archivebox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/archivebox.webp",
"config_path": "/opt/archivebox/data/ArchiveBox.conf", "config_path": "/opt/archivebox/data/ArchiveBox.conf",
"description": "ArchiveBox is an open source tool that lets organizations & individuals archive both public & private web content while retaining control over their data. It can be used to save copies of bookmarks, preserve evidence for legal cases, backup photos from FB/Insta/Flickr or media from YT/Soundcloud/etc., save research papers, and more...", "description": "ArchiveBox is an open source tool that lets organizations & individuals archive both public & private web content while retaining control over their data. It can be used to save copies of bookmarks, preserve evidence for legal cases, backup photos from FB/Insta/Flickr or media from YT/Soundcloud/etc., save research papers, and more...",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://wiki.archlinux.org/title/Main_page", "documentation": "https://wiki.archlinux.org/title/Main_page",
"website": "https://archlinux.org/", "website": "https://archlinux.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/arch-linux.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/arch-linux.webp",
"config_path": "", "config_path": "",
"description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.", "description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://release-argus.io/docs/overview/", "documentation": "https://release-argus.io/docs/overview/",
"website": "https://release-argus.io/", "website": "https://release-argus.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/argus.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/argus.webp",
"config_path": "/opt/argus/config.yml", "config_path": "/opt/argus/config.yml",
"description": "Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found. For example, you could set it to monitor the Argus repo (release-argus/argus). This will query the GitHub API and track the tag_name variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.", "description": "Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found. For example, you could set it to monitor the Argus repo (release-argus/argus). This will query the GitHub API and track the tag_name variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.",
"install_methods": [ "install_methods": [

View File

@ -6,12 +6,12 @@
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 6880, "interface_port": 6880,
"documentation": "https://aria2.github.io/manual/en/html/index.html", "documentation": "https://aria2.github.io/manual/en/html/index.html",
"website": "https://aria2.github.io/", "website": "https://aria2.github.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/aria2.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/aria2.webp",
"config_path": "/root/aria2.daemon", "config_path": "/root/aria2.daemon",
"description": "Aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.", "description": "Aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://docs.asterisk.org/", "documentation": "https://docs.asterisk.org/",
"config_path": "/etc/asterisk", "config_path": "/etc/asterisk",
"website": "https://asterisk.org/", "website": "https://asterisk.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/asterisk.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/asterisk.webp",
"description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.", "description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": 13378, "interface_port": 13378,
"documentation": "https://www.audiobookshelf.org/guides/", "documentation": "https://www.audiobookshelf.org/guides/",
"website": "https://www.audiobookshelf.org/", "website": "https://www.audiobookshelf.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/audiobookshelf.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/audiobookshelf.webp",
"config_path": "/usr/share/audiobookshelf/config", "config_path": "/usr/share/audiobookshelf/config",
"description": "Audiobookshelf is a Self-hosted audiobook and podcast server.", "description": "Audiobookshelf is a Self-hosted audiobook and podcast server.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 443, "interface_port": 443,
"documentation": "https://www.authelia.com/integration/deployment/bare-metal/", "documentation": "https://www.authelia.com/integration/deployment/bare-metal/",
"website": "https://www.authelia.com/", "website": "https://www.authelia.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/authelia.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/authelia.webp",
"config_path": "/etc/authelia/configuration.yml", "config_path": "/etc/authelia/configuration.yml",
"description": "Authelia is an open-source authentication and authorization server and portal fulfilling the identity and access management (IAM) role of information security in providing multi-factor authentication and single sign-on (SSO) for your applications via a web portal. It acts as a companion for common reverse proxies.", "description": "Authelia is an open-source authentication and authorization server and portal fulfilling the identity and access management (IAM) role of information security in providing multi-factor authentication and single sign-on (SSO) for your applications via a web portal. It acts as a companion for common reverse proxies.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 7474, "interface_port": 7474,
"documentation": "https://autobrr.com/configuration/autobrr", "documentation": "https://autobrr.com/configuration/autobrr",
"website": "https://autobrr.com/", "website": "https://autobrr.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/autobrr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/autobrr.webp",
"config_path": "/root/.config/autobrr/config.toml", "config_path": "/root/.config/autobrr/config.toml",
"description": "Autobrr is a torrent downloading tool that automates the process of downloading torrents. It is designed to be modern and user-friendly, providing users with a convenient and efficient way to download torrent files. With Autobrr, you can schedule and manage your torrent downloads, and have the ability to automatically download torrents based on certain conditions, such as time of day or availability of seeds. This can save you time and effort, allowing you to focus on other tasks while your torrents are being downloaded in the background.", "description": "Autobrr is a torrent downloading tool that automates the process of downloading torrents. It is designed to be modern and user-friendly, providing users with a convenient and efficient way to download torrent files. With Autobrr, you can schedule and manage your torrent downloads, and have the ability to automatically download torrents based on certain conditions, such as time of day or availability of seeds. This can save you time and effort, allowing you to focus on other tasks while your torrents are being downloaded in the background.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://github.com/gelbphoenix/autocaliweb/wiki", "documentation": "https://github.com/gelbphoenix/autocaliweb/wiki",
"config_path": "/etc/autocaliweb", "config_path": "/etc/autocaliweb",
"website": "https://github.com/gelbphoenix/autocaliweb", "website": "https://github.com/gelbphoenix/autocaliweb",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/autocaliweb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/autocaliweb.webp",
"description": "A modern web management system for eBooks, eComics and PDFs", "description": "A modern web management system for eBooks, eComics and PDFs",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://docs.baby-buddy.net/", "documentation": "https://docs.baby-buddy.net/",
"website": "https://github.com/babybuddy/babybuddy", "website": "https://github.com/babybuddy/babybuddy",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/baby-buddy.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/baby-buddy.webp",
"config_path": "/opt/babybuddy/babybuddy/settings/production.py", "config_path": "/opt/babybuddy/babybuddy/settings/production.py",
"description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.", "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 9898, "interface_port": 9898,
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started", "documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
"website": "https://garethgeorge.github.io/backrest", "website": "https://garethgeorge.github.io/backrest",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/backrest.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/backrest.webp",
"config_path": "/opt/backrest/config/config.json", "config_path": "/opt/backrest/config/config.json",
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.", "description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://sabre.io/dav/", "documentation": "https://sabre.io/dav/",
"website": "https://sabre.io/baikal/", "website": "https://sabre.io/baikal/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/baikal.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/baikal.webp",
"config_path": "/opt/baikal/config/baikal.yaml", "config_path": "/opt/baikal/config/baikal.yaml",
"description": "Baïkal is a lightweight CalDAV+CardDAV server. It offers an extensive web interface with easy management of users, address books and calendars.", "description": "Baïkal is a lightweight CalDAV+CardDAV server. It offers an extensive web interface with easy management of users, address books and calendars.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://docs.barassistant.app/", "documentation": "https://docs.barassistant.app/",
"website": "https://barassistant.app/", "website": "https://barassistant.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bar-assistant.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bar-assistant.webp",
"config_path": "/opt/bar-assistant", "config_path": "/opt/bar-assistant",
"description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..", "description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 6767, "interface_port": 6767,
"documentation": "https://wiki.bazarr.media/", "documentation": "https://wiki.bazarr.media/",
"website": "https://www.bazarr.media/", "website": "https://www.bazarr.media/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bazarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bazarr.webp",
"config_path": "/opt/bazarr/data/config/config.yaml", "config_path": "/opt/bazarr/data/config/config.yaml",
"description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.", "description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://github.com/alam00000/bentopdf", "documentation": "https://github.com/alam00000/bentopdf",
"website": "https://www.bentopdf.com", "website": "https://www.bentopdf.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bentopdf.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bentopdf.webp",
"config_path": "", "config_path": "",
"description": "A privacy-first, 100% client-side PDF Toolkit. No signups/accounts, works in the browser, online or offline.", "description": "A privacy-first, 100% client-side PDF Toolkit. No signups/accounts, works in the browser, online or offline.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8090, "interface_port": 8090,
"documentation": "https://beszel.dev/guide/what-is-beszel", "documentation": "https://beszel.dev/guide/what-is-beszel",
"website": "https://beszel.dev/", "website": "https://beszel.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/beszel.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/beszel.webp",
"config_path": "", "config_path": "",
"description": "A lightweight server monitoring platform that provides Docker statistics, historical data, and alert functions\n ", "description": "A lightweight server monitoring platform that provides Docker statistics, historical data, and alert functions\n ",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3333, "interface_port": 3333,
"documentation": "https://bitmagnet.io/setup.html", "documentation": "https://bitmagnet.io/setup.html",
"website": "https://bitmagnet.io/", "website": "https://bitmagnet.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bitmagnet.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bitmagnet.webp",
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`", "config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.", "description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 4000, "interface_port": 4000,
"documentation": "https://0xerr0r.github.io/blocky/latest/configuration/", "documentation": "https://0xerr0r.github.io/blocky/latest/configuration/",
"website": "https://0xerr0r.github.io/blocky/", "website": "https://0xerr0r.github.io/blocky/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/blocky.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/blocky.webp",
"config_path": "/opt/blocky/config.yml", "config_path": "/opt/blocky/config.yml",
"description": "Blocky is a software tool designed for blocking unwanted ads and trackers on local networks. It functions as a DNS proxy and runs on the Go programming language. Blocky intercepts requests to advertisements and other unwanted content and blocks them before they reach the end user. This results in a cleaner, faster, and more secure online experience for users connected to the local network. Blocky is open-source, easy to configure and can be run on a variety of devices, making it a versatile solution for small to medium-sized local networks.", "description": "Blocky is a software tool designed for blocking unwanted ads and trackers on local networks. It functions as a DNS proxy and runs on the Go programming language. Blocky intercepts requests to advertisements and other unwanted content and blocks them before they reach the end user. This results in a cleaner, faster, and more secure online experience for users connected to the local network. Blocky is open-source, easy to configure and can be run on a variety of devices, making it a versatile solution for small to medium-sized local networks.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 6060, "interface_port": 6060,
"documentation": "https://booklore-app.github.io/booklore-docs/docs/getting-started", "documentation": "https://booklore-app.github.io/booklore-docs/docs/getting-started",
"website": "https://github.com/booklore-app/booklore", "website": "https://github.com/booklore-app/booklore",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/booklore.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/booklore.webp",
"config_path": "/opt/booklore_storage/.env", "config_path": "/opt/booklore_storage/.env",
"description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.", "description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://www.bookstackapp.com/docs/", "documentation": "https://www.bookstackapp.com/docs/",
"website": "https://www.bookstackapp.com/", "website": "https://www.bookstackapp.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bookstack.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bookstack.webp",
"config_path": "/opt/bookstack/.env", "config_path": "/opt/bookstack/.env",
"description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.", "description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://docs.bunkerweb.io/latest/", "documentation": "https://docs.bunkerweb.io/latest/",
"website": "https://www.bunkerweb.io/", "website": "https://www.bunkerweb.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bunkerweb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bunkerweb.webp",
"config_path": "/etc/bunkerweb/variables.env", "config_path": "/etc/bunkerweb/variables.env",
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.", "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://github.com/jordan-dalby/ByteStash/wiki", "documentation": "https://github.com/jordan-dalby/ByteStash/wiki",
"website": "https://github.com/jordan-dalby/ByteStash", "website": "https://github.com/jordan-dalby/ByteStash",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/bytestash.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bytestash.webp",
"config_path": "", "config_path": "",
"description": "ByteStash is a self-hosted web application designed to store, organise, and manage your code snippets efficiently. With support for creating, editing, and filtering snippets, ByteStash helps you keep track of your code in one secure place.", "description": "ByteStash is a self-hosted web application designed to store, organise, and manage your code snippets efficiently. With support for creating, editing, and filtering snippets, ByteStash helps you keep track of your code in one secure place.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://caddyserver.com/docs/", "documentation": "https://caddyserver.com/docs/",
"website": "https://caddyserver.com/", "website": "https://caddyserver.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/caddy.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/caddy.webp",
"config_path": "/etc/caddy/Caddyfile", "config_path": "/etc/caddy/Caddyfile",
"description": "Caddy is a powerful, extensible platform to serve your sites, services, and apps, written in Go.", "description": "Caddy is a powerful, extensible platform to serve your sites, services, and apps, written in Go.",
"install_methods": [ "install_methods": [

View File

@ -6,12 +6,12 @@
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": "https://wiki.casaos.io/en/home", "documentation": "https://wiki.casaos.io/en/home",
"website": "https://www.casaos.io/", "website": "https://www.casaos.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/casaos.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/casaos.webp",
"config_path": "", "config_path": "",
"description": "CasaOS is a software that aims to make it easy for users to create a personal cloud system at home. It uses the Docker ecosystem to provide a simple, user-friendly experience for managing various applications and services.", "description": "CasaOS is a software that aims to make it easy for users to create a personal cloud system at home. It uses the Docker ecosystem to provide a simple, user-friendly experience for managing various applications and services.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 5000, "interface_port": 5000,
"documentation": "https://changedetection.io/tutorials", "documentation": "https://changedetection.io/tutorials",
"website": "https://changedetection.io/", "website": "https://changedetection.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/changedetection.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/changedetection.webp",
"config_path": "/opt/changedetection/url-watches.json", "config_path": "/opt/changedetection/url-watches.json",
"description": "Change Detection is a service that allows you to monitor changes to web pages and receive notifications when changes occur. It can be used for a variety of purposes such as keeping track of online price changes, monitoring news websites for updates, or tracking changes to online forums.", "description": "Change Detection is a service that allows you to monitor changes to web pages and receive notifications when changes occur. It can be used for a variety of purposes such as keeping track of online price changes, monitoring news websites for updates, or tracking changes to online forums.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8089, "interface_port": 8089,
"documentation": "https://getchannels.com/docs/getting-started/quick-start-guide/", "documentation": "https://getchannels.com/docs/getting-started/quick-start-guide/",
"website": "https://getchannels.com/dvr-server/", "website": "https://getchannels.com/dvr-server/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/channels-dvr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/channels-dvr.webp",
"config_path": "", "config_path": "",
"description": "Channels DVR Server runs on your computer or NAS device at home. There's no cloud to worry about. Your tv shows and movies will always be available.", "description": "Channels DVR Server runs on your computer or NAS device at home. There's no cloud to worry about. Your tv shows and movies will always be available.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://docs.checkmk.com/", "documentation": "https://docs.checkmk.com/",
"website": "https://checkmk.com/", "website": "https://checkmk.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/checkmk.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/checkmk.webp",
"config_path": "", "config_path": "",
"description": "Checkmk is an IT monitoring software that tracks the health and performance of your systems, networks, servers, applications, and cloud services. It provides real-time insights, alerts for issues, and tools for troubleshooting, helping ensure smooth operations across your infrastructure.", "description": "Checkmk is an IT monitoring software that tracks the health and performance of your systems, networks, servers, applications, and cloud services. It provides real-time insights, alerts for issues, and tools for troubleshooting, helping ensure smooth operations across your infrastructure.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/linuxcontainers.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/linuxcontainers.webp",
"config_path": "", "config_path": "",
"description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.", "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/proxmox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/proxmox.webp",
"config_path": "", "config_path": "",
"description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.", "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 11011, "interface_port": 11011,
"documentation": "https://cleanuparr.github.io/Cleanuparr/docs/", "documentation": "https://cleanuparr.github.io/Cleanuparr/docs/",
"website": "https://github.com/Cleanuparr/Cleanuparr", "website": "https://github.com/Cleanuparr/Cleanuparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cleanuparr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cleanuparr.webp",
"config_path": "/opt/cleanuparr/config", "config_path": "/opt/cleanuparr/config",
"description": "Cleanuparr is a tool for automating the cleanup of unwanted or blocked files in Sonarr, Radarr, and supported download clients like qBittorrent, Transmission, and Deluge. It removes incomplete, blocked, or malicious downloads and can trigger replacement searches to ensure your media library stays complete and up-to-date.", "description": "Cleanuparr is a tool for automating the cleanup of unwanted or blocked files in Sonarr, Radarr, and supported download clients like qBittorrent, Transmission, and Deluge. It removes incomplete, blocked, or malicious downloads and can trigger replacement searches to ensure your media library stays complete and up-to-date.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown", "documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown",
"config_path": "/etc/systemd/system/cloudflare-ddns.service", "config_path": "/etc/systemd/system/cloudflare-ddns.service",
"website": "https://github.com/favonia/cloudflare-ddns", "website": "https://github.com/favonia/cloudflare-ddns",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cloudflare.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cloudflare.webp",
"description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machines public IP addresses and update DNS records using the Cloudflare API", "description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machines public IP addresses and update DNS records using the Cloudflare API",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/", "documentation": "https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/",
"website": "https://www.cloudflare.com/", "website": "https://www.cloudflare.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cloudflare.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cloudflare.webp",
"config_path": "/usr/local/etc/cloudflared/config.yml", "config_path": "/usr/local/etc/cloudflared/config.yml",
"description": "Cloudflared is a command-line tool that allows you to securely access resources on the Cloudflare network, such as websites and APIs, from your local computer. It works by creating a secure tunnel between your computer and the Cloudflare network, allowing you to access resources as if they were on your local network.", "description": "Cloudflared is a command-line tool that allows you to securely access resources on the Cloudflare network, such as websites and APIs, from your local computer. It works by creating a secure tunnel between your computer and the Cloudflare network, allowing you to access resources as if they were on your local network.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 5212, "interface_port": 5212,
"documentation": "https://docs.cloudreve.org/en/", "documentation": "https://docs.cloudreve.org/en/",
"website": "https://cloudreve.org/", "website": "https://cloudreve.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cloudreve.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cloudreve.webp",
"config_path": "/opt/cloudreve/data/conf.ini", "config_path": "/opt/cloudreve/data/conf.ini",
"description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.", "description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 9090, "interface_port": 9090,
"documentation": "https://cockpit-project.org/documentation.html", "documentation": "https://cockpit-project.org/documentation.html",
"website": "https://cockpit-project.org/", "website": "https://cockpit-project.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cockpit.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cockpit.webp",
"config_path": "/etc/cockpit/cockpit.conf", "config_path": "/etc/cockpit/cockpit.conf",
"description": "Cockpit is a web-based graphical interface for managing Linux servers. It allows users to perform tasks like configuring networks, managing storage, and monitoring system performance directly through a web browser. It integrates with existing system tools, making it suitable for both beginners and experienced admins.", "description": "Cockpit is a web-based graphical interface for managing Linux servers. It allows users to perform tasks like configuring networks, managing storage, and monitoring system performance directly through a web browser. It integrates with existing system tools, making it suitable for both beginners and experienced admins.",
"install_methods": [ "install_methods": [

View File

@ -13,7 +13,7 @@
"interface_port": 8680, "interface_port": 8680,
"documentation": "https://coder.com/docs/code-server", "documentation": "https://coder.com/docs/code-server",
"website": "https://coder.com/", "website": "https://coder.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/coder.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/coder.webp",
"config_path": "", "config_path": "",
"description": "Coder Code Server is an open-source project that enables you to run Visual Studio Code (VS Code) on a remote machine, such as a desktop PC or virtual server. It serves a web-based version of VS Code that you can access from any browser via a URL, allowing remote development without needing an SSH connection. Unlike the official VS Code Server used by vscode.dev for Remote Tunnels, code-server is developed by Coder and operates independently, providing similar capabilities through a self-hosted solution.", "description": "Coder Code Server is an open-source project that enables you to run Visual Studio Code (VS Code) on a remote machine, such as a desktop PC or virtual server. It serves a web-based version of VS Code that you can access from any browser via a URL, allowing remote development without needing an SSH connection. Unlike the official VS Code Server used by vscode.dev for Remote Tunnels, code-server is developed by Coder and operates independently, providing similar capabilities through a self-hosted solution.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"interface_port": 8188, "interface_port": 8188,
"documentation": "https://github.com/comfyanonymous/ComfyUI", "documentation": "https://github.com/comfyanonymous/ComfyUI",
"website": "https://www.comfy.org/", "website": "https://www.comfy.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/comfyui.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/comfyui.webp",
"description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.", "description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.",
"install_methods": [ "install_methods": [
{ {

View File

@ -11,7 +11,7 @@
"interface_port": 8082, "interface_port": 8082,
"documentation": "https://athou.github.io/commafeed/documentation/", "documentation": "https://athou.github.io/commafeed/documentation/",
"website": "https://www.commafeed.com/", "website": "https://www.commafeed.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/commafeed.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/commafeed.webp",
"config_path": "", "config_path": "",
"description": "CommaFeed is a Google Reader inspired self-hosted RSS reader.", "description": "CommaFeed is a Google Reader inspired self-hosted RSS reader.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"documentation": "https://configarr.raydak.de/docs/intro", "documentation": "https://configarr.raydak.de/docs/intro",
"config_path": "/opt/configarr/config.yml", "config_path": "/opt/configarr/config.yml",
"website": "https://configarr.raydak.de/", "website": "https://configarr.raydak.de/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/configarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/configarr.webp",
"description": "Configarr is an open-source tool designed to simplify configuration and synchronization for Sonarr and Radarr (and other experimental). It integrates with TRaSH Guides to automate updates of custom formats, quality profiles, and other settings, while also supporting user-defined configurations.", "description": "Configarr is an open-source tool designed to simplify configuration and synchronization for Sonarr and Radarr (and other experimental). It integrates with TRaSH Guides to automate updates of custom formats, quality profiles, and other settings, while also supporting user-defined configurations.",
"install_methods": [ "install_methods": [
{ {

View File

@ -12,7 +12,7 @@
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://github.com/C4illin/ConvertX", "documentation": "https://github.com/C4illin/ConvertX",
"website": "https://github.com/C4illin/ConvertX", "website": "https://github.com/C4illin/ConvertX",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/convertx.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/convertx.webp",
"description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.", "description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.",
"install_methods": [ "install_methods": [
{ {

View File

@ -0,0 +1,52 @@
{
"name": "Coolify",
"slug": "coolify",
"categories": [
6
],
"date_created": "2025-12-09",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://coolify.io/docs",
"config_path": "/data/coolify",
"website": "https://coolify.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/coolify.webp",
"description": "Coolify is an open-source & self-hostable alternative to Heroku, Netlify, and Vercel. It helps you manage your servers, applications, and databases on your own hardware with Docker. Deploy any application from Git repositories, Docker images, or use pre-built templates.",
"install_methods": [
{
"type": "default",
"script": "ct/coolify.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 30,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Initial setup will be done via the web interface on first access.",
"type": "info"
},
{
"text": "Coolify has built-in auto-updates. You can configure update frequency in Settings.",
"type": "info"
},
{
"text": "Coolify requires SSH access to manage deployments. SSH is enabled automatically.",
"type": "info"
},
{
"text": "This container uses Docker-in-Docker (nesting) for application deployments.",
"type": "warning"
}
]
}

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://github.com/9001/copyparty?tab=readme-ov-file#the-browser", "documentation": "https://github.com/9001/copyparty?tab=readme-ov-file#the-browser",
"website": "https://github.com/9001/copyparty", "website": "https://github.com/9001/copyparty",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/copyparty.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/copyparty.webp",
"config_path": "/etc/copyparty.conf", "config_path": "/etc/copyparty.conf",
"description": "Copyparty is a lightweight, portable HTTP file server with a browser-based interface. It supports drag-and-drop uploads, downloads, deduplication, media playback, and advanced search, making it ideal for quickly sharing and managing files.", "description": "Copyparty is a lightweight, portable HTTP file server with a browser-based interface. It supports drag-and-drop uploads, downloads, deduplication, media playback, and advanced search, making it ideal for quickly sharing and managing files.",
"install_methods": [ "install_methods": [

View File

@ -12,7 +12,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://cosmos-cloud.io/doc/1%20index/", "documentation": "https://cosmos-cloud.io/doc/1%20index/",
"website": "https://cosmos-cloud.io/", "website": "https://cosmos-cloud.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cosmos-server.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cosmos-server.webp",
"config_path": "/etc/sysconfig/CosmosCloud", "config_path": "/etc/sysconfig/CosmosCloud",
"description": "Cosmos Cloud is a self-hosting platform that automates maintenance and security. It offers an app marketplace, reverse proxy management, container control, VPN integration, real-time monitoring, and disk management. Security features include SSO, anti-DDoS, and encryption. It simplifies self-hosting for all users.", "description": "Cosmos Cloud is a self-hosting platform that automates maintenance and security. It offers an app marketplace, reverse proxy management, container control, VPN integration, real-time monitoring, and disk management. Security features include SSO, anti-DDoS, and encryption. It simplifies self-hosting for all users.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 8443, "interface_port": 8443,
"documentation": "https://docs.craftycontrol.com/", "documentation": "https://docs.craftycontrol.com/",
"website": "https://craftycontrol.com/", "website": "https://craftycontrol.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/crafty-controller.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/crafty-controller.webp",
"config_path": "/opt/crafty-controller/crafty/crafty-4/app/config/config.json", "config_path": "/opt/crafty-controller/crafty/crafty-4/app/config/config.json",
"description": "Crafty Controller is a free and open-source Minecraft launcher and manager that allows users to start and administer Minecraft servers from a user-friendly interface. The interface is run as a self-hosted web server that is accessible to devices on the local network by default and can be port forwarded to provide external access outside of your local network. Crafty is designed to be easy to install and use, requiring only a bit of technical knowledge and a desire to learn to get started. Crafty Controller is still actively being developed by Arcadia Technology and we are continually making major improvements to the software.\n\nCrafty Controller is a feature rich panel that allows you to create and run servers, manage players, run commands, change server settings, view and edit server files, and make backups. With the help of Crafty Controller managing a large number of Minecraft servers on separate versions is easy and intuitive to do.", "description": "Crafty Controller is a free and open-source Minecraft launcher and manager that allows users to start and administer Minecraft servers from a user-friendly interface. The interface is run as a self-hosted web server that is accessible to devices on the local network by default and can be port forwarded to provide external access outside of your local network. Crafty is designed to be easy to install and use, requiring only a bit of technical knowledge and a desire to learn to get started. Crafty Controller is still actively being developed by Arcadia Technology and we are continually making major improvements to the software.\n\nCrafty Controller is a feature rich panel that allows you to create and run servers, manage players, run commands, change server settings, view and edit server files, and make backups. With the help of Crafty Controller managing a large number of Minecraft servers on separate versions is easy and intuitive to do.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/proxmox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/proxmox.webp",
"config_path": "", "config_path": "",
"description": "This script will add/remove a crontab schedule that updates the operating system of all LXCs every Sunday at midnight.", "description": "This script will add/remove a crontab schedule that updates the operating system of all LXCs every Sunday at midnight.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3012, "interface_port": 3012,
"documentation": "https://github.com/jhuckaby/Cronicle/blob/master/README.md", "documentation": "https://github.com/jhuckaby/Cronicle/blob/master/README.md",
"website": "https://github.com/jhuckaby/Cronicle", "website": "https://github.com/jhuckaby/Cronicle",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/chronicle.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/chronicle.webp",
"config_path": "/opt/cronicle/conf/config.json", "config_path": "/opt/cronicle/conf/config.json",
"description": "Cronicle is a task scheduling and management software that allows users to schedule and run tasks automatically on multiple servers. It has a web-based user interface that provides a convenient and centralized way to manage tasks and view their execution status. With Cronicle, users can schedule tasks to run at specific times, or on demand, and assign tasks to specific worker servers. The software provides real-time statistics and a live log viewer to help users monitor the progress of tasks. Cronicle is designed for use in large-scale environments, making it a valuable tool for automation and management of complex and time-sensitive tasks.", "description": "Cronicle is a task scheduling and management software that allows users to schedule and run tasks automatically on multiple servers. It has a web-based user interface that provides a convenient and centralized way to manage tasks and view their execution status. With Cronicle, users can schedule tasks to run at specific times, or on demand, and assign tasks to specific worker servers. The software provides real-time statistics and a live log viewer to help users monitor the progress of tasks. Cronicle is designed for use in large-scale environments, making it a valuable tool for automation and management of complex and time-sensitive tasks.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 2468, "interface_port": 2468,
"documentation": "https://www.cross-seed.org/docs/category/basics", "documentation": "https://www.cross-seed.org/docs/category/basics",
"website": "https://www.cross-seed.org/", "website": "https://www.cross-seed.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cross-seed.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cross-seed.webp",
"config_path": "~/.cross-seed/config.js", "config_path": "~/.cross-seed/config.js",
"description": "cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.", "description": "cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": null, "interface_port": null,
"documentation": "https://doc.crowdsec.net/", "documentation": "https://doc.crowdsec.net/",
"website": "https://crowdsec.net/", "website": "https://crowdsec.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/crowdsec.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/crowdsec.webp",
"config_path": "", "config_path": "",
"description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.", "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.",
"install_methods": [ "install_methods": [

View File

@ -11,7 +11,7 @@
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://docs.cryptpad.org/", "documentation": "https://docs.cryptpad.org/",
"website": "https://cryptpad.org/", "website": "https://cryptpad.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/cryptpad.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/cryptpad.webp",
"config_path": "/opt/cryptpad/config/config.js", "config_path": "/opt/cryptpad/config/config.js",
"description": "CryptPad is a collaboration suite that is end-to-end encrypted and open-source. It is designed to facilitate collaboration by synchronizing changes to documents in real time. Since all the user data is encrypted, in the event of a breach, attackers have no way of accessing the stored content", "description": "CryptPad is a collaboration suite that is end-to-end encrypted and open-source. It is designed to facilitate collaboration by synchronizing changes to documents in real time. Since all the user data is encrypted, in the event of a breach, attackers have no way of accessing the stored content",
"install_methods": [ "install_methods": [

View File

@ -6,12 +6,12 @@
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8084, "interface_port": 8084,
"documentation": null, "documentation": null,
"website": "https://daemonsync.me/", "website": "https://daemonsync.me/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@master/webp/daemon-sync.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/daemon-sync.webp",
"config_path": "", "config_path": "",
"description": "Sync files from app to server, share photos & videos, back up your data and stay secure inside local network.", "description": "Sync files from app to server, share photos & videos, back up your data and stay secure inside local network.",
"install_methods": [ "install_methods": [

Some files were not shown because too many files have changed in this diff Show More