mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 10:52:49 +00:00
Compare commits
45 Commits
2025-05-10
...
2025-05-13
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7aea03034a | ||
|
|
e9960347bf | ||
|
|
3808d4d0b8 | ||
|
|
14c5bf5f75 | ||
|
|
fcc16ae8e1 | ||
|
|
aaf8bdb893 | ||
|
|
db81851db4 | ||
|
|
a2d92155a5 | ||
|
|
0bd18cc91b | ||
|
|
1e7981dbb7 | ||
|
|
704073cd69 | ||
|
|
22e1518951 | ||
|
|
57bd730233 | ||
|
|
cf1b13e5fb | ||
|
|
9a3b2c076d | ||
|
|
3981cc90c4 | ||
|
|
592d9d03aa | ||
|
|
59b00890f9 | ||
|
|
7ee57e7416 | ||
|
|
82a30df0c9 | ||
|
|
10e1d7e741 | ||
|
|
f85cddadcf | ||
|
|
1700291af7 | ||
|
|
e126e48439 | ||
|
|
b3bda56498 | ||
|
|
e59f868966 | ||
|
|
a9b53afcc5 | ||
|
|
38cf296a4c | ||
|
|
35c0d269ac | ||
|
|
d7211e856e | ||
|
|
dfbb1a8035 | ||
|
|
61b09e926a | ||
|
|
9140fd52ac | ||
|
|
4a3ee4db67 | ||
|
|
b333d8c3f9 | ||
|
|
245b35d01e | ||
|
|
37d20ba0dd | ||
|
|
b5062c51af | ||
|
|
1ea830c955 | ||
|
|
be31ecf432 | ||
|
|
c586dfe87f | ||
|
|
7f65be34ff | ||
|
|
c158dbb3ea | ||
|
|
95acf8c018 | ||
|
|
6c5aa6677a |
@@ -72,8 +72,7 @@ network_check() {
|
|||||||
|
|
||||||
update_os() {
|
update_os() {
|
||||||
msg_info "Updating Container OS"
|
msg_info "Updating Container OS"
|
||||||
apk update
|
$STD apk -U upgrade
|
||||||
apk upgrade
|
|
||||||
msg_ok "Updated Container OS"
|
msg_ok "Updated Container OS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
71
CHANGELOG.md
71
CHANGELOG.md
@@ -14,8 +14,79 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-05-14
|
||||||
|
|
||||||
|
## 2025-05-13
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
|
||||||
|
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 💾 Core
|
||||||
|
|
||||||
|
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
|
||||||
|
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
|
||||||
|
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
|
||||||
|
|
||||||
|
## 2025-05-12
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 💾 Core
|
||||||
|
|
||||||
|
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
|
||||||
|
|
||||||
## 2025-05-11
|
## 2025-05-11
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
|
||||||
|
|
||||||
## 2025-05-10
|
## 2025-05-10
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ catch_errors
|
|||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating AdGuard Home"
|
msg_info "Updating AdGuard Home"
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
apk update && apk upgrade
|
$STD apk -U upgrade
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
62
ct/alpine-gatus.sh
Normal file
62
ct/alpine-gatus.sh
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/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: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/TwiN/gatus
|
||||||
|
|
||||||
|
APP="Alpine-gatus"
|
||||||
|
var_tags="${var_tags:-alpine;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-3}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.21}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
|
||||||
|
if [[ ! -d /opt/gatus ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
$STD service gatus stop
|
||||||
|
mv /opt/gatus/config/config.yaml /opt
|
||||||
|
rm -rf /opt/gatus/*
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||||
|
cd /opt/gatus
|
||||||
|
$STD go mod tidy
|
||||||
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||||
|
setcap CAP_NET_RAW+ep gatus
|
||||||
|
mv /opt/config.yaml config
|
||||||
|
rm -f "$temp_file"
|
||||||
|
echo "${RELEASE}" >/opt/gatus_version.txt
|
||||||
|
$STD service gatus start
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
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 IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
@@ -22,8 +22,7 @@ catch_errors
|
|||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
apk update
|
$STD apk -U upgrade
|
||||||
apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating Gitea"
|
msg_info "Updating Gitea"
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
apk update && apk upgrade
|
$STD apk -U upgrade
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating MariaDB"
|
msg_info "Updating MariaDB"
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating Node.js and npm"
|
msg_info "Updating Node.js and npm"
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating PostgreSQL"
|
msg_info "Updating PostgreSQL"
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating Prometheus"
|
msg_info "Updating Prometheus"
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating tinyauth"
|
msg_info "Updating tinyauth"
|
||||||
|
|||||||
41
ct/alpine-traefik.sh
Normal file
41
ct/alpine-traefik.sh
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://alpinelinux.org/
|
||||||
|
|
||||||
|
APP="Alpine-Traefik"
|
||||||
|
var_tags="${var_tags:-os;alpine}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.21}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
msg_info "Updating Alpine Packages"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
|
msg_info "Upgrading traefik from edge"
|
||||||
|
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
|
msg_ok "Upgraded traefik"
|
||||||
|
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} WebUI Access (if configured) - using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
|
||||||
@@ -37,14 +37,15 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
apk update && apk upgrade && rc-service vaultwarden restart -q
|
$STD apk -U upgrade
|
||||||
|
rc-service vaultwarden restart -q
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
|
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
|
||||||
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
|
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
|
||||||
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
||||||
TOKEN=$(echo -n ${NEWTOKEN} | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||||
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
||||||
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "update wireguard-tools"
|
msg_info "update wireguard-tools"
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
apk update && apk upgrade
|
$STD apk -U upgrade
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
|
|
||||||
header_info
|
header_info
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
apk update && apk upgrade
|
$STD apk -U upgrade
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
75
ct/gatus.sh
Normal file
75
ct/gatus.sh
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/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: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/TwiN/gatus
|
||||||
|
|
||||||
|
APP="gatus"
|
||||||
|
var_tags="${var_tags:-monitoring}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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/gatus ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop gatus
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
mv /opt/gatus/config/config.yaml /opt
|
||||||
|
rm -rf /opt/gatus/*
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||||
|
cd /opt/gatus
|
||||||
|
$STD go mod tidy
|
||||||
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||||
|
setcap CAP_NET_RAW+ep gatus
|
||||||
|
mv /opt/config.yaml config
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start gatus
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}:8080${CL}"
|
||||||
6
ct/headers/alpine-gatus
Normal file
6
ct/headers/alpine-gatus
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ __
|
||||||
|
/ | / /___ (_)___ ___ ____ _____ _/ /___ _______
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ __ `/ __ `/ __/ / / / ___/
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /_/ /_/ (__ )
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ \__, /\__,_/\__/\__,_/____/
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/alpine-traefik
Normal file
6
ct/headers/alpine-traefik
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ______ _____ __
|
||||||
|
/ | / /___ (_)___ ___ /_ __/________ ____ / __(_) /__
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / __/ __/ / ,<
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/\___/_/ /_/_/|_|
|
||||||
|
/_/
|
||||||
6
ct/headers/gatus
Normal file
6
ct/headers/gatus
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__
|
||||||
|
____ _____ _/ /___ _______
|
||||||
|
/ __ `/ __ `/ __/ / / / ___/
|
||||||
|
/ /_/ / /_/ / /_/ /_/ (__ )
|
||||||
|
\__, /\__,_/\__/\__,_/____/
|
||||||
|
/____/
|
||||||
13
ct/homarr.sh
13
ct/homarr.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
# Author: CrazyWolf13
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://homarr.dev/
|
# Source: https://homarr.dev/
|
||||||
|
|
||||||
@@ -117,11 +117,12 @@ node apps/nextjs/server.js & PID=$!
|
|||||||
wait $PID
|
wait $PID
|
||||||
EOF
|
EOF
|
||||||
chmod +x /opt/run_homarr.sh
|
chmod +x /opt/run_homarr.sh
|
||||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
|
$STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
|
||||||
unzip -q v${RELEASE}.zip
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
rm -rf v${RELEASE}.zip
|
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||||
|
install_node_and_modules
|
||||||
rm -rf /opt/homarr
|
rm -rf /opt/homarr
|
||||||
mv homarr-${RELEASE} /opt/homarr
|
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||||
cd /opt/homarr
|
cd /opt/homarr
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
case "$UPD" in
|
case "$UPD" in
|
||||||
"1")
|
"1")
|
||||||
msg_info "Updating Alpine OS"
|
msg_info "Updating Alpine OS"
|
||||||
apk update && apk upgrade
|
$STD apk -U upgrade
|
||||||
msg_ok "System updated"
|
msg_ok "System updated"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "To Update Alpine: `apk update && apk upgrade`",
|
"text": "To Update Alpine: `apk -U upgrade`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
46
frontend/public/json/gatus.json
Normal file
46
frontend/public/json/gatus.json
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "gatus",
|
||||||
|
"slug": "gatus",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-05-13",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://gatus.io/docs",
|
||||||
|
"website": "https://gatus.io/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
|
||||||
|
"config_path": "/opt/gatus/config/config.yaml",
|
||||||
|
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/gatus.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-gatus.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.21"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://jellyfin.org/docs/",
|
"documentation": "https://jellyfin.org/docs/",
|
||||||
"website": "https://jellyfin.org/",
|
"website": "https://jellyfin.org/",
|
||||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg",
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg",
|
||||||
"config_path": "/root/.config/jellyfin",
|
"config_path": "/etc/jellyfin/",
|
||||||
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
|
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "https://www.navidrome.org/",
|
"website": "https://www.navidrome.org/",
|
||||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg",
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg",
|
||||||
"config_path": "/var/lib/navidrome/navidrome.toml",
|
"config_path": "/etc/navidrome/navidrome.toml",
|
||||||
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
|
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "To change Navidrome music folder path, `nano /var/lib/navidrome/navidrome.toml`",
|
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://stonith404.github.io/pingvin-share/introduction",
|
"documentation": "https://stonith404.github.io/pingvin-share/introduction",
|
||||||
"website": "https://github.com/stonith404/pingvin-share",
|
"website": "https://github.com/stonith404/pingvin-share",
|
||||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg",
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg",
|
||||||
"config_path": "/opt/pingin-share/config.yaml",
|
"config_path": "/opt/pingvin-share/config.yaml",
|
||||||
"description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",
|
"description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
@@ -31,5 +31,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Run `DATA_DIRECTORY=path-to-your-data-directory pm2 restart all --update-env` to update path to your data directory or to update environment variables.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,17 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-traefik.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.21"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
|||||||
@@ -1,19 +1,219 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "netbox-community/netbox",
|
||||||
|
"version": "v4.3.1",
|
||||||
|
"date": "2025-05-13T19:45:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glanceapp/glance",
|
||||||
|
"version": "v0.8.1",
|
||||||
|
"date": "2025-05-13T19:42:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocketbase/pocketbase",
|
||||||
|
"version": "v0.28.1",
|
||||||
|
"date": "2025-05-13T18:45:47Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jenkinsci/jenkins",
|
||||||
|
"version": "jenkins-2.510",
|
||||||
|
"date": "2025-05-13T18:33:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mongodb/mongo",
|
||||||
|
"version": "r6.0.23",
|
||||||
|
"date": "2025-05-13T18:28:23Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "OctoPrint/OctoPrint",
|
||||||
|
"version": "1.11.1",
|
||||||
|
"date": "2025-05-13T13:32:07Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "redis/redis",
|
||||||
|
"version": "8.0.1",
|
||||||
|
"date": "2025-05-13T13:31:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "theonedev/onedev",
|
||||||
|
"version": "v11.9.6",
|
||||||
|
"date": "2025-05-13T12:16:17Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "element-hq/synapse",
|
||||||
|
"version": "v1.129.0",
|
||||||
|
"date": "2025-05-06T12:28:54Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zabbix/zabbix",
|
||||||
|
"version": "7.2.7rc1",
|
||||||
|
"date": "2025-05-13T11:55:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Graylog2/graylog2-server",
|
||||||
|
"version": "6.3.0-alpha.4",
|
||||||
|
"date": "2025-05-13T11:18:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.2.12",
|
||||||
|
"date": "2025-04-20T19:22:17Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "cross-seed/cross-seed",
|
"name": "cross-seed/cross-seed",
|
||||||
"version": "v6.12.3",
|
"version": "v6.12.4",
|
||||||
"date": "2025-05-07T20:35:11Z"
|
"date": "2025-05-11T11:41:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.1893",
|
||||||
|
"date": "2025-05-13T05:57:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v2.65.9",
|
||||||
|
"date": "2025-05-13T05:14:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.6.9-rc0",
|
||||||
|
"date": "2025-05-10T18:57:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "go-gitea/gitea",
|
||||||
|
"version": "v1.23.8",
|
||||||
|
"date": "2025-05-12T22:40:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MediaBrowser/Emby.Releases",
|
||||||
|
"version": "4.8.11.0",
|
||||||
|
"date": "2025-03-10T06:39:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.2.4",
|
||||||
|
"date": "2025-05-08T09:10:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "leiweibau/Pi.Alert",
|
||||||
|
"version": "v2025-05-11",
|
||||||
|
"date": "2025-05-12T19:14:57Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "duplicati/duplicati",
|
||||||
|
"version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
|
||||||
|
"date": "2025-05-12T18:50:44Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "runtipi/runtipi",
|
||||||
|
"version": "nightly",
|
||||||
|
"date": "2025-05-12T18:39:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.100.0",
|
||||||
|
"date": "2025-05-12T18:23:47Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "neo4j/neo4j",
|
||||||
|
"version": "4.4.43",
|
||||||
|
"date": "2025-05-12T15:33:17Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "usememos/memos",
|
||||||
|
"version": "v0.24.3",
|
||||||
|
"date": "2025-05-12T15:23:21Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NodeBB/NodeBB",
|
||||||
|
"version": "v2.8.18",
|
||||||
|
"date": "2025-05-12T15:08:09Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.91.3",
|
||||||
|
"date": "2025-05-08T12:25:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Paymenter/Paymenter",
|
||||||
|
"version": "v1.1.0",
|
||||||
|
"date": "2025-05-12T14:40:27Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
|
"version": "pmm-6401-v1.117.0",
|
||||||
|
"date": "2025-05-12T13:24:20Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apache/tika",
|
||||||
|
"version": "3.2.0-rc1",
|
||||||
|
"date": "2025-05-12T13:06:47Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mattermost/mattermost",
|
||||||
|
"version": "v10.7.2",
|
||||||
|
"date": "2025-05-12T10:42:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nzbgetcom/nzbget",
|
||||||
|
"version": "v25.0",
|
||||||
|
"date": "2025-05-12T09:12:04Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dgtlmoon/changedetection.io",
|
||||||
|
"version": "0.49.17",
|
||||||
|
"date": "2025-05-12T08:48:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stackblitz-labs/bolt.diy",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"date": "2025-05-12T07:39:23Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "umami-software/umami",
|
||||||
|
"version": "v2.18.1",
|
||||||
|
"date": "2025-05-12T07:16:12Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "esphome/esphome",
|
||||||
|
"version": "2025.4.2",
|
||||||
|
"date": "2025-05-11T22:18:43Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.2",
|
||||||
|
"date": "2025-05-11T16:40:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "outline/outline",
|
||||||
|
"version": "v0.84.0",
|
||||||
|
"date": "2025-05-11T15:50:48Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kozea/Radicale",
|
||||||
|
"version": "v3.5.3",
|
||||||
|
"date": "2025-05-11T15:17:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Prowlarr/Prowlarr",
|
||||||
|
"version": "v1.35.1.5034",
|
||||||
|
"date": "2025-04-30T11:02:36Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "authelia/authelia",
|
||||||
|
"version": "v4.39.3",
|
||||||
|
"date": "2025-05-11T11:12:15Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Radarr/Radarr",
|
||||||
|
"version": "v5.22.4.9896",
|
||||||
|
"date": "2025-04-23T18:51:12Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "owncast/owncast",
|
"name": "owncast/owncast",
|
||||||
"version": "v0.2.3",
|
"version": "v0.2.3",
|
||||||
"date": "2025-05-10T21:14:45Z"
|
"date": "2025-05-10T21:14:45Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "runtipi/runtipi",
|
|
||||||
"version": "e2e",
|
|
||||||
"date": "2025-05-10T20:46:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "open-webui/open-webui",
|
"name": "open-webui/open-webui",
|
||||||
"version": "v0.6.9",
|
"version": "v0.6.9",
|
||||||
@@ -29,21 +229,6 @@
|
|||||||
"version": "v0.25.1",
|
"version": "v0.25.1",
|
||||||
"date": "2025-02-25T17:30:48Z"
|
"date": "2025-02-25T17:30:48Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.22.1887",
|
|
||||||
"date": "2025-05-10T05:57:46Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "authelia/authelia",
|
|
||||||
"version": "v4.39.2",
|
|
||||||
"date": "2025-05-10T05:23:02Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
|
||||||
"version": "v1.22.2-victorialogs",
|
|
||||||
"date": "2025-05-10T01:20:19Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "pelican-dev/wings",
|
"name": "pelican-dev/wings",
|
||||||
"version": "v1.0.0-beta13",
|
"version": "v1.0.0-beta13",
|
||||||
@@ -59,46 +244,16 @@
|
|||||||
"version": "v1.19.1",
|
"version": "v1.19.1",
|
||||||
"date": "2025-05-09T19:15:10Z"
|
"date": "2025-05-09T19:15:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "MediaBrowser/Emby.Releases",
|
|
||||||
"version": "4.8.11.0",
|
|
||||||
"date": "2025-03-10T06:39:11Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "home-assistant/core",
|
"name": "home-assistant/core",
|
||||||
"version": "2025.5.1",
|
"version": "2025.5.1",
|
||||||
"date": "2025-05-09T15:05:54Z"
|
"date": "2025-05-09T15:05:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.2.4",
|
|
||||||
"date": "2025-05-08T09:10:10Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mattermost/mattermost",
|
|
||||||
"version": "v9.11.15",
|
|
||||||
"date": "2025-05-09T13:48:50Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "crowdsecurity/crowdsec",
|
"name": "crowdsecurity/crowdsec",
|
||||||
"version": "v1.6.8",
|
"version": "v1.6.8",
|
||||||
"date": "2025-03-25T13:33:10Z"
|
"date": "2025-03-25T13:33:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zitadel/zitadel",
|
|
||||||
"version": "v3.0.4",
|
|
||||||
"date": "2025-05-09T11:38:33Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "theonedev/onedev",
|
|
||||||
"version": "v11.9.4",
|
|
||||||
"date": "2025-05-09T02:45:16Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.99.4",
|
|
||||||
"date": "2025-05-02T18:33:09Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "pocket-id/pocket-id",
|
"name": "pocket-id/pocket-id",
|
||||||
"version": "v0.53.0",
|
"version": "v0.53.0",
|
||||||
@@ -124,21 +279,11 @@
|
|||||||
"version": "10.1.41",
|
"version": "10.1.41",
|
||||||
"date": "2025-05-08T12:45:44Z"
|
"date": "2025-05-08T12:45:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.91.3",
|
|
||||||
"date": "2025-05-08T12:25:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "zwave-js/zwave-js-ui",
|
"name": "zwave-js/zwave-js-ui",
|
||||||
"version": "v10.4.2",
|
"version": "v10.4.2",
|
||||||
"date": "2025-05-08T08:11:27Z"
|
"date": "2025-05-08T08:11:27Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "umami-software/umami",
|
|
||||||
"version": "v2.18.0",
|
|
||||||
"date": "2025-05-08T07:14:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "semaphoreui/semaphore",
|
"name": "semaphoreui/semaphore",
|
||||||
"version": "v2.14.10",
|
"version": "v2.14.10",
|
||||||
@@ -159,11 +304,6 @@
|
|||||||
"version": "v0.34.1",
|
"version": "v0.34.1",
|
||||||
"date": "2025-03-25T18:11:12Z"
|
"date": "2025-03-25T18:11:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "NodeBB/NodeBB",
|
|
||||||
"version": "v4.3.1",
|
|
||||||
"date": "2025-05-07T15:38:20Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "donaldzou/WGDashboard",
|
"name": "donaldzou/WGDashboard",
|
||||||
"version": "v4.2.3",
|
"version": "v4.2.3",
|
||||||
@@ -179,21 +319,11 @@
|
|||||||
"version": "v5.7.5",
|
"version": "v5.7.5",
|
||||||
"date": "2025-05-07T14:01:45Z"
|
"date": "2025-05-07T14:01:45Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Graylog2/graylog2-server",
|
|
||||||
"version": "6.3.0-alpha.3",
|
|
||||||
"date": "2025-05-07T13:58:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "glpi-project/glpi",
|
"name": "glpi-project/glpi",
|
||||||
"version": "10.0.18",
|
"version": "10.0.18",
|
||||||
"date": "2025-02-12T11:07:02Z"
|
"date": "2025-02-12T11:07:02Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "nzbgetcom/nzbget",
|
|
||||||
"version": "v24.8",
|
|
||||||
"date": "2025-03-18T07:33:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ZoeyVid/NPMplus",
|
"name": "ZoeyVid/NPMplus",
|
||||||
"version": "2025-05-07-r1",
|
"version": "2025-05-07-r1",
|
||||||
@@ -224,11 +354,6 @@
|
|||||||
"version": "338",
|
"version": "338",
|
||||||
"date": "2025-05-07T10:43:29Z"
|
"date": "2025-05-07T10:43:29Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.4.0beta2",
|
|
||||||
"date": "2025-05-07T10:39:21Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jupyter/notebook",
|
"name": "jupyter/notebook",
|
||||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
|
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
|
||||||
@@ -239,11 +364,6 @@
|
|||||||
"version": "v1.12.1rc0",
|
"version": "v1.12.1rc0",
|
||||||
"date": "2025-05-06T20:56:30Z"
|
"date": "2025-05-06T20:56:30Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "redis/redis",
|
|
||||||
"version": "8.0.1-int",
|
|
||||||
"date": "2025-05-06T18:40:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Athou/commafeed",
|
"name": "Athou/commafeed",
|
||||||
"version": "5.8.0",
|
"version": "5.8.0",
|
||||||
@@ -254,11 +374,6 @@
|
|||||||
"version": "v0.19.0",
|
"version": "v0.19.0",
|
||||||
"date": "2025-05-06T18:05:42Z"
|
"date": "2025-05-06T18:05:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jenkinsci/jenkins",
|
|
||||||
"version": "jenkins-2.509",
|
|
||||||
"date": "2025-05-06T15:37:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "MariaDB/server",
|
"name": "MariaDB/server",
|
||||||
"version": "mariadb-11.4.6",
|
"version": "mariadb-11.4.6",
|
||||||
@@ -274,11 +389,6 @@
|
|||||||
"version": "v0.107.61",
|
"version": "v0.107.61",
|
||||||
"date": "2025-04-22T12:42:26Z"
|
"date": "2025-04-22T12:42:26Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "element-hq/synapse",
|
|
||||||
"version": "v1.129.0",
|
|
||||||
"date": "2025-05-06T12:28:54Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Luligu/matterbridge",
|
"name": "Luligu/matterbridge",
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
@@ -289,11 +399,6 @@
|
|||||||
"version": "v1.29.6",
|
"version": "v1.29.6",
|
||||||
"date": "2025-05-06T07:57:02Z"
|
"date": "2025-05-06T07:57:02Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.1",
|
|
||||||
"date": "2025-01-01T16:15:52Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "linkwarden/linkwarden",
|
"name": "linkwarden/linkwarden",
|
||||||
"version": "v2.10.2",
|
"version": "v2.10.2",
|
||||||
@@ -334,16 +439,6 @@
|
|||||||
"version": "v0.18.0",
|
"version": "v0.18.0",
|
||||||
"date": "2025-05-05T15:34:40Z"
|
"date": "2025-05-05T15:34:40Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "apache/tika",
|
|
||||||
"version": "2.9.4",
|
|
||||||
"date": "2025-05-05T15:17:27Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "neo4j/neo4j",
|
|
||||||
"version": "5.26.6",
|
|
||||||
"date": "2025-05-05T13:59:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "traefik/traefik",
|
"name": "traefik/traefik",
|
||||||
"version": "v3.4.0",
|
"version": "v3.4.0",
|
||||||
@@ -354,11 +449,6 @@
|
|||||||
"version": "0.203.5",
|
"version": "0.203.5",
|
||||||
"date": "2025-05-05T06:41:02Z"
|
"date": "2025-05-05T06:41:02Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.2.12",
|
|
||||||
"date": "2025-04-20T19:22:17Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "moghtech/komodo",
|
"name": "moghtech/komodo",
|
||||||
"version": "v1.17.5",
|
"version": "v1.17.5",
|
||||||
@@ -379,26 +469,11 @@
|
|||||||
"version": "v2.0.0.4645",
|
"version": "v2.0.0.4645",
|
||||||
"date": "2017-03-07T18:56:06Z"
|
"date": "2017-03-07T18:56:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Prowlarr/Prowlarr",
|
|
||||||
"version": "v1.35.1.5034",
|
|
||||||
"date": "2025-04-30T11:02:36Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radarr/Radarr",
|
|
||||||
"version": "v5.22.4.9896",
|
|
||||||
"date": "2025-04-23T18:51:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "bastienwirtz/homer",
|
"name": "bastienwirtz/homer",
|
||||||
"version": "v25.05.1",
|
"version": "v25.05.1",
|
||||||
"date": "2025-05-04T12:17:00Z"
|
"date": "2025-05-04T12:17:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.6.8",
|
|
||||||
"date": "2025-05-03T22:56:44Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "FreshRSS/FreshRSS",
|
"name": "FreshRSS/FreshRSS",
|
||||||
"version": "1.26.2",
|
"version": "1.26.2",
|
||||||
@@ -414,11 +489,6 @@
|
|||||||
"version": "v2.0.111",
|
"version": "v2.0.111",
|
||||||
"date": "2025-05-03T16:25:30Z"
|
"date": "2025-05-03T16:25:30Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "dgtlmoon/changedetection.io",
|
|
||||||
"version": "0.49.16",
|
|
||||||
"date": "2025-05-03T14:44:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "blakeblackshear/frigate",
|
"name": "blakeblackshear/frigate",
|
||||||
"version": "v0.14.1",
|
"version": "v0.14.1",
|
||||||
@@ -464,21 +534,11 @@
|
|||||||
"version": "e5.9.0",
|
"version": "e5.9.0",
|
||||||
"date": "2025-05-02T11:07:10Z"
|
"date": "2025-05-02T11:07:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "stackblitz-labs/bolt.diy",
|
|
||||||
"version": "v1.0.0-draft",
|
|
||||||
"date": "2025-05-01T18:33:44Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Koenkk/zigbee2mqtt",
|
"name": "Koenkk/zigbee2mqtt",
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"date": "2025-05-01T18:24:31Z"
|
"date": "2025-05-01T18:24:31Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "netbox-community/netbox",
|
|
||||||
"version": "v4.3.0",
|
|
||||||
"date": "2025-05-01T16:46:17Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "WordPress/WordPress",
|
"name": "WordPress/WordPress",
|
||||||
"version": "6.8.1",
|
"version": "6.8.1",
|
||||||
@@ -504,11 +564,6 @@
|
|||||||
"version": "version/2025.4.0",
|
"version": "version/2025.4.0",
|
||||||
"date": "2025-04-30T12:34:14Z"
|
"date": "2025-04-30T12:34:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "go-gitea/gitea",
|
|
||||||
"version": "v1.25.0-dev",
|
|
||||||
"date": "2025-04-28T22:57:56Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hivemq/hivemq-community-edition",
|
"name": "hivemq/hivemq-community-edition",
|
||||||
"version": "2025.3",
|
"version": "2025.3",
|
||||||
@@ -524,11 +579,6 @@
|
|||||||
"version": "v1.4.7",
|
"version": "v1.4.7",
|
||||||
"date": "2025-04-29T15:00:18Z"
|
"date": "2025-04-29T15:00:18Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "esphome/esphome",
|
|
||||||
"version": "2025.4.1",
|
|
||||||
"date": "2025-04-29T02:20:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "henrygd/beszel",
|
"name": "henrygd/beszel",
|
||||||
"version": "v0.11.1",
|
"version": "v0.11.1",
|
||||||
@@ -549,11 +599,6 @@
|
|||||||
"version": "v1.132.3",
|
"version": "v1.132.3",
|
||||||
"date": "2025-04-28T14:11:06Z"
|
"date": "2025-04-28T14:11:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pocketbase/pocketbase",
|
|
||||||
"version": "v0.27.2",
|
|
||||||
"date": "2025-04-28T12:03:30Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "FlowiseAI/Flowise",
|
"name": "FlowiseAI/Flowise",
|
||||||
"version": "flowise@2.2.8",
|
"version": "flowise@2.2.8",
|
||||||
@@ -589,11 +634,6 @@
|
|||||||
"version": "1.5.34",
|
"version": "1.5.34",
|
||||||
"date": "2025-03-27T16:17:38Z"
|
"date": "2025-03-27T16:17:38Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "leiweibau/Pi.Alert",
|
|
||||||
"version": "v2025-04-26",
|
|
||||||
"date": "2025-04-26T14:16:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "openhab/openhab-core",
|
"name": "openhab/openhab-core",
|
||||||
"version": "4.3.5",
|
"version": "4.3.5",
|
||||||
@@ -609,16 +649,6 @@
|
|||||||
"version": "v13.6.0",
|
"version": "v13.6.0",
|
||||||
"date": "2025-04-26T10:21:12Z"
|
"date": "2025-04-26T10:21:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "duplicati/duplicati",
|
|
||||||
"version": "v2.1.0.117-2.1.0.117_canary_2025-04-25",
|
|
||||||
"date": "2025-04-25T17:22:12Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mongodb/mongo",
|
|
||||||
"version": "r7.0.19",
|
|
||||||
"date": "2025-04-24T20:59:43Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "dotnetfactory/fluid-calendar",
|
"name": "dotnetfactory/fluid-calendar",
|
||||||
"version": "v1.4.0",
|
"version": "v1.4.0",
|
||||||
@@ -634,31 +664,16 @@
|
|||||||
"version": "0.17.11",
|
"version": "0.17.11",
|
||||||
"date": "2025-04-24T05:25:55Z"
|
"date": "2025-04-24T05:25:55Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Kozea/Radicale",
|
|
||||||
"version": "v3.5.2",
|
|
||||||
"date": "2025-04-23T18:41:46Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "minio/minio",
|
"name": "minio/minio",
|
||||||
"version": "RELEASE.2025-04-22T22-12-26Z",
|
"version": "RELEASE.2025-04-22T22-12-26Z",
|
||||||
"date": "2025-04-22T22:44:34Z"
|
"date": "2025-04-22T22:44:34Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "glanceapp/glance",
|
|
||||||
"version": "v0.7.13",
|
|
||||||
"date": "2025-04-22T22:19:16Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "OliveTin/OliveTin",
|
"name": "OliveTin/OliveTin",
|
||||||
"version": "2025.4.22",
|
"version": "2025.4.22",
|
||||||
"date": "2025-04-22T14:18:11Z"
|
"date": "2025-04-22T14:18:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "OctoPrint/OctoPrint",
|
|
||||||
"version": "1.11.0",
|
|
||||||
"date": "2025-04-22T09:33:46Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "monicahq/monica",
|
"name": "monicahq/monica",
|
||||||
"version": "v4.1.2",
|
"version": "v4.1.2",
|
||||||
@@ -689,11 +704,6 @@
|
|||||||
"version": "v2.10.0",
|
"version": "v2.10.0",
|
||||||
"date": "2025-04-18T20:46:28Z"
|
"date": "2025-04-18T20:46:28Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Paymenter/Paymenter",
|
|
||||||
"version": "v1.0.4",
|
|
||||||
"date": "2025-04-18T16:08:02Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tailscale/tailscale",
|
"name": "tailscale/tailscale",
|
||||||
"version": "v1.82.5",
|
"version": "v1.82.5",
|
||||||
@@ -754,11 +764,6 @@
|
|||||||
"version": "4.5.1",
|
"version": "4.5.1",
|
||||||
"date": "2025-04-11T09:57:47Z"
|
"date": "2025-04-11T09:57:47Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "outline/outline",
|
|
||||||
"version": "v0.83.0",
|
|
||||||
"date": "2025-04-11T03:53:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "apache/cassandra",
|
"name": "apache/cassandra",
|
||||||
"version": "cassandra-5.0.4",
|
"version": "cassandra-5.0.4",
|
||||||
@@ -894,11 +899,6 @@
|
|||||||
"version": "v4.3.1",
|
"version": "v4.3.1",
|
||||||
"date": "2025-03-23T09:02:54Z"
|
"date": "2025-03-23T09:02:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "usememos/memos",
|
|
||||||
"version": "v0.24.2",
|
|
||||||
"date": "2025-03-23T04:01:50Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "clusterzx/paperless-ai",
|
"name": "clusterzx/paperless-ai",
|
||||||
"version": "v2.7.6",
|
"version": "v2.7.6",
|
||||||
|
|||||||
70
install/alpine-gatus-install.sh
Normal file
70
install/alpine-gatus-install.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/TwiN/gatus
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing dependencies"
|
||||||
|
$STD apk add --no-cache \
|
||||||
|
ca-certificates \
|
||||||
|
libcap-setcap
|
||||||
|
$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go
|
||||||
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
msg_info "Installing gatus v${RELEASE}"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
mkdir -p /opt/gatus
|
||||||
|
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||||
|
cd /opt/gatus
|
||||||
|
$STD go mod tidy
|
||||||
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||||
|
setcap CAP_NET_RAW+ep gatus
|
||||||
|
mv config.yaml config
|
||||||
|
echo "${RELEASE}" >/opt/gatus_version.txt
|
||||||
|
msg_ok "Installed gatus v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Enabling gatus Service"
|
||||||
|
cat <<EOF >/etc/init.d/gatus
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
description="gatus Service"
|
||||||
|
directory="/opt/gatus"
|
||||||
|
command="/opt/gatus/gatus"
|
||||||
|
command_args=""
|
||||||
|
command_background="true"
|
||||||
|
command_user="root"
|
||||||
|
pidfile="/var/run/gatus.pid"
|
||||||
|
|
||||||
|
export GATUS_CONFIG_PATH=""
|
||||||
|
export GATUS_LOG_LEVEL="INFO"
|
||||||
|
export PORT="8080"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
use net
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
chmod +x /etc/init.d/gatus
|
||||||
|
$STD rc-update add gatus default
|
||||||
|
msg_ok "Enabled gatus Service"
|
||||||
|
|
||||||
|
msg_info "Starting gatus"
|
||||||
|
$STD service gatus start
|
||||||
|
msg_ok "Started gatus"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
$STD apk cache clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
56
install/alpine-traefik-install.sh
Normal file
56
install/alpine-traefik-install.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apk add ca-certificates
|
||||||
|
$STD update-ca-certificates
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Traefik"
|
||||||
|
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
|
msg_ok "Installed Traefik"
|
||||||
|
|
||||||
|
read -p "Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
|
||||||
|
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
|
||||||
|
msg_info "Configuring Traefik WebUI"
|
||||||
|
mkdir -p /etc/traefik/config
|
||||||
|
cat <<EOF >/etc/traefik/traefik.yml
|
||||||
|
entryPoints:
|
||||||
|
web:
|
||||||
|
address: ":80"
|
||||||
|
traefik:
|
||||||
|
address: ":8080"
|
||||||
|
|
||||||
|
api:
|
||||||
|
dashboard: true
|
||||||
|
insecure: true
|
||||||
|
|
||||||
|
log:
|
||||||
|
level: INFO
|
||||||
|
|
||||||
|
providers:
|
||||||
|
file:
|
||||||
|
directory: /etc/traefik/config
|
||||||
|
watch: true
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Traefik WebUI"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Enabling and starting Traefik service"
|
||||||
|
$STD rc-update add traefik default
|
||||||
|
$STD rc-service traefik start
|
||||||
|
msg_ok "Traefik service started"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
67
install/gatus-install.sh
Normal file
67
install/gatus-install.sh
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/TwiN/gatus
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
ca-certificates \
|
||||||
|
libcap2-bin
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
install_go
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
msg_info "Setting up gatus v${RELEASE}"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
mkdir -p /opt/gatus
|
||||||
|
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||||
|
cd /opt/gatus
|
||||||
|
$STD go mod tidy
|
||||||
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||||
|
setcap CAP_NET_RAW+ep gatus
|
||||||
|
mv config.yaml config
|
||||||
|
echo "${RELEASE}" >/opt/gatus_version.txt
|
||||||
|
msg_ok "Done setting up gatus"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/gatus.service
|
||||||
|
[Unit]
|
||||||
|
Description=gatus Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/gatus
|
||||||
|
ExecStart=/opt/gatus/gatus
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now gatus
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -23,27 +23,17 @@ $STD apt-get install -y \
|
|||||||
build-essential \
|
build-essential \
|
||||||
nginx \
|
nginx \
|
||||||
gettext \
|
gettext \
|
||||||
|
jq \
|
||||||
openssl
|
openssl
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Node.js Repository"
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
mkdir -p /etc/apt/keyrings
|
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
install_node_and_modules
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||||
msg_ok "Set up Node.js Repository"
|
|
||||||
|
|
||||||
msg_info "Installing Node.js/pnpm"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y nodejs
|
|
||||||
$STD npm install -g pnpm@latest
|
|
||||||
msg_ok "Installed Node.js/pnpm"
|
|
||||||
|
|
||||||
msg_info "Installing Homarr (Patience)"
|
msg_info "Installing Homarr (Patience)"
|
||||||
cd /opt
|
cd /opt
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
|
|
||||||
unzip -q v${RELEASE}.zip
|
|
||||||
mv homarr-${RELEASE} /opt/homarr
|
|
||||||
mkdir -p /opt/homarr_db
|
mkdir -p /opt/homarr_db
|
||||||
touch /opt/homarr_db/db.sqlite
|
touch /opt/homarr_db/db.sqlite
|
||||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
||||||
|
|||||||
@@ -16,20 +16,19 @@ update_os
|
|||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
gnupg \
|
gnupg \
|
||||||
|
ca-certificates \
|
||||||
apt-transport-https
|
apt-transport-https
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Azul Zulu21"
|
msg_info "Installing Azul Zulu17"
|
||||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc"
|
curl -fsSL https://repos.azul.com/azul-repo.key | gpg --dearmor -o /usr/share/keyrings/azul.gpg
|
||||||
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o $(basename "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb")
|
echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" >/etc/apt/sources.list.d/zulu.list
|
||||||
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y install zulu21-jdk
|
$STD apt-get -y install zulu17-jdk
|
||||||
msg_ok "Installed Azul Zulu21"
|
msg_ok "Installed Azul Zulu17"
|
||||||
|
|
||||||
msg_info "Installing openHAB"
|
msg_info "Installing openHAB"
|
||||||
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor >openhab.gpg
|
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor -o /usr/share/keyrings/openhab.gpg
|
||||||
mv openhab.gpg /usr/share/keyrings
|
|
||||||
chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg
|
chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg
|
||||||
echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main" >/etc/apt/sources.list.d/openhab.list
|
echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main" >/etc/apt/sources.list.d/openhab.list
|
||||||
$STD apt update
|
$STD apt update
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ $STD apt-get -y install elasticsearch
|
|||||||
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
||||||
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
||||||
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
||||||
systemctl -q restart elasticsearch
|
systemctl enable -q elasticsearch
|
||||||
|
systemctl restart -q elasticsearch
|
||||||
msg_ok "Setup Elasticsearch"
|
msg_ok "Setup Elasticsearch"
|
||||||
|
|
||||||
msg_info "Installing Zammad"
|
msg_info "Installing Zammad"
|
||||||
|
|||||||
@@ -137,8 +137,7 @@ network_check() {
|
|||||||
# This function updates the Container OS by running apt-get update and upgrade
|
# This function updates the Container OS by running apt-get update and upgrade
|
||||||
update_os() {
|
update_os() {
|
||||||
msg_info "Updating Container OS"
|
msg_info "Updating Container OS"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Container OS"
|
msg_ok "Updated Container OS"
|
||||||
|
|
||||||
msg_info "Installing core dependencies"
|
msg_info "Installing core dependencies"
|
||||||
|
|||||||
@@ -528,7 +528,37 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BRIDGES=$( ip link show | grep -oP '(?<=: )vmbr\d+' | sort)
|
|
||||||
|
BRIDGES=""
|
||||||
|
IFACE_FILEPATH_LIST="/etc/network/interfaces"$'\n'$(find "/etc/network/interfaces.d/" -type f)
|
||||||
|
OLD_IFS=$IFS; IFS=$'\n'
|
||||||
|
|
||||||
|
for iface_filepath in ${IFACE_FILEPATH_LIST}; do
|
||||||
|
iface_indexes_tmpfile=$(mktemp -q -u '.iface-XXXX')
|
||||||
|
|
||||||
|
( grep -Pn '^\s*iface' "${iface_filepath}" | cut -d':' -f1 && wc -l "${iface_filepath}" | cut -d' ' -f1 ) | \
|
||||||
|
awk 'FNR==1 {line=$0; next} {print line":"$0-1; line=$0}' > "${iface_indexes_tmpfile}"
|
||||||
|
|
||||||
|
if [ -f "${iface_indexes_tmpfile}" ]; then
|
||||||
|
while read -r pair; do
|
||||||
|
start=$(echo "${pair}" | cut -d':' -f1)
|
||||||
|
end=$(echo "${pair}" | cut -d':' -f2)
|
||||||
|
|
||||||
|
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*bridge[-_](ports|stp|fd|vlan-aware|vids)\s+'; then
|
||||||
|
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
|
||||||
|
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done < "${iface_indexes_tmpfile}"
|
||||||
|
rm -f "${iface_indexes_tmpfile}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
IFS=$OLD_IFS
|
||||||
|
|
||||||
|
BRIDGES=$(echo "$BRIDGES" | grep -v '^\s*$' | sort | uniq)
|
||||||
|
|
||||||
if [[ -z "$BRIDGES" ]]; then
|
if [[ -z "$BRIDGES" ]]; then
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
|
||||||
@@ -779,8 +809,6 @@ EOF
|
|||||||
|
|
||||||
config_file() {
|
config_file() {
|
||||||
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
|
||||||
|
|
||||||
CONFIG_FILE="/opt/community-scripts/.settings"
|
CONFIG_FILE="/opt/community-scripts/.settings"
|
||||||
|
|
||||||
if [[ -f "/opt/community-scripts/${NSAPP}.conf" ]]; then
|
if [[ -f "/opt/community-scripts/${NSAPP}.conf" ]]; then
|
||||||
@@ -797,67 +825,39 @@ config_file() {
|
|||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$var_os" == "debian" ]]; then
|
|
||||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
|
||||||
if [[ "$var_version" == "11" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
elif [[ "$var_version" == "12" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
else
|
|
||||||
msg_error "Unknown setting for var_version, should be 11 or 12, was ${var_version}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
elif [[ "$var_os" == "ubuntu" ]]; then
|
|
||||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
|
||||||
if [[ "$var_version" == "20.04" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
elif [[ "$var_version" == "22.04" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
elif [[ "$var_version" == "24.04" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
elif [[ "$var_version" == "24.10" ]]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
else
|
|
||||||
msg_error "Unknown setting for var_version, should be 20.04, 22.04, 24.04 or 24.10, was ${var_version}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_error "Unknown setting for var_os! should be debian or ubuntu, was ${var_os}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$CT_ID" ]]; then
|
if [[ -n "$CT_ID" ]]; then
|
||||||
|
|
||||||
if [[ "$CT_ID" =~ ^([0-9]{3,4})-([0-9]{3,4})$ ]]; then
|
if [[ "$CT_ID" =~ ^([0-9]{3,4})-([0-9]{3,4})$ ]]; then
|
||||||
MIN_ID=${BASH_REMATCH[1]}
|
MIN_ID=${BASH_REMATCH[1]}
|
||||||
MAX_ID=${BASH_REMATCH[2]}
|
MAX_ID=${BASH_REMATCH[2]}
|
||||||
|
|
||||||
if ((MIN_ID >= MAX_ID)); then
|
if ((MIN_ID >= MAX_ID)); then
|
||||||
msg_error "Invalid Container ID range. The first number must be smaller than the second number, was ${CT_ID}"
|
msg_error "Invalid Container ID range. The first number must be smaller than the second number, was ${CT_ID}"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
|
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
|
||||||
|
if [[ -n "$LIST_OF_IDS" ]]; then
|
||||||
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
|
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
|
||||||
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
|
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
|
||||||
CT_ID=$ID
|
CT_ID=$ID
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||||
|
|
||||||
elif [[ "$CT_ID" =~ ^[0-9]+$ ]]; then
|
elif [[ "$CT_ID" =~ ^[0-9]+$ ]]; then
|
||||||
|
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
|
||||||
|
if [[ -n "$LIST_OF_IDS" ]]; then
|
||||||
|
|
||||||
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
|
|
||||||
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
|
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||||
else
|
else
|
||||||
msg_error "Container ID $CT_ID already exists"
|
msg_error "Container ID $CT_ID already exists"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
msg_error "Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${CT_ID}"
|
msg_error "Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${CT_ID}"
|
||||||
exit
|
exit
|
||||||
@@ -954,15 +954,8 @@ config_file() {
|
|||||||
if [ "$NET" == "dhcp" ]; then
|
if [ "$NET" == "dhcp" ]; then
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
|
||||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
|
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
|
||||||
elif
|
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
|
||||||
[[ "$NET" =~ $ip_cidr_regex ]]
|
|
||||||
then
|
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
|
||||||
else
|
|
||||||
msg_error "Invalid IP Address format. Needs to be 0.0.0.0/0, was ${NET}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ ! -z "$GATE" ]; then
|
if [ ! -z "$GATE" ]; then
|
||||||
if [[ "$GATE" =~ $ip_regex ]]; then
|
if [[ "$GATE" =~ $ip_regex ]]; then
|
||||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
|
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
|
||||||
@@ -975,6 +968,12 @@ config_file() {
|
|||||||
msg_error "Gateway IP Address cannot be empty"
|
msg_error "Gateway IP Address cannot be empty"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
msg_error "Invalid IP Address format. Needs to be 0.0.0.0/0, was ${NET}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [[ ! -z "$APT_CACHER_IP" ]]; then
|
if [[ ! -z "$APT_CACHER_IP" ]]; then
|
||||||
if [[ "$APT_CACHER_IP" =~ $ip_regex ]]; then
|
if [[ "$APT_CACHER_IP" =~ $ip_regex ]]; then
|
||||||
|
|||||||
@@ -55,10 +55,16 @@ install_node_and_modules() {
|
|||||||
IFS=',' read -ra MODULES <<<"$NODE_MODULE"
|
IFS=',' read -ra MODULES <<<"$NODE_MODULE"
|
||||||
for mod in "${MODULES[@]}"; do
|
for mod in "${MODULES[@]}"; do
|
||||||
local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION
|
local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION
|
||||||
if [[ "$mod" == *"@"* ]]; then
|
if [[ "$mod" == @*/*@* ]]; then
|
||||||
|
# Scoped package with version, e.g. @vue/cli-service@latest
|
||||||
MODULE_NAME="${mod%@*}"
|
MODULE_NAME="${mod%@*}"
|
||||||
MODULE_REQ_VERSION="${mod#*@}"
|
MODULE_REQ_VERSION="${mod##*@}"
|
||||||
|
elif [[ "$mod" == *"@"* ]]; then
|
||||||
|
# Unscoped package with version, e.g. yarn@latest
|
||||||
|
MODULE_NAME="${mod%@*}"
|
||||||
|
MODULE_REQ_VERSION="${mod##*@}"
|
||||||
else
|
else
|
||||||
|
# No version specified
|
||||||
MODULE_NAME="$mod"
|
MODULE_NAME="$mod"
|
||||||
MODULE_REQ_VERSION="latest"
|
MODULE_REQ_VERSION="latest"
|
||||||
fi
|
fi
|
||||||
@@ -101,25 +107,31 @@ install_postgresql() {
|
|||||||
DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||||
|
|
||||||
if command -v psql >/dev/null; then
|
if command -v psql >/dev/null; then
|
||||||
CURRENT_PG_VERSION="$(psql -V | grep -oP '\s\K[0-9]+(?=\.)')"
|
CURRENT_PG_VERSION="$(psql -V | awk '{print $3}' | cut -d. -f1)"
|
||||||
if [[ "$CURRENT_PG_VERSION" != "$PG_VERSION" ]]; then
|
if [[ "$CURRENT_PG_VERSION" == "$PG_VERSION" ]]; then
|
||||||
msg_info "PostgreSQL Version $CURRENT_PG_VERSION found, replacing with $PG_VERSION"
|
msg_ok "PostgreSQL $PG_VERSION is already installed"
|
||||||
NEED_PG_INSTALL=true
|
return
|
||||||
fi
|
fi
|
||||||
|
msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
|
||||||
|
NEED_PG_INSTALL=true
|
||||||
else
|
else
|
||||||
msg_info "PostgreSQL not found, installing version $PG_VERSION"
|
msg_info "PostgreSQL not installed, proceeding with fresh install of $PG_VERSION"
|
||||||
NEED_PG_INSTALL=true
|
NEED_PG_INSTALL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$NEED_PG_INSTALL" == true ]]; then
|
if [[ "$NEED_PG_INSTALL" == true ]]; then
|
||||||
msg_info "Stopping PostgreSQL if running"
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
systemctl stop postgresql >/dev/null 2>&1 || true
|
msg_info "Dumping all PostgreSQL data from version $CURRENT_PG_VERSION"
|
||||||
|
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Removing conflicting PostgreSQL packages"
|
msg_info "Stopping PostgreSQL service"
|
||||||
$STD apt-get purge -y "postgresql*"
|
systemctl stop postgresql || true
|
||||||
|
|
||||||
|
msg_info "Removing pgdg repo and old GPG key"
|
||||||
rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
|
rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL Repository"
|
msg_info "Adding PostgreSQL PGDG repository"
|
||||||
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc |
|
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc |
|
||||||
gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
|
gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
|
||||||
|
|
||||||
@@ -127,9 +139,24 @@ install_postgresql() {
|
|||||||
>/etc/apt/sources.list.d/pgdg.list
|
>/etc/apt/sources.list.d/pgdg.list
|
||||||
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y "postgresql-${PG_VERSION}"
|
|
||||||
|
|
||||||
msg_ok "Installed PostgreSQL ${PG_VERSION}"
|
msg_info "Installing PostgreSQL $PG_VERSION"
|
||||||
|
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
|
||||||
|
|
||||||
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
|
$STD msg_info "Removing old PostgreSQL $CURRENT_PG_VERSION packages"
|
||||||
|
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
$STD msg_info "Starting PostgreSQL $PG_VERSION"
|
||||||
|
systemctl enable --now postgresql
|
||||||
|
|
||||||
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
|
$STD msg_info "Restoring dumped data"
|
||||||
|
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_ok "PostgreSQL $PG_VERSION installed"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,7 +272,11 @@ install_php() {
|
|||||||
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
|
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
|
||||||
|
|
||||||
local CURRENT_PHP
|
local CURRENT_PHP
|
||||||
|
if command -v php >/dev/null 2>&1; then
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
else
|
||||||
|
CURRENT_PHP=""
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
|
if [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
|
||||||
$STD echo "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
|
$STD echo "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
|
||||||
@@ -352,7 +383,7 @@ install_go() {
|
|||||||
msg_error "Could not determine latest Go version"
|
msg_error "Could not determine latest Go version"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
msg_info "Detected latest Go version: $GO_VERSION"
|
$STD msg_info "Detected latest Go version: $GO_VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local GO_BIN="/usr/local/bin/go"
|
local GO_BIN="/usr/local/bin/go"
|
||||||
@@ -362,10 +393,10 @@ install_go() {
|
|||||||
local CURRENT_VERSION
|
local CURRENT_VERSION
|
||||||
CURRENT_VERSION=$("$GO_BIN" version | awk '{print $3}' | sed 's/go//')
|
CURRENT_VERSION=$("$GO_BIN" version | awk '{print $3}' | sed 's/go//')
|
||||||
if [[ "$CURRENT_VERSION" == "$GO_VERSION" ]]; then
|
if [[ "$CURRENT_VERSION" == "$GO_VERSION" ]]; then
|
||||||
msg_ok "Go $GO_VERSION already installed"
|
$STD msg_ok "Go $GO_VERSION already installed"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
msg_info "Go $CURRENT_VERSION found, upgrading to $GO_VERSION"
|
$STD msg_info "Go $CURRENT_VERSION found, upgrading to $GO_VERSION"
|
||||||
rm -rf "$GO_INSTALL_DIR"
|
rm -rf "$GO_INSTALL_DIR"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -537,7 +568,7 @@ fetch_and_deploy_gh_release() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
tag=$(echo "$api_response" | jq -r '.tag_name // .name // empty')
|
tag=$(echo "$api_response" | jq -r '.tag_name // .name // empty')
|
||||||
[[ "$tag" =~ ^v[0-9] ]] && tag="${tag:1}"
|
version="${tag#v}"
|
||||||
|
|
||||||
if [[ -z "$tag" ]]; then
|
if [[ -z "$tag" ]]; then
|
||||||
$STD msg_info "Empty tag received, retrying...\n"
|
$STD msg_info "Empty tag received, retrying...\n"
|
||||||
@@ -555,12 +586,11 @@ fetch_and_deploy_gh_release() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Version comparison (if we already have this version, skip)
|
# Version comparison (if we already have this version, skip)
|
||||||
if [[ "$current_version" == "$tag" ]]; then
|
if [[ "$current_version" == "$version" ]]; then
|
||||||
$STD msg_info "Already running the latest version ($tag). Skipping update."
|
$STD msg_info "Already running the latest version ($version). Skipping update."
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local version="$tag"
|
|
||||||
local base_url="https://github.com/$repo/releases/download/v$tag"
|
local base_url="https://github.com/$repo/releases/download/v$tag"
|
||||||
local tmpdir
|
local tmpdir
|
||||||
tmpdir=$(mktemp -d) || return 1
|
tmpdir=$(mktemp -d) || return 1
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ if [ -z "$containers" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
menu_items=()
|
menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option
|
||||||
FORMAT="%-10s %-15s %-10s"
|
FORMAT="%-10s %-15s %-10s"
|
||||||
|
|
||||||
while read -r container; do
|
while read -r container; do
|
||||||
@@ -76,6 +76,11 @@ DELETE_MODE=${DELETE_MODE:-m}
|
|||||||
|
|
||||||
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
||||||
|
|
||||||
|
# If "ALL" is selected, override with all container IDs
|
||||||
|
if echo "$selected_ids" | grep -q "^ALL$"; then
|
||||||
|
selected_ids=$(echo "$containers" | awk '{print $1}')
|
||||||
|
fi
|
||||||
|
|
||||||
for container_id in $selected_ids; do
|
for container_id in $selected_ids; do
|
||||||
status=$(pct status $container_id)
|
status=$(pct status $container_id)
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ function update_container() {
|
|||||||
echo -e "\n [Info] Updating $container : $name \n"
|
echo -e "\n [Info] Updating $container : $name \n"
|
||||||
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
||||||
case "$os" in
|
case "$os" in
|
||||||
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
|
||||||
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
||||||
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
||||||
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
||||||
@@ -33,17 +33,17 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
|||||||
echo -e "[Info] Skipping $container"
|
echo -e "[Info] Skipping $container"
|
||||||
sleep 1
|
sleep 1
|
||||||
else
|
else
|
||||||
status=$(pct status $container)
|
status=$(pct status "$container")
|
||||||
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
|
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
|
||||||
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
||||||
echo -e "[Info] Starting $container"
|
echo -e "[Info] Starting $container"
|
||||||
pct start $container
|
pct start "$container"
|
||||||
sleep 5
|
sleep 5
|
||||||
update_container $container
|
update_container "$container"
|
||||||
echo -e "[Info] Shutting down $container"
|
echo -e "[Info] Shutting down $container"
|
||||||
pct shutdown $container &
|
pct shutdown "$container" &
|
||||||
elif [ "$status" == "status: running" ]; then
|
elif [ "$status" == "status: running" ]; then
|
||||||
update_container $container
|
update_container "$container"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
function header_info {
|
function header_info() {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
__ __ __ __ __ _ ________
|
__ __ __ __ __ _ ________
|
||||||
@@ -64,7 +64,7 @@ function update_container() {
|
|||||||
echo -e "${BL}[Info]${GN} Updating ${BL}$container${CL} : ${GN}$name${CL} - ${YW}[No disk info for ${os}]${CL}\n"
|
echo -e "${BL}[Info]${GN} Updating ${BL}$container${CL} : ${GN}$name${CL} - ${YW}[No disk info for ${os}]${CL}\n"
|
||||||
fi
|
fi
|
||||||
case "$os" in
|
case "$os" in
|
||||||
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
|
||||||
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
|
||||||
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
|
||||||
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
|
||||||
|
|||||||
Reference in New Issue
Block a user