mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-14 11:13:27 +01:00
Compare commits
157 Commits
2025-12-06
...
pr-update-
| Author | SHA1 | Date | |
|---|---|---|---|
| ab8c5518de | |||
| a411d780ea | |||
| 86a3099452 | |||
| 26a8caa2eb | |||
| 415a2c1215 | |||
| 308a1cb91e | |||
| 1e97124c0c | |||
| 3f8685067f | |||
| 5adf98fada | |||
| 4cd81a9769 | |||
| d83af67c62 | |||
| e9d14b3a15 | |||
| 13cbe0fdbf | |||
| 52db0d94ed | |||
| e38436340b | |||
| 139e86b945 | |||
| a91151549d | |||
| 5ec7d0fd4d | |||
| 02911dc07c | |||
| 1bb3837646 | |||
| 8e6f911963 | |||
| 05a66e3729 | |||
| 5ef41a8ef0 | |||
| 9f264ff4a1 | |||
| 21f55e5cab | |||
| d3f21bf6a0 | |||
| c1a953cd29 | |||
| 909c323b57 | |||
| d03b38ea13 | |||
| 276e1bbf10 | |||
| 6135f1f8a6 | |||
| cf14c1b540 | |||
| e27a68275b | |||
| ec433b3abc | |||
| b4db6a6c70 | |||
| 11a407b54f | |||
| af5172a8cf | |||
| 115ea10ecd | |||
| 8549f2a84d | |||
| c80c2a2ecb | |||
| 7255edc21b | |||
| 18d620705d | |||
| 2b1f62e74f | |||
| f5b0c03362 | |||
| 1afefd20e9 | |||
| 723f9d63d6 | |||
| 1ea0172b75 | |||
| ef63f853b4 | |||
| 179233810e | |||
| 748c08ddb5 | |||
| de944792de | |||
| 091271c8d6 | |||
| 7fae5d71f5 | |||
| 3bc45aa0a2 | |||
| 313b1b0b00 | |||
| 3ad0777048 | |||
| 7dcb2fa985 | |||
| 6e86fa4c3b | |||
| 747e472d1f | |||
| 38a9ad8e09 | |||
| 5854318163 | |||
| 39eda9cb81 | |||
| c757c7a8eb | |||
| 94126be8f9 | |||
| d2cce38266 | |||
| 59fa15af88 | |||
| cafee135c4 | |||
| fe8e1be644 | |||
| 840bdae6f3 | |||
| 6352694326 | |||
| fb5fc0524b | |||
| 9cbbcbdda5 | |||
| 300b4d2a3a | |||
| 0ed1e36d9d | |||
| ca27ae4e4c | |||
| 43f1e88b98 | |||
| f98d2d3d15 | |||
| e22f9fbce7 | |||
| 12e8ca6a95 | |||
| b9967cb56a | |||
| 4134136918 | |||
| da7cafd82c | |||
| 7800578ad4 | |||
| 7c39bc8787 | |||
| 7a91dc765a | |||
| 8b858f4a65 | |||
| 96dc87ddd5 | |||
| f0f1708c31 | |||
| 76c4277f4b | |||
| 10ee5f2eb4 | |||
| 9611267657 | |||
| 4dce90530b | |||
| cb28199964 | |||
| c28e404bd9 | |||
| 42d1f2980a | |||
| 0ab80c814b | |||
| 0f183d0b2f | |||
| fd75b03435 | |||
| 2abb7db794 | |||
| f07e6a92b0 | |||
| ee3c4f843d | |||
| 5ad841da76 | |||
| 02da3fc888 | |||
| d51c37d134 | |||
| 938a66a67e | |||
| bea9a62cce | |||
| 1458aade19 | |||
| cf7d32548f | |||
| 3be34bdac8 | |||
| 6cdc26badc | |||
| 92a26677f7 | |||
| 0bcffdc8b0 | |||
| f2597f4d35 | |||
| 7b139fa763 | |||
| f6f131efab | |||
| e4d5ce221b | |||
| 4e182bd5b9 | |||
| 12a7ecd85d | |||
| b658959c7b | |||
| 5eb9d2bcdf | |||
| 7d37743981 | |||
| b0e7cdfe13 | |||
| 31c19bed09 | |||
| bff0650d72 | |||
| d9b05882a3 | |||
| 31dbf2554c | |||
| f95cc5a7ad | |||
| 3fb9d02f36 | |||
| a748be9a1f | |||
| 4d4ced6b63 | |||
| a5d017c83b | |||
| 5378d822f8 | |||
| 243cb34d47 | |||
| 59699425f8 | |||
| 155a8571ba | |||
| 1cae72bdec | |||
| 531ecad4c7 | |||
| 9e8ab9de01 | |||
| 70557798ec | |||
| 4b554900ca | |||
| 9f84eae07f | |||
| ba5bdd94ad | |||
| d18baa2177 | |||
| 779c06f232 | |||
| 9e2b6524c4 | |||
| a328d7b8ba | |||
| dfa4d82951 | |||
| 5e5a8cd104 | |||
| 0da3231d3c | |||
| 5a6a30e594 | |||
| 97ac2520ec | |||
| bd5fe17228 | |||
| f42586c083 | |||
| fab5539c82 | |||
| 1ecb5bbeab | |||
| 64dbd4e9f7 | |||
| 2ba63b28f0 |
185
CHANGELOG.md
185
CHANGELOG.md
@ -10,8 +10,193 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-12-13
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Tunarr: Switch to prebuild archive [@tremor021](https://github.com/tremor021) ([#9920](https://github.com/community-scripts/ProxmoxVE/pull/9920))
|
||||
- [HOTFIX] NetVisor: backup OIDC config before update [@vhsdream](https://github.com/vhsdream) ([#9895](https://github.com/community-scripts/ProxmoxVE/pull/9895))
|
||||
- Update OPNsense download URL to version 14.3 [@jaredcarling42-design](https://github.com/jaredcarling42-design) ([#9899](https://github.com/community-scripts/ProxmoxVE/pull/9899))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Add optional TLS setup to Valkey installer [@pshankinclarke](https://github.com/pshankinclarke) ([#9789](https://github.com/community-scripts/ProxmoxVE/pull/9789))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Spoolman [@tremor021](https://github.com/tremor021) ([#9873](https://github.com/community-scripts/ProxmoxVE/pull/9873))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- AdGuardHome-Sync ([#9783](https://github.com/community-scripts/ProxmoxVE/pull/9783))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update category value in glance.json and adguard-home.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9932](https://github.com/community-scripts/ProxmoxVE/pull/9932))
|
||||
- Change category ID from 6 to 3 in coolify.json and dokploy.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9930](https://github.com/community-scripts/ProxmoxVE/pull/9930))
|
||||
|
||||
## 2025-12-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Wallabag ([#9904](https://github.com/community-scripts/ProxmoxVE/pull/9904))
|
||||
- InvoiceNinja ([#9905](https://github.com/community-scripts/ProxmoxVE/pull/9905))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Pangolin: URL fixes [@tremor021](https://github.com/tremor021) ([#9902](https://github.com/community-scripts/ProxmoxVE/pull/9902))
|
||||
|
||||
## 2025-12-11
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Speedtest-Tracker ([#9802](https://github.com/community-scripts/ProxmoxVE/pull/9802))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- dokploy: require unprivileged LXC environment [@MickLesk](https://github.com/MickLesk) ([#9891](https://github.com/community-scripts/ProxmoxVE/pull/9891))
|
||||
- Update NetVisor repo information [@vhsdream](https://github.com/vhsdream) ([#9864](https://github.com/community-scripts/ProxmoxVE/pull/9864))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Syncthing: Various fixes [@tremor021](https://github.com/tremor021) ([#9872](https://github.com/community-scripts/ProxmoxVE/pull/9872))
|
||||
- Sonarr: Fix standard [@tremor021](https://github.com/tremor021) ([#9874](https://github.com/community-scripts/ProxmoxVE/pull/9874))
|
||||
- Refactor: Snipe-IT [@tremor021](https://github.com/tremor021) ([#9876](https://github.com/community-scripts/ProxmoxVE/pull/9876))
|
||||
- Technitium DNS: Various fixes [@tremor021](https://github.com/tremor021) ([#9863](https://github.com/community-scripts/ProxmoxVE/pull/9863))
|
||||
- SonarQube: Fixes [@tremor021](https://github.com/tremor021) ([#9875](https://github.com/community-scripts/ProxmoxVE/pull/9875))
|
||||
- endurain: remove unneeded deps [@johanngrobe](https://github.com/johanngrobe) ([#9855](https://github.com/community-scripts/ProxmoxVE/pull/9855))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: skip -features flag when empty [@MickLesk](https://github.com/MickLesk) ([#9871](https://github.com/community-scripts/ProxmoxVE/pull/9871))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- paperless: add note on website (uv usage) [@MickLesk](https://github.com/MickLesk) ([#9833](https://github.com/community-scripts/ProxmoxVE/pull/9833))
|
||||
|
||||
## 2025-12-10
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- DiscoPanel ([#9847](https://github.com/community-scripts/ProxmoxVE/pull/9847))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: UmlautAdaptarr [@tremor021](https://github.com/tremor021) ([#9839](https://github.com/community-scripts/ProxmoxVE/pull/9839))
|
||||
- Verdaccio: Small fixes [@tremor021](https://github.com/tremor021) ([#9836](https://github.com/community-scripts/ProxmoxVE/pull/9836))
|
||||
- Refactor: WaveLog [@tremor021](https://github.com/tremor021) ([#9835](https://github.com/community-scripts/ProxmoxVE/pull/9835))
|
||||
- Refactor: Unifi Network Server [@tremor021](https://github.com/tremor021) ([#9838](https://github.com/community-scripts/ProxmoxVE/pull/9838))
|
||||
- Refactor: Umami [@tremor021](https://github.com/tremor021) ([#9840](https://github.com/community-scripts/ProxmoxVE/pull/9840))
|
||||
- Refactor: UrBackup Server [@tremor021](https://github.com/tremor021) ([#9837](https://github.com/community-scripts/ProxmoxVE/pull/9837))
|
||||
- Refactor: Tianji [@tremor021](https://github.com/tremor021) ([#9842](https://github.com/community-scripts/ProxmoxVE/pull/9842))
|
||||
- Tracktor: Remove unused variable [@tremor021](https://github.com/tremor021) ([#9841](https://github.com/community-scripts/ProxmoxVE/pull/9841))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update icon URLs from master to main branch [@MickLesk](https://github.com/MickLesk) ([#9834](https://github.com/community-scripts/ProxmoxVE/pull/9834))
|
||||
|
||||
## 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
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@ -38,4 +39,4 @@ 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}:8089${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}"
|
||||
|
||||
@ -24,11 +24,11 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/${APP} ]]; then
|
||||
if [[ ! -d /opt/ComfyUI ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "To update use the ${APP} Manager."
|
||||
msg_error "To update use the ComfyUI Manager."
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
46
ct/coolify.sh
Normal file
46
ct/coolify.sh
Normal 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}"
|
||||
80
ct/discopanel.sh
Normal file
80
ct/discopanel.sh
Normal file
@ -0,0 +1,80 @@
|
||||
#!/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: DragoQC
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://discopanel.app/
|
||||
|
||||
APP="DiscoPanel"
|
||||
var_tags="${var_tags:-gaming}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-15}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d "/opt/discopanel" ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_docker
|
||||
|
||||
if check_for_gh_release "discopanel" "nickheyer/discopanel"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop discopanel
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /opt/discopanel_backup_temp
|
||||
cp -r /opt/discopanel/data/discopanel.db \
|
||||
/opt/discopanel/data/.recovery_key \
|
||||
/opt/discopanel_backup_temp/
|
||||
if [[ -d /opt/discopanel/data/servers ]]; then
|
||||
cp -r /opt/discopanel/data/servers /opt/discopanel_backup_temp/
|
||||
fi
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
||||
|
||||
msg_info "Setting up DiscoPanel"
|
||||
cd /opt/discopanel/web/discopanel
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
cd /opt/discopanel
|
||||
$STD go build -o discopanel cmd/discopanel/main.go
|
||||
msg_ok "Setup DiscoPanel"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/discopanel/data
|
||||
cp -a /opt/discopanel_backup_temp/. /opt/discopanel/data/
|
||||
rm -rf /opt/discopanel_backup_temp
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start discopanel
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@ -87,6 +87,11 @@ function update_script() {
|
||||
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
|
||||
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
|
||||
rm -rf .venv
|
||||
$STD uv venv
|
||||
|
||||
46
ct/dokploy.sh
Normal file
46
ct/dokploy.sh
Normal 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:-0}"
|
||||
|
||||
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}"
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-11}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@ -38,4 +39,4 @@ 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}:5000${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
|
||||
|
||||
6
ct/headers/coolify
Normal file
6
ct/headers/coolify
Normal file
@ -0,0 +1,6 @@
|
||||
______ ___ ____
|
||||
/ ____/___ ____ / (_) __/_ __
|
||||
/ / / __ \/ __ \/ / / /_/ / / /
|
||||
/ /___/ /_/ / /_/ / / / __/ /_/ /
|
||||
\____/\____/\____/_/_/_/ \__, /
|
||||
/____/
|
||||
6
ct/headers/discopanel
Normal file
6
ct/headers/discopanel
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ ____ __
|
||||
/ __ \(_)_____________ / __ \____ _____ ___ / /
|
||||
/ / / / / ___/ ___/ __ \/ /_/ / __ `/ __ \/ _ \/ /
|
||||
/ /_/ / (__ ) /__/ /_/ / ____/ /_/ / / / / __/ /
|
||||
/_____/_/____/\___/\____/_/ \__,_/_/ /_/\___/_/
|
||||
|
||||
6
ct/headers/dokploy
Normal file
6
ct/headers/dokploy
Normal file
@ -0,0 +1,6 @@
|
||||
____ __ __
|
||||
/ __ \____ / /______ / /___ __ __
|
||||
/ / / / __ \/ //_/ __ \/ / __ \/ / / /
|
||||
/ /_/ / /_/ / ,< / /_/ / / /_/ / /_/ /
|
||||
/_____/\____/_/|_/ .___/_/\____/\__, /
|
||||
/_/ /____/
|
||||
6
ct/headers/invoiceninja
Normal file
6
ct/headers/invoiceninja
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ _ ___ _
|
||||
/ _/___ _ ______ (_)_______ / | / (_)___ (_)___ _
|
||||
/ // __ \ | / / __ \/ / ___/ _ \/ |/ / / __ \ / / __ `/
|
||||
_/ // / / / |/ / /_/ / / /__/ __/ /| / / / / / / / /_/ /
|
||||
/___/_/ /_/|___/\____/_/\___/\___/_/ |_/_/_/ /_/_/ /\__,_/
|
||||
/___/
|
||||
6
ct/headers/speedtest-tracker
Normal file
6
ct/headers/speedtest-tracker
Normal file
@ -0,0 +1,6 @@
|
||||
_____ ____ __ ______ __
|
||||
/ ___/____ ___ ___ ____/ / /____ _____/ /_ /_ __/________ ______/ /_____ _____
|
||||
\__ \/ __ \/ _ \/ _ \/ __ / __/ _ \/ ___/ __/_____/ / / ___/ __ `/ ___/ //_/ _ \/ ___/
|
||||
___/ / /_/ / __/ __/ /_/ / /_/ __(__ ) /_/_____/ / / / / /_/ / /__/ ,< / __/ /
|
||||
/____/ .___/\___/\___/\__,_/\__/\___/____/\__/ /_/ /_/ \__,_/\___/_/|_|\___/_/
|
||||
/_/
|
||||
6
ct/headers/wallabag
Normal file
6
ct/headers/wallabag
Normal file
@ -0,0 +1,6 @@
|
||||
_ __ ____ __
|
||||
| | / /___ _/ / /___ _/ /_ ____ _____ _
|
||||
| | /| / / __ `/ / / __ `/ __ \/ __ `/ __ `/
|
||||
| |/ |/ / /_/ / / / /_/ / /_/ / /_/ / /_/ /
|
||||
|__/|__/\__,_/_/_/\__,_/_.___/\__,_/\__, /
|
||||
/____/
|
||||
@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -10,8 +10,8 @@ var_tags="${var_tags:-inventory}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -28,10 +28,16 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
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 install --only-upgrade inventree -y
|
||||
msg_ok "Updated $APP"
|
||||
msg_ok "Updated InvenTree"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
79
ct/invoiceninja.sh
Normal file
79
ct/invoiceninja.sh
Normal file
@ -0,0 +1,79 @@
|
||||
#!/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://invoiceninja.com/
|
||||
|
||||
APP="InvoiceNinja"
|
||||
var_tags="${var_tags:-invoicing;business}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/invoiceninja ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "invoiceninja" "invoiceninja/invoiceninja"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop supervisor nginx php8.4-fpm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /tmp/invoiceninja_backup
|
||||
cp /opt/invoiceninja/.env /tmp/invoiceninja_backup/
|
||||
cp -r /opt/invoiceninja/storage /tmp/invoiceninja_backup/ 2>/dev/null || true
|
||||
cp -r /opt/invoiceninja/public/storage /tmp/invoiceninja_backup/public_storage 2>/dev/null || true
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
cp /tmp/invoiceninja_backup/.env /opt/invoiceninja/
|
||||
cp -r /tmp/invoiceninja_backup/storage/* /opt/invoiceninja/storage/ 2>/dev/null || true
|
||||
cp -r /tmp/invoiceninja_backup/public_storage/* /opt/invoiceninja/public/storage/ 2>/dev/null || true
|
||||
rm -rf /tmp/invoiceninja_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/invoiceninja
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan optimize
|
||||
chown -R www-data:www-data /opt/invoiceninja
|
||||
chmod -R 755 /opt/invoiceninja/storage
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start php8.4-fpm nginx supervisor
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/setup${CL}"
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-16}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mayanayza/netvisor
|
||||
# Source: https://github.com/netvisor-io/netvisor
|
||||
|
||||
APP="NetVisor"
|
||||
var_tags="${var_tags:-analytics}"
|
||||
@ -29,16 +29,19 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "netvisor" "mayanayza/netvisor"; then
|
||||
if check_for_gh_release "netvisor" "netvisor-io/netvisor"; then
|
||||
msg_info "Stopping services"
|
||||
systemctl stop netvisor-daemon netvisor-server
|
||||
msg_ok "Stopped services"
|
||||
|
||||
msg_info "Backing up configurations"
|
||||
cp /opt/netvisor/.env /opt/netvisor.env.bak
|
||||
if [[ -f /opt/netvisor/oidc.toml ]]; then
|
||||
cp /opt/netvisor/oidc.toml /opt/netvisor.oidc.toml
|
||||
fi
|
||||
msg_ok "Backed up configurations"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "mayanayza/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "netvisor-io/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
|
||||
if ! dpkg -l | grep -q "pkg-config"; then
|
||||
$STD apt install -y pkg-config
|
||||
@ -49,7 +52,10 @@ function update_script() {
|
||||
TOOLCHAIN="$(grep "channel" /opt/netvisor/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||
|
||||
cp /opt/netvisor.env.bak /opt/netvisor/.env
|
||||
mv /opt/netvisor.env.bak /opt/netvisor/.env
|
||||
if [[ -f /opt/netvisor.oidc.toml ]]; then
|
||||
mv /opt/netvisor.oidc.toml /opt/netvisor/oidc.toml
|
||||
fi
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
if ! grep -q "PUBLIC_URL" /opt/netvisor/.env; then
|
||||
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/netvisor/.env
|
||||
|
||||
@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-35}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-25}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@ -23,8 +24,8 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] \
|
||||
&& [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
||||
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] &&
|
||||
[[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
@ -36,16 +36,16 @@ function update_script() {
|
||||
systemctl stop nginx
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
msg_info "Creating Backup"
|
||||
mv /opt/snipe-it /opt/snipe-it-backup
|
||||
msg_ok "Backup created"
|
||||
msg_ok "Created Backup"
|
||||
|
||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||
setup_composer
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Snipe-IT"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||
@ -63,7 +63,7 @@ function update_script() {
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
rm -rf /opt/snipe-it-backup
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Snipe-IT"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start nginx
|
||||
|
||||
@ -33,30 +33,30 @@ function update_script() {
|
||||
systemctl stop sonarqube
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating backup"
|
||||
msg_info "Creating Backup"
|
||||
BACKUP_DIR="/opt/sonarqube-backup"
|
||||
mv /opt/sonarqube ${BACKUP_DIR}
|
||||
msg_ok "Backup created"
|
||||
msg_ok "Created Backup"
|
||||
|
||||
msg_info "Installing sonarqube"
|
||||
msg_info "Updating SonarQube"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-* /opt/sonarqube
|
||||
msg_ok "Installed sonarqube"
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
msg_info "Restoring backup"
|
||||
msg_info "Restoring Backup"
|
||||
cp -rp ${BACKUP_DIR}/data/ /opt/sonarqube/data/
|
||||
cp -rp ${BACKUP_DIR}/extensions/ /opt/sonarqube/extensions/
|
||||
cp -p ${BACKUP_DIR}/conf/sonar.properties /opt/sonarqube/conf/sonar.properties
|
||||
rm -rf ${BACKUP_DIR}
|
||||
chown -R sonarqube:sonarqube /opt/sonarqube
|
||||
msg_ok "Backup restored"
|
||||
msg_ok "Restored Backup"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start sonarqube
|
||||
msg_ok "Service started"
|
||||
msg_ok "Service Started"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@ -27,6 +27,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop sonarr
|
||||
msg_ok "Stopped Service"
|
||||
@ -38,6 +39,7 @@ function update_script() {
|
||||
mv Sonarr /opt
|
||||
rm -rf SonarrV4.tar.gz
|
||||
msg_ok "Updated Sonarr"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start sonarr
|
||||
msg_ok "Started Service"
|
||||
|
||||
83
ct/speedtest-tracker.sh
Normal file
83
ct/speedtest-tracker.sh
Normal file
@ -0,0 +1,83 @@
|
||||
#!/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: AlphaLawless
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/alexjustesen/speedtest-tracker
|
||||
|
||||
APP="Speedtest-Tracker"
|
||||
var_tags="${var_tags:-monitoring}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/speedtest-tracker ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker"; then
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop speedtest-tracker
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating Speedtest CLI"
|
||||
$STD apt update
|
||||
$STD apt --only-upgrade install -y speedtest
|
||||
msg_ok "Updated Speedtest CLI"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp -r /opt/speedtest-tracker /opt/speedtest-tracker-backup
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker"
|
||||
|
||||
msg_info "Updating Speedtest Tracker"
|
||||
cp -r /opt/speedtest-tracker-backup/.env /opt/speedtest-tracker/.env
|
||||
cd /opt/speedtest-tracker
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --optimize-autoloader --no-dev
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan view:clear
|
||||
chown -R www-data:www-data /opt/speedtest-tracker
|
||||
chmod -R 755 /opt/speedtest-tracker/storage
|
||||
chmod -R 755 /opt/speedtest-tracker/bootstrap/cache
|
||||
msg_ok "Updated Speedtest Tracker"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start speedtest-tracker
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
@ -27,32 +27,29 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "spoolman" "Donkie/Spoolman"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop spoolman
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cd /opt
|
||||
rm -rf spoolman_bak
|
||||
mv spoolman spoolman_bak
|
||||
curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip" -o $(basename "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip")
|
||||
$STD unzip spoolman.zip -d spoolman
|
||||
cd spoolman
|
||||
msg_info "Creating Backup"
|
||||
[ -d /opt/spoolman_bak ] && rm -rf /opt/spoolman_bak
|
||||
mv /opt/spoolman /opt/spoolman_bak
|
||||
msg_ok "Created Backup"
|
||||
|
||||
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
|
||||
msg_info "Updating Spoolman"
|
||||
cd /opt/spoolman
|
||||
$STD pip3 install -r requirements.txt
|
||||
curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env"
|
||||
rm -rf /opt/spoolman.zip
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
cp /opt/spoolman_bak/.env /opt/spoolman
|
||||
msg_ok "Updated Spoolman"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start spoolman
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@ -27,9 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
|
||||
msg_info "Updating Syncthing"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ function update_script() {
|
||||
cd /opt/tandoor/vue3
|
||||
$STD yarn install
|
||||
$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
|
||||
TANDOOR_VERSION = "$TANDOOR_VERSION"
|
||||
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 collectstatic --no-input
|
||||
rm -rf /opt/tandoor.bak
|
||||
msg_ok "Updated Trandoor"
|
||||
msg_ok "Updated Tandoor"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tandoor
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -30,6 +30,14 @@ function update_script() {
|
||||
|
||||
if is_package_installed "aspnetcore-runtime-8.0"; then
|
||||
$STD apt remove -y aspnetcore-runtime-8.0
|
||||
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
[ -f /usr/share/keyrings/microsoft-prod.gpg ] && rm -f /usr/share/keyrings/microsoft-prod.gpg
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie" \
|
||||
"main"
|
||||
$STD apt install -y aspnetcore-runtime-9.0
|
||||
fi
|
||||
|
||||
|
||||
@ -28,7 +28,6 @@ function update_script() {
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
|
||||
if check_for_gh_release "tianji" "msgbyte/tianji"; then
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@ -39,7 +40,9 @@ function update_script() {
|
||||
msg_error "Backup failed: /usr/local/share/tunarr does not exist"
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz"
|
||||
cd /opt/tunarr
|
||||
mv tunarr* tunarr
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tunarr
|
||||
|
||||
@ -37,8 +37,8 @@ function update_script() {
|
||||
|
||||
msg_info "Updating Umami"
|
||||
cd /opt/umami
|
||||
$STD yarn install
|
||||
$STD yarn run build
|
||||
$STD pnpm install
|
||||
$STD pnpm run build
|
||||
msg_ok "Updated Umami"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
@ -27,24 +27,18 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/PCJones/Umlautadaptarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
if [[ ! -f /opt/UmlautAdaptarr_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/UmlautAdaptarr_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop umlautadaptarr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/PCJones/Umlautadaptarr/releases/download/${RELEASE}/linux-x64.zip" -o $temp_file
|
||||
$STD unzip -u $temp_file '*/**' -d /opt/UmlautAdaptarr
|
||||
msg_ok "Updated ${APP}"
|
||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start umlautadaptarr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://ui.com/download/unifi
|
||||
|
||||
APP="Unifi"
|
||||
var_tags="${var_tags:-network;controller;unifi}"
|
||||
var_tags="${var_tags:-network;unifi}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
@ -27,6 +27,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
$STD apt update --allow-releaseinfo-change
|
||||
$STD apt install -y unifi
|
||||
|
||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
var_gpu="${var_gpu:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://www.urbackup.org/
|
||||
|
||||
APP="UrBackup Server"
|
||||
var_tags="${var_tags:-web}"
|
||||
var_tags="${var_tags:-backup}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-16}"
|
||||
@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ function update_script() {
|
||||
|
||||
msg_info "Updating LXC Container"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated LXC Container"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="verdaccio" setup_nodejs
|
||||
|
||||
71
ct/wallabag.sh
Normal file
71
ct/wallabag.sh
Normal file
@ -0,0 +1,71 @@
|
||||
#!/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://wallabag.org/
|
||||
|
||||
APP="Wallabag"
|
||||
var_tags="${var_tags:-productivity;read-it-later}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/wallabag ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "wallabag" "wallabag/wallabag"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx php8.3-fpm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/wallabag/app/config/parameters.yml /tmp/wallabag_parameters.yml.bak
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz"
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
cp /tmp/wallabag_parameters.yml.bak /opt/wallabag/app/config/parameters.yml
|
||||
rm -f /tmp/wallabag_parameters.yml.bak
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/wallabag
|
||||
$STD php bin/console cache:clear --env=prod
|
||||
$STD php bin/console doctrine:migrations:migrate --env=prod --no-interaction
|
||||
chown -R www-data:www-data /opt/wallabag
|
||||
chmod -R 755 /opt/wallabag/{var,web/assets}
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start php8.3-fpm nginx
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
@ -55,7 +55,8 @@ function update_script() {
|
||||
systemctl stop wanderer-web
|
||||
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"
|
||||
systemctl start wanderer-web
|
||||
|
||||
13
ct/zammad.sh
13
ct/zammad.sh
@ -11,7 +11,7 @@ var_disk="${var_disk:-8}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -27,21 +27,22 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop zammad
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Zammad"
|
||||
$STD apt update
|
||||
$STD apt-mark hold zammad
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
$STD apt-mark unhold zammad
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP}"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Zammad"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start zammad
|
||||
msg_ok "Updated ${APP} LXC"
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -33,10 +33,10 @@ function update_script() {
|
||||
systemctl stop zerotier-one
|
||||
msg_ok "Stopping Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Zerotier-One"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP}"
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Zerotier-One"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start zerotier-one
|
||||
|
||||
@ -43,7 +43,7 @@ function update_script() {
|
||||
|
||||
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
|
||||
mv /opt/z2m_backup/data /opt/zigbee2mqtt
|
||||
cd /opt/zigbee2mqtt
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
# Technical Reference: Configuration System Architecture
|
||||
|
||||
> **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**:
|
||||
|
||||
| Constraint | Value |
|
||||
|-----------|-------|
|
||||
| Max file size | 64 KB |
|
||||
| Max line length | 1024 bytes |
|
||||
| Max variables | 100 |
|
||||
| Allowed var names | `var_[a-z_]+` |
|
||||
| Value validation | Whitelist + Sanitization |
|
||||
| Constraint | Value |
|
||||
| ----------------- | ------------------------ |
|
||||
| Max file size | 64 KB |
|
||||
| Max line length | 1024 bytes |
|
||||
| Max variables | 100 |
|
||||
| Allowed var names | `var_[a-z_]+` |
|
||||
| Value validation | Whitelist + Sanitization |
|
||||
|
||||
**Example Valid File**:
|
||||
|
||||
@ -206,21 +206,24 @@ var_tags=dns,pihole
|
||||
**Purpose**: Safely load variables from .vars files without using `source` or `eval`
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
load_vars_file(filepath)
|
||||
```
|
||||
|
||||
**Parameters**:
|
||||
|
||||
| Param | Type | Required | Example |
|
||||
|-------|------|----------|---------|
|
||||
| filepath | String | Yes | `/usr/local/community-scripts/default.vars` |
|
||||
| Param | Type | Required | Example |
|
||||
| -------- | ------ | -------- | ------------------------------------------- |
|
||||
| filepath | String | Yes | `/usr/local/community-scripts/default.vars` |
|
||||
|
||||
**Returns**:
|
||||
|
||||
- `0` on success
|
||||
- `1` on error (file missing, parse error, etc.)
|
||||
|
||||
**Environment Side Effects**:
|
||||
|
||||
- Sets all parsed `var_*` variables as shell variables
|
||||
- Does NOT unset variables if file missing (safe)
|
||||
- Does NOT affect other variables
|
||||
@ -230,25 +233,25 @@ load_vars_file(filepath)
|
||||
```bash
|
||||
load_vars_file() {
|
||||
local file="$1"
|
||||
|
||||
|
||||
# File must exist
|
||||
[ -f "$file" ] || return 0
|
||||
|
||||
|
||||
# Parse line by line (not with source/eval)
|
||||
local line key val
|
||||
while IFS='=' read -r key val || [ -n "$key" ]; do
|
||||
# Skip comments and empty lines
|
||||
[[ "$key" =~ ^[[:space:]]*# ]] && continue
|
||||
[[ -z "$key" ]] && continue
|
||||
|
||||
|
||||
# Validate key is in whitelist
|
||||
_is_whitelisted_key "$key" || continue
|
||||
|
||||
|
||||
# Sanitize and export value
|
||||
val="$(_sanitize_value "$val")"
|
||||
[ $? -eq 0 ] && export "$key=$val"
|
||||
done < "$file"
|
||||
|
||||
|
||||
return 0
|
||||
}
|
||||
```
|
||||
@ -281,6 +284,7 @@ echo "Allocating ${var_ram} MB RAM"
|
||||
**Purpose**: Get the full path for app-specific defaults file
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
get_app_defaults_path()
|
||||
```
|
||||
@ -288,6 +292,7 @@ get_app_defaults_path()
|
||||
**Parameters**: None
|
||||
|
||||
**Returns**:
|
||||
|
||||
- String: Full path to app defaults file
|
||||
|
||||
**Implementation**:
|
||||
@ -322,6 +327,7 @@ load_vars_file "$(get_app_defaults_path)"
|
||||
**Purpose**: Load and display user global defaults
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
default_var_settings()
|
||||
```
|
||||
@ -329,6 +335,7 @@ default_var_settings()
|
||||
**Parameters**: None
|
||||
|
||||
**Returns**:
|
||||
|
||||
- `0` on success
|
||||
- `1` on error
|
||||
|
||||
@ -337,15 +344,15 @@ default_var_settings()
|
||||
```
|
||||
1. Find default.vars location
|
||||
(usually /usr/local/community-scripts/default.vars)
|
||||
|
||||
|
||||
2. Create if missing
|
||||
|
||||
|
||||
3. Load variables from file
|
||||
|
||||
|
||||
4. Map var_verbose → VERBOSE variable
|
||||
|
||||
|
||||
5. Call base_settings (apply to container config)
|
||||
|
||||
|
||||
6. Call echo_default (display summary)
|
||||
```
|
||||
|
||||
@ -354,20 +361,20 @@ default_var_settings()
|
||||
```bash
|
||||
default_var_settings() {
|
||||
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_net var_ns var_pw var_ram var_tags var_tun var_unprivileged
|
||||
var_verbose var_vlan var_ssh var_ssh_authorized_key
|
||||
var_container_storage var_template_storage
|
||||
)
|
||||
|
||||
|
||||
# Ensure file exists
|
||||
_ensure_default_vars
|
||||
|
||||
|
||||
# Find and load
|
||||
local dv="$(_find_default_vars)"
|
||||
load_vars_file "$dv"
|
||||
|
||||
|
||||
# Map verbose flag
|
||||
if [[ -n "${var_verbose:-}" ]]; then
|
||||
case "${var_verbose,,}" in
|
||||
@ -375,7 +382,7 @@ default_var_settings() {
|
||||
*) VERBOSE="${var_verbose}" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
# Apply and display
|
||||
base_settings "$VERBOSE"
|
||||
echo_default
|
||||
@ -389,6 +396,7 @@ default_var_settings() {
|
||||
**Purpose**: Offer to save current settings as app-specific defaults
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
maybe_offer_save_app_defaults()
|
||||
```
|
||||
@ -413,10 +421,10 @@ maybe_offer_save_app_defaults()
|
||||
```bash
|
||||
maybe_offer_save_app_defaults() {
|
||||
local app_vars_path="$(get_app_defaults_path)"
|
||||
|
||||
|
||||
# Build current settings from memory
|
||||
local new_tmp="$(_build_current_app_vars_tmp)"
|
||||
|
||||
|
||||
# Check if already exists
|
||||
if [ -f "$app_vars_path" ]; then
|
||||
# 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
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
_sanitize_value(value)
|
||||
```
|
||||
|
||||
**Parameters**:
|
||||
|
||||
| Param | Type | Required |
|
||||
|-------|------|----------|
|
||||
| value | String | Yes |
|
||||
| Param | Type | Required |
|
||||
| ----- | ------ | -------- |
|
||||
| value | String | Yes |
|
||||
|
||||
**Returns**:
|
||||
|
||||
- `0` (success) + sanitized value on stdout
|
||||
- `1` (failure) + nothing if dangerous
|
||||
|
||||
**Dangerous Patterns**:
|
||||
|
||||
| Pattern | Threat | Example |
|
||||
|---------|--------|---------|
|
||||
| `$(...)` | Command substitution | `$(rm -rf /)` |
|
||||
| `` ` ` `` | Command substitution | `` `whoami` `` |
|
||||
| `;` | Command separator | `value; rm -rf /` |
|
||||
| `&` | Background execution | `value & malicious` |
|
||||
| `<(` | Process substitution | `<(cat /etc/passwd)` |
|
||||
| Pattern | Threat | Example |
|
||||
| --------- | -------------------- | -------------------- |
|
||||
| `$(...)` | Command substitution | `$(rm -rf /)` |
|
||||
| `` ` ` `` | Command substitution | `` `whoami` `` |
|
||||
| `;` | Command separator | `value; rm -rf /` |
|
||||
| `&` | Background execution | `value & malicious` |
|
||||
| `<(` | Process substitution | `<(cat /etc/passwd)` |
|
||||
|
||||
**Implementation**:
|
||||
|
||||
@ -501,17 +511,19 @@ fi
|
||||
**Purpose**: Check if variable name is in allowed whitelist
|
||||
|
||||
**Signature**:
|
||||
|
||||
```bash
|
||||
_is_whitelisted_key(key)
|
||||
```
|
||||
|
||||
**Parameters**:
|
||||
|
||||
| Param | Type | Required | Example |
|
||||
|-------|------|----------|---------|
|
||||
| key | String | Yes | `var_cpu` |
|
||||
| Param | Type | Required | Example |
|
||||
| ----- | ------ | -------- | --------- |
|
||||
| key | String | Yes | `var_cpu` |
|
||||
|
||||
**Returns**:
|
||||
|
||||
- `0` if key is whitelisted
|
||||
- `1` if key is NOT whitelisted
|
||||
|
||||
@ -573,6 +585,7 @@ Step 4: Use BUILT-IN DEFAULTS
|
||||
### Precedence Examples
|
||||
|
||||
**Example 1: Environment Variable Wins**
|
||||
|
||||
```bash
|
||||
# Shell environment has highest priority
|
||||
$ export var_cpu=16
|
||||
@ -583,6 +596,7 @@ $ bash pihole-install.sh
|
||||
```
|
||||
|
||||
**Example 2: App Defaults Override User Defaults**
|
||||
|
||||
```bash
|
||||
# User Defaults: var_cpu=4
|
||||
# App Defaults: var_cpu=2
|
||||
@ -593,6 +607,7 @@ $ bash pihole-install.sh
|
||||
```
|
||||
|
||||
**Example 3: All Defaults Missing (Built-ins Used)**
|
||||
|
||||
```bash
|
||||
# No environment variables set
|
||||
# No app defaults file
|
||||
@ -611,21 +626,21 @@ $ bash pihole-install.sh
|
||||
base_settings() {
|
||||
# Priority 1: Environment variables (already set if export used)
|
||||
CT_TYPE=${var_unprivileged:-"1"} # Use existing or default
|
||||
|
||||
|
||||
# Priority 2: Load app defaults (may override above)
|
||||
if [ -f "$(get_app_defaults_path)" ]; then
|
||||
load_vars_file "$(get_app_defaults_path)"
|
||||
fi
|
||||
|
||||
|
||||
# Priority 3: Load user defaults
|
||||
if [ -f "/usr/local/community-scripts/default.vars" ]; then
|
||||
load_vars_file "/usr/local/community-scripts/default.vars"
|
||||
fi
|
||||
|
||||
|
||||
# Priority 4: Apply built-in defaults (lowest)
|
||||
CORE_COUNT=${var_cpu:-"${APP_CPU_DEFAULT:-2}"}
|
||||
RAM_SIZE=${var_ram:-"${APP_RAM_DEFAULT:-1024}"}
|
||||
|
||||
|
||||
# Result: var_cpu has been set through precedence chain
|
||||
}
|
||||
```
|
||||
@ -734,14 +749,14 @@ CONTAINER CREATION STARTED
|
||||
|
||||
### Threat Model
|
||||
|
||||
| Threat | Mitigation |
|
||||
|--------|-----------|
|
||||
| **Arbitrary Code Execution** | No `source` or `eval`; manual parsing only |
|
||||
| **Variable Injection** | Whitelist of allowed variable names |
|
||||
| **Command Substitution** | `_sanitize_value()` blocks `$()`, backticks, etc. |
|
||||
| **Path Traversal** | Files locked to `/usr/local/community-scripts/` |
|
||||
| **Permission Escalation** | Files created with restricted permissions |
|
||||
| **Information Disclosure** | Sensitive variables not logged |
|
||||
| Threat | Mitigation |
|
||||
| ---------------------------- | ------------------------------------------------- |
|
||||
| **Arbitrary Code Execution** | No `source` or `eval`; manual parsing only |
|
||||
| **Variable Injection** | Whitelist of allowed variable names |
|
||||
| **Command Substitution** | `_sanitize_value()` blocks `$()`, backticks, etc. |
|
||||
| **Path Traversal** | Files locked to `/usr/local/community-scripts/` |
|
||||
| **Permission Escalation** | Files created with restricted permissions |
|
||||
| **Information Disclosure** | Sensitive variables not logged |
|
||||
|
||||
### Security Controls
|
||||
|
||||
@ -798,6 +813,7 @@ fi
|
||||
### Module: `build.func`
|
||||
|
||||
**Load Order** (in actual scripts):
|
||||
|
||||
1. `#!/usr/bin/env bash` - Shebang
|
||||
2. `source /dev/stdin <<<$(curl ... api.func)` - API functions
|
||||
3. `source /dev/stdin <<<$(curl ... build.func)` - Build functions
|
||||
@ -832,17 +848,17 @@ fi
|
||||
|
||||
# Section 6: Installation Flow
|
||||
- install_script() # Main entry point
|
||||
- advanced_settings() # 19-step wizard
|
||||
- advanced_settings() # 20-step wizard
|
||||
```
|
||||
|
||||
### Regex Patterns Used
|
||||
|
||||
| Pattern | Purpose | Example Match |
|
||||
|---------|---------|---|
|
||||
| `^[0-9]+([.][0-9]+)?$` | Integer validation | `4`, `192.168` |
|
||||
| `^var_[a-z_]+$` | Variable name | `var_cpu`, `var_ssh` |
|
||||
| `*'$('*` | Command substitution | `$(whoami)` |
|
||||
| `*\`*` | Backtick substitution | `` `cat /etc/passwd` `` |
|
||||
| Pattern | Purpose | Example Match |
|
||||
| ---------------------- | --------------------- | ----------------------- |
|
||||
| `^[0-9]+([.][0-9]+)?$` | Integer validation | `4`, `192.168` |
|
||||
| `^var_[a-z_]+$` | Variable name | `var_cpu`, `var_ssh` |
|
||||
| `*'$('*` | Command substitution | `$(whoami)` |
|
||||
| `*\`\*` | Backtick substitution | `` `cat /etc/passwd` `` |
|
||||
|
||||
---
|
||||
|
||||
@ -869,12 +885,12 @@ fi
|
||||
|
||||
### Function Mapping
|
||||
|
||||
| Old | New | Location |
|
||||
|-----|-----|----------|
|
||||
| `read_config()` | `load_vars_file()` | build.func |
|
||||
| `write_config()` | `_build_current_app_vars_tmp()` | build.func |
|
||||
| None | `maybe_offer_save_app_defaults()` | build.func |
|
||||
| None | `get_app_defaults_path()` | build.func |
|
||||
| Old | New | Location |
|
||||
| ---------------- | --------------------------------- | ---------- |
|
||||
| `read_config()` | `load_vars_file()` | build.func |
|
||||
| `write_config()` | `_build_current_app_vars_tmp()` | build.func |
|
||||
| None | `maybe_offer_save_app_defaults()` | build.func |
|
||||
| None | `get_app_defaults_path()` | build.func |
|
||||
|
||||
---
|
||||
|
||||
|
||||
164
docs/misc/build.func/BUILD_FUNC_ADVANCED_SETTINGS.md
Normal file
164
docs/misc/build.func/BUILD_FUNC_ADVANCED_SETTINGS.md
Normal 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)
|
||||
@ -8,103 +8,142 @@ This document provides a comprehensive reference of all environment variables us
|
||||
|
||||
### Core Container Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `APP` | Application name (e.g., "plex", "nextcloud") | - | Environment | Throughout |
|
||||
| `NSAPP` | Namespace application name | `$APP` | Environment | Throughout |
|
||||
| `CTID` | Container ID | - | Environment | Container creation |
|
||||
| `CT_TYPE` | Container type ("install" or "update") | "install" | Environment | Entry point |
|
||||
| `CT_NAME` | Container name | `$APP` | Environment | Container creation |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| --------- | -------------------------------------------- | --------- | ----------- | ------------------ |
|
||||
| `APP` | Application name (e.g., "plex", "nextcloud") | - | Environment | Throughout |
|
||||
| `NSAPP` | Namespace application name | `$APP` | Environment | Throughout |
|
||||
| `CTID` | Container ID | - | Environment | Container creation |
|
||||
| `CT_TYPE` | Container type ("install" or "update") | "install" | Environment | Entry point |
|
||||
| `CT_NAME` | Container name | `$APP` | Environment | Container creation |
|
||||
|
||||
### Operating System Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `var_os` | Operating system selection | "debian" | base_settings() | OS selection |
|
||||
| `var_version` | OS version | "12" | base_settings() | Template selection |
|
||||
| `var_template` | Template name | Auto-generated | base_settings() | Template download |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| -------------- | -------------------------- | -------------- | --------------- | ------------------ |
|
||||
| `var_os` | Operating system selection | "debian" | base_settings() | OS selection |
|
||||
| `var_version` | OS version | "12" | base_settings() | Template selection |
|
||||
| `var_template` | Template name | Auto-generated | base_settings() | Template download |
|
||||
|
||||
### Resource Configuration Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `var_cpu` | CPU cores | "2" | 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 |
|
||||
| `DISK_SIZE` | Disk size (alternative) | `$var_disk` | Environment | Container creation |
|
||||
| `CORE_COUNT` | CPU cores (alternative) | `$var_cpu` | Environment | Container creation |
|
||||
| `RAM_SIZE` | RAM size (alternative) | `$var_ram` | Environment | Container creation |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------ | ----------------------- | ----------- | --------------- | ------------------ |
|
||||
| `var_cpu` | CPU cores | "2" | 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 |
|
||||
| `DISK_SIZE` | Disk size (alternative) | `$var_disk` | Environment | Container creation |
|
||||
| `CORE_COUNT` | CPU cores (alternative) | `$var_cpu` | Environment | Container creation |
|
||||
| `RAM_SIZE` | RAM size (alternative) | `$var_ram` | Environment | Container creation |
|
||||
|
||||
### Network Configuration Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `var_net` | Network 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_ip` | Container IP address | - | User input | Network config |
|
||||
| `var_ipv6` | IPv6 address | - | User input | Network config |
|
||||
| `var_vlan` | VLAN ID | - | User input | Network config |
|
||||
| `var_mtu` | MTU size | "1500" | base_settings() | Network config |
|
||||
| `var_mac` | MAC address | Auto-generated | base_settings() | Network config |
|
||||
| `NET` | Network interface (alternative) | `$var_net` | Environment | Network config |
|
||||
| `BRG` | Bridge interface (alternative) | `$var_bridge` | Environment | Network config |
|
||||
| `GATE` | Gateway IP (alternative) | `$var_gateway` | Environment | Network config |
|
||||
| `IPV6_METHOD` | IPv6 configuration method | "none" | Environment | Network config |
|
||||
| `VLAN` | VLAN ID (alternative) | `$var_vlan` | Environment | Network config |
|
||||
| `MTU` | MTU size (alternative) | `$var_mtu` | Environment | Network config |
|
||||
| `MAC` | MAC address (alternative) | `$var_mac` | Environment | Network config |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------- | ------------------------------- | -------------- | --------------- | -------------- |
|
||||
| `var_net` | Network 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_ip` | Container IP address | - | User input | Network config |
|
||||
| `var_ipv6` | IPv6 address | - | User input | Network config |
|
||||
| `var_vlan` | VLAN ID | - | User input | Network config |
|
||||
| `var_mtu` | MTU size | "1500" | base_settings() | Network config |
|
||||
| `var_mac` | MAC address | Auto-generated | base_settings() | Network config |
|
||||
| `NET` | Network interface (alternative) | `$var_net` | Environment | Network config |
|
||||
| `BRG` | Bridge interface (alternative) | `$var_bridge` | Environment | Network config |
|
||||
| `GATE` | Gateway IP (alternative) | `$var_gateway` | Environment | Network config |
|
||||
| `IPV6_METHOD` | IPv6 configuration method | "none" | Environment | Network config |
|
||||
| `VLAN` | VLAN ID (alternative) | `$var_vlan` | Environment | Network config |
|
||||
| `MTU` | MTU size (alternative) | `$var_mtu` | Environment | Network config |
|
||||
| `MAC` | MAC address (alternative) | `$var_mac` | Environment | Network config |
|
||||
|
||||
### Storage Configuration Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `var_template_storage` | Storage for templates | - | select_storage() | Template storage |
|
||||
| `var_container_storage` | Storage for container disks | - | select_storage() | Container storage |
|
||||
| `TEMPLATE_STORAGE` | Template storage (alternative) | `$var_template_storage` | Environment | Template storage |
|
||||
| `CONTAINER_STORAGE` | Container storage (alternative) | `$var_container_storage` | Environment | Container storage |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ----------------------- | ------------------------------- | ------------------------ | ---------------- | ----------------- |
|
||||
| `var_template_storage` | Storage for templates | - | select_storage() | Template storage |
|
||||
| `var_container_storage` | Storage for container disks | - | select_storage() | Container storage |
|
||||
| `TEMPLATE_STORAGE` | Template storage (alternative) | `$var_template_storage` | Environment | Template storage |
|
||||
| `CONTAINER_STORAGE` | Container storage (alternative) | `$var_container_storage` | Environment | Container storage |
|
||||
|
||||
### Feature Flags
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `ENABLE_FUSE` | Enable FUSE support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_TUN` | Enable TUN/TAP support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_KEYCTL` | Enable keyctl support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_MOUNT` | Enable mount support | "true" | base_settings() | Container features |
|
||||
| `ENABLE_NESTING` | Enable nesting support | "false" | base_settings() | Container features |
|
||||
| `ENABLE_PRIVILEGED` | Enable privileged mode | "false" | base_settings() | Container features |
|
||||
| `ENABLE_UNPRIVILEGED` | Enable unprivileged mode | "true" | base_settings() | Container features |
|
||||
| `VERBOSE` | Enable verbose output | "false" | Environment | Logging |
|
||||
| `SSH` | Enable SSH key provisioning | "true" | base_settings() | SSH setup |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ---------------- | ------------------------------ | ------- | ------------------------------- | ------------------ |
|
||||
| `var_fuse` | Enable FUSE support | "no" | CT script / Advanced Settings | Container features |
|
||||
| `var_tun` | Enable TUN/TAP support | "no" | CT script / Advanced Settings | Container features |
|
||||
| `var_nesting` | Enable nesting support | "1" | CT script / Advanced Settings | Container features |
|
||||
| `var_keyctl` | Enable keyctl support | "0" | CT script / Advanced Settings | Container features |
|
||||
| `var_mknod` | Allow device node creation | "0" | CT script / Advanced Settings | Container features |
|
||||
| `var_mount_fs` | Allowed filesystem mounts | "" | CT script / Advanced Settings | Container features |
|
||||
| `var_protection` | Enable container protection | "no" | CT script / Advanced Settings | Container creation |
|
||||
| `var_timezone` | Container timezone | "" | CT script / Advanced Settings | Container creation |
|
||||
| `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
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `GPU_APPS` | List of apps that support GPU | - | Environment | GPU detection |
|
||||
| `var_gpu` | GPU selection | - | User input | GPU passthrough |
|
||||
| `var_gpu_type` | GPU type (intel/amd/nvidia) | - | detect_gpu_devices() | GPU passthrough |
|
||||
| `var_gpu_devices` | GPU device list | - | detect_gpu_devices() | GPU passthrough |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------ | ------------------------------- | ------- | ------------------------------------------- | ------------------ |
|
||||
| `var_gpu` | Enable GPU passthrough | "no" | CT script / Environment / Advanced Settings | GPU passthrough |
|
||||
| `ENABLE_GPU` | GPU passthrough flag (internal) | "no" | Advanced Settings | Container creation |
|
||||
|
||||
**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
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `DIAGNOSTICS` | Enable diagnostics mode | "false" | Environment | Diagnostics |
|
||||
| `METHOD` | Installation method | "install" | Environment | Installation flow |
|
||||
| `RANDOM_UUID` | Random UUID for tracking | - | Environment | Logging |
|
||||
| `API_TOKEN` | Proxmox API token | - | Environment | API calls |
|
||||
| `API_USER` | Proxmox API user | - | Environment | API calls |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------- | ------------------------ | --------- | ----------- | ----------------- |
|
||||
| `DIAGNOSTICS` | Enable diagnostics mode | "false" | Environment | Diagnostics |
|
||||
| `METHOD` | Installation method | "install" | Environment | Installation flow |
|
||||
| `RANDOM_UUID` | Random UUID for tracking | - | Environment | Logging |
|
||||
| `API_TOKEN` | Proxmox API token | - | Environment | API calls |
|
||||
| `API_USER` | Proxmox API user | - | Environment | API calls |
|
||||
|
||||
### Settings Persistence Variables
|
||||
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
|----------|-------------|---------|---------|---------|
|
||||
| `SAVE_DEFAULTS` | Save settings as 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 |
|
||||
| `APP_DEFAULTS_FILE` | Path to app.vars | "/usr/local/community-scripts/defaults/$APP.vars" | Environment | Settings persistence |
|
||||
| Variable | Description | Default | Set In | Used In |
|
||||
| ------------------- | -------------------------- | ------------------------------------------------- | ----------- | -------------------- |
|
||||
| `SAVE_DEFAULTS` | Save settings as 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 |
|
||||
| `APP_DEFAULTS_FILE` | Path to app.vars | "/usr/local/community-scripts/defaults/$APP.vars" | Environment | Settings persistence |
|
||||
|
||||
## Variable Precedence Chain
|
||||
|
||||
@ -152,6 +191,7 @@ export SSH="true"
|
||||
## Environment Variable Usage Patterns
|
||||
|
||||
### 1. Container Creation
|
||||
|
||||
```bash
|
||||
# Basic container creation
|
||||
export APP="nextcloud"
|
||||
@ -170,6 +210,7 @@ export var_container_storage="local"
|
||||
```
|
||||
|
||||
### 2. GPU Passthrough
|
||||
|
||||
```bash
|
||||
# Enable GPU passthrough
|
||||
export GPU_APPS="plex,jellyfin,emby"
|
||||
@ -178,6 +219,7 @@ export ENABLE_PRIVILEGED="true"
|
||||
```
|
||||
|
||||
### 3. Advanced Network Configuration
|
||||
|
||||
```bash
|
||||
# VLAN and IPv6 configuration
|
||||
export var_vlan="100"
|
||||
@ -187,6 +229,7 @@ export var_mtu="9000"
|
||||
```
|
||||
|
||||
### 4. Storage Configuration
|
||||
|
||||
```bash
|
||||
# Custom storage locations
|
||||
export var_template_storage="nfs-storage"
|
||||
@ -206,6 +249,7 @@ The script validates variables at several points:
|
||||
## Common Variable Combinations
|
||||
|
||||
### Development Container
|
||||
|
||||
```bash
|
||||
export APP="dev-container"
|
||||
export CTID="200"
|
||||
@ -220,6 +264,7 @@ export ENABLE_PRIVILEGED="true"
|
||||
```
|
||||
|
||||
### Media Server with GPU
|
||||
|
||||
```bash
|
||||
export APP="plex"
|
||||
export CTID="300"
|
||||
@ -235,6 +280,7 @@ export ENABLE_PRIVILEGED="true"
|
||||
```
|
||||
|
||||
### Lightweight Service
|
||||
|
||||
```bash
|
||||
export APP="nginx"
|
||||
export CTID="400"
|
||||
|
||||
@ -9,30 +9,35 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### Initialization Functions
|
||||
|
||||
#### `start()`
|
||||
|
||||
**Purpose**: Main entry point when build.func is sourced or executed
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Detects execution context (Proxmox host vs container)
|
||||
- Captures hard environment variables
|
||||
- Sets CT_TYPE based on context
|
||||
- Routes to appropriate workflow (install_script or update_script)
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CT_TYPE`, `APP`, `CTID`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CT_TYPE`, `APP`, `CTID`
|
||||
|
||||
#### `variables()`
|
||||
|
||||
**Purpose**: Load and resolve all configuration variables using precedence chain
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Loads app-specific .vars file
|
||||
- Loads global default.vars file
|
||||
- Applies variable precedence chain
|
||||
- Sets all configuration variables
|
||||
**Dependencies**: `base_settings()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `base_settings()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `base_settings()`
|
||||
|
||||
**Purpose**: Set built-in default values for all configuration variables
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
@ -43,28 +48,33 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### UI and Menu Functions
|
||||
|
||||
#### `install_script()`
|
||||
|
||||
**Purpose**: Main installation workflow coordinator
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Displays installation mode selection menu
|
||||
- Coordinates the entire installation process
|
||||
- Handles user interaction and validation
|
||||
**Dependencies**: `variables()`, `build_container()`, `default_var_settings()`
|
||||
**Environment Variables Used**: `APP`, `CTID`, `var_hostname`
|
||||
**Dependencies**: `variables()`, `build_container()`, `default_var_settings()`
|
||||
**Environment Variables Used**: `APP`, `CTID`, `var_hostname`
|
||||
|
||||
#### `advanced_settings()`
|
||||
|
||||
**Purpose**: Provide advanced configuration options via whiptail menus
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Displays whiptail menus for configuration
|
||||
- Updates configuration variables based on user input
|
||||
- Validates user selections
|
||||
**Dependencies**: `select_storage()`, `detect_gpu_devices()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `select_storage()`, `detect_gpu_devices()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `settings_menu()`
|
||||
|
||||
**Purpose**: Display and handle settings configuration menu
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
@ -75,58 +85,68 @@ This document provides a comprehensive reference of all functions in `build.func
|
||||
### Storage Functions
|
||||
|
||||
#### `select_storage()`
|
||||
|
||||
**Purpose**: Handle storage selection for templates and containers
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Resolves storage preselection
|
||||
- Prompts user for storage selection if needed
|
||||
- Validates storage availability
|
||||
- Sets var_template_storage and var_container_storage
|
||||
**Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()`
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE`
|
||||
**Dependencies**: `resolve_storage_preselect()`, `choose_and_set_storage_for_file()`
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`, `TEMPLATE_STORAGE`, `CONTAINER_STORAGE`
|
||||
|
||||
#### `resolve_storage_preselect()`
|
||||
|
||||
**Purpose**: Resolve preselected storage options
|
||||
**Parameters**:
|
||||
|
||||
- `storage_type`: Type of storage (template or container)
|
||||
**Returns**: Storage name if valid, empty if invalid
|
||||
**Side Effects**: Validates storage availability
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
**Returns**: Storage name if valid, empty if invalid
|
||||
**Side Effects**: Validates storage availability
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
|
||||
#### `choose_and_set_storage_for_file()`
|
||||
|
||||
**Purpose**: Interactive storage selection via whiptail
|
||||
**Parameters**:
|
||||
|
||||
- `storage_type`: Type of storage (template or container)
|
||||
- `content_type`: Content type (vztmpl or rootdir)
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
- Displays whiptail menu
|
||||
- Updates storage variables
|
||||
- Validates selection
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_template_storage`, `var_container_storage`
|
||||
|
||||
### Container Creation Functions
|
||||
|
||||
#### `build_container()`
|
||||
|
||||
**Purpose**: Validate settings and prepare container creation
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Validates all configuration
|
||||
- Checks for conflicts
|
||||
- Prepares container configuration
|
||||
- Calls create_lxc_container()
|
||||
**Dependencies**: `create_lxc_container()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `create_lxc_container()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `create_lxc_container()`
|
||||
|
||||
**Purpose**: Create the actual LXC container
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Creates LXC container with basic configuration
|
||||
- Configures network settings
|
||||
- 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
|
||||
- Configures startup options
|
||||
- Starts container
|
||||
**Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `configure_gpu_passthrough()`, `fix_gpu_gids()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
### GPU and Hardware Functions
|
||||
|
||||
#### `detect_gpu_devices()`
|
||||
|
||||
**Purpose**: Detect available GPU hardware on the system
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Scans for Intel, AMD, and NVIDIA GPUs
|
||||
- Updates var_gpu_type and var_gpu_devices
|
||||
- Determines GPU capabilities
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `var_gpu_type`, `var_gpu_devices`, `GPU_APPS`
|
||||
|
||||
#### `configure_gpu_passthrough()`
|
||||
|
||||
**Purpose**: Configure GPU passthrough for the container
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Adds GPU device entries to container config
|
||||
- Configures proper device permissions
|
||||
- Sets up device mapping
|
||||
- Updates /etc/pve/lxc/<ctid>.conf
|
||||
**Dependencies**: `detect_gpu_devices()`
|
||||
**Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID`
|
||||
**Dependencies**: `detect_gpu_devices()`
|
||||
**Environment Variables Used**: `var_gpu`, `var_gpu_type`, `var_gpu_devices`, `CTID`
|
||||
|
||||
#### `fix_gpu_gids()`
|
||||
|
||||
**Purpose**: Fix GPU group IDs after container creation
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Updates GPU group IDs in container
|
||||
- Ensures proper GPU access permissions
|
||||
- Configures video and render groups
|
||||
**Dependencies**: `configure_gpu_passthrough()`
|
||||
**Environment Variables Used**: `CTID`, `var_gpu_type`
|
||||
**Dependencies**: `configure_gpu_passthrough()`
|
||||
**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
|
||||
|
||||
#### `default_var_settings()`
|
||||
|
||||
**Purpose**: Offer to save current settings as defaults
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Prompts user to save settings
|
||||
- Saves to default.vars file
|
||||
- Saves to app-specific .vars file
|
||||
**Dependencies**: `maybe_offer_save_app_defaults()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: `maybe_offer_save_app_defaults()`
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `maybe_offer_save_app_defaults()`
|
||||
|
||||
**Purpose**: Offer to save app-specific defaults
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Prompts user to save app-specific settings
|
||||
- Saves to app.vars file
|
||||
- Updates app-specific configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `APP`, `SAVE_APP_DEFAULTS`
|
||||
|
||||
### Utility Functions
|
||||
|
||||
#### `validate_settings()`
|
||||
|
||||
**Purpose**: Validate all configuration settings
|
||||
**Parameters**: None
|
||||
**Returns**: 0 if valid, 1 if invalid
|
||||
**Side Effects**:
|
||||
|
||||
- Checks for configuration conflicts
|
||||
- Validates resource limits
|
||||
- Validates network configuration
|
||||
- Validates storage configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `check_conflicts()`
|
||||
|
||||
**Purpose**: Check for configuration conflicts
|
||||
**Parameters**: None
|
||||
**Returns**: 0 if no conflicts, 1 if conflicts found
|
||||
**Side Effects**:
|
||||
|
||||
- Checks for conflicting settings
|
||||
- Validates resource allocation
|
||||
- Checks network configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: All configuration variables
|
||||
|
||||
#### `cleanup_on_error()`
|
||||
|
||||
**Purpose**: Clean up resources on error
|
||||
**Parameters**: None
|
||||
**Returns**: None
|
||||
**Side Effects**:
|
||||
|
||||
- Removes partially created containers
|
||||
- Cleans up temporary files
|
||||
- Resets configuration
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CTID`
|
||||
**Dependencies**: None
|
||||
**Environment Variables Used**: `CTID`
|
||||
|
||||
## Function Call Flow
|
||||
|
||||
### Main Installation Flow
|
||||
|
||||
```
|
||||
start()
|
||||
├── variables()
|
||||
@ -259,6 +347,7 @@ start()
|
||||
```
|
||||
|
||||
### Error Handling Flow
|
||||
|
||||
```
|
||||
Error Detection
|
||||
├── validate_settings()
|
||||
@ -271,24 +360,29 @@ Error Detection
|
||||
## Function Dependencies
|
||||
|
||||
### Core Dependencies
|
||||
|
||||
- `start()` → `install_script()` → `build_container()` → `create_lxc_container()`
|
||||
- `variables()` → `base_settings()`
|
||||
- `advanced_settings()` → `select_storage()` → `detect_gpu_devices()`
|
||||
|
||||
### Storage Dependencies
|
||||
|
||||
- `select_storage()` → `resolve_storage_preselect()`
|
||||
- `select_storage()` → `choose_and_set_storage_for_file()`
|
||||
|
||||
### GPU Dependencies
|
||||
|
||||
- `configure_gpu_passthrough()` → `detect_gpu_devices()`
|
||||
- `fix_gpu_gids()` → `configure_gpu_passthrough()`
|
||||
|
||||
### Settings Dependencies
|
||||
|
||||
- `default_var_settings()` → `maybe_offer_save_app_defaults()`
|
||||
|
||||
## Function Usage Examples
|
||||
|
||||
### Basic Container Creation
|
||||
|
||||
```bash
|
||||
# Set required variables
|
||||
export APP="plex"
|
||||
@ -304,6 +398,7 @@ start() # Entry point
|
||||
```
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
```bash
|
||||
# Set advanced variables
|
||||
export var_os="debian"
|
||||
@ -319,6 +414,7 @@ advanced_settings() # Interactive configuration
|
||||
```
|
||||
|
||||
### GPU Passthrough
|
||||
|
||||
```bash
|
||||
# Enable GPU passthrough
|
||||
export GPU_APPS="plex"
|
||||
@ -331,6 +427,7 @@ fix_gpu_gids() # Fix permissions
|
||||
```
|
||||
|
||||
### Settings Persistence
|
||||
|
||||
```bash
|
||||
# Save settings as defaults
|
||||
export SAVE_DEFAULTS="true"
|
||||
@ -344,15 +441,18 @@ maybe_offer_save_app_defaults() # Save app defaults
|
||||
## Function Error Handling
|
||||
|
||||
### Validation Functions
|
||||
|
||||
- `validate_settings()`: Returns 0 for valid, 1 for invalid
|
||||
- `check_conflicts()`: Returns 0 for no conflicts, 1 for conflicts
|
||||
|
||||
### Error Recovery
|
||||
|
||||
- `cleanup_on_error()`: Cleans up on any error
|
||||
- Error codes are propagated up the call stack
|
||||
- Critical errors cause script termination
|
||||
|
||||
### Error Types
|
||||
|
||||
1. **Configuration Errors**: Invalid settings or conflicts
|
||||
2. **Resource Errors**: Insufficient resources or conflicts
|
||||
3. **Network Errors**: Invalid network configuration
|
||||
|
||||
@ -6,6 +6,16 @@ This directory contains comprehensive documentation for the `build.func` script,
|
||||
|
||||
## 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)
|
||||
Visual ASCII flowchart showing the main execution flow, decision trees, and key decision points in the build.func script.
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.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",
|
||||
"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": [
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
|
||||
"website": "https://actualbudget.org/",
|
||||
"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.",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": 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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://docs.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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://tailscale.com/kb/1017/install",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
59
frontend/public/json/adguardhome-sync.json
Normal file
59
frontend/public/json/adguardhome-sync.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"name": "AdGuardHome-Sync",
|
||||
"slug": "adguardhome-sync",
|
||||
"categories": [
|
||||
5
|
||||
],
|
||||
"date_created": "2025-12-13",
|
||||
"type": "addon",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/bakito/adguardhome-sync",
|
||||
"website": "https://github.com/bakito/adguardhome-sync",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adguardhome-sync.webp",
|
||||
"config_path": "/opt/adguardhome-sync/adguardhome-sync.yaml",
|
||||
"description": "Synchronize AdGuardHome config to one or multiple replica instances. Syncs General Settings, Filters, Rewrites, Services, Clients, DNS Config, DHCP Config and Theme.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "tools/addon/adguardhome-sync.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "tools/addon/adguardhome-sync.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Edit /opt/adguardhome-sync/adguardhome-sync.yaml to configure your AdGuardHome instances",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Origin = Primary instance, Replicas = Instances to sync to",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Update with: update_adguardhome-sync",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://adventurelog.app/docs/intro/adventurelog_overview.html",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8090,
|
||||
"documentation": "https://www.ispyconnect.com/docs/agent/about",
|
||||
"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",
|
||||
"description": "AgentDVR a new video surveillance solution for the Internet Of Things.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": 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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": null,
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"documentation": "https://tinyauth.app",
|
||||
"config_path": "/opt/tinyauth/.env",
|
||||
"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.",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": null,
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://cassandra.apache.org/doc/latest/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 5984,
|
||||
"documentation": "https://docs.couchdb.org/en/stable/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://guacamole.apache.org/doc/gug/",
|
||||
"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",
|
||||
"description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 9998,
|
||||
"documentation": "https://cwiki.apache.org/confluence/display/tika",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://cwiki.apache.org/confluence/display/TOMCAT",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3142,
|
||||
"documentation": "https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html",
|
||||
"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",
|
||||
"description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://github.com/ArchiveBox/ArchiveBox/wiki",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://wiki.archlinux.org/title/Main_page",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://release-argus.io/docs/overview/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -6,12 +6,12 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 6880,
|
||||
"documentation": "https://aria2.github.io/manual/en/html/index.html",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"documentation": "https://docs.asterisk.org/",
|
||||
"config_path": "/etc/asterisk",
|
||||
"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.",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 13378,
|
||||
"documentation": "https://www.audiobookshelf.org/guides/",
|
||||
"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",
|
||||
"description": "Audiobookshelf is a Self-hosted audiobook and podcast server.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 443,
|
||||
"documentation": "https://www.authelia.com/integration/deployment/bare-metal/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 7474,
|
||||
"documentation": "https://autobrr.com/configuration/autobrr",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"documentation": "https://github.com/gelbphoenix/autocaliweb/wiki",
|
||||
"config_path": "/etc/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",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.baby-buddy.net/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 9898,
|
||||
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://sabre.io/dav/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 6767,
|
||||
"documentation": "https://wiki.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",
|
||||
"description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/alam00000/bentopdf",
|
||||
"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": "",
|
||||
"description": "A privacy-first, 100% client-side PDF Toolkit. No signups/accounts, works in the browser, online or offline.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8090,
|
||||
"documentation": "https://beszel.dev/guide/what-is-beszel",
|
||||
"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": "",
|
||||
"description": "A lightweight server monitoring platform that provides Docker statistics, historical data, and alert functions\n ",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3333,
|
||||
"documentation": "https://bitmagnet.io/setup.html",
|
||||
"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`",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 4000,
|
||||
"documentation": "https://0xerr0r.github.io/blocky/latest/configuration/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 6060,
|
||||
"documentation": "https://booklore-app.github.io/booklore-docs/docs/getting-started",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://www.bookstackapp.com/docs/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://docs.bunkerweb.io/latest/",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://github.com/jordan-dalby/ByteStash/wiki",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://caddyserver.com/docs/",
|
||||
"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",
|
||||
"description": "Caddy is a powerful, extensible platform to serve your sites, services, and apps, written in Go.",
|
||||
"install_methods": [
|
||||
|
||||
@ -6,12 +6,12 @@
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://wiki.casaos.io/en/home",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 5000,
|
||||
"documentation": "https://changedetection.io/tutorials",
|
||||
"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",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 8089,
|
||||
"documentation": "https://getchannels.com/docs/getting-started/quick-start-guide/",
|
||||
"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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.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": "",
|
||||
"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": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": 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": "",
|
||||
"description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
|
||||
"install_methods": [
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": 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": "",
|
||||
"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": [
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user