mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-04 04:13:26 +01:00
Compare commits
105 Commits
2026-01-13
...
2026-01-18
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afe9d08233 | ||
|
|
9e1354a87b | ||
|
|
f2aca758ea | ||
|
|
3f4e291203 | ||
|
|
ab86f00c68 | ||
|
|
9d6c2ba2ae | ||
|
|
ac68ce48de | ||
|
|
4aa6eb7fb5 | ||
|
|
dbf551d162 | ||
|
|
7a52b83eb8 | ||
|
|
ca97009d1e | ||
|
|
2c1756cad9 | ||
|
|
6e66359d8f | ||
|
|
e21ab1500b | ||
|
|
fe5108f7ca | ||
|
|
502c357895 | ||
|
|
0e59533bcc | ||
|
|
e05742b96a | ||
|
|
9dc1e606ec | ||
|
|
c03e532dde | ||
|
|
54ba53dd3e | ||
|
|
83b5d90c04 | ||
|
|
bcd143e91a | ||
|
|
c5031e6462 | ||
|
|
297b4c30df | ||
|
|
5abfac97f7 | ||
|
|
f6b3515c9e | ||
|
|
67685e62d1 | ||
|
|
25a6a7ecc7 | ||
|
|
6ccc0aaaf6 | ||
|
|
97ce511090 | ||
|
|
7d702353f7 | ||
|
|
b8f9ec2a34 | ||
|
|
b8d0079a87 | ||
|
|
e9f8479313 | ||
|
|
b575bdb3fb | ||
|
|
c3a5ff260a | ||
|
|
83f4085885 | ||
|
|
b606fae7a5 | ||
|
|
af335c8e51 | ||
|
|
a51a3929e6 | ||
|
|
ff5858ac11 | ||
|
|
bba878adb9 | ||
|
|
aee02ba783 | ||
|
|
2d6a54c6a4 | ||
|
|
a3f0573ada | ||
|
|
6a02fcaecd | ||
|
|
eeeb80bc36 | ||
|
|
b18136da63 | ||
|
|
d86dbce395 | ||
|
|
48cebc4aa9 | ||
|
|
f3be88ad98 | ||
|
|
67a6c781b0 | ||
|
|
151e2d44c8 | ||
|
|
152aa527e2 | ||
|
|
cd737cdf97 | ||
|
|
23a27bcda4 | ||
|
|
2492dfe201 | ||
|
|
de0790aa72 | ||
|
|
497d2711f1 | ||
|
|
1c01804b29 | ||
|
|
0232e473ca | ||
|
|
54ac6eece0 | ||
|
|
df0ce0c09b | ||
|
|
4fc57b0e0b | ||
|
|
f0e630cbfe | ||
|
|
ba908d3dfd | ||
|
|
05c3b08d6e | ||
|
|
59697a9eb1 | ||
|
|
109d6ab6e9 | ||
|
|
e309d871d7 | ||
|
|
8b750d42d2 | ||
|
|
32fd002aa4 | ||
|
|
1a29f2a604 | ||
|
|
e76c453474 | ||
|
|
ebdfdd7ccf | ||
|
|
60d55b71b3 | ||
|
|
d6473133c9 | ||
|
|
ae8f3d1b8e | ||
|
|
bba52b03da | ||
|
|
ab33f85d9d | ||
|
|
9d39c91dff | ||
|
|
d4892d299f | ||
|
|
c6b01a62f0 | ||
|
|
c41c78a0b2 | ||
|
|
bdfd72e311 | ||
|
|
fa1f2784f9 | ||
|
|
b3b4d170b3 | ||
|
|
5e8c0d621b | ||
|
|
64bd501ed9 | ||
|
|
95ad02c9ef | ||
|
|
13decbf3a1 | ||
|
|
c178058315 | ||
|
|
1980e3c47f | ||
|
|
b876001ffa | ||
|
|
ce5ab97737 | ||
|
|
2aabd0c911 | ||
|
|
5fb3ce7b33 | ||
|
|
bf648203f0 | ||
|
|
277d1ed5a2 | ||
|
|
97bd4833fd | ||
|
|
2bc50833d6 | ||
|
|
ff74fdff38 | ||
|
|
dcfeaefad1 | ||
|
|
40933df6f7 |
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
@@ -30,7 +30,7 @@ body:
|
||||
required: true
|
||||
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
||||
required: true
|
||||
- label: "The application requested has 200+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
- label: "The application requested has 600+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
135
CHANGELOG.md
135
CHANGELOG.md
@@ -10,8 +10,143 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-19
|
||||
|
||||
## 2026-01-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
|
||||
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix Patchmon install script (escaping) [@christiaangoossens](https://github.com/christiaangoossens) ([#10920](https://github.com/community-scripts/ProxmoxVE/pull/10920))
|
||||
- refactor: peanut entrypoint [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10902](https://github.com/community-scripts/ProxmoxVE/pull/10902))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Update Patchmon default Nginx config (IPv6 and correct scheme) [@christiaangoossens](https://github.com/christiaangoossens) ([#10917](https://github.com/community-scripts/ProxmoxVE/pull/10917))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: FluidCalendar [@tremor021](https://github.com/tremor021) ([#10928](https://github.com/community-scripts/ProxmoxVE/pull/10928))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove iVentoy script [@tremor021](https://github.com/tremor021) ([#10924](https://github.com/community-scripts/ProxmoxVE/pull/10924))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: improve password handling and validation logic [@MickLesk](https://github.com/MickLesk) ([#10925](https://github.com/community-scripts/ProxmoxVE/pull/10925))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- hwaccel: improve NVIDIA version matching and GPU selection UI [@MickLesk](https://github.com/MickLesk) ([#10901](https://github.com/community-scripts/ProxmoxVE/pull/10901))
|
||||
|
||||
### 📂 Github
|
||||
|
||||
- Fix typo in the New Script request template [@tremor021](https://github.com/tremor021) ([#10891](https://github.com/community-scripts/ProxmoxVE/pull/10891))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: preserve newest scripts pagination [@jgrubiox](https://github.com/jgrubiox) ([#10882](https://github.com/community-scripts/ProxmoxVE/pull/10882))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update qui.json [@GalaxyCatD3v](https://github.com/GalaxyCatD3v) ([#10896](https://github.com/community-scripts/ProxmoxVE/pull/10896))
|
||||
|
||||
## 2026-01-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- TRIP ([#10864](https://github.com/community-scripts/ProxmoxVE/pull/10864))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix sonarqube update version info (#10870) [@Karlito83](https://github.com/Karlito83) ([#10871](https://github.com/community-scripts/ProxmoxVE/pull/10871))
|
||||
- WGDashboard: Update repo URL [@tremor021](https://github.com/tremor021) ([#10872](https://github.com/community-scripts/ProxmoxVE/pull/10872))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Disable Palmer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#10889](https://github.com/community-scripts/ProxmoxVE/pull/10889))
|
||||
|
||||
## 2026-01-16
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Flatnotes ([#10857](https://github.com/community-scripts/ProxmoxVE/pull/10857))
|
||||
- Unifi OS Server ([#10856](https://github.com/community-scripts/ProxmoxVE/pull/10856))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Jotty: increase RAM; cap heap size at 3GB during build [@vhsdream](https://github.com/vhsdream) ([#10868](https://github.com/community-scripts/ProxmoxVE/pull/10868))
|
||||
- SnowShare: Increase default resources [@TuroYT](https://github.com/TuroYT) ([#10865](https://github.com/community-scripts/ProxmoxVE/pull/10865))
|
||||
- postgresql: name of sources file fixed (update check) [@JamborJan](https://github.com/JamborJan) ([#10854](https://github.com/community-scripts/ProxmoxVE/pull/10854))
|
||||
- immich: use dpkg-query to get intel-opencl-icd version [@MickLesk](https://github.com/MickLesk) ([#10848](https://github.com/community-scripts/ProxmoxVE/pull/10848))
|
||||
- domain-monitor: fix: cron user [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10846](https://github.com/community-scripts/ProxmoxVE/pull/10846))
|
||||
- pihole/unbound: create unbound config before apt install to prevent port conflicts [@MickLesk](https://github.com/MickLesk) ([#10839](https://github.com/community-scripts/ProxmoxVE/pull/10839))
|
||||
- zammad: use ln -sf to avoid failure when symlink exists [@MickLesk](https://github.com/MickLesk) ([#10840](https://github.com/community-scripts/ProxmoxVE/pull/10840))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- qui: fix: category [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10847](https://github.com/community-scripts/ProxmoxVE/pull/10847))
|
||||
|
||||
## 2026-01-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Qui ([#10829](https://github.com/community-scripts/ProxmoxVE/pull/10829))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Refactor: FreshRSS + Bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#10824](https://github.com/community-scripts/ProxmoxVE/pull/10824))
|
||||
|
||||
## 2026-01-14
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Kutt ([#10812](https://github.com/community-scripts/ProxmoxVE/pull/10812))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Switch Ollama install to .tar.zst and add zstd dependency [@MickLesk](https://github.com/MickLesk) ([#10814](https://github.com/community-scripts/ProxmoxVE/pull/10814))
|
||||
- Immich: Install libde265-dev from Debian Testing [@vhsdream](https://github.com/vhsdream) ([#10810](https://github.com/community-scripts/ProxmoxVE/pull/10810))
|
||||
- nginxproxymanager: allow updates now the build is fixed [@durzo](https://github.com/durzo) ([#10796](https://github.com/community-scripts/ProxmoxVE/pull/10796))
|
||||
- Fixed Apache Guacamole installer [@horvatbenjamin](https://github.com/horvatbenjamin) ([#10798](https://github.com/community-scripts/ProxmoxVE/pull/10798))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: Improve NVIDIA GPU setup (5000x Series) [@MickLesk](https://github.com/MickLesk) ([#10807](https://github.com/community-scripts/ProxmoxVE/pull/10807))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- Fix whiptail dialog hanging in Proxmox web console [@comk22](https://github.com/comk22) ([#10794](https://github.com/community-scripts/ProxmoxVE/pull/10794))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Add search filtering to CommandDialog for improved script search functionality [@BramSuurdje](https://github.com/BramSuurdje) ([#10800](https://github.com/community-scripts/ProxmoxVE/pull/10800))
|
||||
|
||||
## 2026-01-13
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -29,8 +29,12 @@ function update_script() {
|
||||
fi
|
||||
setup_mariadb
|
||||
|
||||
if ! grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
||||
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
||||
if grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
||||
sed -i 's|root /usr/bin/php /opt/domain-monitor/cron/check_domains.php|www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php|' /etc/crontab
|
||||
fi
|
||||
|
||||
if ! grep -Fq "www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
||||
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >> /etc/crontab
|
||||
fi
|
||||
|
||||
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then
|
||||
|
||||
79
ct/flatnotes.sh
Normal file
79
ct/flatnotes.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-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/dullage/flatnotes
|
||||
|
||||
APP="Flatnotes"
|
||||
var_tags="${var_tags:-notes}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
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/flatnotes ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "flatnotes" "dullage/flatnotes"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop flatnotes
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Configuration and Data"
|
||||
cp /opt/flatnotes/.env /opt/flatnotes.env
|
||||
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
|
||||
msg_ok "Backed up Configuration and Data"
|
||||
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/flatnotes/client
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
msg_info "Updating Backend"
|
||||
cd /opt/flatnotes
|
||||
rm -f uv.lock
|
||||
$STD /usr/local/bin/uvx migrate-to-uv
|
||||
$STD /usr/local/bin/uv sync
|
||||
msg_ok "Updated Backend"
|
||||
|
||||
msg_info "Restoring Configuration and Data"
|
||||
cp /opt/flatnotes.env /opt/flatnotes/.env
|
||||
cp -r /opt/flatnotes_data_backup/. /opt/flatnotes/data
|
||||
rm -f /opt/flatnotes.env
|
||||
rm -r /opt/flatnotes_data_backup
|
||||
msg_ok "Restored Configuration and Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start flatnotes
|
||||
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}"
|
||||
|
||||
@@ -34,11 +34,10 @@ function update_script() {
|
||||
msg_info "Stopped Service"
|
||||
|
||||
cp /opt/fluid-calendar/.env /opt/fluid.env
|
||||
rm -rf /opt/fluid-calendar
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
|
||||
msg_info "Updating Fluid Calendar"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
cd /opt/fluid-calendar
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -33,11 +33,44 @@ function update_script() {
|
||||
chmod +x /opt/freshrss/cli/sensitive-log.sh
|
||||
systemctl restart apache2
|
||||
msg_ok "Fixed wrong permissions"
|
||||
exit
|
||||
else
|
||||
msg_error "FreshRSS should be updated via the user interface."
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "freshrss" "FreshRSS/FreshRSS"; then
|
||||
msg_info "Stopping Apache2"
|
||||
systemctl stop apache2
|
||||
msg_ok "Stopped Apache2"
|
||||
|
||||
msg_info "Backing up FreshRSS"
|
||||
mv /opt/freshrss /opt/freshrss-backup
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS" "tarball"
|
||||
|
||||
msg_info "Restoring data and configuration"
|
||||
if [[ -d /opt/freshrss-backup/data ]]; then
|
||||
cp -a /opt/freshrss-backup/data/. /opt/freshrss/data/
|
||||
fi
|
||||
if [[ -d /opt/freshrss-backup/extensions ]]; then
|
||||
cp -a /opt/freshrss-backup/extensions/. /opt/freshrss/extensions/
|
||||
fi
|
||||
msg_ok "Data Restored"
|
||||
|
||||
msg_info "Setting permissions"
|
||||
chown -R www-data:www-data /opt/freshrss
|
||||
chmod -R g+rX /opt/freshrss
|
||||
chmod -R g+w /opt/freshrss/data/
|
||||
msg_ok "Permissions Set"
|
||||
|
||||
msg_info "Starting Apache2"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Apache2"
|
||||
|
||||
msg_info "Cleaning up backup"
|
||||
rm -rf /opt/freshrss-backup
|
||||
msg_ok "Cleaned up backup"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
6
ct/headers/flatnotes
Normal file
6
ct/headers/flatnotes
Normal file
@@ -0,0 +1,6 @@
|
||||
________ __ __
|
||||
/ ____/ /___ _/ /_____ ____ / /____ _____
|
||||
/ /_ / / __ `/ __/ __ \/ __ \/ __/ _ \/ ___/
|
||||
/ __/ / / /_/ / /_/ / / / /_/ / /_/ __(__ )
|
||||
/_/ /_/\__,_/\__/_/ /_/\____/\__/\___/____/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
_ _ __ __
|
||||
(_) | / /__ ____ / /_____ __ __
|
||||
/ /| | / / _ \/ __ \/ __/ __ \/ / / /
|
||||
/ / | |/ / __/ / / / /_/ /_/ / /_/ /
|
||||
/_/ |___/\___/_/ /_/\__/\____/\__, /
|
||||
/____/
|
||||
6
ct/headers/kutt
Normal file
6
ct/headers/kutt
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ __ __
|
||||
/ //_/_ __/ /_/ /_
|
||||
/ ,< / / / / __/ __/
|
||||
/ /| / /_/ / /_/ /_
|
||||
/_/ |_\__,_/\__/\__/
|
||||
|
||||
6
ct/headers/qui
Normal file
6
ct/headers/qui
Normal file
@@ -0,0 +1,6 @@
|
||||
____ _
|
||||
/ __ \__ __(_)
|
||||
/ / / / / / / /
|
||||
/ /_/ / /_/ / /
|
||||
\___\_\__,_/_/
|
||||
|
||||
6
ct/headers/termix
Normal file
6
ct/headers/termix
Normal file
@@ -0,0 +1,6 @@
|
||||
______ _
|
||||
/_ __/__ _________ ___ (_) __
|
||||
/ / / _ \/ ___/ __ `__ \/ / |/_/
|
||||
/ / / __/ / / / / / / / /> <
|
||||
/_/ \___/_/ /_/ /_/ /_/_/_/|_|
|
||||
|
||||
6
ct/headers/thingsboard
Normal file
6
ct/headers/thingsboard
Normal file
@@ -0,0 +1,6 @@
|
||||
________ _ ____ __
|
||||
/_ __/ /_ (_)___ ____ ______/ __ )____ ____ __________/ /
|
||||
/ / / __ \/ / __ \/ __ `/ ___/ __ / __ \/ __ `/ ___/ __ /
|
||||
/ / / / / / / / / / /_/ (__ ) /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ /_/ /_/_/_/ /_/\__, /____/_____/\____/\__,_/_/ \__,_/
|
||||
/____/
|
||||
6
ct/headers/trip
Normal file
6
ct/headers/trip
Normal file
@@ -0,0 +1,6 @@
|
||||
__________ ________
|
||||
/_ __/ __ \/ _/ __ \
|
||||
/ / / /_/ // // /_/ /
|
||||
/ / / _, _// // ____/
|
||||
/_/ /_/ |_/___/_/
|
||||
|
||||
6
ct/headers/unifi-os-server
Normal file
6
ct/headers/unifi-os-server
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ _ _______ ____ _____ _____
|
||||
/ / / /___ (_) ____(_) / __ \/ ___/ / ___/___ ______ _____ _____
|
||||
/ / / / __ \/ / /_ / /_____/ / / /\__ \______\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ /_/ / / / / / __/ / /_____/ /_/ /___/ /_____/__/ / __/ / | |/ / __/ /
|
||||
\____/_/ /_/_/_/ /_/ \____//____/ /____/\___/_/ |___/\___/_/
|
||||
|
||||
11
ct/immich.sh
11
ct/immich.sh
@@ -57,9 +57,12 @@ EOF
|
||||
fi
|
||||
$STD apt update
|
||||
msg_ok "Added Debian Testing repo"
|
||||
msg_info "Installing libmimalloc3"
|
||||
$STD apt install -t testing --no-install-recommends libmimalloc3
|
||||
msg_ok "Installed libmimalloc3"
|
||||
fi
|
||||
|
||||
if ! dpkg -l "libmimalloc3" | grep -q '3.1' || ! dpkg -l "libde265-dev" | grep -q '1.0.16'; then
|
||||
msg_info "Installing/upgrading Testing repo packages"
|
||||
$STD apt install -t testing libmimalloc3 libde265-dev -y
|
||||
msg_ok "Installed/upgraded Testing repo packages"
|
||||
fi
|
||||
|
||||
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
|
||||
@@ -93,7 +96,7 @@ EOF
|
||||
$STD apt install -y ./*.deb
|
||||
rm ./*.deb
|
||||
$STD apt-mark hold libigdgmm12
|
||||
dpkg -l | grep -m1 "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
||||
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
|
||||
msg_ok "Intel iGPU dependencies updated"
|
||||
fi
|
||||
rm ./Dockerfile
|
||||
|
||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
APP="jotty"
|
||||
var_tags="${var_tags:-tasks;notes}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-3072}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
@@ -45,6 +45,8 @@ function update_script() {
|
||||
|
||||
msg_info "Updating jotty"
|
||||
cd /opt/jotty
|
||||
unset NODE_OPTIONS
|
||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
@@ -55,7 +57,7 @@ function update_script() {
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf * .next .git .gitignore .yarn
|
||||
rm -rf ./* .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
|
||||
74
ct/kutt.sh
Normal file
74
ct/kutt.sh
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: tomfrenzel
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thedevs-network/kutt
|
||||
|
||||
APP="Kutt"
|
||||
var_tags="${var_tags:-sharing}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-2}"
|
||||
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/kutt ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "kutt" "thedevs-network/kutt"; then
|
||||
msg_info "Stopping services"
|
||||
systemctl stop kutt
|
||||
msg_ok "Stopped services"
|
||||
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/kutt-backup
|
||||
[ -d /opt/kutt/custom ] && cp -r /opt/kutt/custom /opt/kutt-backup/
|
||||
[ -d /opt/kutt/db ] && cp -r /opt/kutt/db /opt/kutt-backup/
|
||||
cp /opt/kutt/.env /opt/kutt-backup/
|
||||
msg_ok "Backed up data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kutt" "thedevs-network/kutt" "tarball" "latest"
|
||||
|
||||
msg_info "Restoring data"
|
||||
[ -d /opt/kutt-backup/custom ] && cp -r /opt/kutt-backup/custom /opt/kutt/
|
||||
[ -d /opt/kutt-backup/db ] && cp -r /opt/kutt-backup/db /opt/kutt/
|
||||
[ -f /opt/kutt-backup/.env ] && cp /opt/kutt-backup/.env /opt/kutt/
|
||||
rm -rf /opt/kutt-backup
|
||||
msg_ok "Restored data"
|
||||
|
||||
msg_info "Configuring Kutt"
|
||||
cd /opt/kutt
|
||||
$STD npm install
|
||||
$STD npm run migrate
|
||||
msg_ok "Configured Kutt"
|
||||
|
||||
msg_info "Starting services"
|
||||
systemctl start kutt
|
||||
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}https://${IP} or https://<your-Kutt-domain>${CL}"
|
||||
@@ -49,11 +49,10 @@ function update_script() {
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
|
||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
#grep "tag_name" |
|
||||
#awk '{print substr($2, 3, length($2)-4) }')
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
grep "tag_name" |
|
||||
awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
RELEASE="2.13.5"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}" "/opt/nginxproxymanager"
|
||||
|
||||
msg_info "Stopping Services"
|
||||
|
||||
11
ct/ollama.sh
11
ct/ollama.sh
@@ -32,17 +32,22 @@ function update_script() {
|
||||
if [[ ! -f /opt/Ollama_version.txt ]]; then
|
||||
touch /opt/Ollama_version.txt
|
||||
fi
|
||||
if ! command -v zstd &>/dev/null; then
|
||||
msg_info "Installing zstd"
|
||||
$STD apt install -y zstd
|
||||
msg_ok "Installed zstd"
|
||||
fi
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop ollama
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
TMP_TAR=$(mktemp --suffix=.tgz)
|
||||
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
||||
TMP_TAR=$(mktemp --suffix=.tar.zst)
|
||||
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst"
|
||||
msg_info "Updating Ollama to ${RELEASE}"
|
||||
rm -rf /usr/local/lib/ollama
|
||||
rm -rf /usr/local/bin/ollama
|
||||
mkdir -p /usr/local/lib/ollama
|
||||
tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
|
||||
tar --zstd -xf "${TMP_TAR}" -C /usr/local/lib/ollama
|
||||
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
|
||||
rm -f "${TMP_TAR}"
|
||||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||||
|
||||
@@ -92,12 +92,17 @@ EOF
|
||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||
if ! command -v zstd &>/dev/null; then
|
||||
msg_info "Installing zstd"
|
||||
$STD apt install -y zstd
|
||||
msg_ok "Installed zstd"
|
||||
fi
|
||||
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
||||
msg_info "Downloading Ollama v$RELEASE \n"
|
||||
curl -fS#LO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
|
||||
msg_ok "Download Complete"
|
||||
|
||||
if [ -f "ollama-linux-amd64.tgz" ]; then
|
||||
if [ -f "ollama-linux-amd64.tar.zst" ]; then
|
||||
|
||||
msg_info "Stopping Ollama Service"
|
||||
systemctl stop ollama
|
||||
@@ -106,8 +111,8 @@ EOF
|
||||
msg_info "Installing Ollama"
|
||||
rm -rf /usr/lib/ollama
|
||||
rm -rf /usr/bin/ollama
|
||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||
rm -rf ollama-linux-amd64.tgz
|
||||
tar --zstd -C /usr -xf ollama-linux-amd64.tar.zst
|
||||
rm -rf ollama-linux-amd64.tar.zst
|
||||
msg_ok "Installed Ollama"
|
||||
|
||||
msg_info "Starting Ollama Service"
|
||||
|
||||
11
ct/peanut.sh
11
ct/peanut.sh
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
|
||||
if check_for_gh_release "peanut" "Brandawg93/PeaNUT"; then
|
||||
msg_info "Stopping Service"
|
||||
@@ -37,6 +37,15 @@ function update_script() {
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
if ! grep -q '/opt/peanut/entrypoint.mjs' /etc/systemd/system/peanut.service; then
|
||||
msg_info "Fixing entrypoint"
|
||||
cd /opt/peanut
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
sed -i 's|/opt/peanut/.next/standalone/server.js|/opt/peanut/entrypoint.mjs|' /etc/systemd/system/peanut.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Fixed entrypoint"
|
||||
fi
|
||||
|
||||
msg_info "Updating Peanut"
|
||||
cd /opt/peanut
|
||||
$STD pnpm i
|
||||
|
||||
@@ -23,7 +23,7 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/pgdg.list ]]; then
|
||||
if ! command -v psql >/dev/null 2>&1; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
58
ct/qui.sh
Normal file
58
ct/qui.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/autobrr/qui
|
||||
|
||||
APP="Qui"
|
||||
var_tags="${var_tags:-torrent}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
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 [[ ! -f /usr/local/bin/qui ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "Qui" "autobrr/qui"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop qui
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/tmp/qui" "qui_*_linux_x86_64.tar.gz"
|
||||
|
||||
msg_info "Updating qui"
|
||||
mv /tmp/qui/qui /usr/local/bin/qui
|
||||
chmod +x /usr/local/bin/qui
|
||||
rm -rf /tmp/qui
|
||||
msg_ok "Updated qui"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start qui
|
||||
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}:7476${CL}"
|
||||
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
|
||||
APP="SnowShare"
|
||||
var_tags="${var_tags:-file-sharing}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -44,6 +44,7 @@ function update_script() {
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
||||
echo "${RELEASE}" > ~/.sonarqube
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
msg_info "Restoring Backup"
|
||||
|
||||
90
ct/termix.sh
Normal file
90
ct/termix.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Termix-SSH/Termix
|
||||
|
||||
APP="Termix"
|
||||
var_tags="${var_tags:-ssh;terminal;management}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/termix ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "termix" "Termix-SSH/Termix"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop termix
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/termix/data /opt/termix_data_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
|
||||
$STD npm install --ignore-scripts --force
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
$STD npm rebuild better-sqlite3 --force
|
||||
$STD npm run build:backend
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Setting up Production Dependencies"
|
||||
$STD npm ci --only=production --ignore-scripts --force
|
||||
$STD npm rebuild better-sqlite3 bcryptjs --force
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Set up Production Dependencies"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/termix/data
|
||||
cp -r /opt/termix_data_backup/. /opt/termix/data
|
||||
rm -rf /opt/termix_data_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Updating Frontend Files"
|
||||
rm -rf /opt/termix/html/*
|
||||
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
|
||||
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
|
||||
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
|
||||
msg_ok "Updated Frontend Files"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start termix
|
||||
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}"
|
||||
57
ct/thingsboard.sh
Normal file
57
ct/thingsboard.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thingsboard/thingsboard
|
||||
|
||||
APP="ThingsBoard"
|
||||
var_tags="${var_tags:-iot;platform}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /usr/share/thingsboard ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "thingsboard" "thingsboard/thingsboard"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop thingsboard
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Running Database Upgrade"
|
||||
$STD /usr/share/thingsboard/bin/install/upgrade.sh
|
||||
msg_ok "Ran Database Upgrade"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start thingsboard
|
||||
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}"
|
||||
66
ct/trip.sh
Normal file
66
ct/trip.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/itskovacs/TRIP
|
||||
|
||||
APP="TRIP"
|
||||
var_tags="${var_tags:-maps;travel}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
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/trip ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "trip" "itskovacs/TRIP"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop trip
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/trip/src
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
mkdir -p /opt/trip/frontend
|
||||
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
msg_info "Updating Backend"
|
||||
cd /opt/trip/backend
|
||||
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
||||
msg_ok "Updated Backend"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start trip
|
||||
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}:8000${CL}"
|
||||
@@ -1,18 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
# Source: https://ui.com/
|
||||
|
||||
APP="iVentoy"
|
||||
var_tags="${var_tags:-pxe-tool}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
APP="UniFi-OS-Server"
|
||||
var_tags="${var_tags:-network}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
var_nesting="${var_nesting:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@@ -23,11 +25,11 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/iventoy ]]; then
|
||||
if [[ ! -f /usr/local/sbin/unifi-os-server.bin && ! -d /data/unifi ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -38,4 +40,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}:26000${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:11443${CL}"
|
||||
@@ -28,20 +28,19 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! dpkg -s git >/dev/null 2>&1; then
|
||||
msg_info "Installing git"
|
||||
$STD apt update
|
||||
$STD apt install -y git
|
||||
msg_ok "Installed git"
|
||||
fi
|
||||
apt update
|
||||
apt -y upgrade
|
||||
|
||||
ensure_dependencies git
|
||||
|
||||
msg_info "Updating LXC"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
if [[ -d /etc/wgdashboard ]]; then
|
||||
sleep 2
|
||||
cd /etc/wgdashboard/src
|
||||
./wgd.sh update
|
||||
./wgd.sh start
|
||||
$STD ./wgd.sh update
|
||||
$STD ./wgd.sh start
|
||||
fi
|
||||
msg_ok "Updated LXC"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
35
frontend/public/json/flatnotes.json
Normal file
35
frontend/public/json/flatnotes.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Flatnotes",
|
||||
"slug": "flatnotes",
|
||||
"categories": [
|
||||
12
|
||||
],
|
||||
"date_created": "2026-01-16",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/dullage/flatnotes/wiki",
|
||||
"website": "https://github.com/dullage/flatnotes",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/flatnotes.webp",
|
||||
"config_path": "/opt/flatnotes/.env",
|
||||
"description": "A self-hosted, database-less note-taking web app that utilises a flat folder of markdown files for storage.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/flatnotes.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "iVentoy",
|
||||
"slug": "iventoy",
|
||||
"categories": [
|
||||
2
|
||||
],
|
||||
"date_created": "2024-05-16",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 26000,
|
||||
"documentation": "https://www.iventoy.com/en/doc_news.html",
|
||||
"website": "https://www.iventoy.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/iventoy.webp",
|
||||
"config_path": "",
|
||||
"description": "iVentoy is an upgraded PXE server that allows simultaneous OS booting and installation on multiple machines via network. It is user-friendly, requiring only the placement of ISO files in a designated folder and selecting PXE boot on the client machine. iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, and ARM64 UEFI modes. It is compatible with over 110 OS types, including Windows, WinPE, Linux, and VMware.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/iventoy.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Container must be privileged.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
"script": "ct/jotty.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 3072,
|
||||
"ram": 4096,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
|
||||
40
frontend/public/json/kutt.json
Normal file
40
frontend/public/json/kutt.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "Kutt",
|
||||
"slug": "kutt",
|
||||
"categories": [
|
||||
21
|
||||
],
|
||||
"date_created": "2026-01-14",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 443,
|
||||
"documentation": "https://github.com/thedevs-network/kutt/",
|
||||
"config_path": "/opt/kutt/.env",
|
||||
"website": "https://kutt.it",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kutt.webp",
|
||||
"description": "Kutt is a modern URL shortener with support for custom domains. Create and edit links, view statistics, manage users, and more.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/kutt.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 2,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse porxy to port 3000).",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"disable": false,
|
||||
"disable": true,
|
||||
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
|
||||
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
|
||||
"website": "https://palmr.kyantech.com.br/",
|
||||
|
||||
35
frontend/public/json/qui.json
Normal file
35
frontend/public/json/qui.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Qui",
|
||||
"slug": "qui",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2026-01-15",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 7476,
|
||||
"documentation": "https://github.com/autobrr/qui",
|
||||
"website": "https://getqui.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qui.webp",
|
||||
"config_path": "/root/.config/qui/config.toml",
|
||||
"description": "Qui is a modern, self-hosted web interface for managing multiple qBittorrent instances with support for 10k+ torrents. It provides a clean and responsive interface for monitoring and controlling your qBittorrent downloads across multiple servers.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/qui.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -19,9 +19,9 @@
|
||||
"type": "default",
|
||||
"script": "ct/snowshare.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 5,
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
|
||||
35
frontend/public/json/termix.json
Normal file
35
frontend/public/json/termix.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Termix",
|
||||
"slug": "termix",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.termix.site/",
|
||||
"website": "https://termix.site/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/termix.webp",
|
||||
"config_path": "",
|
||||
"description": "Termix is an open-source, self-hosted server management platform with SSH terminal access, SSH tunneling, remote file management, Docker management, and multi-platform support.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/termix.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
48
frontend/public/json/thingsboard.json
Normal file
48
frontend/public/json/thingsboard.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "ThingsBoard",
|
||||
"slug": "thingsboard",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://thingsboard.io/docs/",
|
||||
"website": "https://thingsboard.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/thingsboard.webp",
|
||||
"config_path": "/etc/thingsboard/conf/thingsboard.conf",
|
||||
"description": "ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management. It enables device connectivity via industry standard IoT protocols - MQTT, CoAP and HTTP and supports both cloud and on-premises deployments.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/thingsboard.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "sysadmin@thingsboard.org",
|
||||
"password": "sysadmin"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Please allow up to 90 seconds for the Web UI to start",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Additional demo accounts: tenant@thingsboard.org / tenant and customer@thingsboard.org / customer",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Change passwords for all accounts in the account profile page after first login",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
35
frontend/public/json/trip.json
Normal file
35
frontend/public/json/trip.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "TRIP",
|
||||
"slug": "trip",
|
||||
"categories": [
|
||||
21
|
||||
],
|
||||
"date_created": "2026-01-17",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://itskovacs.github.io/trip/docs/intro",
|
||||
"website": "https://github.com/itskovacs/TRIP",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/trip.webp",
|
||||
"config_path": "/opt/trip.env",
|
||||
"description": "Minimalist POI Map Tracker and Trip Planner. Self-hosted.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/trip.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
35
frontend/public/json/unifi-os-server.json
Normal file
35
frontend/public/json/unifi-os-server.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Unifi OS Server",
|
||||
"slug": "unifi-os-server",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2026-01-16",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": true,
|
||||
"interface_port": 11443,
|
||||
"documentation": "https://help.ui.com/hc/en-us",
|
||||
"website": "https://www.ui.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ubiquiti-unifi.webp",
|
||||
"config_path": "",
|
||||
"description": "Unifi OS Server is the operating system that powers Ubiquiti's UniFi line of network devices. It provides a centralized platform for managing and monitoring UniFi access points, switches, and security gateways, offering features such as network configuration, device provisioning, and performance analytics.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/unifi-os-server.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
import { CalendarPlus } from "lucide-react";
|
||||
import { useMemo, useState } from "react";
|
||||
import { useEffect, useMemo } from "react";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
@@ -26,9 +26,15 @@ export function getDisplayValueFromType(type: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export function LatestScripts({ items }: { items: Category[] }) {
|
||||
const [page, setPage] = useState(1);
|
||||
|
||||
export function LatestScripts({
|
||||
items,
|
||||
page,
|
||||
onPageChange,
|
||||
}: {
|
||||
items: Category[];
|
||||
page: number;
|
||||
onPageChange: (page: number) => void;
|
||||
}) {
|
||||
const latestScripts = useMemo(() => {
|
||||
if (!items)
|
||||
return [];
|
||||
@@ -48,12 +54,20 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
||||
);
|
||||
}, [items]);
|
||||
|
||||
const totalPages = Math.max(1, Math.ceil(latestScripts.length / ITEMS_PER_PAGE));
|
||||
|
||||
useEffect(() => {
|
||||
if (page > totalPages) {
|
||||
onPageChange(totalPages);
|
||||
}
|
||||
}, [page, totalPages, onPageChange]);
|
||||
|
||||
const goToNextPage = () => {
|
||||
setPage(prevPage => prevPage + 1);
|
||||
onPageChange(Math.min(totalPages, page + 1));
|
||||
};
|
||||
|
||||
const goToPreviousPage = () => {
|
||||
setPage(prevPage => prevPage - 1);
|
||||
onPageChange(Math.max(1, page - 1));
|
||||
};
|
||||
|
||||
const startIndex = (page - 1) * ITEMS_PER_PAGE;
|
||||
|
||||
@@ -18,6 +18,7 @@ function ScriptContent() {
|
||||
const [selectedCategory, setSelectedCategory] = useQueryState("category");
|
||||
const [links, setLinks] = useState<Category[]>([]);
|
||||
const [item, setItem] = useState<Script>();
|
||||
const [latestPage, setLatestPage] = useState(1);
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedScript && links.length > 0) {
|
||||
@@ -50,14 +51,16 @@ function ScriptContent() {
|
||||
/>
|
||||
</div>
|
||||
<div className="px-4 w-full sm:max-w-[calc(100%-350px-16px)]">
|
||||
{selectedScript && item ? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
) : (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
{selectedScript && item
|
||||
? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
)
|
||||
: (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} page={latestPage} onPageChange={setLatestPage} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -194,7 +194,20 @@ function CommandMenu() {
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
|
||||
<CommandDialog open={open} onOpenChange={setOpen}>
|
||||
<CommandDialog
|
||||
open={open}
|
||||
onOpenChange={setOpen}
|
||||
filter={(value: string, search: string) => {
|
||||
const searchLower = search.toLowerCase().trim();
|
||||
if (!searchLower)
|
||||
return 1;
|
||||
const valueLower = value.toLowerCase();
|
||||
const searchWords = searchLower.split(/\s+/).filter(Boolean);
|
||||
// All search words must appear somewhere in the value (name + description)
|
||||
const allWordsMatch = searchWords.every((word: string) => valueLower.includes(word));
|
||||
return allWordsMatch ? 1 : 0;
|
||||
}}
|
||||
>
|
||||
<DialogTitle className="sr-only">Search scripts</DialogTitle>
|
||||
<CommandInput placeholder="Search for a script..." />
|
||||
<CommandList>
|
||||
@@ -204,7 +217,7 @@ function CommandMenu() {
|
||||
{scripts.map(script => (
|
||||
<CommandItem
|
||||
key={`script:${script.slug}`}
|
||||
value={`${script.name}-${script.type}`}
|
||||
value={`${script.name} ${script.type} ${script.description || ""}`}
|
||||
onSelect={() => {
|
||||
setOpen(false);
|
||||
router.push(`/scripts?id=${script.slug}`);
|
||||
|
||||
@@ -24,13 +24,18 @@ const Command = React.forwardRef<
|
||||
));
|
||||
Command.displayName = CommandPrimitive.displayName;
|
||||
|
||||
type CommandDialogProps = {} & DialogProps;
|
||||
type CommandDialogProps = {
|
||||
filter?: (value: string, search: string, keywords?: string[]) => number;
|
||||
} & DialogProps;
|
||||
|
||||
function CommandDialog({ children, ...props }: CommandDialogProps) {
|
||||
function CommandDialog({ children, filter, ...props }: CommandDialogProps) {
|
||||
return (
|
||||
<Dialog {...props}>
|
||||
<DialogContent className="overflow-hidden p-0 shadow-lg">
|
||||
<Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
|
||||
<Command
|
||||
filter={filter}
|
||||
className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"
|
||||
>
|
||||
{children}
|
||||
</Command>
|
||||
</DialogContent>
|
||||
|
||||
@@ -54,7 +54,7 @@ if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
|
||||
python3-dev
|
||||
msg_ok "Installed additional dependencies for WGDashboard"
|
||||
msg_info "Installing WGDashboard"
|
||||
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
|
||||
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
||||
cd /etc/wgdashboard/src
|
||||
chmod u+x wgd.sh
|
||||
$STD ./wgd.sh install
|
||||
|
||||
@@ -69,6 +69,7 @@ curl -fsSL "https://downloads.apache.org/guacamole/${GUAC_CLIENT_VERSION}/binary
|
||||
echo "${GUAC_CLIENT_VERSION}" >~/.guacamole_client
|
||||
curl -fsSL "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${MYSQL_CONNECTOR_VERSION}/mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.jar" -o "/etc/guacamole/lib/mysql-connector-j.jar"
|
||||
echo "${MYSQL_CONNECTOR_VERSION}" >~/.guacamole_mysql_connector
|
||||
cd /root
|
||||
curl -fsSL "https://downloads.apache.org/guacamole/${GUAC_SERVER_VERSION}/binary/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz" -o "/root/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz"
|
||||
$STD tar -xf ~/guacamole-auth-jdbc-"$GUAC_SERVER_VERSION".tar.gz
|
||||
mv ~/guacamole-auth-jdbc-"$GUAC_SERVER_VERSION"/mysql/guacamole-auth-jdbc-mysql-"$GUAC_SERVER_VERSION".jar /etc/guacamole/extensions/
|
||||
|
||||
@@ -43,7 +43,7 @@ sed -i -e "s|^APP_ENV=.*|APP_ENV=production|" \
|
||||
-e "s|^DB_USERNAME=.*|DB_USERNAME=$MARIADB_DB_USER|" \
|
||||
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$MARIADB_DB_PASS|" \
|
||||
-e "s|^DB_DATABASE=.*|DB_DATABASE=$MARIADB_DB_NAME|" .env
|
||||
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
||||
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
||||
|
||||
cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
|
||||
<VirtualHost *:80>
|
||||
|
||||
63
install/flatnotes-install.sh
Normal file
63
install/flatnotes-install.sh
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/dullage/flatnotes
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
|
||||
USE_UVX=YES setup_uv
|
||||
setup_nodejs
|
||||
|
||||
msg_info "Installing Backend"
|
||||
cd /opt/flatnotes
|
||||
$STD /usr/local/bin/uvx migrate-to-uv
|
||||
$STD /usr/local/bin/uv sync
|
||||
mkdir /opt/flatnotes/data
|
||||
msg_ok "Installed Backend"
|
||||
|
||||
msg_info "Installing Frontend"
|
||||
cd /opt/flatnotes/client
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Installed Frontend"
|
||||
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/opt/flatnotes/.env
|
||||
FLATNOTES_AUTH_TYPE='none'
|
||||
FLATNOTES_PATH='/opt/flatnotes/data/'
|
||||
#FLATNOTES_USERNAME='username'
|
||||
#FLATNOTES_PASSWORD='password'
|
||||
#FLATNOTES_SECRET_KEY='secret-key'
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/flatnotes.service
|
||||
[Unit]
|
||||
Description=Flatnotes
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/flatnotes
|
||||
EnvironmentFile=/opt/flatnotes/.env
|
||||
ExecStart=/opt/flatnotes/.venv/bin/python -m uvicorn main:app --app-dir server --host 0.0.0.0 --port 8080 --proxy-headers
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now flatnotes
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -18,31 +18,15 @@ $STD apt-get install -y zip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
|
||||
msg_info "Setting up Postgresql Database"
|
||||
DB_NAME="fluiddb"
|
||||
DB_USER="fluiduser"
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||
{
|
||||
echo "${APPLICATION} Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET"
|
||||
} >>~/$APPLICATION.creds
|
||||
msg_ok "Set up Postgresql Database"
|
||||
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
msg_info "Configuring fluid-calendar"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET" >>~/$APPLICATION.creds
|
||||
cat <<EOF >/opt/fluid-calendar/.env
|
||||
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
|
||||
|
||||
# Change the URL below to your external URL
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
@@ -61,7 +45,7 @@ $STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Configuring ${APPLICATION}"
|
||||
msg_ok "Configured fluid-calendar"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/fluid-calendar.service
|
||||
@@ -72,6 +56,7 @@ After=network.target postgresql.service
|
||||
[Service]
|
||||
Restart=always
|
||||
WorkingDirectory=/opt/fluid-calendar
|
||||
EnvironmentFile=/opt/fluid-calendar/.env
|
||||
ExecStart=/usr/bin/npm run start
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -13,22 +13,9 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
PHP_VERSION="8.2" PHP_MODULE="curl,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php
|
||||
PHP_VERSION="8.4" PHP_MODULE="curl,common,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=freshrss
|
||||
DB_USER=freshrss
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
{
|
||||
echo "FreshRSS Credentials"
|
||||
echo "FreshRSS Database User: $DB_USER"
|
||||
echo "FreshRSS Database Password: $DB_PASS"
|
||||
echo "FreshRSS Database Name: $DB_NAME"
|
||||
} >>~/freshrss.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
PG_DB_NAME="freshrss" PG_DB_USER="freshrss_usr" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS" "tarball"
|
||||
|
||||
@@ -65,7 +52,7 @@ cat <<EOF >/etc/apache2/sites-available/freshrss.conf
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite freshrss
|
||||
$STD a2enmod rewrite
|
||||
$STD a2enmod rewrite deflate expires headers mime setenvif
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
@@ -29,7 +29,6 @@ $STD apt install --no-install-recommends -y \
|
||||
libltdl-dev \
|
||||
libgdk-pixbuf-2.0-dev \
|
||||
libbrotli-dev \
|
||||
libde265-dev \
|
||||
libexif-dev \
|
||||
libexpat1-dev \
|
||||
libglib2.0-dev \
|
||||
@@ -113,7 +112,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
$STD apt-mark hold libigdgmm12
|
||||
$STD popd
|
||||
rm -rf "$tmp_dir"
|
||||
dpkg -l | grep -m1 "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
||||
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
|
||||
msg_ok "Installed OpenVINO dependencies"
|
||||
fi
|
||||
|
||||
@@ -130,9 +129,9 @@ Pin-Priority: 450
|
||||
EOF
|
||||
$STD apt update
|
||||
msg_ok "Configured Debian Testing repo"
|
||||
msg_info "Installing libmimalloc3"
|
||||
$STD apt install -t testing --no-install-recommends -yqq libmimalloc3
|
||||
msg_ok "Installed libmimalloc3"
|
||||
msg_info "Installing packages from Debian Testing repo"
|
||||
$STD apt install -t testing --no-install-recommends -yqq libmimalloc3 libde265-dev
|
||||
msg_ok "Installed packages from Debian Testing repo"
|
||||
|
||||
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Installing iVentoy v${RELEASE}"
|
||||
mkdir -p /opt/iventoy/{data,iso}
|
||||
curl -fsSL "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz" -o "iventoy-${RELEASE}-linux-free.tar.gz"
|
||||
tar -C /tmp -xzf iventoy*.tar.gz
|
||||
mv /tmp/iventoy*/* /opt/iventoy/
|
||||
rm -rf iventoy*.tar.gz
|
||||
msg_ok "Installed iVentoy"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/iventoy.service
|
||||
[Unit]
|
||||
Description=iVentoy PXE Booter
|
||||
Documentation=https://www.iventoy.com
|
||||
Wants=network-online.target
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment=IVENTOY_API_ALL=1
|
||||
Environment=IVENTOY_AUTO_RUN=1
|
||||
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
ExecStart=sh ./iventoy.sh -R start
|
||||
WorkingDirectory=/opt/iventoy
|
||||
Restart=on-failure
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now iventoy
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -18,6 +18,8 @@ fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jot
|
||||
|
||||
msg_info "Installing ${APPLICATION}"
|
||||
cd /opt/jotty
|
||||
unset NODE_OPTIONS
|
||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
@@ -28,7 +30,7 @@ mkdir -p .next/standalone/.next
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf * .next .git .gitignore .yarn
|
||||
rm -rf ./* .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
|
||||
75
install/kutt-install.sh
Normal file
75
install/kutt-install.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: tomfrenzel
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thedevs-network/kutt
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
echo "${TAB3}How would you like to handle SSL termination?"
|
||||
echo "${TAB3}[i]-Internal (self-signed SSL Certificate) [e]-External (use your own reverse proxy)"
|
||||
read -rp "${TAB3}Enter your choice <i/e> (default: i): " ssl_choice
|
||||
ssl_choice=${ssl_choice:-i}
|
||||
case "${ssl_choice,,}" in
|
||||
i)
|
||||
import_local_ip
|
||||
DEFAULT_HOST="$LOCAL_IP"
|
||||
|
||||
msg_info "Configuring Caddy"
|
||||
$STD apt install -y caddy
|
||||
cat <<EOF >/etc/caddy/Caddyfile
|
||||
$LOCAL_IP {
|
||||
reverse_proxy localhost:3000
|
||||
}
|
||||
EOF
|
||||
systemctl restart caddy
|
||||
msg_ok "Configured Caddy"
|
||||
;;
|
||||
e)
|
||||
read -r -p "${TAB3}Enter the hostname you want to use for Kutt (eg. kutt.example.com): " custom_host
|
||||
if [[ "$custom_host" ]]; then
|
||||
DEFAULT_HOST="$custom_host"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "kutt" "thedevs-network/kutt" "tarball"
|
||||
|
||||
msg_info "Configuring Kutt"
|
||||
cd /opt/kutt
|
||||
cp .example.env ".env"
|
||||
sed -i "s|JWT_SECRET=|JWT_SECRET=$(openssl rand -base64 32)|g" ".env"
|
||||
sed -i "s|DEFAULT_DOMAIN=.*|DEFAULT_DOMAIN=$DEFAULT_HOST|g" ".env"
|
||||
$STD npm install
|
||||
$STD npm run migrate
|
||||
msg_ok "Configured Kutt"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/kutt.service
|
||||
[Unit]
|
||||
Description=Kutt server
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/kutt
|
||||
ExecStart=/usr/bin/npm start
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now kutt
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -54,12 +54,11 @@ msg_ok "Installed Openresty"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
|
||||
# RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
# grep "tag_name" |
|
||||
# awk '{print substr($2, 3, length($2)-4) }')
|
||||
RELEASE="2.13.5"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
grep "tag_name" |
|
||||
awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v2.13.5"
|
||||
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}"
|
||||
|
||||
msg_info "Setting up Environment"
|
||||
ln -sf /usr/bin/python3 /usr/bin/python
|
||||
|
||||
@@ -16,7 +16,8 @@ update_os
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
pkg-config
|
||||
pkg-config \
|
||||
zstd
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Intel® Repositories"
|
||||
@@ -67,11 +68,11 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest
|
||||
OLLAMA_INSTALL_DIR="/usr/local/lib/ollama"
|
||||
BINDIR="/usr/local/bin"
|
||||
mkdir -p $OLLAMA_INSTALL_DIR
|
||||
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
||||
TMP_TAR="/tmp/ollama.tgz"
|
||||
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst"
|
||||
TMP_TAR="/tmp/ollama.tar.zst"
|
||||
echo -e "\n"
|
||||
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; then
|
||||
if tar -xzf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
|
||||
if tar --zstd -xf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
|
||||
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
|
||||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||||
msg_ok "Installed Ollama ${RELEASE}"
|
||||
|
||||
@@ -14,7 +14,9 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y ffmpeg
|
||||
$STD apt install -y \
|
||||
ffmpeg \
|
||||
zstd
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_hwaccel
|
||||
@@ -69,9 +71,10 @@ EOF
|
||||
msg_ok "Installed Intel® oneAPI Base Toolkit"
|
||||
|
||||
msg_info "Installing Ollama"
|
||||
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||
rm -rf ollama-linux-amd64.tgz
|
||||
OLLAMA_RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
||||
curl -fsSLO -C - https://github.com/ollama/ollama/releases/download/${OLLAMA_RELEASE}/ollama-linux-amd64.tar.zst
|
||||
tar --zstd -C /usr -xf ollama-linux-amd64.tar.zst
|
||||
rm -rf ollama-linux-amd64.tar.zst
|
||||
cat <<EOF >/etc/systemd/system/ollama.service
|
||||
[Unit]
|
||||
Description=Ollama Service
|
||||
|
||||
@@ -98,9 +98,16 @@ msg_ok "Configured PatchMon"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
|
||||
map \$http_x_forwarded_proto \$proxy_corrected_scheme {
|
||||
default \$scheme; # Fallback to Nginx's actual connection scheme if no X-Forwarded-Proto header was set
|
||||
https https; # If X-Forwarded-Proto is 'https', use 'https'
|
||||
http http; # If X-Forwarded-Proto is 'http', use 'http'
|
||||
}
|
||||
|
||||
server {
|
||||
# Listen on both IPv4 and IPv6 (with all hostnames)
|
||||
listen 80;
|
||||
server_name $LOCAL_IP;
|
||||
listen [::]:80;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options DENY always;
|
||||
@@ -123,7 +130,7 @@ server {
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
|
||||
proxy_set_header X-Forwarded-Host \$host;
|
||||
proxy_set_header Cookie \$http_cookie;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
@@ -150,7 +157,7 @@ server {
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
|
||||
@@ -18,7 +18,7 @@ msg_info "Installing NUT"
|
||||
$STD apt install -y nut-client
|
||||
msg_ok "Installed NUT"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
msg_info "Setup Peanut"
|
||||
@@ -28,6 +28,7 @@ $STD pnpm run build:local
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
mkdir -p /opt/peanut/.next/standalone/config
|
||||
mkdir -p /etc/peanut/
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
cat <<EOF >/etc/peanut/settings.yml
|
||||
WEB_HOST: 0.0.0.0
|
||||
WEB_PORT: 3000
|
||||
@@ -53,7 +54,7 @@ Environment="NODE_ENV=production"
|
||||
#Environment="WEB_HOST=0.0.0.0"
|
||||
#Environment="WEB_PORT=3000"
|
||||
WorkingDirectory=/opt/peanut
|
||||
ExecStart=node /opt/peanut/.next/standalone/server.js
|
||||
ExecStart=node /opt/peanut/entrypoint.mjs
|
||||
TimeoutStopSec=30
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -69,7 +69,7 @@ read -r -p "${TAB3}Would you like to add Unbound? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
|
||||
msg_info "Installing Unbound"
|
||||
$STD apt install -y unbound
|
||||
mkdir -p /etc/unbound/unbound.conf.d
|
||||
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
|
||||
server:
|
||||
verbosity: 0
|
||||
@@ -142,6 +142,7 @@ forward-zone:
|
||||
#forward-addr: 2620:fe::9@853#dns.quad9.net
|
||||
EOF
|
||||
fi
|
||||
$STD apt install -y unbound
|
||||
cat <<EOF >/etc/dnsmasq.d/01-pihole.conf
|
||||
server=127.0.0.1#5335
|
||||
server=8.8.8.8
|
||||
@@ -149,7 +150,7 @@ server=8.8.4.4
|
||||
EOF
|
||||
|
||||
sed -i -E '/^\s*upstreams\s*=\s*\[/,/^\s*\]/c\ upstreams = [\n "127.0.0.1#5335",\n "8.8.4.4"\n ]' /etc/pihole/pihole.toml
|
||||
systemctl enable -q --now unbound
|
||||
systemctl restart unbound
|
||||
systemctl restart pihole-FTL.service
|
||||
msg_ok "Installed Unbound"
|
||||
fi
|
||||
|
||||
42
install/qui-install.sh
Normal file
42
install/qui-install.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/autobrr/qui
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/usr/local/bin" "qui_*_linux_x86_64.tar.gz"
|
||||
chmod +x /usr/local/bin/qui
|
||||
ln -sf /usr/local/bin/qui /usr/bin/qui
|
||||
ln -sf /usr/local/bin/qui /opt/qui
|
||||
|
||||
msg_info "Creating Qui Service"
|
||||
cat <<EOF >/etc/systemd/system/qui.service
|
||||
[Unit]
|
||||
Description=Qui - qBittorrent Web UI
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/bin/qui serve
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now qui
|
||||
msg_ok "Created Qui Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
258
install/termix-install.sh
Normal file
258
install/termix-install.sh
Normal file
@@ -0,0 +1,258 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Termix-SSH/Termix
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
python3 \
|
||||
nginx \
|
||||
openssl \
|
||||
gettext-base
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
|
||||
$STD npm install --ignore-scripts --force
|
||||
$STD npm cache clean --force
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
$STD npm rebuild better-sqlite3 --force
|
||||
$STD npm run build:backend
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Setting up Node Dependencies"
|
||||
cd /opt/termix
|
||||
$STD npm ci --only=production --ignore-scripts --force
|
||||
$STD npm rebuild better-sqlite3 bcryptjs --force
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Set up Node Dependencies"
|
||||
|
||||
msg_info "Setting up Directories"
|
||||
mkdir -p /opt/termix/data \
|
||||
/opt/termix/uploads \
|
||||
/opt/termix/html \
|
||||
/opt/termix/nginx \
|
||||
/opt/termix/nginx/logs \
|
||||
/opt/termix/nginx/cache \
|
||||
/opt/termix/nginx/client_body
|
||||
|
||||
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
|
||||
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
|
||||
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
|
||||
msg_ok "Set up Directories"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<'EOF' >/etc/nginx/sites-available/termix.conf
|
||||
error_log /opt/termix/nginx/logs/error.log warn;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
access_log /opt/termix/nginx/logs/access.log;
|
||||
|
||||
client_body_temp_path /opt/termix/nginx/client_body;
|
||||
proxy_temp_path /opt/termix/nginx/proxy_temp;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
client_header_timeout 300s;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
add_header X-Content-Type-Options nosniff always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
root /opt/termix/html;
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
root /opt/termix/html;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~ ^/users(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(database|db)(/.*)?$ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location /ssh/ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /ssh/websocket/ {
|
||||
proxy_pass http://127.0.0.1:30002/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
}
|
||||
|
||||
location /ssh/tunnel/ {
|
||||
proxy_pass http://127.0.0.1:30003;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/ssh/ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
proxy_pass http://127.0.0.1:30004;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /health {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location ~ ^/(status|metrics)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30005;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location ~ ^/(uptime|activity)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30006;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location ^~ /docker/console/ {
|
||||
proxy_pass http://127.0.0.1:30008/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/docker(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30007;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
rm -f /etc/nginx/nginx.conf
|
||||
ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/nginx.conf
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/termix.service
|
||||
[Unit]
|
||||
Description=Termix Backend
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/termix
|
||||
Environment=NODE_ENV=production
|
||||
Environment=DATA_DIR=/opt/termix/data
|
||||
ExecStart=/usr/bin/node /opt/termix/dist/backend/backend/starter.js
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now termix
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
51
install/thingsboard-install.sh
Normal file
51
install/thingsboard-install.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thingsboard/thingsboard
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
libharfbuzz0b \
|
||||
fontconfig \
|
||||
fonts-dejavu-core
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
JAVA_VERSION="17" setup_java
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="thingsboard_db" PG_DB_USER="thingsboard" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Configuring ThingsBoard"
|
||||
cat <<EOF >/etc/thingsboard/conf/thingsboard.conf
|
||||
# DB Configuration
|
||||
export DATABASE_TS_TYPE=sql
|
||||
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/${PG_DB_NAME}
|
||||
export SPRING_DATASOURCE_USERNAME=${PG_DB_USER}
|
||||
export SPRING_DATASOURCE_PASSWORD=${PG_DB_PASS}
|
||||
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
|
||||
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Configured ThingsBoard"
|
||||
|
||||
msg_info "Running ThingsBoard Installation Script"
|
||||
$STD /usr/share/thingsboard/bin/install/install.sh --loadDemo
|
||||
msg_ok "Ran Installation Script"
|
||||
|
||||
msg_info "Starting ThingsBoard Service"
|
||||
systemctl enable -q --now thingsboard
|
||||
msg_ok "Started ThingsBoard Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
75
install/trip-install.sh
Normal file
75
install/trip-install.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/itskovacs/TRIP
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/trip/src
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Setting up Backend"
|
||||
cd /opt/trip/backend
|
||||
$STD uv venv /opt/trip/.venv
|
||||
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
||||
msg_ok "Set up Backend"
|
||||
|
||||
msg_info "Configuring Application"
|
||||
mkdir -p /opt/trip/frontend
|
||||
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
|
||||
mkdir -p /opt/trip_storage/{attachments,backups,assets}
|
||||
|
||||
cat <<EOF >/opt/trip.env
|
||||
# TRIP Configuration
|
||||
# https://itskovacs.github.io/trip/docs/getting-started/configuration/
|
||||
ATTACHMENTS_FOLDER=/opt/trip_storage/attachments
|
||||
BACKUPS_FOLDER=/opt/trip_storage/backups
|
||||
ASSETS_FOLDER=/opt/trip_storage/assets
|
||||
FRONTEND_FOLDER=/opt/trip/frontend
|
||||
SQLITE_FILE=/opt/trip_storage/trip.sqlite
|
||||
EOF
|
||||
msg_ok "Configured Application"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/trip.service
|
||||
[Unit]
|
||||
Description=TRIP - Minimalist POI Map Tracker and Trip Planner
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/trip/backend
|
||||
EnvironmentFile=/opt/trip.env
|
||||
ExecStart=/opt/trip/.venv/bin/fastapi run /opt/trip/backend/trip/main.py --host 0.0.0.0 --port 8000
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now trip
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -14,11 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Unbound"
|
||||
$STD apt install -y \
|
||||
unbound \
|
||||
unbound-host
|
||||
msg_info "Installed Unbound"
|
||||
|
||||
mkdir -p /etc/unbound/unbound.conf.d
|
||||
cat <<EOF >/etc/unbound/unbound.conf.d/unbound.conf
|
||||
server:
|
||||
interface: 0.0.0.0
|
||||
@@ -52,13 +48,17 @@ server:
|
||||
logfile: /var/log/unbound.log
|
||||
EOF
|
||||
|
||||
$STD apt install -y \
|
||||
unbound \
|
||||
unbound-host
|
||||
|
||||
touch /var/log/unbound.log
|
||||
chown unbound:unbound /var/log/unbound.log
|
||||
sleep 5
|
||||
systemctl restart unbound
|
||||
msg_ok "Installed Unbound"
|
||||
|
||||
msg_ok "Configuring Logrotate"
|
||||
msg_info "Configuring Logrotate"
|
||||
cat <<EOF >/etc/logrotate.d/unbound
|
||||
/var/log/unbound.log {
|
||||
daily
|
||||
@@ -74,7 +74,6 @@ cat <<EOF >/etc/logrotate.d/unbound
|
||||
endscript
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl restart logrotate
|
||||
msg_ok "Configured Logrotate"
|
||||
|
||||
|
||||
81
install/unifi-os-server-install.sh
Normal file
81
install/unifi-os-server-install.sh
Normal file
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://ui.com/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
if [[ "${CTTYPE:-1}" != "0" ]]; then
|
||||
msg_error "UniFi OS Server requires a privileged LXC container."
|
||||
msg_error "Recreate the container with unprivileged=0."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -e /dev/net/tun ]]; then
|
||||
msg_error "Missing /dev/net/tun in container."
|
||||
msg_error "Enable TUN/TAP (var_tun=yes) or add /dev/net/tun passthrough."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt install -y \
|
||||
podman \
|
||||
uidmap \
|
||||
slirp4netns
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Installing sysctl wrapper (ignore non-critical errors)"
|
||||
cat <<'EOF' >/usr/local/sbin/sysctl
|
||||
#!/bin/sh
|
||||
/usr/sbin/sysctl "$@" || true
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x /usr/local/sbin/sysctl
|
||||
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
msg_ok "Sysctl wrapper installed"
|
||||
|
||||
msg_info "Fetching latest UniFi OS Server"
|
||||
API_URL="https://fw-update.ui.com/api/firmware-latest"
|
||||
TEMP_JSON="$(mktemp)"
|
||||
if ! curl -fsSL "$API_URL" -o "$TEMP_JSON"; then
|
||||
rm -f "$TEMP_JSON"
|
||||
msg_error "Failed to fetch data from Ubiquiti API"
|
||||
exit 1
|
||||
fi
|
||||
LATEST=$(jq -r '
|
||||
._embedded.firmware
|
||||
| map(select(.product == "unifi-os-server"))
|
||||
| map(select(.platform == "linux-x64"))
|
||||
| sort_by(.version_major, .version_minor, .version_patch)
|
||||
| last
|
||||
' "$TEMP_JSON")
|
||||
UOS_VERSION=$(echo "$LATEST" | jq -r '.version' | sed 's/^v//')
|
||||
UOS_URL=$(echo "$LATEST" | jq -r '._links.data.href')
|
||||
rm -f "$TEMP_JSON"
|
||||
if [[ -z "$UOS_URL" || -z "$UOS_VERSION" || "$UOS_URL" == "null" ]]; then
|
||||
msg_error "Failed to parse UniFi OS Server version or download URL"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Found UniFi OS Server ${UOS_VERSION}"
|
||||
|
||||
msg_info "Downloading UniFi OS Server installer"
|
||||
mkdir -p /usr/local/sbin
|
||||
curl -fsSL "$UOS_URL" -o /usr/local/sbin/unifi-os-server.bin
|
||||
chmod +x /usr/local/sbin/unifi-os-server.bin
|
||||
msg_ok "Downloaded UniFi OS Server installer"
|
||||
|
||||
msg_info "Installing UniFi OS Server (this takes a few minutes)"
|
||||
$STD /usr/local/sbin/unifi-os-server.bin <<<"y"
|
||||
msg_ok "UniFi OS Server installed"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -25,7 +25,7 @@ msg_ok "Installed WireGuard"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add WGDashboard? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
|
||||
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
||||
|
||||
msg_info "Installing WGDashboard"
|
||||
cd /etc/wgdashboard/src
|
||||
|
||||
@@ -52,7 +52,7 @@ msg_ok "Installed Zammad"
|
||||
msg_info "Setup Services"
|
||||
cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
|
||||
sed -i "s/server_name localhost;/server_name $LOCAL_IP;/g" /etc/nginx/sites-available/zammad.conf
|
||||
ln -s /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/
|
||||
ln -sf /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Created Service"
|
||||
|
||||
@@ -582,7 +582,22 @@ base_settings() {
|
||||
CORE_COUNT="${final_cpu}"
|
||||
RAM_SIZE="${final_ram}"
|
||||
VERBOSE=${var_verbose:-"${1:-no}"}
|
||||
PW=${var_pw:-""}
|
||||
PW=""
|
||||
if [[ -n "${var_pw:-}" ]]; then
|
||||
local _pw_raw="${var_pw}"
|
||||
case "$_pw_raw" in
|
||||
--password\ *) _pw_raw="${_pw_raw#--password }" ;;
|
||||
-password\ *) _pw_raw="${_pw_raw#-password }" ;;
|
||||
esac
|
||||
while [[ "$_pw_raw" == -* ]]; do
|
||||
_pw_raw="${_pw_raw#-}"
|
||||
done
|
||||
if [[ -z "$_pw_raw" ]]; then
|
||||
msg_warn "Password was only dashes after cleanup; leaving empty."
|
||||
else
|
||||
PW="--password $_pw_raw"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Validate and set Container ID
|
||||
local requested_id="${var_ctid:-$NEXTID}"
|
||||
@@ -1392,17 +1407,30 @@ advanced_settings() {
|
||||
((STEP++))
|
||||
elif [[ "$PW1" == *" "* ]]; then
|
||||
whiptail --msgbox "Password cannot contain spaces." 8 58
|
||||
elif ((${#PW1} < 5)); then
|
||||
whiptail --msgbox "Password must be at least 5 characters." 8 58
|
||||
else
|
||||
local _pw1_clean="$PW1"
|
||||
while [[ "$_pw1_clean" == -* ]]; do
|
||||
_pw1_clean="${_pw1_clean#-}"
|
||||
done
|
||||
if [[ -z "$_pw1_clean" ]]; then
|
||||
whiptail --msgbox "Password cannot be only '-' characters." 8 58
|
||||
continue
|
||||
elif ((${#_pw1_clean} < 5)); then
|
||||
whiptail --msgbox "Password must be at least 5 characters (after removing leading '-')." 8 70
|
||||
continue
|
||||
fi
|
||||
# Verify password
|
||||
if PW2=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "PASSWORD VERIFICATION" \
|
||||
--ok-button "Confirm" --cancel-button "Back" \
|
||||
--passwordbox "\nVerify Root Password" 10 58 \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [[ "$PW1" == "$PW2" ]]; then
|
||||
_pw="-password $PW1"
|
||||
local _pw2_clean="$PW2"
|
||||
while [[ "$_pw2_clean" == -* ]]; do
|
||||
_pw2_clean="${_pw2_clean#-}"
|
||||
done
|
||||
if [[ "$_pw1_clean" == "$_pw2_clean" ]]; then
|
||||
_pw="--password $_pw1_clean"
|
||||
_pw_display="********"
|
||||
((STEP++))
|
||||
else
|
||||
|
||||
167
misc/tools.func
167
misc/tools.func
@@ -2683,7 +2683,7 @@ function setup_hwaccel() {
|
||||
else
|
||||
# Multiple GPUs - show selection menu
|
||||
echo ""
|
||||
msg_info "Multiple GPUs detected:"
|
||||
msg_custom "⚠" "${YW}" "Multiple GPUs detected:"
|
||||
echo ""
|
||||
for i in "${!GPU_LIST[@]}"; do
|
||||
local type_display="${GPU_TYPES[$i]}"
|
||||
@@ -3002,16 +3002,24 @@ _setup_nvidia_gpu() {
|
||||
|
||||
msg_info "Installing NVIDIA GPU drivers"
|
||||
|
||||
# Prevent interactive dialogs (e.g., "Mismatching nvidia kernel module" whiptail)
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export NEEDRESTART_MODE=a
|
||||
|
||||
# Detect host driver version (passed through via /proc)
|
||||
# Format varies by driver type:
|
||||
# Proprietary: "NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.54.14 Thu..."
|
||||
# Open: "NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 590.48.01 Release..."
|
||||
# Use regex to extract version number (###.##.## pattern)
|
||||
local nvidia_host_version=""
|
||||
if [[ -f /proc/driver/nvidia/version ]]; then
|
||||
nvidia_host_version=$(grep "NVRM version:" /proc/driver/nvidia/version 2>/dev/null | awk '{print $8}')
|
||||
nvidia_host_version=$(grep -oP '\d{3,}\.\d+\.\d+' /proc/driver/nvidia/version 2>/dev/null | head -1)
|
||||
fi
|
||||
|
||||
if [[ -z "$nvidia_host_version" ]]; then
|
||||
msg_warn "NVIDIA host driver version not found in /proc/driver/nvidia/version"
|
||||
msg_warn "Ensure NVIDIA drivers are installed on host and GPU passthrough is enabled"
|
||||
$STD apt -y install va-driver-all vainfo 2>/dev/null || true
|
||||
$STD apt-get -y install va-driver-all vainfo 2>/dev/null || true
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -3024,53 +3032,115 @@ _setup_nvidia_gpu() {
|
||||
sed -i -E 's/Components: (.*)$/Components: \1 contrib non-free non-free-firmware/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
|
||||
|
||||
# Determine CUDA repository
|
||||
local cuda_repo="debian12"
|
||||
case "$os_codename" in
|
||||
bullseye) cuda_repo="debian11" ;;
|
||||
bookworm) cuda_repo="debian12" ;;
|
||||
trixie | sid) cuda_repo="debian12" ;; # Forward compatible
|
||||
esac
|
||||
# For Debian 13 Trixie/Sid: Use Debian's own nvidia packages first (better compatibility)
|
||||
# NVIDIA's CUDA repo targets Debian 12 and may not have amd64 packages for Trixie
|
||||
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
|
||||
msg_info "Debian ${os_codename}: Using Debian's NVIDIA packages"
|
||||
|
||||
# Add NVIDIA CUDA repository
|
||||
if [[ ! -f /usr/share/keyrings/cuda-archive-keyring.gpg ]]; then
|
||||
msg_info "Adding NVIDIA CUDA repository (${cuda_repo})"
|
||||
local cuda_keyring
|
||||
cuda_keyring="$(mktemp)"
|
||||
if curl -fsSL -o "$cuda_keyring" "https://developer.download.nvidia.com/compute/cuda/repos/${cuda_repo}/x86_64/cuda-keyring_1.1-1_all.deb" 2>/dev/null; then
|
||||
$STD dpkg -i "$cuda_keyring" 2>/dev/null || true
|
||||
# Extract major version for flexible matching (580.126.09 -> 580)
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
# Check what versions are actually available
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Found available NVIDIA version: ${available_version}"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries (${available_version})"
|
||||
else
|
||||
msg_warn "Failed to install NVIDIA ${available_version} - trying unversioned"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null || true
|
||||
fi
|
||||
else
|
||||
msg_warn "Failed to download NVIDIA CUDA keyring"
|
||||
# No matching major version - try latest available or unversioned
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x found in repos"
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Trying latest available: ${available_version} (may cause version mismatch)"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
|
||||
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null ||
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed - GPU compute may not work"
|
||||
else
|
||||
msg_warn "No NVIDIA packages available in Debian repos - GPU support disabled"
|
||||
fi
|
||||
fi
|
||||
rm -f "$cuda_keyring"
|
||||
fi
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
|
||||
|
||||
# Pin NVIDIA repo for version matching
|
||||
cat <<'NVIDIA_PIN' >/etc/apt/preferences.d/nvidia-cuda-pin
|
||||
else
|
||||
# Debian 11/12: Use NVIDIA CUDA repository for version matching
|
||||
local cuda_repo="debian12"
|
||||
case "$os_codename" in
|
||||
bullseye) cuda_repo="debian11" ;;
|
||||
bookworm) cuda_repo="debian12" ;;
|
||||
esac
|
||||
|
||||
# Add NVIDIA CUDA repository
|
||||
if [[ ! -f /usr/share/keyrings/cuda-archive-keyring.gpg ]]; then
|
||||
msg_info "Adding NVIDIA CUDA repository (${cuda_repo})"
|
||||
local cuda_keyring
|
||||
cuda_keyring="$(mktemp)"
|
||||
if curl -fsSL -o "$cuda_keyring" "https://developer.download.nvidia.com/compute/cuda/repos/${cuda_repo}/x86_64/cuda-keyring_1.1-1_all.deb" 2>/dev/null; then
|
||||
$STD dpkg -i "$cuda_keyring" 2>/dev/null || true
|
||||
else
|
||||
msg_warn "Failed to download NVIDIA CUDA keyring"
|
||||
fi
|
||||
rm -f "$cuda_keyring"
|
||||
fi
|
||||
|
||||
# Pin NVIDIA repo for version matching
|
||||
cat <<'NVIDIA_PIN' >/etc/apt/preferences.d/nvidia-cuda-pin
|
||||
Package: *
|
||||
Pin: origin developer.download.nvidia.com
|
||||
Pin-Priority: 1001
|
||||
NVIDIA_PIN
|
||||
|
||||
$STD apt -y update
|
||||
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
|
||||
|
||||
# Install version-matched NVIDIA libraries
|
||||
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
|
||||
# Extract major version for flexible matching (580.126.09 -> 580)
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
msg_info "Installing NVIDIA libraries (version ${nvidia_host_version})"
|
||||
if $STD apt -y install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
msg_warn "Version-pinned install failed - trying unpinned"
|
||||
if $STD apt -y install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
|
||||
msg_warn "Installed NVIDIA libraries (unpinned) - version mismatch may occur"
|
||||
# Check what versions are actually available in CUDA repo
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Installing NVIDIA libraries (version ${available_version})"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
msg_warn "Version-pinned install failed - trying unpinned"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo (host: ${nvidia_host_version})"
|
||||
# Try latest available version
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Trying latest available: ${available_version} (version mismatch warning)"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
|
||||
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries (${available_version}) - version differs from host"
|
||||
else
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages available in CUDA repo - GPU support disabled"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
$STD apt -y install --no-install-recommends nvidia-smi 2>/dev/null || true
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
|
||||
fi
|
||||
|
||||
elif [[ "$os_id" == "ubuntu" ]]; then
|
||||
# Ubuntu versioning
|
||||
@@ -3094,20 +3164,33 @@ NVIDIA_PIN
|
||||
rm -f "$cuda_keyring"
|
||||
fi
|
||||
|
||||
$STD apt -y update
|
||||
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
|
||||
|
||||
# Try version-matched install
|
||||
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
|
||||
if $STD apt -y install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
# Extract major version for flexible matching
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
# Check what versions are available
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Installing NVIDIA libraries (version ${available_version})"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo"
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt -y install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
fi
|
||||
fi
|
||||
|
||||
# VA-API for hybrid setups (Intel + NVIDIA)
|
||||
$STD apt -y install va-driver-all vainfo 2>/dev/null || true
|
||||
$STD apt-get -y install va-driver-all vainfo 2>/dev/null || true
|
||||
|
||||
msg_ok "NVIDIA GPU configured"
|
||||
}
|
||||
|
||||
@@ -27,7 +27,12 @@ CL=$(echo "\033[m")
|
||||
header_info
|
||||
echo "Loading..."
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Update LXC Containers. Proceed?" 10 58
|
||||
SKIP_STOPPED=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Skip Not-Running Containers" --yesno "Do you want to skip containers that are not currently running?" 10 58 && echo "yes" || echo "no")
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Skip Not-Running Containers" --yesno "Do you want to skip containers that are not currently running?" 10 58; then
|
||||
SKIP_STOPPED="yes"
|
||||
else
|
||||
SKIP_STOPPED="no"
|
||||
fi
|
||||
|
||||
NODE=$(hostname)
|
||||
EXCLUDE_MENU=()
|
||||
MSG_MAX_LENGTH=0
|
||||
|
||||
Reference in New Issue
Block a user