Compare commits

...

16 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
d25a12c87e Update CHANGELOG.md (#7230)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 00:14:23 +00:00
community-scripts-pr-app[bot]
e24315c50b Update versions.json (#7229)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 02:14:00 +02:00
community-scripts-pr-app[bot]
753ed67b50 Update CHANGELOG.md (#7223)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 13:13:41 +00:00
CanbiZ
d6e498050f Refactor: Post-PBS Script (#7213) 2025-08-26 15:13:16 +02:00
community-scripts-pr-app[bot]
4a69a7b39f Update CHANGELOG.md (#7222)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:15:48 +00:00
community-scripts-pr-app[bot]
1dcde93b4a Update date in json (#7221)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:15:18 +00:00
push-app-to-main[bot]
663c6570f4 tracktor (#7190)
* 'Add new script'

* Update tracktor.sh

* Update tracktor.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-08-26 14:14:52 +02:00
community-scripts-pr-app[bot]
6a17e25871 Update CHANGELOG.md (#7220)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:10:28 +00:00
Slaviša Arežina
e609552cec Update docs URL (#7201) 2025-08-26 14:10:01 +02:00
community-scripts-pr-app[bot]
bd4b781c9e Update CHANGELOG.md (#7219)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:07:45 +00:00
CanbiZ
7eb6715a1f PBS: Upgrade Script for v4 (#7214)
* Refactor: Post-PBS Script

* PBS4-Upgrade-Script

* Remove unintended changes to post-pbs-install.sh
2025-08-26 14:07:16 +02:00
community-scripts-pr-app[bot]
aa0190978f Update versions.json (#7218)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 14:06:17 +02:00
community-scripts-pr-app[bot]
e0f5e588e0 Update CHANGELOG.md (#7217)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:05:55 +00:00
CanbiZ
3949e2e049 Refactor: Post-PMG-Script (#7212) 2025-08-26 14:05:30 +02:00
community-scripts-pr-app[bot]
ab4560b879 Update date in json (#7216)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-26 11:09:30 +00:00
CanbiZ
b8f854e7ad Create searxng.json 2025-08-26 13:08:56 +02:00
79 changed files with 1536 additions and 804 deletions

View File

@@ -10,8 +10,28 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-08-27
## 2025-08-26 ## 2025-08-26
### 🆕 New Scripts
- tracktor ([#7190](https://github.com/community-scripts/ProxmoxVE/pull/7190))
- PBS: Upgrade Script for v4 [@MickLesk](https://github.com/MickLesk) ([#7214](https://github.com/community-scripts/ProxmoxVE/pull/7214))
### 🚀 Updated Scripts
- #### ✨ New Features
- Refactor: Post-PBS-Script [@MickLesk](https://github.com/MickLesk) ([#7213](https://github.com/community-scripts/ProxmoxVE/pull/7213))
- Refactor: Post-PMG-Script [@MickLesk](https://github.com/MickLesk) ([#7212](https://github.com/community-scripts/ProxmoxVE/pull/7212))
### 🌐 Website
- #### 📝 Script Information
- [website] Update documentation URLs [@tremor021](https://github.com/tremor021) ([#7201](https://github.com/community-scripts/ProxmoxVE/pull/7201))
## 2025-08-25 ## 2025-08-25
### 🆕 New Scripts ### 🆕 New Scripts

6
ct/headers/tracktor Normal file
View File

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

72
ct/tracktor.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://tracktor.bytedge.in/
APP="tracktor"
var_tags="${var_tags:-car;monitoring}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/tracktor ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/javedh-dev/tracktor/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.tracktor 2>/dev/null)" ]] || [[ ! -f ~/.tracktor ]]; then
msg_info "Stopping Service"
systemctl stop tracktor
msg_ok "Stopped Service"
msg_info "Creating Backup"
cp /opt/tracktor/app/backend/.env /opt/tracktor.env
msg_ok "Created Backup"
setup_nodejs
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
msg_info "Updating ${APP}"
cd /opt/tracktor
$STD npm install
$STD npm run build
msg_ok "Updated $APP"
msg_info "Restoring Backup"
cp /opt/tracktor.env /opt/tracktor/app/backend/.env
msg_ok "Restored Backup"
msg_info "Starting Service"
systemctl start tracktor
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "Already up to date"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": null, "documentation": "https://guacamole.apache.org/doc/gug/",
"website": "https://guacamole.apache.org/", "website": "https://guacamole.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/apache-guacamole.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/apache-guacamole.webp",
"config_path": "/etc/guacamole/guacd.conf", "config_path": "/etc/guacamole/guacd.conf",

View File

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

View File

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

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://sabre.io/dav/",
"website": "https://sabre.io/baikal/", "website": "https://sabre.io/baikal/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baikal.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baikal.webp",
"config_path": "/opt/baikal/config/baikal.yaml", "config_path": "/opt/baikal/config/baikal.yaml",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 4000, "interface_port": 4000,
"documentation": null, "documentation": "https://0xerr0r.github.io/blocky/latest/configuration/",
"website": "https://0xerr0r.github.io/blocky/", "website": "https://0xerr0r.github.io/blocky/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/blocky.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/blocky.webp",
"config_path": "/opt/blocky/config.yml", "config_path": "/opt/blocky/config.yml",

View File

@@ -1,40 +1,40 @@
{ {
"name": "BookStack", "name": "BookStack",
"slug": "bookstack", "slug": "bookstack",
"categories": [ "categories": [
12 12
], ],
"date_created": "2024-11-05", "date_created": "2024-11-05",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://www.bookstackapp.com/docs/",
"website": "https://www.bookstackapp.com/", "website": "https://www.bookstackapp.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp",
"config_path": "/opt/bookstack/.env", "config_path": "/opt/bookstack/.env",
"description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.", "description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/bookstack.sh", "script": "ct/bookstack.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": "admin@admin.com", "username": "admin@admin.com",
"password": "password" "password": "password"
}, },
"notes": [ "notes": [
{ {
"text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`", "text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`",
"type": "warning" "type": "warning"
} }
] ]
} }

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://wiki.casaos.io/en/home",
"website": "https://www.casaos.io/", "website": "https://www.casaos.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/casaos.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/casaos.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8082, "interface_port": 8082,
"documentation": null, "documentation": "https://athou.github.io/commafeed/documentation/",
"website": "https://www.commafeed.com/", "website": "https://www.commafeed.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/commafeed.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/commafeed.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://doc.crowdsec.net/",
"website": "https://crowdsec.net/", "website": "https://crowdsec.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/crowdsec.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/crowdsec.webp",
"config_path": "", "config_path": "",

View File

@@ -1,5 +1,4 @@
{ {
"name": "Dashy", "name": "Dashy",
"slug": "dashy", "slug": "dashy",
"categories": [ "categories": [
@@ -10,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 4000, "interface_port": 4000,
"documentation": null, "documentation": "https://dashy.to/docs",
"website": "https://dashy.to/", "website": "https://dashy.to/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
"config_path": "/opt/dashy/user-data/conf.yml", "config_path": "/opt/dashy/user-data/conf.yml",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": null, "documentation": "https://forgejo.org/docs/latest/",
"website": "https://forgejo.org/", "website": "https://forgejo.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/forgejo.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/forgejo.webp",
"config_path": "/etc/forgejo/app.ini", "config_path": "/etc/forgejo/app.ini",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": true, "privileged": true,
"interface_port": 5000, "interface_port": 5000,
"documentation": null, "documentation": "https://docs.frigate.video/",
"website": "https://frigate.video/", "website": "https://frigate.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": null, "documentation": "https://docs.gitea.com/",
"website": "https://gitea.com", "website": "https://gitea.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea.webp",
"config_path": "/etc/gitea/app.ini", "config_path": "/etc/gitea/app.ini",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Grist", "name": "Grist",
"slug": "grist", "slug": "grist",
"categories": [ "categories": [
12 12
], ],
"date_created": "2024-12-27", "date_created": "2024-12-27",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8484, "interface_port": 8484,
"documentation": null, "documentation": "https://support.getgrist.com/self-managed/#the-essentials",
"website": "https://www.getgrist.com/", "website": "https://www.getgrist.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
"config_path": "/opt/grist/.env", "config_path": "/opt/grist/.env",
"description": "Grist is a modern, open source spreadsheet that goes beyond the grid", "description": "Grist is a modern, open source spreadsheet that goes beyond the grid",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/grist.sh", "script": "ct/grist.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 3072, "ram": 3072,
"hdd": 6, "hdd": 6,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 7990, "interface_port": 7990,
"documentation": null, "documentation": "https://github.com/linuxserver/Heimdall/blob/2.x/readme.md",
"website": "https://heimdall.site/", "website": "https://heimdall.site/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/heimdall.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/heimdall.webp",
"config_path": "/opt/Heimdall/.env", "config_path": "/opt/Heimdall/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 1080, "interface_port": 1080,
"documentation": null, "documentation": "https://github.com/heiher/hev-socks5-server/blob/main/README.md",
"website": "https://github.com/heiher/hev-socks5-server", "website": "https://github.com/heiher/hev-socks5-server",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hev.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hev.webp",
"config_path": "/opt/hivemq/conf/config.xml", "config_path": "/opt/hivemq/conf/config.xml",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 7575, "interface_port": 7575,
"documentation": null, "documentation": "https://homarr.dev/docs/getting-started/",
"website": "https://homarr.dev/", "website": "https://homarr.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp",
"config_path": "/opt/homarr/.env", "config_path": "/opt/homarr/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8010, "interface_port": 8010,
"documentation": null, "documentation": "https://github.com/bastienwirtz/homer/blob/main/README.md#table-of-contents",
"website": "https://github.com/bastienwirtz/homer", "website": "https://github.com/bastienwirtz/homer",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homer.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homer.webp",
"config_path": "/opt/homer/assets/config.yml", "config_path": "/opt/homer/assets/config.yml",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 8086, "interface_port": 8086,
"documentation": null, "documentation": "https://docs.influxdata.com/",
"website": "https://www.influxdata.com/", "website": "https://www.influxdata.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/influxdb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/influxdb.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 26000, "interface_port": 26000,
"documentation": null, "documentation": "https://www.iventoy.com/en/doc_news.html",
"website": "https://www.iventoy.com/", "website": "https://www.iventoy.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/iventoy.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/iventoy.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 5055, "interface_port": 5055,
"documentation": null, "documentation": "https://docs.jellyseerr.dev/",
"website": "https://github.com/Fallenbagel/jellyseerr", "website": "https://github.com/Fallenbagel/jellyseerr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jellyseerr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jellyseerr.webp",
"config_path": "/etc/jellyseerr/jellyseerr.conf", "config_path": "/etc/jellyseerr/jellyseerr.conf",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": null, "documentation": "https://mafl.hywax.space/reference/configuration.html",
"website": "https://mafl.hywax.space/", "website": "https://mafl.hywax.space/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mafl.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mafl.webp",
"config_path": "/opt/mafl/data/config.yml", "config_path": "/opt/mafl/data/config.yml",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8283, "interface_port": 8283,
"documentation": null, "documentation": "https://github.com/Luligu/matterbridge/blob/main/README.md",
"website": "https://github.com/Luligu/matterbridge", "website": "https://github.com/Luligu/matterbridge",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/matterbridge.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/matterbridge.webp",
"config_path": "", "config_path": "",

View File

@@ -1,40 +1,40 @@
{ {
"name": "Mattermost", "name": "Mattermost",
"slug": "mattermost", "slug": "mattermost",
"categories": [ "categories": [
25 25
], ],
"date_created": "2025-01-30", "date_created": "2025-01-30",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 8065, "interface_port": 8065,
"documentation": null, "documentation": "https://docs.mattermost.com/",
"website": "https://mattermost.com/", "website": "https://mattermost.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp",
"config_path": "/opt/mattermost/config/config.json", "config_path": "/opt/mattermost/config/config.json",
"description": "Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. It's written in Go and React and runs as a single Linux binary with MySQL or PostgreSQL. It has a slimilar interface and features to Slack or Discord.", "description": "Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. It's written in Go and React and runs as a single Linux binary with MySQL or PostgreSQL. It has a slimilar interface and features to Slack or Discord.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/mattermost.sh", "script": "ct/mattermost.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 2048, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "ubuntu", "os": "ubuntu",
"version": "24.04" "version": "24.04"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": [
{ {
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning" "type": "warning"
} }
] ]
} }

View File

@@ -1,35 +1,35 @@
{ {
"name": "Medusa", "name": "Medusa",
"slug": "medusa", "slug": "medusa",
"categories": [ "categories": [
13 13
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8081, "interface_port": 8081,
"documentation": null, "documentation": "https://github.com/pymedusa/Medusa/wiki",
"website": "https://pymedusa.com/", "website": "https://pymedusa.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp",
"config_path": "", "config_path": "",
"description": "Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic: automatic torrent/nzb searching, downloading, and processing at the qualities you want.", "description": "Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic: automatic torrent/nzb searching, downloading, and processing at the qualities you want.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/medusa.sh", "script": "ct/medusa.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 6, "hdd": 6,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8081, "interface_port": 8081,
"documentation": null, "documentation": "https://github.com/alexta69/metube/blob/master/README.md",
"website": "https://github.com/alexta69/metube", "website": "https://github.com/alexta69/metube",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
"config_path": "/opt/metube/.env", "config_path": "/opt/metube/.env",

View File

@@ -10,8 +10,8 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://help.mikrotik.com/docs/spaces/ROS/pages/18350234/Cloud+Hosted+Router+CHR",
"website": "https://help.mikrotik.com/docs/display/ROS/Cloud+Hosted+Router%2C+CHR", "website": "https://mikrotik.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mikrotik.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mikrotik.webp",
"config_path": "", "config_path": "",
"description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.", "description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.",

View File

@@ -1,35 +1,35 @@
{ {
"name": "MongoDB", "name": "MongoDB",
"slug": "mongodb", "slug": "mongodb",
"categories": [ "categories": [
8 8
], ],
"date_created": "2024-05-18", "date_created": "2024-05-18",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": 27017,
"documentation": null, "documentation": "https://www.mongodb.com/docs/manual/",
"website": "https://www.mongodb.com/", "website": "https://www.mongodb.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp",
"config_path": "", "config_path": "",
"description": "MongoDB is a NoSQL database that uses a document-oriented data model, storing data in JSON-like documents with dynamic schemas. This design offers flexibility and scalability, making it ideal for handling large volumes of data. MongoDB supports indexing, replication, and load balancing, ensuring high performance and availability, and can distribute data across multiple servers, making it well-suited for big data applications.", "description": "MongoDB is a NoSQL database that uses a document-oriented data model, storing data in JSON-like documents with dynamic schemas. This design offers flexibility and scalability, making it ideal for handling large volumes of data. MongoDB supports indexing, replication, and load balancing, ensuring high performance and availability, and can distribute data across multiple servers, making it well-suited for big data applications.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/mongodb.sh", "script": "ct/mongodb.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://docs.nextcloud.com/server/21/admin_manual/contents.html",
"website": "https://www.turnkeylinux.org/nextcloud", "website": "https://www.turnkeylinux.org/nextcloud",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nextcloud.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nextcloud.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 81, "interface_port": 81,
"documentation": null, "documentation": "https://nginxproxymanager.com/guide/",
"website": "https://nginxproxymanager.com/", "website": "https://nginxproxymanager.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nginx-proxy-manager.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nginx-proxy-manager.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 5454, "interface_port": 5454,
"documentation": null, "documentation": "https://notifiarr.wiki/",
"website": "https://notifiarr.com/", "website": "https://notifiarr.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/notifiarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/notifiarr.webp",
"config_path": "/etc/notifiarr/notifiarr.conf", "config_path": "/etc/notifiarr/notifiarr.conf",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://docs.ntfy.sh/",
"website": "https://ntfy.sh/", "website": "https://ntfy.sh/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp",
"config_path": "/etc/ntfy/server.yml", "config_path": "/etc/ntfy/server.yml",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 1337, "interface_port": 1337,
"documentation": null, "documentation": "https://docs.olivetin.app/",
"website": "https://www.olivetin.app/", "website": "https://www.olivetin.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/olivetin.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/olivetin.webp",
"config_path": "/etc/OliveTin/config.yaml", "config_path": "/etc/OliveTin/config.yaml",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://docs.openmediavault.org/en/stable/",
"website": "https://www.openmediavault.org/", "website": "https://www.openmediavault.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openmediavault.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openmediavault.webp",
"config_path": "", "config_path": "",

View File

@@ -10,7 +10,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://openwrt.org/docs/start",
"website": "https://openwrt.org/", "website": "https://openwrt.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://doc.owncloud.com/",
"website": "https://www.turnkeylinux.org/owncloud", "website": "https://www.turnkeylinux.org/owncloud",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/owncloud.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/owncloud.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": null, "documentation": "https://github.com/clusterzx/paperless-ai/wiki/1.-Home",
"website": "https://github.com/clusterzx/paperless-ai", "website": "https://github.com/clusterzx/paperless-ai",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ai.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ai.webp",
"config_path": "/opt/paperless-ai/data/.env", "config_path": "/opt/paperless-ai/data/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": null, "documentation": "https://github.com/icereed/paperless-gpt/blob/main/README.md",
"website": "https://github.com/icereed/paperless-gpt", "website": "https://github.com/icereed/paperless-gpt",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx-light.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx-light.webp",
"config_path": "/opt/paperless-gpt-data/.env", "config_path": "/opt/paperless-gpt-data/.env",

View File

@@ -0,0 +1,52 @@
{
"name": "PBS 4 Upgrade",
"slug": "pbs4-upgrade",
"categories": [
1
],
"date_created": "2025-08-26",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": "https://pbs.proxmox.com/wiki/Upgrade_from_3_to_4",
"website": "https://www.proxmox.com/en/proxmox-backup-server",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
"config_path": "",
"description": "This script guides you through upgrading Proxmox Backup Server from version 3.x (Debian 12 Bookworm) to version 4.0 (Debian 13 Trixie). It adjusts the Debian base sources, configures PBS 4 repositories in deb822 format, updates enterprise/no-subscription/test repos, runs a full system upgrade, and finalizes with a reboot.",
"install_methods": [
{
"type": "default",
"script": "tools/pve/pbs4-upgrade.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Execute this script directly on the PBS 3.x host as root.",
"type": "info"
},
{
"text": "Ensure you have a verified backup of /etc/proxmox-backup before starting.",
"type": "warning"
},
{
"text": "Do not run this on an already upgraded PBS 4.x system.",
"type": "warning"
},
{
"text": "A reboot is strongly recommended after upgrade to activate the new kernel and services.",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": null, "documentation": "https://github.com/Brandawg93/PeaNUT/blob/main/README.md",
"website": "https://github.com/Brandawg93/PeaNUT/", "website": "https://github.com/Brandawg93/PeaNUT/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
"config_path": "/etc/peanut/settings.yml", "config_path": "/etc/peanut/settings.yml",

View File

@@ -1,40 +1,40 @@
{ {
"name": "PhotoPrism", "name": "PhotoPrism",
"slug": "photoprism", "slug": "photoprism",
"categories": [ "categories": [
13 13
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 2342, "interface_port": 2342,
"documentation": null, "documentation": "https://docs.photoprism.app/",
"website": "https://photoprism.app/", "website": "https://photoprism.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp",
"config_path": "/opt/photoprism/config/.env", "config_path": "/opt/photoprism/config/.env",
"description": "PhotoPrism is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.", "description": "PhotoPrism is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/photoprism.sh", "script": "ct/photoprism.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 3072, "ram": 3072,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": "admin", "username": "admin",
"password": "changeme" "password": "changeme"
}, },
"notes": [ "notes": [
{ {
"text": "Please note that Ubuntu 22.04 and Debian 12 are supported, while older Linux distributions may not be compatible.", "text": "Please note that Ubuntu 22.04 and Debian 12 are supported, while older Linux distributions may not be compatible.",
"type": "warning" "type": "warning"
} }
] ]
} }

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://github.com/leiweibau/Pi.Alert/blob/main/README.md",
"website": "https://github.com/leiweibau/Pi.Alert/", "website": "https://github.com/leiweibau/Pi.Alert/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-alert.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-alert.webp",
"config_path": "/opt/pialert/config/pialert.conf", "config_path": "/opt/pialert/config/pialert.conf",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://podman.io/docs",
"website": "https://podman.io/", "website": "https://podman.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/podman.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/podman.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 5432, "interface_port": 5432,
"documentation": null, "documentation": "https://www.postgresql.org/docs/",
"website": "https://www.postgresql.org/", "website": "https://www.postgresql.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/postgresql.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/postgresql.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 9696, "interface_port": 9696,
"documentation": null, "documentation": "https://wiki.servarr.com/prowlarr",
"website": "https://github.com/Prowlarr/Prowlarr", "website": "https://github.com/Prowlarr/Prowlarr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prowlarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prowlarr.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 7878, "interface_port": 7878,
"documentation": null, "documentation": "https://wiki.servarr.com/radarr",
"website": "https://radarr.video/", "website": "https://radarr.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/radarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/radarr.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 6500, "interface_port": 6500,
"documentation": null, "documentation": "https://github.com/rogerfar/rdt-client/blob/main/README.md",
"website": "https://github.com/rogerfar/rdt-client", "website": "https://github.com/rogerfar/rdt-client",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/real-debrid.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/real-debrid.webp",
"config_path": "/opt/rdtc/appsettings.json", "config_path": "/opt/rdtc/appsettings.json",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Recyclarr", "name": "Recyclarr",
"slug": "recyclarr", "slug": "recyclarr",
"categories": [ "categories": [
14 14
], ],
"date_created": "2024-11-15", "date_created": "2024-11-15",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://recyclarr.dev/wiki/",
"website": "https://recyclarr.dev/", "website": "https://recyclarr.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp",
"config_path": "", "config_path": "",
"description": "Recyclarr is an automation tool that integrates with media management software like Sonarr and Radarr. It helps users manage and organize their media libraries by automatically searching for and adding content from indexers, based on user-defined criteria. It streamlines the process of maintaining and updating media collections without manual intervention.", "description": "Recyclarr is an automation tool that integrates with media management software like Sonarr and Radarr. It helps users manage and organize their media libraries by automatically searching for and adding content from indexers, based on user-defined criteria. It streamlines the process of maintaining and updating media collections without manual intervention.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/recyclarr.sh", "script": "ct/recyclarr.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://redis.io/docs/latest/",
"website": "https://redis.io/", "website": "https://redis.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redis.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redis.webp",
"config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf", "config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://runtipi.io/docs/introduction",
"website": "https://runtipi.io/", "website": "https://runtipi.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/runtipi.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/runtipi.webp",
"config_path": "opt/runtipi/state/settings.json", "config_path": "opt/runtipi/state/settings.json",

View File

@@ -0,0 +1,35 @@
{
"name": "SearXNG",
"slug": "searxng",
"categories": [
0
],
"date_created": "2025-08-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8888,
"documentation": "https://docs.searxng.org/",
"website": "https://github.com/searxng/searxng",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/searxng.webp",
"config_path": "/etc/searxng/settings.yml",
"description": "SearXNG is a free internet metasearch engine which aggregates results from up to 215 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor for online anonymity.",
"install_methods": [
{
"type": "default",
"script": "ct/searxng.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 7,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": null, "documentation": "https://docs.shinobi.video/",
"website": "https://shinobi.video/", "website": "https://shinobi.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/shinobi.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/shinobi.webp",
"config_path": "/opt/Shinobi/conf.json", "config_path": "/opt/Shinobi/conf.json",

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": "https://oss.oetiker.ch/smokeping/doc/index.en.html",
"website": "https://oss.oetiker.ch/smokeping/", "website": "https://oss.oetiker.ch/smokeping/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/smokeping.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/smokeping.webp",
"config_path": "/etc/smokeping/config.d/Targets", "config_path": "/etc/smokeping/config.d/Targets",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Sonarr", "name": "Sonarr",
"slug": "sonarr", "slug": "sonarr",
"categories": [ "categories": [
14 14
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8989, "interface_port": 8989,
"documentation": null, "documentation": "https://wiki.servarr.com/sonarr",
"website": "https://sonarr.tv/", "website": "https://sonarr.tv/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sonarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sonarr.webp",
"config_path": "", "config_path": "",
"description": "Sonarr is a personal video recorder (PVR) software designed for Usenet and BitTorrent users. It allows users to manage and organize their TV show collection with ease. Sonarr integrates with popular Usenet and BitTorrent clients, such as NZBget and Transmission, to automate the downloading and organizing of TV show files. The software provides a web-based interface for managing and organizing TV shows, making it easy to search and find titles, seasons, and episodes. Sonarr also supports metadata management, including TV show posters and information, making it easy for users to keep their TV show collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing TV show collections, making it a valuable tool for TV show enthusiasts who want to keep their collection organized and up-to-date. With Sonarr, users can enjoy their TV show collection from anywhere, making it a powerful tool for managing and sharing TV show files.", "description": "Sonarr is a personal video recorder (PVR) software designed for Usenet and BitTorrent users. It allows users to manage and organize their TV show collection with ease. Sonarr integrates with popular Usenet and BitTorrent clients, such as NZBget and Transmission, to automate the downloading and organizing of TV show files. The software provides a web-based interface for managing and organizing TV shows, making it easy to search and find titles, seasons, and episodes. Sonarr also supports metadata management, including TV show posters and information, making it easy for users to keep their TV show collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing TV show collections, making it a valuable tool for TV show enthusiasts who want to keep their collection organized and up-to-date. With Sonarr, users can enjoy their TV show collection from anywhere, making it a powerful tool for managing and sharing TV show files.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/sonarr.sh", "script": "ct/sonarr.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -10,7 +10,7 @@
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": null, "documentation": null,
"website": "https://github.com/Stirling-Tools/Stirling-PDF", "website": "https://docs.stirlingpdf.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp",
"config_path": "/opt/Stirling-PDF/.env", "config_path": "/opt/Stirling-PDF/.env",
"description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.", "description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.",

View File

@@ -1,31 +1,31 @@
{ {
"name": "Syncthing", "name": "Syncthing",
"slug": "syncthing", "slug": "syncthing",
"categories": [ "categories": [
12 12
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 8384, "interface_port": 8384,
"documentation": null, "documentation": "https://docs.syncthing.net/",
"website": "https://syncthing.net/", "website": "https://syncthing.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp",
"config_path": "/root/.local/state/syncthing/config.xml - Alpine: /var/lib/syncthing/.local/state/syncthing/config.xml", "config_path": "/root/.local/state/syncthing/config.xml - Alpine: /var/lib/syncthing/.local/state/syncthing/config.xml",
"description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.", "description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/syncthing.sh", "script": "ct/syncthing.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 2048, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
}, },
{ {
"type": "alpine", "type": "alpine",
"script": "ct/alpine-syncthing.sh", "script": "ct/alpine-syncthing.sh",
@@ -38,9 +38,9 @@
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8002, "interface_port": 8002,
"documentation": null, "documentation": "https://docs.tandoor.dev/",
"website": "https://tandoor.dev/", "website": "https://tandoor.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tandoor-recipes.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tandoor-recipes.webp",
"config_path": "/opt/tandoor/.env", "config_path": "/opt/tandoor/.env",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Tautulli", "name": "Tautulli",
"slug": "tautulli", "slug": "tautulli",
"categories": [ "categories": [
13 13
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 8181, "interface_port": 8181,
"documentation": null, "documentation": "https://github.com/Tautulli/Tautulli/wiki",
"website": "https://tautulli.com/", "website": "https://tautulli.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tautulli.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tautulli.webp",
"config_path": "", "config_path": "",
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.", "description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/tautulli.sh", "script": "ct/tautulli.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8265, "interface_port": 8265,
"documentation": null, "documentation": "https://docs.tdarr.io/docs/welcome/what",
"website": "https://tdarr.io/", "website": "https://tdarr.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tdarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tdarr.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 34400, "interface_port": 34400,
"documentation": null, "documentation": "https://github.com/xteve-project/xTeVe-Documentation/blob/master/en/configuration.md",
"website": "https://github.com/Threadfin/Threadfin", "website": "https://github.com/Threadfin/Threadfin",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/threadfin.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/threadfin.webp",
"config_path": "", "config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 12345, "interface_port": 12345,
"documentation": null, "documentation": "https://tianji.dev/docs/intro",
"website": "https://tianji.msgbyte.com/", "website": "https://tianji.msgbyte.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tianji.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tianji.webp",
"config_path": "/opt/tianji/src/server/.env", "config_path": "/opt/tianji/src/server/.env",

View File

@@ -0,0 +1,40 @@
{
"name": "Tracktor",
"slug": "tracktor",
"categories": [
9
],
"date_created": "2025-08-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://tracktor.bytedge.in/introduction.html",
"config_path": "/opt/tracktor/app/server/.env",
"website": "https://tracktor.bytedge.in/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
"description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
"install_methods": [
{
"type": "default",
"script": "ct/tracktor.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 6,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3002, "interface_port": 3002,
"documentation": null, "documentation": "https://github.com/chrisvel/tududi#-getting-started",
"config_path": "/opt/tududi/backend/.env", "config_path": "/opt/tududi/backend/.env",
"website": "https://tududi.com/", "website": "https://tududi.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tududi.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tududi.webp",

View File

@@ -1,40 +1,40 @@
{ {
"name": "Unbound", "name": "Unbound",
"slug": "unbound", "slug": "unbound",
"categories": [ "categories": [
5 5
], ],
"date_created": "2024-12-02", "date_created": "2024-12-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 5335, "interface_port": 5335,
"documentation": null, "documentation": "https://unbound.docs.nlnetlabs.nl/en/latest/",
"website": "https://www.nlnetlabs.nl/projects/unbound/about/", "website": "https://www.nlnetlabs.nl/projects/unbound/about/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unbound.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unbound.webp",
"config_path": "/etc/unbound/unbound.conf.d/unbound.conf", "config_path": "/etc/unbound/unbound.conf.d/unbound.conf",
"description": "Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards.", "description": "Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/unbound.sh", "script": "ct/unbound.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": [
{ {
"text": "Unbound Configuration Path: `/etc/unbound/unbound.conf.d/unbound.conf`", "text": "Unbound Configuration Path: `/etc/unbound/unbound.conf.d/unbound.conf`",
"type": "info" "type": "info"
} }
] ]
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": true, "privileged": true,
"interface_port": 8888, "interface_port": 8888,
"documentation": null, "documentation": "https://docs.unmanic.app/docs/",
"website": "https://docs.unmanic.app/", "website": "https://docs.unmanic.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unmanic.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unmanic.webp",
"config_path": "", "config_path": "",

View File

@@ -1,9 +1,99 @@
[ [
{
"name": "Threadfin/Threadfin",
"version": "1.2.36",
"date": "2025-08-26T20:40:14Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.4.0",
"date": "2025-08-26T20:10:23Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.23",
"date": "2025-08-26T18:02:18Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.7",
"date": "2025-08-26T17:54:25Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.525",
"date": "2025-08-26T14:28:44Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-08-26T14:14:42Z"
},
{
"name": "traefik/traefik",
"version": "v2.11.29",
"date": "2025-08-26T13:14:55Z"
},
{
"name": "element-hq/synapse",
"version": "v1.137.0",
"date": "2025-08-26T09:51:47Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "evcc-io/evcc",
"version": "0.207.5",
"date": "2025-08-26T06:57:07Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2349",
"date": "2025-08-26T05:58:15Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.4",
"date": "2025-08-26T01:45:02Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.6",
"date": "2025-08-26T01:17:43Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-26T00:27:08Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{ {
"name": "coder/code-server", "name": "coder/code-server",
"version": "v4.103.2", "version": "v4.103.2",
"date": "2025-08-25T23:30:54Z" "date": "2025-08-25T23:30:54Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.3.3",
"date": "2025-08-20T10:12:51Z"
},
{ {
"name": "advplyr/audiobookshelf", "name": "advplyr/audiobookshelf",
"version": "v2.29.0", "version": "v2.29.0",
@@ -54,6 +144,11 @@
"version": "v2.3.0p36", "version": "v2.3.0p36",
"date": "2025-08-25T15:32:14Z" "date": "2025-08-25T15:32:14Z"
}, },
{
"name": "wazuh/wazuh",
"version": "coverity-w35-4.13.0",
"date": "2025-08-25T15:17:33Z"
},
{ {
"name": "n8n-io/n8n", "name": "n8n-io/n8n",
"version": "n8n@1.107.4", "version": "n8n@1.107.4",
@@ -79,26 +174,11 @@
"version": "1.23.2", "version": "1.23.2",
"date": "2025-08-25T09:39:42Z" "date": "2025-08-25T09:39:42Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-08-25T09:14:19Z"
},
{ {
"name": "emqx/emqx", "name": "emqx/emqx",
"version": "e5.10.1-beta.2", "version": "e5.10.1-beta.2",
"date": "2025-08-25T08:51:40Z" "date": "2025-08-25T08:51:40Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2343",
"date": "2025-08-25T05:50:39Z"
},
{ {
"name": "firefly-iii/firefly-iii", "name": "firefly-iii/firefly-iii",
"version": "v6.3.2", "version": "v6.3.2",
@@ -114,31 +194,16 @@
"version": "8.2.10", "version": "8.2.10",
"date": "2025-08-25T01:26:55Z" "date": "2025-08-25T01:26:55Z"
}, },
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-25T00:27:05Z"
},
{ {
"name": "gtsteffaniak/filebrowser", "name": "gtsteffaniak/filebrowser",
"version": "v0.8.2-beta", "version": "v0.8.2-beta",
"date": "2025-08-25T00:26:03Z" "date": "2025-08-25T00:26:03Z"
}, },
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{ {
"name": "crafty-controller/crafty-4", "name": "crafty-controller/crafty-4",
"version": "v4.5.1", "version": "v4.5.1",
"date": "2025-08-24T23:58:52Z" "date": "2025-08-24T23:58:52Z"
}, },
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.5",
"date": "2025-08-24T23:48:04Z"
},
{ {
"name": "Ombi-app/Ombi", "name": "Ombi-app/Ombi",
"version": "v4.47.1", "version": "v4.47.1",
@@ -156,8 +221,8 @@
}, },
{ {
"name": "runtipi/runtipi", "name": "runtipi/runtipi",
"version": "v4.3.0", "version": "nightly",
"date": "2025-07-05T12:14:52Z" "date": "2025-08-24T18:27:58Z"
}, },
{ {
"name": "wavelog/wavelog", "name": "wavelog/wavelog",
@@ -179,21 +244,11 @@
"version": "fumadocs-openapi@9.2.3", "version": "fumadocs-openapi@9.2.3",
"date": "2025-08-24T12:48:14Z" "date": "2025-08-24T12:48:14Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.3.3",
"date": "2025-08-20T10:12:51Z"
},
{ {
"name": "Lidarr/Lidarr", "name": "Lidarr/Lidarr",
"version": "v2.12.4.4658", "version": "v2.12.4.4658",
"date": "2025-06-09T17:27:45Z" "date": "2025-06-09T17:27:45Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.24.22",
"date": "2025-08-24T09:51:24Z"
},
{ {
"name": "janeczku/calibre-web", "name": "janeczku/calibre-web",
"version": "0.6.25", "version": "0.6.25",
@@ -254,21 +309,11 @@
"version": "version/2025.8.1", "version": "version/2025.8.1",
"date": "2025-08-22T14:55:30Z" "date": "2025-08-22T14:55:30Z"
}, },
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{ {
"name": "open-webui/open-webui", "name": "open-webui/open-webui",
"version": "v0.6.25", "version": "v0.6.25",
"date": "2025-08-22T13:22:43Z" "date": "2025-08-22T13:22:43Z"
}, },
{
"name": "wazuh/wazuh",
"version": "v4.10.3",
"date": "2025-08-19T18:51:00Z"
},
{ {
"name": "theonedev/onedev", "name": "theonedev/onedev",
"version": "v12.0.7", "version": "v12.0.7",
@@ -334,11 +379,6 @@
"version": "v1.5.0", "version": "v1.5.0",
"date": "2025-08-21T17:33:22Z" "date": "2025-08-21T17:33:22Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.207.4",
"date": "2025-08-21T17:20:43Z"
},
{ {
"name": "kyantech/Palmr", "name": "kyantech/Palmr",
"version": "v3.2.0-beta", "version": "v3.2.0-beta",
@@ -364,11 +404,6 @@
"version": "v2.16.18", "version": "v2.16.18",
"date": "2025-08-21T08:19:58Z" "date": "2025-08-21T08:19:58Z"
}, },
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516.2",
"date": "2025-08-20T17:15:26Z"
},
{ {
"name": "AdguardTeam/AdGuardHome", "name": "AdguardTeam/AdGuardHome",
"version": "v0.107.65", "version": "v0.107.65",
@@ -409,11 +444,6 @@
"version": "v6.13.2", "version": "v6.13.2",
"date": "2025-08-19T18:18:40Z" "date": "2025-08-19T18:18:40Z"
}, },
{
"name": "Threadfin/Threadfin",
"version": "1.3.0",
"date": "2025-08-19T17:37:44Z"
},
{ {
"name": "dgtlmoon/changedetection.io", "name": "dgtlmoon/changedetection.io",
"version": "0.50.10", "version": "0.50.10",
@@ -429,11 +459,6 @@
"version": "preview-dns-cache-manager", "version": "preview-dns-cache-manager",
"date": "2025-08-19T11:57:00Z" "date": "2025-08-19T11:57:00Z"
}, },
{
"name": "element-hq/synapse",
"version": "v1.136.0",
"date": "2025-08-12T14:26:27Z"
},
{ {
"name": "chrisvel/tududi", "name": "chrisvel/tududi",
"version": "v0.80", "version": "v0.80",
@@ -529,11 +554,6 @@
"version": "v0.9.90", "version": "v0.9.90",
"date": "2025-08-15T19:14:52Z" "date": "2025-08-15T19:14:52Z"
}, },
{
"name": "netbox-community/netbox",
"version": "v4.3.6",
"date": "2025-08-12T17:16:42Z"
},
{ {
"name": "intri-in/manage-my-damn-life-nextjs", "name": "intri-in/manage-my-damn-life-nextjs",
"version": "v0.8.0-release", "version": "v0.8.0-release",
@@ -689,11 +709,6 @@
"version": "v11.1.0", "version": "v11.1.0",
"date": "2025-08-07T14:57:29Z" "date": "2025-08-07T14:57:29Z"
}, },
{
"name": "influxdata/influxdb",
"version": "v1.12.2rc2",
"date": "2025-08-06T23:12:18Z"
},
{ {
"name": "Athou/commafeed", "name": "Athou/commafeed",
"version": "5.11.0", "version": "5.11.0",
@@ -759,11 +774,6 @@
"version": "10.1.44", "version": "10.1.44",
"date": "2025-08-04T13:17:59Z" "date": "2025-08-04T13:17:59Z"
}, },
{
"name": "henrygd/beszel",
"version": "v0.12.3",
"date": "2025-08-04T02:21:16Z"
},
{ {
"name": "benjaminjonard/koillection", "name": "benjaminjonard/koillection",
"version": "1.6.18", "version": "1.6.18",
@@ -829,11 +839,6 @@
"version": "v2.1.1867", "version": "v2.1.1867",
"date": "2025-07-31T18:08:43Z" "date": "2025-07-31T18:08:43Z"
}, },
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{ {
"name": "leiweibau/Pi.Alert", "name": "leiweibau/Pi.Alert",
"version": "v2025-07-30", "version": "v2025-07-30",
@@ -904,11 +909,6 @@
"version": "RELEASE.2025-07-23T15-54-02Z", "version": "RELEASE.2025-07-23T15-54-02Z",
"date": "2025-07-23T20:35:39Z" "date": "2025-07-23T20:35:39Z"
}, },
{
"name": "traefik/traefik",
"version": "v3.5.0",
"date": "2025-07-23T14:06:54Z"
},
{ {
"name": "TasmoAdmin/TasmoAdmin", "name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1", "version": "v4.3.1",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Vikunja", "name": "Vikunja",
"slug": "vikunja", "slug": "vikunja",
"categories": [ "categories": [
12 12
], ],
"date_created": "2024-11-05", "date_created": "2024-11-05",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3456, "interface_port": 3456,
"documentation": null, "documentation": "https://vikunja.io/docs/",
"website": "https://vikunja.io/", "website": "https://vikunja.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/vikunja.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/vikunja.webp",
"config_path": "/etc/vikunja/config.yml", "config_path": "/etc/vikunja/config.yml",
"description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.", "description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/vikunja.sh", "script": "ct/vikunja.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8088, "interface_port": 8088,
"documentation": null, "documentation": "https://github.com/matze/wastebin/blob/a297749b932ed9ff32569f3af7ee8e4a5b499834/README.md",
"website": "https://github.com/matze/wastebin", "website": "https://github.com/matze/wastebin",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wastebin.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wastebin.webp",
"config_path": "/opt/wastebin-data/.env", "config_path": "/opt/wastebin-data/.env",

View File

@@ -1,35 +1,35 @@
{ {
"name": "WatchYourLAN", "name": "WatchYourLAN",
"slug": "watchyourlan", "slug": "watchyourlan",
"categories": [ "categories": [
4 4
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8840, "interface_port": 8840,
"documentation": null, "documentation": "https://github.com/aceberg/WatchYourLAN/blob/main/README.md",
"website": "https://github.com/aceberg/WatchYourLAN", "website": "https://github.com/aceberg/WatchYourLAN",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watchyourlan.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watchyourlan.webp",
"config_path": "/data/config.yaml", "config_path": "/data/config.yaml",
"description": "WatchYourLAN is a lightweight network IP scanner with web GUI.", "description": "WatchYourLAN is a lightweight network IP scanner with web GUI.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/watchyourlan.sh", "script": "ct/watchyourlan.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 10000, "interface_port": 10000,
"documentation": null, "documentation": "https://webmin.com/docs/",
"website": "https://webmin.com/", "website": "https://webmin.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/webmin.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/webmin.webp",
"config_path": "", "config_path": "",

View File

@@ -1,35 +1,35 @@
{ {
"name": "Whisparr", "name": "Whisparr",
"slug": "whisparr", "slug": "whisparr",
"categories": [ "categories": [
14 14
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": 6969, "interface_port": 6969,
"documentation": null, "documentation": "https://wiki.servarr.com/en/whisparr",
"website": "https://github.com/Whisparr/Whisparr", "website": "https://github.com/Whisparr/Whisparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/whisparr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/whisparr.webp",
"config_path": "", "config_path": "",
"description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users.", "description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/whisparr.sh", "script": "ct/whisparr.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 80, "interface_port": 80,
"documentation": null, "documentation": "https://doc.yunohost.org/",
"website": "https://yunohost.org/", "website": "https://yunohost.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/yunohost.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/yunohost.webp",
"config_path": "", "config_path": "",

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env bash
# Copyright (c) 2025 Community Scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://tracktor.bytedge.in
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_nodejs
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
msg_info "Configuring Tracktor"
cd /opt/tracktor
$STD npm install
$STD npm run build
mkdir /opt/tracktor-data
HOST_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/tracktor/app/backend/.env
NODE_ENV=production
PUBLIC_DEMO_MODE=false
DB_PATH=/opt/tracktor-data/tracktor.db
# Replace this URL if using behind reverse proxy for https traffic. Though it is optional and should work without changing
PUBLIC_API_BASE_URL=http://$HOST_IP:3000
# Here add the reverse proxy url as well to avoid cross errors from the app.
CORS_ORIGINS=http://$HOST_IP:3000
PORT=3000
EOF
msg_ok "Configured Tracktor"
msg_info "Creating service"
cat <<EOF >/etc/systemd/system/tracktor.service
[Unit]
Description=Tracktor Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/tracktor
EnvironmentFile=/opt/tracktor/app/backend/.env
ExecStart=/usr/bin/npm start
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now tracktor
msg_ok "Created service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

183
tools/pve/pbs4-upgrade.sh Normal file
View File

@@ -0,0 +1,183 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
header_info() {
clear
cat <<"EOF"
____ ____ _____ __ __ __ __ __
/ __ \/ __ ) ___// // / / / / /___ ____ __________ _____/ /__
/ /_/ / __ \__ \/ // /_ / / / / __ \/ __ `/ ___/ __ `/ __ / _ \
/ ____/ /_/ /__/ /__ __/ / /_/ / /_/ / /_/ / / / /_/ / /_/ / __/
/_/ /_____/____/ /_/ \____/ .___/\__, /_/ \__,_/\__,_/\___/
/_/ /____/
EOF
}
RD=$(echo "\033[01;31m")
YW=$(echo "\033[33m")
GN=$(echo "\033[1;92m")
CL=$(echo "\033[m")
BFR="\\r\\033[K"
HOLD="-"
CM="${GN}${CL}"
CROSS="${RD}${CL}"
set -euo pipefail
shopt -s inherit_errexit nullglob
msg_info() { echo -ne " ${HOLD} ${YW}$1..."; }
msg_ok() { echo -e "${BFR} ${CM} ${GN}$1${CL}"; }
msg_error() { echo -e "${BFR} ${CROSS} ${RD}$1${CL}"; }
start_routines() {
header_info
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 3 BACKUP" --menu \
"\nMake a backup of /etc/proxmox-backup to ensure recovery in worst case?" 14 58 2 \
"yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Backing up Proxmox Backup Server 3"
tar czf "pbs3-etc-backup-$(date -I).tar.gz" -C "/etc" "proxmox-backup"
msg_ok "Backed up Proxmox Backup Server 3"
;;
no) msg_error "Selected no to Backup" ;;
esac
# --- Debian 13 Sources ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 4 SOURCES" --menu \
"Switch to Debian 13 (Trixie) sources for PBS 4?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Switching to Debian 13 (Trixie) Sources"
rm -f /etc/apt/sources.list.d/*.list
sed -i '/proxmox/d;/bookworm/d' /etc/apt/sources.list || true
cat >/etc/apt/sources.list.d/debian.sources <<EOF
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie-updates
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
msg_ok "Configured Debian 13 (Trixie) Sources"
;;
no) msg_error "Selected no to Sources update" ;;
esac
# --- Enterprise Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4-ENTERPRISE" --menu \
"Add 'pbs-enterprise' repository (for subscription users)?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-enterprise' repository"
cat >/etc/apt/sources.list.d/pbs-enterprise.sources <<EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-enterprise' repository"
;;
no) msg_error "Skipped enterprise repo" ;;
esac
# --- No-Subscription Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4-NO-SUBSCRIPTION" --menu \
"Enable 'pbs-no-subscription' repository?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-no-subscription' repository"
cat >/etc/apt/sources.list.d/proxmox.sources <<EOF
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-no-subscription' repository"
;;
no) msg_error "Skipped no-subscription repo" ;;
esac
# --- Test Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4 TEST" --menu \
"Add 'pbs-test' repository (disabled by default)?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-test' repository (disabled)"
cat >/etc/apt/sources.list.d/pbs-test.sources <<EOF
# Types: deb
# URIs: http://download.proxmox.com/debian/pbs
# Suites: trixie
# Components: pbs-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-test' repository"
;;
no) msg_error "Skipped test repo" ;;
esac
# --- Upgrade ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 4 UPGRADE" --menu \
"\nUpgrade to Proxmox Backup Server 4 now?" 11 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Upgrading to Proxmox Backup Server 4 (Patience)"
apt update
DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confold" dist-upgrade -y
msg_ok "System upgraded to PBS 4"
;;
no) msg_error "Selected no to upgrade" ;;
esac
# --- Reboot ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"\nReboot Proxmox Backup Server 4 now? (recommended)" 11 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Rebooting PBS 4"
sleep 2
msg_ok "Upgrade Complete"
reboot
;;
no)
msg_error "Selected no to Reboot (Reboot recommended)"
msg_ok "Upgrade Complete"
;;
esac
}
header_info
while true; do
read -rp "Start the Upgrade to Proxmox Backup Server 4 Script (y/n)? " yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
start_routines

View File

@@ -1,18 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) # Author: tteck (tteckster) | MickLesk (CanbiZ) | thost96
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
header_info() { header_info() {
clear clear
cat <<"EOF" cat <<"EOF"
____ ____ _____ ____ __ ____ __ ____ ____ ____ _____ ____ __ ____ __ ____
/ __ \/ __ ) ___/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / / / __ \/ __ ) ___/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
/ /_/ / __ \__ \ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / / / /_/ / __ \__ \ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ /_/ /__/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / / / ____/ /_/ /__/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_____/____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/ /_/ /_____/____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
EOF EOF
} }
@@ -29,156 +28,276 @@ CROSS="${RD}✗${CL}"
set -euo pipefail set -euo pipefail
shopt -s inherit_errexit nullglob shopt -s inherit_errexit nullglob
msg_info() { msg_info() { echo -ne " ${HOLD} ${YW}$1..."; }
local msg="$1" msg_ok() { echo -e "${BFR} ${CM} ${GN}$1${CL}"; }
echo -ne " ${HOLD} ${YW}${msg}..." msg_error() { echo -e "${BFR} ${CROSS} ${RD}$1${CL}"; }
# ---- helpers ----
get_pbs_codename() {
awk -F'=' '/^VERSION_CODENAME=/{print $2}' /etc/os-release
} }
msg_ok() { repo_state_list() {
local msg="$1" local repo="$1"
echo -e "${BFR} ${CM} ${GN}${msg}${CL}" local file=""
local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
[[ -f "$f" ]] || continue
if grep -q "$repo" "$f"; then
file="$f"
if grep -qE "^[^#].*${repo}" "$f"; then
state="active"
elif grep -qE "^#.*${repo}" "$f"; then
state="disabled"
fi
break
fi
done
echo "$state $file"
} }
msg_error() { component_exists_in_sources() {
local msg="$1" local component="$1"
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q .
} }
start_routines() { # ---- main ----
main() {
header_info header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" echo -e "\nThis script will Perform Post Install Routines.\n"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu "This will set the correct sources to update and install Proxmox Backup Server.\n \nChange to Proxmox Backup Server sources?" 14 58 2 \ while true; do
"yes" " " \ read -rp "Start the Proxmox Backup Server Post Install Script (y/n)? " yn
"no" " " 3>&2 2>&1 1>&3) case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
local CODENAME
CODENAME="$(get_pbs_codename)"
case "$CODENAME" in
bookworm) start_routines_3 ;;
trixie) start_routines_4 ;;
*)
msg_error "Unsupported Debian codename: $CODENAME"
echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)"
exit 1
;;
esac
}
# ---- PBS 3.x (Bookworm) ----
start_routines_3() {
header_info
local VERSION="bookworm"
# --- Debian sources ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 3.x?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Changing to Proxmox Backup Server Sources" msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian ${VERSION} main contrib deb http://deb.debian.org/debian ${VERSION} main contrib
deb http://deb.debian.org/debian ${VERSION}-updates main contrib deb http://deb.debian.org/debian ${VERSION}-updates main contrib
deb http://security.debian.org/debian-security ${VERSION}-security main contrib deb http://security.debian.org/debian-security ${VERSION}-security main contrib
EOF EOF
msg_ok "Changed to Proxmox Backup Server Sources" msg_ok "Corrected Debian Sources"
;;
no)
msg_error "Selected no to Correcting Proxmox Backup Server Sources"
;; ;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-ENTERPRISE" --menu "The 'pbs-enterprise' repository is only available to users who have purchased a Proxmox VE subscription.\n \nDisable 'pbs-enterprise' repository?" 14 58 2 \ # --- Enterprise repo ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbs-enterprise)"
"no" " " 3>&2 2>&1 1>&3) case $state in
case $CHOICE in active)
yes) sed -i "s/^[^#].*pbs-enterprise/# &/" "$file"
msg_info "Disabling 'pbs-enterprise' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-enterprise.list
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
msg_ok "Disabled 'pbs-enterprise' repository" msg_ok "Disabled 'pbs-enterprise' repository"
;; ;;
no) disabled) msg_ok "'pbs-enterprise' already disabled" ;;
msg_error "Selected no to Disabling 'pbs-enterprise' repository" missing)
cat >/etc/apt/sources.list.d/pbs-enterprise.list <<EOF
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
msg_ok "Added 'pbs-enterprise' repository (disabled)"
;; ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-NO-SUBSCRIPTION" --menu "The 'pbs-no-subscription' repository provides access to all of the open-source components of Proxmox Backup Server.\n \nEnable 'pbs-no-subscription' repository?" 14 58 2 \ # --- No-subscription repo ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbs-no-subscription)"
"no" " " 3>&2 2>&1 1>&3) if [[ "$state" == "missing" ]]; then
case $CHOICE in cat >/etc/apt/sources.list.d/pbs-install-repo.list <<EOF
yes)
msg_info "Enabling 'pbs-no-subscription' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-install-repo.list
deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription
EOF EOF
msg_ok "Enabled 'pbs-no-subscription' repository" msg_ok "Enabled 'pbs-no-subscription' repository"
;; else
no) msg_ok "'pbs-no-subscription' repository already present"
msg_error "Selected no to Enabling 'pbs-no-subscription' repository" fi
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS TEST" --menu "The 'pbstest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pbstest' repository?" 14 58 2 \ # --- Test repo (legacy name pbstest) ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbstest)"
"no" " " 3>&2 2>&1 1>&3) if [[ "$state" == "missing" ]]; then
case $CHOICE in cat >/etc/apt/sources.list.d/pbstest-for-beta.list <<EOF
yes)
msg_info "Adding 'pbstest' repository and set disabled"
cat <<EOF >/etc/apt/sources.list.d/pbstest-for-beta.list
# deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest # deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest
EOF EOF
msg_ok "Added 'pbstest' repository" msg_ok "Added 'pbstest' repository (disabled)"
;; else
no) msg_ok "'pbstest' repository already exists"
msg_error "Selected no to Adding 'pbstest' repository" fi
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ post_routines_common
"yes" " " \ }
"no" " " 3>&2 2>&1 1>&3)
# ---- PBS 4.x (Trixie, deb822) ----
start_routines_4() {
header_info
local VERSION="trixie"
# --- Debian sources (deb822) ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 4.x (deb822)?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_info "Correcting Debian Sources (deb822)"
rm -f /etc/apt/sources.list.d/*.list
sed -i '/proxmox/d;/bookworm/d' /etc/apt/sources.list || true
cat >/etc/apt/sources.list.d/debian.sources <<EOF
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie-updates
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
msg_ok "Corrected Debian Sources"
;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac
# --- Enterprise repo ---
if ! component_exists_in_sources "pbs-enterprise"; then
cat >/etc/apt/sources.list.d/pbs-enterprise.sources <<EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-enterprise' repository"
else
msg_ok "'pbs-enterprise' repository already present"
fi
# --- No-subscription repo ---
if ! component_exists_in_sources "pbs-no-subscription"; then
cat >/etc/apt/sources.list.d/proxmox.sources <<EOF
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-no-subscription' repository"
else
msg_ok "'pbs-no-subscription' repository already present"
fi
# --- Test repo (pbs-test, renamed) ---
if ! component_exists_in_sources "pbs-test"; then
cat >/etc/apt/sources.list.d/pbs-test.sources <<EOF
# Types: deb
# URIs: http://download.proxmox.com/debian/pbs
# Suites: trixie
# Components: pbs-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-test' repository (disabled)"
else
msg_ok "'pbs-test' repository already present"
fi
post_routines_common
}
# ---- Shared routines ----
post_routines_common() {
# Subscription nag
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu \
"Disable subscription nag in PBS UI?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox \
"Supporting the software's development team is essential.\nPlease consider buying a subscription." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then sed -i '/data\\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (clear browser cache!)"
;; ;;
no) no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag" msg_error "Selected no to Disabling subscription nag"
rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;; ;;
esac esac
apt --reinstall install proxmox-widget-toolkit &>/dev/null apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \ # Update
"yes" " " \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
"no" " " 3>&2 2>&1 1>&3) "Update Proxmox Backup Server now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Updating Proxmox Backup Server (Patience)" msg_info "Updating Proxmox Backup Server (Patience)"
apt-get update &>/dev/null apt update &>/dev/null || msg_error "apt update failed"
apt-get -y dist-upgrade &>/dev/null apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
msg_ok "Updated Proxmox Backup Server" msg_ok "Updated Proxmox Backup Server"
;; ;;
no) no) msg_error "Selected no to updating Proxmox Backup Server" ;;
msg_error "Selected no to Updating Proxmox Backup Server"
;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Backup Server now? (recommended)" 11 58 2 \ # Reminder
"yes" " " \ whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
"no" " " 3>&2 2>&1 1>&3) "IMPORTANT:
Please run this script on every PBS node individually if you have multiple nodes.
After completing these steps, it is strongly recommended to REBOOT your node.
After the upgrade or post-install routines, always clear your browser cache or perform a hard reload (Ctrl+Shift+R) before using the PBS Web UI to avoid UI display issues." 20 80
# Reboot
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"Reboot Proxmox Backup Server now? (recommended)" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Rebooting Proxmox Backup Server" msg_info "Rebooting PBS"
sleep 2 sleep 2
msg_ok "Completed Post Install Routines" msg_ok "Completed Post Install Routines"
reboot reboot
;; ;;
no) no)
msg_error "Selected no to Rebooting Proxmox Backup Server (Reboot recommended)" msg_error "Selected no to Reboot (Reboot recommended)"
msg_ok "Completed Post Install Routines" msg_ok "Completed Post Install Routines"
;; ;;
esac esac
} }
header_info main
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
read -p "Start the Proxmox Backup Server Post Install Script (y/n)?" yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
start_routines

View File

@@ -43,113 +43,258 @@ msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
} }
if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then
msg_error "This script is only intended for Proxmox Mail Gateway"
exit 1
fi
repo_state() {
# $1 = repo name (e.g. pmg-enterprise, pmg-no-subscription, pmgtest)
local repo="$1"
local file=""
local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
[[ -f "$f" ]] || continue
if grep -q "$repo" "$f"; then
file="$f"
if grep -qE "^[^#].*${repo}" "$f"; then
state="active"
elif grep -qE "^#.*${repo}" "$f"; then
state="disabled"
fi
break
fi
done
echo "$state $file"
}
start_routines() { start_routines() {
header_info header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG SOURCES" --menu "This will set the correct sources to update and install Proxmox Mail Gateway.\n \nChange to Proxmox Mail Gateway sources?" 14 58 2 \
# ---- SOURCES ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG SOURCES" --menu \
"This will set the correct Debian sources for Proxmox Mail Gateway.\n\nCorrect sources?" 14 58 2 \
"yes" " " \ "yes" " " \
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Changing to Proxmox Mail Gateway Sources" msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian ${VERSION} main contrib deb http://deb.debian.org/debian ${VERSION} main contrib
deb http://deb.debian.org/debian ${VERSION}-updates main contrib deb http://deb.debian.org/debian ${VERSION}-updates main contrib
deb http://security.debian.org/debian-security ${VERSION}-security main contrib deb http://security.debian.org/debian-security ${VERSION}-security main contrib
EOF EOF
msg_ok "Changed to Proxmox Mail Gateway Sources" msg_ok "Corrected Debian Sources"
;;
no)
msg_error "Selected no to Correcting Proxmox Mail Gateway Sources"
;; ;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" --menu "The 'pmg-enterprise' repository is only available to users who have purchased a Proxmox Mail Gateway subscription.\n \nDisable 'pmg-enterprise' repository?" 14 58 2 \ # ---- PMG-ENTERPRISE ----
"yes" " " \ read -r state file <<<"$(repo_state pmg-enterprise)"
"no" " " 3>&2 2>&1 1>&3) case $state in
case $CHOICE in active)
yes) CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
msg_info "Disabling 'pmg-enterprise' repository" --menu "'pmg-enterprise' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
cat <<EOF >/etc/apt/sources.list.d/pmg-enterprise.list "keep" "Keep as is" \
# deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise "disable" "Comment out (disable)" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
keep) msg_ok "Kept 'pmg-enterprise' repository" ;;
disable)
msg_info "Disabling 'pmg-enterprise' repository"
sed -i "s/^[^#].*pmg-enterprise/# &/" "$file"
msg_ok "Disabled 'pmg-enterprise' repository"
;;
delete)
msg_info "Deleting 'pmg-enterprise' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-enterprise' repository file"
;;
esac
;;
disabled)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
--menu "'pmg-enterprise' repository is currently DISABLED.\n\nWhat do you want to do?" 14 58 3 \
"enable" "Uncomment (enable)" \
"keep" "Keep disabled" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
enable)
msg_info "Enabling 'pmg-enterprise' repository"
sed -i "s/^#.*pmg-enterprise/deb/" "$file"
msg_ok "Enabled 'pmg-enterprise' repository"
;;
keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;;
delete)
msg_info "Deleting 'pmg-enterprise' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-enterprise' repository file"
;;
esac
;;
missing)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
--menu "Add 'pmg-enterprise' repository?\n\nOnly for subscription customers." 14 58 2 \
"no" " " \
"yes" " " \
--default-item "no" \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmg-enterprise' repository"
cat >/etc/apt/sources.list.d/pmg-enterprise.list <<EOF
deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
EOF EOF
msg_ok "Disabled 'pmg-enterprise' repository" msg_ok "Added 'pmg-enterprise' repository"
;; ;;
no) no) msg_error "Selected no to Adding 'pmg-enterprise' repository" ;;
msg_error "Selected no to disabling 'pmg-enterprise' repository" esac
;; ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" --menu "The 'pmg-no-subscription' repository provides access to all of the open-source components of Proxmox Mail Gateway.\n \nEnable 'pmg-no-subscription' repository?" 14 58 2 \ # ---- PMG-NO-SUBSCRIPTION ----
"yes" " " \ read -r state file <<<"$(repo_state pmg-no-subscription)"
"no" " " 3>&2 2>&1 1>&3) case $state in
case $CHOICE in active)
yes) CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
msg_info "Enabling 'pmg-no-subscription' repository" --menu "'pmg-no-subscription' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
cat <<EOF >/etc/apt/sources.list.d/pmg-install-repo.list "keep" "Keep as is" \
"disable" "Comment out (disable)" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
keep) msg_ok "Kept 'pmg-no-subscription' repository" ;;
disable)
msg_info "Disabling 'pmg-no-subscription' repository"
sed -i "s/^[^#].*pmg-no-subscription/# &/" "$file"
msg_ok "Disabled 'pmg-no-subscription' repository"
;;
delete)
msg_info "Deleting 'pmg-no-subscription' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-no-subscription' repository file"
;;
esac
;;
disabled)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
--menu "'pmg-no-subscription' repository is currently DISABLED.\n\nWhat do you want to do?" 14 58 3 \
"enable" "Uncomment (enable)" \
"keep" "Keep disabled" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
enable)
msg_info "Enabling 'pmg-no-subscription' repository"
sed -i "s/^#.*pmg-no-subscription/deb/" "$file"
msg_ok "Enabled 'pmg-no-subscription' repository"
;;
keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;;
delete)
msg_info "Deleting 'pmg-no-subscription' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-no-subscription' repository file"
;;
esac
;;
missing)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
--menu "Add 'pmg-no-subscription' repository?" 14 58 2 \
"yes" " " \
"no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmg-no-subscription' repository"
cat >/etc/apt/sources.list.d/pmg-install-repo.list <<EOF
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription
EOF EOF
msg_ok "Enabled 'pmg-no-subscription' repository" msg_ok "Added 'pmg-no-subscription' repository"
;; ;;
no) no) msg_error "Selected no to Adding 'pmg-no-subscription' repository" ;;
msg_error "Selected no to enabling 'pmg-no-subscription' repository" esac
;; ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG TEST" --menu "The 'pmgtest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pmgtest' repository?" 14 58 2 \ # ---- PMG-TEST ----
"yes" " " \ read -r state file <<<"$(repo_state pmgtest)"
"no" " " 3>&2 2>&1 1>&3) case $state in
case $CHOICE in active) msg_ok "'pmgtest' repository already active (skipped)" ;;
yes) disabled) msg_ok "'pmgtest' repository already disabled (skipped)" ;;
msg_info "Adding 'pmgtest' repository and set disabled" missing)
cat <<EOF >/etc/apt/sources.list.d/pmgtest-for-beta.list CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG TEST" \
--menu "The 'pmgtest' repository can give advanced users access to new features early.\n\nAdd (disabled) 'pmgtest' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmgtest' repository (disabled)"
cat >/etc/apt/sources.list.d/pmgtest-for-beta.list <<EOF
# deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest # deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest
EOF EOF
msg_ok "Added 'pmgtest' repository" msg_ok "Added 'pmgtest' repository"
;; ;;
no) no) msg_error "Selected no to Adding 'pmgtest' repository" ;;
msg_error "Selected no to adding 'pmgtest' repository" esac
;; ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ # ---- SUBSCRIPTION NAG ----
"yes" " " \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu \
"no" " " 3>&2 2>&1 1>&3) "Disable subscription nag in PMG UI?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" \
"Supporting the software's development team is essential.\nPlease consider buying a subscription." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
# Normal GUI (proxmox-widget-toolkit) cat <<'EOF' >/etc/apt/apt.conf.d/no-nag-script
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script DPkg::Post-Invoke {
# JS library used when accessing via mobile device browser "if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; then echo 'Removing subscription nag from mobile UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script-pmgmanagerlib-mobile sed -i '/data\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js;
msg_ok "Disabled subscription nag (Delete browser cache)" fi";
"if [ -s /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; then
sed -i '/data\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js;
fi";
};
EOF
msg_ok "Disabled subscription nag (clear browser cache!)"
;; ;;
no) no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_error "Selected no to Disabling subscription nag"
msg_error "Selected no to disabling subscription nag" rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;; ;;
esac esac
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null || msg_error "Widget toolkit reinstall failed"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \ # ---- UPDATE ----
"yes" " " \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
"no" " " 3>&2 2>&1 1>&3) "Update Proxmox Mail Gateway now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Updating Proxmox Mail Gateway (Patience)" msg_info "Updating Proxmox Mail Gateway (Patience)"
apt-get update &>/dev/null apt update &>/dev/null || msg_error "apt update failed"
apt-get -y dist-upgrade &>/dev/null apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
msg_ok "Updated Proxmox Mail Gateway" msg_ok "Updated Proxmox Mail Gateway"
;; ;;
no) no) msg_error "Selected no to updating Proxmox Mail Gateway" ;;
msg_error "Selected no to updating Proxmox Mail Gateway"
;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Mail Gateway now? (recommended)" 11 58 2 \ # ---- REMINDER ----
"yes" " " \ whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
"no" " " 3>&2 2>&1 1>&3) "IMPORTANT:
Please run this script on every PMG node individually if you have multiple nodes.
After completing these steps, it is strongly recommended to REBOOT your node.
After the upgrade or post-install routines, always clear your browser cache or perform a hard reload (Ctrl+Shift+R) before using the PMG Web UI to avoid UI display issues." 20 80
# ---- REBOOT ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"Reboot Proxmox Mail Gateway now? (recommended)" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Rebooting Proxmox Mail Gateway" msg_info "Rebooting Proxmox Mail Gateway"
@@ -158,7 +303,7 @@ EOF
reboot reboot
;; ;;
no) no)
msg_error "Selected no to reboot Proxmox Mail Gateway (Reboot recommended)" msg_error "Selected no to reboot (Reboot recommended)"
msg_ok "Completed Post Install Routines" msg_ok "Completed Post Install Routines"
;; ;;
esac esac
@@ -167,7 +312,7 @@ EOF
header_info header_info
echo -e "\nThis script will Perform Post Install Routines.\n" echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do while true; do
read -p "Start the Proxmox Mail Gateway Post Install Script (y/n)?" yn read -rp "Start the Proxmox Mail Gateway Post Install Script (y/n)? " yn
case $yn in case $yn in
[Yy]*) break ;; [Yy]*) break ;;
[Nn]*) [Nn]*)