mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-09-13 07:10:51 +02:00
Compare commits
42 Commits
2025-08-25
...
2025-08-28
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f19659bea0 | ||
|
|
9cfb549dca | ||
|
|
ba09cbd9cc | ||
|
|
bc4d09b073 | ||
|
|
fb2d91abe7 | ||
|
|
5146385f4c | ||
|
|
346a8e140c | ||
|
|
42aa8f8868 | ||
|
|
459772162f | ||
|
|
1d65650d28 | ||
|
|
a2099bc195 | ||
|
|
896545ab1b | ||
|
|
522f427677 | ||
|
|
5d70455d93 | ||
|
|
01a91d8b4f | ||
|
|
f66a60ee47 | ||
|
|
b4e74b2a17 | ||
|
|
644e5900d9 | ||
|
|
3f3f536ebe | ||
|
|
baa39d05a5 | ||
|
|
a85bca7326 | ||
|
|
6defba8ab3 | ||
|
|
59f6329e85 | ||
|
|
856c724b5d | ||
|
|
67a20a9b4a | ||
|
|
27cd66f48a | ||
|
|
d25a12c87e | ||
|
|
e24315c50b | ||
|
|
753ed67b50 | ||
|
|
d6e498050f | ||
|
|
4a69a7b39f | ||
|
|
1dcde93b4a | ||
|
|
663c6570f4 | ||
|
|
6a17e25871 | ||
|
|
e609552cec | ||
|
|
bd4b781c9e | ||
|
|
7eb6715a1f | ||
|
|
aa0190978f | ||
|
|
e0f5e588e0 | ||
|
|
3949e2e049 | ||
|
|
ab4560b879 | ||
|
|
b8f854e7ad |
56
CHANGELOG.md
56
CHANGELOG.md
@@ -10,8 +10,64 @@
|
|||||||
> [!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-29
|
||||||
|
|
||||||
|
## 2025-08-28
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- MediaManager ([#7238](https://github.com/community-scripts/ProxmoxVE/pull/7238))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- MMDL: add build-essential as dep [@vhsdream](https://github.com/vhsdream) ([#7266](https://github.com/community-scripts/ProxmoxVE/pull/7266))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- add support for multiple ip addresses in monitor-all.sh [@moshekv](https://github.com/moshekv) ([#7244](https://github.com/community-scripts/ProxmoxVE/pull/7244))
|
||||||
|
- [core]: feature - check_for_gh_release as update-handler [@MickLesk](https://github.com/MickLesk) ([#7254](https://github.com/community-scripts/ProxmoxVE/pull/7254))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Flaresolverr: Pin to 3.3.25 (Python Issue) [@MickLesk](https://github.com/MickLesk) ([#7248](https://github.com/community-scripts/ProxmoxVE/pull/7248))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Keycloak: Update website [@tremor021](https://github.com/tremor021) ([#7256](https://github.com/community-scripts/ProxmoxVE/pull/7256))
|
||||||
|
|
||||||
|
## 2025-08-27
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- searxng: improve installation [@MickLesk](https://github.com/MickLesk) ([#7233](https://github.com/community-scripts/ProxmoxVE/pull/7233))
|
||||||
|
- Homebox: Fix Update Script [@MickLesk](https://github.com/MickLesk) ([#7232](https://github.com/community-scripts/ProxmoxVE/pull/7232))
|
||||||
|
|
||||||
## 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
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ function update_script() {
|
|||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
rm -rf /opt/flaresolverr
|
rm -rf /opt/flaresolverr
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start flaresolverr
|
systemctl start flaresolverr
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __ __
|
|
||||||
/ / / /___ ____ __________/ /__ _____
|
|
||||||
/ /_/ / __ \/ __ `/ ___/ __ / _ \/ ___/
|
|
||||||
/ __ / /_/ / /_/ / / / /_/ / __/ /
|
|
||||||
/_/ /_/\____/\__,_/_/ \__,_/\___/_/
|
|
||||||
|
|
||||||
6
ct/headers/mediamanager
Normal file
6
ct/headers/mediamanager
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ___ ___ __ ___
|
||||||
|
/ |/ /__ ____/ (_)___ _/ |/ /___ _____ ____ _____ ____ _____
|
||||||
|
/ /|_/ / _ \/ __ / / __ `/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||||
|
/ / / / __/ /_/ / / /_/ / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||||
|
/_/ /_/\___/\__,_/_/\__,_/_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||||
|
/____/
|
||||||
6
ct/headers/tracktor
Normal file
6
ct/headers/tracktor
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ /__________ ______/ /__/ /_____ _____
|
||||||
|
/ __/ ___/ __ `/ ___/ //_/ __/ __ \/ ___/
|
||||||
|
/ /_/ / / /_/ / /__/ ,< / /_/ /_/ / /
|
||||||
|
\__/_/ \__,_/\___/_/|_|\__/\____/_/
|
||||||
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: MickLesk (Canbiz) & vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://hoarder.app/
|
|
||||||
|
|
||||||
APP="Hoarder"
|
|
||||||
var_tags="${var_tags:-bookmark}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-4096}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
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/hoarder ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop hoarder-web hoarder-workers hoarder-browser
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
if [[ $(corepack -v) < "0.31.0" ]]; then
|
|
||||||
$STD npm install -g corepack@0.31.0
|
|
||||||
fi
|
|
||||||
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
|
|
||||||
$STD apt-get install -y graphicsmagick ghostscript
|
|
||||||
fi
|
|
||||||
cd /opt
|
|
||||||
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
|
|
||||||
mkdir -p /etc/hoarder
|
|
||||||
mv /opt/hoarder/.env /etc/hoarder/hoarder.env
|
|
||||||
fi
|
|
||||||
rm -rf /opt/hoarder
|
|
||||||
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
$STD unzip v"${RELEASE}".zip
|
|
||||||
mv karakeep-"${RELEASE}" /opt/hoarder
|
|
||||||
cd /opt/hoarder/apps/web
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm exec next build --experimental-build-mode compile
|
|
||||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
|
|
||||||
cd /opt/hoarder/apps/workers
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
export DATA_DIR=/opt/hoarder_data
|
|
||||||
cd /opt/hoarder/packages/db
|
|
||||||
$STD pnpm migrate
|
|
||||||
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start hoarder-browser hoarder-workers hoarder-web
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -R /opt/v"${RELEASE}".zip
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
|
||||||
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}"
|
|
||||||
@@ -27,8 +27,9 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ -x /opt/homebox ]]; then
|
if [[ -x /opt/homebox ]]; then
|
||||||
sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
|
sed -i 's|WorkingDirectory=/opt$|WorkingDirectory=/opt/homebox|' /etc/systemd/system/homebox.service
|
||||||
sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
|
sed -i 's|ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
|
||||||
|
sed -i 's|EnvironmentFile=/opt/.env$|EnvironmentFile=/opt/homebox/.env|' /etc/systemd/system/homebox.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -38,7 +39,9 @@ function update_script() {
|
|||||||
systemctl stop homebox
|
systemctl stop homebox
|
||||||
msg_ok "${APP} Stopped"
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
[ -x /opt/homebox ] && rm -f /opt/homebox
|
if [ -f /opt/homebox ] && [ -x /opt/homebox ]; then
|
||||||
|
rm -f /opt/homebox
|
||||||
|
fi
|
||||||
fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
|
fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
|
||||||
chmod +x /opt/homebox/homebox
|
chmod +x /opt/homebox/homebox
|
||||||
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
|
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
|
||||||
|
|||||||
79
ct/mediamanager.sh
Normal file
79
ct/mediamanager.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/maxdorninger/MediaManager
|
||||||
|
|
||||||
|
APP="MediaManager"
|
||||||
|
var_tags="${var_tags:-arr}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-3072}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
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/mediamanager ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/maxdorninger/MediaManager/releases/latest | jq '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.mediamanager 2>/dev/null)" ]] || [[ ! -f ~/.mediamanager ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop mediamanager
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
MM_DIR="/opt/mm"
|
||||||
|
export CONFIG_DIR="${MM_DIR}/config"
|
||||||
|
export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
|
||||||
|
export BASE_PATH=""
|
||||||
|
export PUBLIC_VERSION=""
|
||||||
|
export PUBLIC_API_URL="${BASE_PATH}/api/v1"
|
||||||
|
export BASE_PATH="${BASE_PATH}/web"
|
||||||
|
cd /opt/mediamanager/web
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
rm -rf "$FRONTEND_FILES_DIR"/build
|
||||||
|
cp -r build "$FRONTEND_FILES_DIR"
|
||||||
|
export BASE_PATH=""
|
||||||
|
export VIRTUAL_ENV="/opt/${MM_DIR}/venv"
|
||||||
|
cd /opt/mediamanager
|
||||||
|
rm -rf "$MM_DIR"/{media_manager,alembic*}
|
||||||
|
cp -r {media_manager,alembic*} "$MM_DIR"
|
||||||
|
$STD /usr/local/bin/uv sync --locked --active
|
||||||
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start mediamanager
|
||||||
|
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}:8000${CL}"
|
||||||
72
ct/tracktor.sh
Normal file
72
ct/tracktor.sh
Normal 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}"
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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.",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -31,5 +31,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Flaresolverr is pinned to Version 3.3.25 because they add an breaking python package which doesn't work with debian 12.`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -36,10 +36,6 @@
|
|||||||
"text": "First start can take a few minutes",
|
"text": "First start can take a few minutes",
|
||||||
"type": "warning"
|
"type": "warning"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"text": "This script requires some extra steps after the installation, Please checkout the `https://github.com/community-scripts/ProxmoxVE/discussions/193`",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"text": "When updating, if you had modified cache-ispn.xml: Re-apply your changes to the new file, otherwise leave it unchanged.",
|
"text": "When updating, if you had modified cache-ispn.xml: Re-apply your changes to the new file, otherwise leave it unchanged.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
45
frontend/public/json/mediamanager.json
Normal file
45
frontend/public/json/mediamanager.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"name": "MediaManager",
|
||||||
|
"slug": "mediamanager",
|
||||||
|
"categories": [
|
||||||
|
14,
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-28",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8000,
|
||||||
|
"documentation": "https://maxdorninger.github.io/MediaManager/introduction.html",
|
||||||
|
"config_path": "/opt/mm_data/config.toml",
|
||||||
|
"website": "https://github.com/maxdorninger/MediaManager",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mediamanager.webp",
|
||||||
|
"description": "A modern selfhosted media management system for your media library",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/mediamanager.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 3072,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "<email address>",
|
||||||
|
"password": "admin"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "During the installation, provide the email address of the first admin user",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "You're probably going to want to use a bind mount for the media directories",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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.",
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
52
frontend/public/json/pbs4-upgrade.json
Normal file
52
frontend/public/json/pbs4-upgrade.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
35
frontend/public/json/searxng.json
Normal file
35
frontend/public/json/searxng.json
Normal 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": []
|
||||||
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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.",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
40
frontend/public/json/tracktor.json
Normal file
40
frontend/public/json/tracktor.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -1,4 +1,259 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "Dolibarr/dolibarr",
|
||||||
|
"version": "21.0.3",
|
||||||
|
"date": "2025-08-28T21:05:15Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Part-DB/Part-DB-server",
|
||||||
|
"version": "v1.17.4",
|
||||||
|
"date": "2025-08-28T21:00:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "9001/copyparty",
|
||||||
|
"version": "v1.19.7",
|
||||||
|
"date": "2025-08-28T20:42:58Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linkwarden/linkwarden",
|
||||||
|
"version": "v2.12.2",
|
||||||
|
"date": "2025-08-28T20:34:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dgtlmoon/changedetection.io",
|
||||||
|
"version": "0.50.11",
|
||||||
|
"date": "2025-08-28T20:12:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lidarr/Lidarr",
|
||||||
|
"version": "v2.13.3.4711",
|
||||||
|
"date": "2025-08-28T20:06:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.11.8",
|
||||||
|
"date": "2025-08-27T18:43:44Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mongodb/mongo",
|
||||||
|
"version": "r7.0.24-rc0",
|
||||||
|
"date": "2025-08-28T19:08:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "immich-app/immich",
|
||||||
|
"version": "v1.140.0",
|
||||||
|
"date": "2025-08-28T18:50:45Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "benjaminjonard/koillection",
|
||||||
|
"version": "1.7.0",
|
||||||
|
"date": "2025-08-28T18:10:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "grokability/snipe-it",
|
||||||
|
"version": "v8.3.0",
|
||||||
|
"date": "2025-08-28T17:49:06Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rcourtman/Pulse",
|
||||||
|
"version": "v4.9.1",
|
||||||
|
"date": "2025-08-28T13:34:45Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "msgbyte/tianji",
|
||||||
|
"version": "v1.24.24",
|
||||||
|
"date": "2025-08-28T17:27:37Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gristlabs/grist-core",
|
||||||
|
"version": "v1.7.3",
|
||||||
|
"date": "2025-08-28T16:50:02Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "saltstack/salt",
|
||||||
|
"version": "v3006.15",
|
||||||
|
"date": "2025-08-28T16:49:46Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BookStackApp/BookStack",
|
||||||
|
"version": "v25.07.2",
|
||||||
|
"date": "2025-08-28T16:46:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Threadfin/Threadfin",
|
||||||
|
"version": "1.2.37",
|
||||||
|
"date": "2025-08-28T16:25:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "home-assistant/operating-system",
|
||||||
|
"version": "16.1",
|
||||||
|
"date": "2025-08-13T07:58:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "influxdata/influxdb",
|
||||||
|
"version": "v3.4.1",
|
||||||
|
"date": "2025-08-28T13:56:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v4.0.3",
|
||||||
|
"date": "2025-08-22T07:43:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "open-webui/open-webui",
|
||||||
|
"version": "v0.6.26",
|
||||||
|
"date": "2025-08-28T10:40:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "neo4j/neo4j",
|
||||||
|
"version": "4.4.45",
|
||||||
|
"date": "2025-08-28T10:12:16Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apache/cassandra",
|
||||||
|
"version": "4.1.10-tentative",
|
||||||
|
"date": "2025-08-28T10:02:40Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fuma-nama/fumadocs",
|
||||||
|
"version": "fumadocs-ui@15.7.4",
|
||||||
|
"date": "2025-08-28T08:58:06Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.108.2",
|
||||||
|
"date": "2025-08-27T13:05:35Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "garethgeorge/backrest",
|
||||||
|
"version": "v1.9.2",
|
||||||
|
"date": "2025-08-28T07:06:14Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.2360",
|
||||||
|
"date": "2025-08-28T05:55:58Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gotson/komga",
|
||||||
|
"version": "1.23.3",
|
||||||
|
"date": "2025-08-28T02:50:06Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
|
"version": "v4.1.3",
|
||||||
|
"date": "2025-08-04T12:13:45Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jeedom/core",
|
||||||
|
"version": "4.4.19",
|
||||||
|
"date": "2025-08-28T00:27:14Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "steveiliop56/tinyauth",
|
||||||
|
"version": "v3.6.2",
|
||||||
|
"date": "2025-07-17T12:08:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.0.15",
|
||||||
|
"date": "2025-08-27T12:12:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocket-id/pocket-id",
|
||||||
|
"version": "v1.10.0",
|
||||||
|
"date": "2025-08-27T20:35:47Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ipfs/kubo",
|
||||||
|
"version": "v0.37.0",
|
||||||
|
"date": "2025-08-27T20:03:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "home-assistant/core",
|
||||||
|
"version": "2025.8.3",
|
||||||
|
"date": "2025-08-21T18:23:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gtsteffaniak/filebrowser",
|
||||||
|
"version": "v0.8.3-beta",
|
||||||
|
"date": "2025-08-27T18:18:48Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "raydak-labs/configarr",
|
||||||
|
"version": "v1.15.0",
|
||||||
|
"date": "2025-08-27T17:12:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zwave-js/zwave-js-ui",
|
||||||
|
"version": "v11.2.1",
|
||||||
|
"date": "2025-08-27T15:19:02Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Paymenter/Paymenter",
|
||||||
|
"version": "v1.2.11",
|
||||||
|
"date": "2025-08-27T11:23:09Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "traefik/traefik",
|
||||||
|
"version": "v3.5.1",
|
||||||
|
"date": "2025-08-27T09:21:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "theonedev/onedev",
|
||||||
|
"version": "v12.0.8",
|
||||||
|
"date": "2025-08-27T06:22:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "henrygd/beszel",
|
||||||
|
"version": "v0.12.5",
|
||||||
|
"date": "2025-08-27T01:15:16Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "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": "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": "coder/code-server",
|
"name": "coder/code-server",
|
||||||
"version": "v4.103.2",
|
"version": "v4.103.2",
|
||||||
@@ -24,40 +279,20 @@
|
|||||||
"version": "v5.13.0",
|
"version": "v5.13.0",
|
||||||
"date": "2025-08-25T19:19:51Z"
|
"date": "2025-08-25T19:19:51Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "immich-app/immich",
|
|
||||||
"version": "v1.139.4",
|
|
||||||
"date": "2025-08-25T18:31:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.11.7",
|
|
||||||
"date": "2025-08-25T18:04:05Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mealie-recipes/mealie",
|
"name": "mealie-recipes/mealie",
|
||||||
"version": "v3.1.2",
|
"version": "v3.1.2",
|
||||||
"date": "2025-08-25T18:00:52Z"
|
"date": "2025-08-25T18:00:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "linkwarden/linkwarden",
|
|
||||||
"version": "v2.11.8",
|
|
||||||
"date": "2025-08-25T16:27:12Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "rcourtman/Pulse",
|
|
||||||
"version": "v4.7.6",
|
|
||||||
"date": "2025-08-23T22:49:00Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Checkmk/checkmk",
|
"name": "Checkmk/checkmk",
|
||||||
"version": "v2.3.0p36",
|
"version": "v2.3.0p36",
|
||||||
"date": "2025-08-25T15:32:14Z"
|
"date": "2025-08-25T15:32:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "n8n-io/n8n",
|
"name": "wazuh/wazuh",
|
||||||
"version": "n8n@1.107.4",
|
"version": "coverity-w35-4.13.0",
|
||||||
"date": "2025-08-20T12:23:06Z"
|
"date": "2025-08-25T15:17:33Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "crowdsecurity/crowdsec",
|
"name": "crowdsecurity/crowdsec",
|
||||||
@@ -74,31 +309,11 @@
|
|||||||
"version": "7.4.2",
|
"version": "7.4.2",
|
||||||
"date": "2025-08-25T12:38:14Z"
|
"date": "2025-08-25T12:38:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "gotson/komga",
|
|
||||||
"version": "1.23.2",
|
|
||||||
"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,41 +329,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",
|
|
||||||
"version": "v0.8.2-beta",
|
|
||||||
"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",
|
||||||
"date": "2025-01-05T21:14:23Z"
|
"date": "2025-01-05T21:14:23Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pocket-id/pocket-id",
|
|
||||||
"version": "v1.9.1",
|
|
||||||
"date": "2025-08-24T21:27:58Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "moghtech/komodo",
|
"name": "moghtech/komodo",
|
||||||
"version": "v1.19.1",
|
"version": "v1.19.1",
|
||||||
@@ -156,8 +346,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",
|
||||||
@@ -174,26 +364,6 @@
|
|||||||
"version": "v2.0.5.5160",
|
"version": "v2.0.5.5160",
|
||||||
"date": "2025-08-23T21:23:11Z"
|
"date": "2025-08-23T21:23:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "fuma-nama/fumadocs",
|
|
||||||
"version": "fumadocs-openapi@9.2.3",
|
|
||||||
"date": "2025-08-24T12:48:14Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.3.3",
|
|
||||||
"date": "2025-08-20T10:12:51Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Lidarr/Lidarr",
|
|
||||||
"version": "v2.12.4.4658",
|
|
||||||
"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,26 +424,6 @@
|
|||||||
"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",
|
|
||||||
"version": "v0.6.25",
|
|
||||||
"date": "2025-08-22T13:22:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wazuh/wazuh",
|
|
||||||
"version": "v4.10.3",
|
|
||||||
"date": "2025-08-19T18:51:00Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "theonedev/onedev",
|
|
||||||
"version": "v12.0.7",
|
|
||||||
"date": "2025-08-22T10:00:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "syncthing/syncthing",
|
"name": "syncthing/syncthing",
|
||||||
"version": "v2.0.3",
|
"version": "v2.0.3",
|
||||||
@@ -284,11 +434,6 @@
|
|||||||
"version": "v10.11.2",
|
"version": "v10.11.2",
|
||||||
"date": "2025-08-22T06:50:56Z"
|
"date": "2025-08-22T06:50:56Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zitadel/zitadel",
|
|
||||||
"version": "v4.0.3",
|
|
||||||
"date": "2025-08-22T07:43:52Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "lazy-media/Reactive-Resume",
|
"name": "lazy-media/Reactive-Resume",
|
||||||
"version": "v1.2.4",
|
"version": "v1.2.4",
|
||||||
@@ -309,36 +454,16 @@
|
|||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"date": "2025-08-22T02:21:40Z"
|
"date": "2025-08-22T02:21:40Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "9001/copyparty",
|
|
||||||
"version": "v1.19.5",
|
|
||||||
"date": "2025-08-21T23:45:57Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ipfs/kubo",
|
|
||||||
"version": "v0.36.0",
|
|
||||||
"date": "2025-07-14T18:59:57Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "HabitRPG/habitica",
|
"name": "HabitRPG/habitica",
|
||||||
"version": "v5.39.0",
|
"version": "v5.39.0",
|
||||||
"date": "2025-08-21T18:40:00Z"
|
"date": "2025-08-21T18:40:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "home-assistant/core",
|
|
||||||
"version": "2025.8.3",
|
|
||||||
"date": "2025-08-21T18:23:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hargata/lubelog",
|
"name": "hargata/lubelog",
|
||||||
"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 +489,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",
|
||||||
@@ -384,11 +504,6 @@
|
|||||||
"version": "4.3.7",
|
"version": "4.3.7",
|
||||||
"date": "2025-08-20T10:26:21Z"
|
"date": "2025-08-20T10:26:21Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "apache/cassandra",
|
|
||||||
"version": "4.1.10-tentative",
|
|
||||||
"date": "2025-08-20T10:20:25Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "duplicati/duplicati",
|
"name": "duplicati/duplicati",
|
||||||
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
||||||
@@ -409,16 +524,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",
|
|
||||||
"version": "0.50.10",
|
|
||||||
"date": "2025-08-19T17:21:44Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "karlomikus/bar-assistant",
|
"name": "karlomikus/bar-assistant",
|
||||||
"version": "v5.8.0",
|
"version": "v5.8.0",
|
||||||
@@ -429,11 +534,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",
|
||||||
@@ -514,36 +614,16 @@
|
|||||||
"version": "v0.14.1",
|
"version": "v0.14.1",
|
||||||
"date": "2024-08-29T22:32:51Z"
|
"date": "2024-08-29T22:32:51Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Paymenter/Paymenter",
|
|
||||||
"version": "v1.2.10",
|
|
||||||
"date": "2025-08-16T11:45:23Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mongodb/mongo",
|
|
||||||
"version": "r8.2.0",
|
|
||||||
"date": "2025-08-15T22:02:15Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jhuckaby/Cronicle",
|
"name": "jhuckaby/Cronicle",
|
||||||
"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",
|
||||||
"date": "2025-08-15T06:19:12Z"
|
"date": "2025-08-15T06:19:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "gristlabs/grist-core",
|
|
||||||
"version": "v1.7.2",
|
|
||||||
"date": "2025-08-14T19:07:57Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jellyfin/jellyfin",
|
"name": "jellyfin/jellyfin",
|
||||||
"version": "v10.10.7",
|
"version": "v10.10.7",
|
||||||
@@ -564,26 +644,11 @@
|
|||||||
"version": "v1.24.5",
|
"version": "v1.24.5",
|
||||||
"date": "2025-08-13T16:35:52Z"
|
"date": "2025-08-13T16:35:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Part-DB/Part-DB-server",
|
|
||||||
"version": "v1.17.3",
|
|
||||||
"date": "2025-08-13T14:04:44Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ellite/Wallos",
|
"name": "ellite/Wallos",
|
||||||
"version": "v4.1.1",
|
"version": "v4.1.1",
|
||||||
"date": "2025-08-13T11:58:04Z"
|
"date": "2025-08-13T11:58:04Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "raydak-labs/configarr",
|
|
||||||
"version": "v1.14.1",
|
|
||||||
"date": "2025-08-13T09:34:15Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "home-assistant/operating-system",
|
|
||||||
"version": "16.1",
|
|
||||||
"date": "2025-08-13T07:58:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "requarks/wiki",
|
"name": "requarks/wiki",
|
||||||
"version": "v2.5.308",
|
"version": "v2.5.308",
|
||||||
@@ -609,11 +674,6 @@
|
|||||||
"version": "REL_13_22",
|
"version": "REL_13_22",
|
||||||
"date": "2025-08-11T21:10:58Z"
|
"date": "2025-08-11T21:10:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "BookStackApp/BookStack",
|
|
||||||
"version": "v25.07.1",
|
|
||||||
"date": "2025-08-11T13:53:22Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "FlowiseAI/Flowise",
|
"name": "FlowiseAI/Flowise",
|
||||||
"version": "flowise@3.0.5",
|
"version": "flowise@3.0.5",
|
||||||
@@ -649,11 +709,6 @@
|
|||||||
"version": "v1.2.0",
|
"version": "v1.2.0",
|
||||||
"date": "2025-08-09T14:30:52Z"
|
"date": "2025-08-09T14:30:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Dolibarr/dolibarr",
|
|
||||||
"version": "22.0.0",
|
|
||||||
"date": "2025-08-09T12:48:17Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "authelia/authelia",
|
"name": "authelia/authelia",
|
||||||
"version": "v4.39.6",
|
"version": "v4.39.6",
|
||||||
@@ -679,21 +734,6 @@
|
|||||||
"version": "mariadb-12.0.2",
|
"version": "mariadb-12.0.2",
|
||||||
"date": "2025-08-07T21:23:15Z"
|
"date": "2025-08-07T21:23:15Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
|
||||||
"version": "v4.1.3",
|
|
||||||
"date": "2025-08-04T12:13:45Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "zwave-js/zwave-js-ui",
|
|
||||||
"version": "v11.1.0",
|
|
||||||
"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",
|
||||||
@@ -724,11 +764,6 @@
|
|||||||
"version": "v0.15.0-rc5",
|
"version": "v0.15.0-rc5",
|
||||||
"date": "2025-08-06T08:55:10Z"
|
"date": "2025-08-06T08:55:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "garethgeorge/backrest",
|
|
||||||
"version": "v1.9.1",
|
|
||||||
"date": "2025-08-06T05:48:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "autobrr/autobrr",
|
"name": "autobrr/autobrr",
|
||||||
"version": "v1.65.0",
|
"version": "v1.65.0",
|
||||||
@@ -759,16 +794,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",
|
|
||||||
"version": "1.6.18",
|
|
||||||
"date": "2025-08-03T21:41:45Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Tautulli/Tautulli",
|
"name": "Tautulli/Tautulli",
|
||||||
"version": "v2.15.3",
|
"version": "v2.15.3",
|
||||||
@@ -819,21 +844,11 @@
|
|||||||
"version": "2025.07.31",
|
"version": "2025.07.31",
|
||||||
"date": "2025-08-01T14:44:48Z"
|
"date": "2025-08-01T14:44:48Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "neo4j/neo4j",
|
|
||||||
"version": "2025.07.1",
|
|
||||||
"date": "2025-08-01T14:40:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Suwayomi/Suwayomi-Server",
|
"name": "Suwayomi/Suwayomi-Server",
|
||||||
"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",
|
||||||
@@ -894,21 +909,11 @@
|
|||||||
"version": "v12.0.1",
|
"version": "v12.0.1",
|
||||||
"date": "2025-07-25T11:54:30Z"
|
"date": "2025-07-25T11:54:30Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "grokability/snipe-it",
|
|
||||||
"version": "v8.2.1",
|
|
||||||
"date": "2025-07-24T14:37:54Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "minio/minio",
|
"name": "minio/minio",
|
||||||
"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",
|
||||||
@@ -969,11 +974,6 @@
|
|||||||
"version": "v1.7.2",
|
"version": "v1.7.2",
|
||||||
"date": "2025-07-10T19:29:26Z"
|
"date": "2025-07-10T19:29:26Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "saltstack/salt",
|
|
||||||
"version": "v3007.6",
|
|
||||||
"date": "2025-07-10T18:37:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "NginxProxyManager/nginx-proxy-manager",
|
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||||
"version": "v2.12.6",
|
"version": "v2.12.6",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"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": "",
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ $STD apt update
|
|||||||
$STD apt install -y google-chrome-stable
|
$STD apt install -y google-chrome-stable
|
||||||
msg_ok "Installed Chrome"
|
msg_ok "Installed Chrome"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "v3.3.25" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing dependencies"
|
||||||
|
$STD apt-get install --no-install-recommends -y build-essential
|
||||||
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
NODE_VERSION="20" setup_nodejs
|
NODE_VERSION="20" setup_nodejs
|
||||||
MYSQL_VERSION="8.0" setup_mysql
|
MYSQL_VERSION="8.0" setup_mysql
|
||||||
|
|
||||||
|
|||||||
118
install/mediamanager-install.sh
Normal file
118
install/mediamanager-install.sh
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2025 Community Scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/maxdorninger/MediaManager
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Enter the email address of your first admin user: " admin_email
|
||||||
|
if [[ "$admin_email" ]]; then
|
||||||
|
EMAIL="$admin_email"
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup_yq
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
setup_uv
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME="mm_db"
|
||||||
|
DB_USER="mm_user"
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
|
{
|
||||||
|
echo "MediaManager Credentials"
|
||||||
|
echo "MediaManager Database User: $DB_USER"
|
||||||
|
echo "MediaManager Database Password: $DB_PASS"
|
||||||
|
echo "MediaManager Database Name: $DB_NAME"
|
||||||
|
} >>~/mediamanager.creds
|
||||||
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
|
||||||
|
|
||||||
|
msg_info "Configuring MediaManager"
|
||||||
|
MM_DIR="/opt/mm"
|
||||||
|
MEDIA_DIR="${MM_DIR}/media"
|
||||||
|
export CONFIG_DIR="${MM_DIR}/config"
|
||||||
|
export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
|
||||||
|
export BASE_PATH=""
|
||||||
|
export PUBLIC_VERSION=""
|
||||||
|
export PUBLIC_API_URL="${BASE_PATH}/api/v1"
|
||||||
|
export BASE_PATH="${BASE_PATH}/web"
|
||||||
|
cd /opt/mediamanager/web
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"}
|
||||||
|
cp -r build "$FRONTEND_FILES_DIR"
|
||||||
|
export BASE_PATH=""
|
||||||
|
export VIRTUAL_ENV="${MM_DIR}/venv"
|
||||||
|
cd /opt/mediamanager
|
||||||
|
cp -r {media_manager,alembic*} "$MM_DIR"
|
||||||
|
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
||||||
|
$STD /usr/local/bin/uv sync --locked --active
|
||||||
|
msg_ok "Configured MediaManager"
|
||||||
|
|
||||||
|
msg_info "Creating config and start script"
|
||||||
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
|
SECRET="$(openssl rand -hex 32)"
|
||||||
|
sed -e "s/localhost:8/$LOCAL_IP:8/g" \
|
||||||
|
-e "s|/data/|$MEDIA_DIR/|g" \
|
||||||
|
-e 's/"db"/"localhost"/' \
|
||||||
|
-e "s/user = \"MediaManager\"/user = \"$DB_USER\"/" \
|
||||||
|
-e "s/password = \"MediaManager\"/password = \"$DB_PASS\"/" \
|
||||||
|
-e "s/dbname = \"MediaManager\"/dbname = \"$DB_NAME\"/" \
|
||||||
|
-e "/^token_secret/s/=.*/= \"$SECRET\"/" \
|
||||||
|
-e "s/admin@example.com/$EMAIL/" \
|
||||||
|
-e '/^admin_emails/s/, .*/]/' \
|
||||||
|
/opt/mediamanager/config.example.toml >"$CONFIG_DIR"/config.toml
|
||||||
|
|
||||||
|
mkdir -p "$MEDIA_DIR"/{images,tv,movies,torrents}
|
||||||
|
|
||||||
|
cat <<EOF >"$MM_DIR"/start.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export CONFIG_DIR="$CONFIG_DIR"
|
||||||
|
export FRONTEND_FILES_DIR="$FRONTEND_FILES_DIR"
|
||||||
|
export BASE_PATH=""
|
||||||
|
cd "$MM_DIR"
|
||||||
|
source ./venv/bin/activate
|
||||||
|
/usr/local/bin/uv run alembic upgrade head
|
||||||
|
/usr/local/bin/uv run fastapi run ./media_manager/main.py --port 8000
|
||||||
|
EOF
|
||||||
|
chmod +x "$MM_DIR"/start.sh
|
||||||
|
msg_ok "Created config and start script"
|
||||||
|
|
||||||
|
msg_info "Creating service"
|
||||||
|
cat <<EOF >/etc/systemd/system/mediamanager.service
|
||||||
|
[Unit]
|
||||||
|
Description=MediaManager Backend Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=${MM_DIR}
|
||||||
|
ExecStart=/usr/bin/bash start.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now mediamanager
|
||||||
|
msg_ok "Created service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -33,12 +33,12 @@ $STD sudo -H -u searxng git clone https://github.com/searxng/searxng /usr/local/
|
|||||||
msg_ok "Cloned SearXNG"
|
msg_ok "Cloned SearXNG"
|
||||||
|
|
||||||
msg_info "Creating Python virtual environment"
|
msg_info "Creating Python virtual environment"
|
||||||
sudo -H -u searxng bash -c "
|
sudo -H -u searxng bash -c '
|
||||||
python3 -m venv /usr/local/searxng/searx-pyenv &&
|
python3 -m venv /usr/local/searxng/searx-pyenv &&
|
||||||
. /usr/local/searxng/searx-pyenv/bin/activate &&
|
. /usr/local/searxng/searx-pyenv/bin/activate &&
|
||||||
$STD pip install -U pip setuptools wheel pyyaml &&
|
pip install -U pip setuptools wheel pyyaml &&
|
||||||
$STD pip install --use-pep517 --no-build-isolation -e /usr/local/searxng/searxng-src
|
pip install --use-pep517 --no-build-isolation -e /usr/local/searxng/searxng-src
|
||||||
"
|
'
|
||||||
msg_ok "Python environment ready"
|
msg_ok "Python environment ready"
|
||||||
|
|
||||||
msg_info "Configuring SearXNG settings"
|
msg_info "Configuring SearXNG settings"
|
||||||
|
|||||||
61
install/tracktor-install.sh
Normal file
61
install/tracktor-install.sh
Normal 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"
|
||||||
@@ -187,22 +187,18 @@ function setup_postgresql() {
|
|||||||
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
|
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
|
||||||
>/etc/apt/sources.list.d/pgdg.list
|
>/etc/apt/sources.list.d/pgdg.list
|
||||||
|
|
||||||
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD msg_ok "Repository added"
|
$STD msg_ok "Repository added"
|
||||||
|
|
||||||
msg_info "Setup PostgreSQL $PG_VERSION"
|
msg_info "Setup PostgreSQL $PG_VERSION"
|
||||||
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
|
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
|
||||||
|
|
||||||
|
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
|
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
systemctl enable -q --now postgresql
|
systemctl enable -q --now postgresql
|
||||||
|
|
||||||
|
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
$STD msg_info "Restoring dumped data"
|
$STD msg_info "Restoring dumped data"
|
||||||
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
@@ -1924,3 +1920,69 @@ function setup_ffmpeg() {
|
|||||||
ensure_usr_local_bin_persist
|
ensure_usr_local_bin_persist
|
||||||
msg_ok "Setup FFmpeg $FINAL_VERSION"
|
msg_ok "Setup FFmpeg $FINAL_VERSION"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Checks for new GitHub release (latest tag).
|
||||||
|
#
|
||||||
|
# Description:
|
||||||
|
# - Queries the GitHub API for the latest release tag
|
||||||
|
# - Compares it to a local cached version (~/.<app>)
|
||||||
|
# - If newer, sets global CHECK_UPDATE_RELEASE and returns 0
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
|
||||||
|
# # trigger update...
|
||||||
|
# fi
|
||||||
|
# exit 0
|
||||||
|
# } (end of update_script not from the function)
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
# - Requires `jq` (auto-installed if missing)
|
||||||
|
# - Does not modify anything, only checks version state
|
||||||
|
# - Does not support pre-releases
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
check_for_gh_release() {
|
||||||
|
local app="$1"
|
||||||
|
local source="$2"
|
||||||
|
local current_file="$HOME/.${app,,}"
|
||||||
|
|
||||||
|
msg_info "Check for update: ${app}"
|
||||||
|
|
||||||
|
# DNS check for GitHub
|
||||||
|
if ! getent hosts api.github.com >/dev/null 2>&1; then
|
||||||
|
msg_error "Network error: cannot resolve api.github.com"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# jq check
|
||||||
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y jq || {
|
||||||
|
msg_error "Failed to install jq"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get latest release
|
||||||
|
local release
|
||||||
|
release=$(curl -fsSL "https://api.github.com/repos/${source}/releases/latest" |
|
||||||
|
jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
|
||||||
|
if [[ -z "$release" ]]; then
|
||||||
|
msg_error "Unable to determine latest release for ${app}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local current=""
|
||||||
|
if [[ -f "$current_file" ]]; then
|
||||||
|
current=$(<"$current_file")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$release" != "$current" ]] || [[ ! -f "$current_file" ]]; then
|
||||||
|
CHECK_UPDATE_RELEASE="$release"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
msg_ok "${app} is up to date (v${release})"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ while true; do
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# Container: get IP and ping
|
# Container: get IP and ping
|
||||||
IP=$(pct exec $instance ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
IP=$(pct exec $instance ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n1)
|
||||||
if ! ping -c 1 $IP >/dev/null 2>&1; then
|
if ! ping -c 1 $IP >/dev/null 2>&1; then
|
||||||
echo "$(date): CT $instance is not responding, restarting..."
|
echo "$(date): CT $instance is not responding, restarting..."
|
||||||
pct stop $instance >/dev/null 2>&1
|
pct stop $instance >/dev/null 2>&1
|
||||||
|
|||||||
183
tools/pve/pbs4-upgrade.sh
Normal file
183
tools/pve/pbs4-upgrade.sh
Normal 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
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
#!/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
|
||||||
@@ -29,143 +28,45 @@ 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() {
|
|
||||||
header_info
|
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
|
||||||
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 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
yes)
|
|
||||||
msg_info "Changing to Proxmox Backup Server Sources"
|
|
||||||
cat <<EOF >/etc/apt/sources.list
|
|
||||||
deb http://deb.debian.org/debian ${VERSION} main contrib
|
|
||||||
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
|
|
||||||
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
|
|
||||||
EOF
|
|
||||||
msg_ok "Changed to Proxmox Backup Server Sources"
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Correcting Proxmox Backup Server Sources"
|
|
||||||
;;
|
|
||||||
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 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
yes)
|
|
||||||
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"
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Disabling 'pbs-enterprise' repository"
|
|
||||||
;;
|
|
||||||
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 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
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
|
|
||||||
EOF
|
|
||||||
msg_ok "Enabled 'pbs-no-subscription' repository"
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Enabling 'pbs-no-subscription' repository"
|
|
||||||
;;
|
|
||||||
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 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
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
|
|
||||||
EOF
|
|
||||||
msg_ok "Added 'pbstest' repository"
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Adding 'pbstest' repository"
|
|
||||||
;;
|
|
||||||
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 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
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 "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
|
|
||||||
msg_ok "Disabled subscription nag (Delete browser cache)"
|
|
||||||
;;
|
|
||||||
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"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
apt --reinstall install proxmox-widget-toolkit &>/dev/null
|
|
||||||
|
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
yes)
|
|
||||||
msg_info "Updating Proxmox Backup Server (Patience)"
|
|
||||||
apt-get update &>/dev/null
|
|
||||||
apt-get -y dist-upgrade &>/dev/null
|
|
||||||
msg_ok "Updated Proxmox Backup Server"
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Updating Proxmox Backup Server"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Backup Server now? (recommended)" 11 58 2 \
|
|
||||||
"yes" " " \
|
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
|
||||||
case $CHOICE in
|
|
||||||
yes)
|
|
||||||
msg_info "Rebooting Proxmox Backup Server"
|
|
||||||
sleep 2
|
|
||||||
msg_ok "Completed Post Install Routines"
|
|
||||||
reboot
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
msg_error "Selected no to Rebooting Proxmox Backup Server (Reboot recommended)"
|
|
||||||
msg_ok "Completed Post Install Routines"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ---- main ----
|
||||||
|
main() {
|
||||||
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 Backup Server Post Install Script (y/n)?" yn
|
read -rp "Start the Proxmox Backup Server Post Install Script (y/n)? " yn
|
||||||
case $yn in
|
case $yn in
|
||||||
[Yy]*) break ;;
|
[Yy]*) break ;;
|
||||||
[Nn]*)
|
[Nn]*)
|
||||||
@@ -181,4 +82,222 @@ if command -v pveversion >/dev/null 2>&1; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
start_routines
|
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
|
||||||
|
yes)
|
||||||
|
msg_info "Correcting Debian Sources"
|
||||||
|
cat <<EOF >/etc/apt/sources.list
|
||||||
|
deb http://deb.debian.org/debian ${VERSION} main contrib
|
||||||
|
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
|
||||||
|
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
|
||||||
|
EOF
|
||||||
|
msg_ok "Corrected Debian Sources"
|
||||||
|
;;
|
||||||
|
no) msg_error "Selected no to Correcting Debian Sources" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Enterprise repo ---
|
||||||
|
read -r state file <<<"$(repo_state_list pbs-enterprise)"
|
||||||
|
case $state in
|
||||||
|
active)
|
||||||
|
sed -i "s/^[^#].*pbs-enterprise/# &/" "$file"
|
||||||
|
msg_ok "Disabled 'pbs-enterprise' repository"
|
||||||
|
;;
|
||||||
|
disabled) msg_ok "'pbs-enterprise' already disabled" ;;
|
||||||
|
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
|
||||||
|
|
||||||
|
# --- No-subscription repo ---
|
||||||
|
read -r state file <<<"$(repo_state_list pbs-no-subscription)"
|
||||||
|
if [[ "$state" == "missing" ]]; then
|
||||||
|
cat >/etc/apt/sources.list.d/pbs-install-repo.list <<EOF
|
||||||
|
deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription
|
||||||
|
EOF
|
||||||
|
msg_ok "Enabled 'pbs-no-subscription' repository"
|
||||||
|
else
|
||||||
|
msg_ok "'pbs-no-subscription' repository already present"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Test repo (legacy name pbstest) ---
|
||||||
|
read -r state file <<<"$(repo_state_list pbstest)"
|
||||||
|
if [[ "$state" == "missing" ]]; then
|
||||||
|
cat >/etc/apt/sources.list.d/pbstest-for-beta.list <<EOF
|
||||||
|
# deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest
|
||||||
|
EOF
|
||||||
|
msg_ok "Added 'pbstest' repository (disabled)"
|
||||||
|
else
|
||||||
|
msg_ok "'pbstest' repository already exists"
|
||||||
|
fi
|
||||||
|
|
||||||
|
post_routines_common
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- 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
|
||||||
|
yes)
|
||||||
|
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"
|
||||||
|
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 (clear browser cache!)"
|
||||||
|
;;
|
||||||
|
no)
|
||||||
|
msg_error "Selected no to Disabling subscription nag"
|
||||||
|
rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed"
|
||||||
|
|
||||||
|
# Update
|
||||||
|
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
|
||||||
|
"Update Proxmox Backup Server now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
|
||||||
|
case $CHOICE in
|
||||||
|
yes)
|
||||||
|
msg_info "Updating Proxmox Backup Server (Patience)"
|
||||||
|
apt update &>/dev/null || msg_error "apt update failed"
|
||||||
|
apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
|
||||||
|
msg_ok "Updated Proxmox Backup Server"
|
||||||
|
;;
|
||||||
|
no) msg_error "Selected no to updating Proxmox Backup Server" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Reminder
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
|
||||||
|
"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
|
||||||
|
yes)
|
||||||
|
msg_info "Rebooting PBS"
|
||||||
|
sleep 2
|
||||||
|
msg_ok "Completed Post Install Routines"
|
||||||
|
reboot
|
||||||
|
;;
|
||||||
|
no)
|
||||||
|
msg_error "Selected no to Reboot (Reboot recommended)"
|
||||||
|
msg_ok "Completed Post Install Routines"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
|
|||||||
@@ -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
|
||||||
|
active)
|
||||||
|
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
|
||||||
|
--menu "'pmg-enterprise' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
|
||||||
|
"keep" "Keep as is" \
|
||||||
|
"disable" "Comment out (disable)" \
|
||||||
|
"delete" "Delete repo file" \
|
||||||
|
3>&2 2>&1 1>&3)
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
yes)
|
keep) msg_ok "Kept 'pmg-enterprise' repository" ;;
|
||||||
|
disable)
|
||||||
msg_info "Disabling 'pmg-enterprise' repository"
|
msg_info "Disabling 'pmg-enterprise' repository"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/pmg-enterprise.list
|
sed -i "s/^[^#].*pmg-enterprise/# &/" "$file"
|
||||||
# deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
|
|
||||||
EOF
|
|
||||||
msg_ok "Disabled 'pmg-enterprise' repository"
|
msg_ok "Disabled 'pmg-enterprise' repository"
|
||||||
;;
|
;;
|
||||||
no)
|
delete)
|
||||||
msg_error "Selected no to disabling 'pmg-enterprise' repository"
|
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
|
||||||
|
msg_ok "Added 'pmg-enterprise' repository"
|
||||||
|
;;
|
||||||
|
no) msg_error "Selected no to Adding '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
|
||||||
|
active)
|
||||||
|
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
|
||||||
|
--menu "'pmg-no-subscription' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
|
||||||
|
"keep" "Keep as is" \
|
||||||
|
"disable" "Comment out (disable)" \
|
||||||
|
"delete" "Delete repo file" \
|
||||||
|
3>&2 2>&1 1>&3)
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
yes)
|
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"
|
msg_info "Enabling 'pmg-no-subscription' repository"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/pmg-install-repo.list
|
sed -i "s/^#.*pmg-no-subscription/deb/" "$file"
|
||||||
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription
|
|
||||||
EOF
|
|
||||||
msg_ok "Enabled 'pmg-no-subscription' repository"
|
msg_ok "Enabled 'pmg-no-subscription' repository"
|
||||||
;;
|
;;
|
||||||
no)
|
keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;;
|
||||||
msg_error "Selected no to enabling '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
|
||||||
|
;;
|
||||||
|
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
|
||||||
|
EOF
|
||||||
|
msg_ok "Added 'pmg-no-subscription' repository"
|
||||||
|
;;
|
||||||
|
no) msg_error "Selected no to Adding '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 ----
|
||||||
|
read -r state file <<<"$(repo_state pmgtest)"
|
||||||
|
case $state in
|
||||||
|
active) msg_ok "'pmgtest' repository already active (skipped)" ;;
|
||||||
|
disabled) msg_ok "'pmgtest' repository already disabled (skipped)" ;;
|
||||||
|
missing)
|
||||||
|
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" " " \
|
"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 "Adding 'pmgtest' repository and set disabled"
|
msg_info "Adding 'pmgtest' repository (disabled)"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/pmgtest-for-beta.list
|
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]*)
|
||||||
|
|||||||
Reference in New Issue
Block a user