mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-06 03:12:50 +00:00
Compare commits
20 Commits
2025-07-14
...
2025-07-15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7f67e5534 | ||
|
|
03c4e54da6 | ||
|
|
eb86d3e960 | ||
|
|
968b7cdf43 | ||
|
|
688d296d13 | ||
|
|
0379223ead | ||
|
|
7a0ca05153 | ||
|
|
fb3bf03332 | ||
|
|
6d312c9c8d | ||
|
|
a2dde6594e | ||
|
|
f7c9d77019 | ||
|
|
8f4f2f4d92 | ||
|
|
f15e4ea552 | ||
|
|
1a90d90d5e | ||
|
|
11f1e86500 | ||
|
|
9d84657763 | ||
|
|
31d57da5ab | ||
|
|
7d223b984b | ||
|
|
417c4e466c | ||
|
|
b16fa8d34f |
18
CHANGELOG.md
18
CHANGELOG.md
@@ -10,8 +10,26 @@
|
|||||||
> [!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-07-16
|
||||||
|
|
||||||
## 2025-07-15
|
## 2025-07-15
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
|
||||||
|
- Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
|
||||||
|
- 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
|
||||||
|
|
||||||
## 2025-07-14
|
## 2025-07-14
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
10
ct/2fauth.sh
10
ct/2fauth.sh
@@ -28,8 +28,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if ! command -v jq &>/dev/null; then
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
@@ -45,10 +48,11 @@ function update_script() {
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
lsb-release \
|
lsb-release \
|
||||||
gnupg2
|
gnupg2
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
||||||
fi
|
fi
|
||||||
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
||||||
|
setup_composer
|
||||||
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
||||||
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
||||||
cd "/opt/2fauth" || return
|
cd "/opt/2fauth" || return
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ function update_script() {
|
|||||||
systemctl stop emqx
|
systemctl stop emqx
|
||||||
msg_ok "Stopped EMQX"
|
msg_ok "Stopped EMQX"
|
||||||
|
|
||||||
|
msg_info "Removing old EMQX"
|
||||||
|
$STD apt-get remove --purge -y emqx
|
||||||
|
msg_ok "Removed old EMQX"
|
||||||
|
|
||||||
msg_info "Downloading EMQX v${RELEASE}"
|
msg_info "Downloading EMQX v${RELEASE}"
|
||||||
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
||||||
curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
||||||
|
|||||||
29
ct/peanut.sh
29
ct/peanut.sh
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
APP="PeaNUT"
|
APP="PeaNUT"
|
||||||
var_tags="${var_tags:-network;ups;}"
|
var_tags="${var_tags:-network;ups;}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-3072}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-7}"
|
var_disk="${var_disk:-7}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
@@ -27,22 +27,31 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
if ! command -v jq &>/dev/null; then
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
$STD apt-get install -y jq
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
fi
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
|
||||||
|
|
||||||
|
msg_info "Stopping $APP"
|
||||||
systemctl stop peanut
|
systemctl stop peanut
|
||||||
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
|
msg_ok "Stopped $APP"
|
||||||
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
|
|
||||||
rm peanut.tar.gz
|
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /opt/peanut
|
cd /opt/peanut
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm run build
|
$STD pnpm run build:local
|
||||||
cp -r .next/static .next/standalone/.next/
|
cp -r .next/static .next/standalone/.next/
|
||||||
mkdir -p /opt/peanut/.next/standalone/config
|
mkdir -p /opt/peanut/.next/standalone/config
|
||||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
||||||
systemctl start peanut
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start peanut
|
||||||
|
msg_ok "Started $APP"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
66
frontend/public/json/peanut.json
generated
66
frontend/public/json/peanut.json
generated
@@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "PeaNUT",
|
"name": "PeaNUT",
|
||||||
"slug": "peanut",
|
"slug": "peanut",
|
||||||
"categories": [
|
"categories": [
|
||||||
4
|
4
|
||||||
],
|
],
|
||||||
"date_created": "2024-06-14",
|
"date_created": "2024-06-14",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"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",
|
||||||
"description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
|
"description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/peanut.sh",
|
"script": "ct/peanut.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 3072,
|
"ram": 4096,
|
||||||
"hdd": 7,
|
"hdd": 7,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
250
frontend/public/json/versions.json
generated
250
frontend/public/json/versions.json
generated
@@ -1,29 +1,144 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "esphome/esphome",
|
||||||
|
"version": "2025.6.3",
|
||||||
|
"date": "2025-07-03T01:07:26Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.101.2",
|
||||||
|
"date": "2025-06-25T21:18:52Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "steveiliop56/tinyauth",
|
"name": "steveiliop56/tinyauth",
|
||||||
"version": "v3.6.1",
|
"version": "v3.6.1",
|
||||||
"date": "2025-07-12T13:41:57Z"
|
"date": "2025-07-12T13:41:57Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "sbondCo/Watcharr",
|
||||||
|
"version": "v2.1.1",
|
||||||
|
"date": "2025-07-15T22:38:01Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "rcourtman/Pulse",
|
"name": "rcourtman/Pulse",
|
||||||
"version": "v3.42.0",
|
"version": "v3.42.0",
|
||||||
"date": "2025-07-14T22:07:28Z"
|
"date": "2025-07-14T22:07:28Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mongodb/mongo",
|
||||||
|
"version": "r8.2.0-alpha2",
|
||||||
|
"date": "2025-07-15T20:47:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "plexguide/Huntarr.io",
|
||||||
|
"version": "8.1.12",
|
||||||
|
"date": "2025-07-15T20:06:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "netbox-community/netbox",
|
||||||
|
"version": "v4.3.4",
|
||||||
|
"date": "2025-07-15T18:01:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.0.13",
|
||||||
|
"date": "2025-07-15T17:22:26Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gethomepage/homepage",
|
||||||
|
"version": "v1.4.0",
|
||||||
|
"date": "2025-07-15T16:43:28Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "msgbyte/tianji",
|
||||||
|
"version": "v1.24.0",
|
||||||
|
"date": "2025-07-15T16:02:44Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "duplicati/duplicati",
|
||||||
|
"version": "v2.1.0.125-2.1.0.125_canary_2025-07-15",
|
||||||
|
"date": "2025-07-15T15:39:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v2.70.14",
|
||||||
|
"date": "2025-07-15T15:27:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "WordPress/WordPress",
|
||||||
|
"version": "6.8.2",
|
||||||
|
"date": "2025-07-15T15:14:16Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jenkinsci/jenkins",
|
||||||
|
"version": "jenkins-2.519",
|
||||||
|
"date": "2025-07-15T14:43:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fallenbagel/jellyseerr",
|
||||||
|
"version": "v2.7.1",
|
||||||
|
"date": "2025-07-15T14:22:46Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "element-hq/synapse",
|
||||||
|
"version": "v1.134.0",
|
||||||
|
"date": "2025-07-15T13:43:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Checkmk/checkmk",
|
||||||
|
"version": "v2.4.0p8-rc1",
|
||||||
|
"date": "2025-07-15T12:09:17Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zabbix/zabbix",
|
||||||
|
"version": "7.2.11rc1",
|
||||||
|
"date": "2025-07-15T11:47:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dgtlmoon/changedetection.io",
|
||||||
|
"version": "0.50.7",
|
||||||
|
"date": "2025-07-15T11:29:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.3-beta.10",
|
||||||
|
"date": "2025-07-15T06:07:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gotson/komga",
|
||||||
|
"version": "1.22.1",
|
||||||
|
"date": "2025-07-15T06:44:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.2159",
|
||||||
|
"date": "2025-07-15T05:47:35Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "go-gitea/gitea",
|
||||||
|
"version": "v1.24.3",
|
||||||
|
"date": "2025-07-15T04:56:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jhuckaby/Cronicle",
|
||||||
|
"version": "v0.9.82",
|
||||||
|
"date": "2025-07-15T03:45:44Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "pi-hole/pi-hole",
|
"name": "pi-hole/pi-hole",
|
||||||
"version": "v6.1.4",
|
"version": "v6.1.4",
|
||||||
"date": "2025-07-14T21:22:17Z"
|
"date": "2025-07-14T21:22:17Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "postgres/postgres",
|
||||||
|
"version": "REL_18_BETA2",
|
||||||
|
"date": "2025-07-14T20:12:49Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "ipfs/kubo",
|
"name": "ipfs/kubo",
|
||||||
"version": "v0.36.0",
|
"version": "v0.36.0",
|
||||||
"date": "2025-07-14T18:59:57Z"
|
"date": "2025-07-14T18:59:57Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "esphome/esphome",
|
|
||||||
"version": "2025.6.3",
|
|
||||||
"date": "2025-07-03T01:07:26Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "open-webui/open-webui",
|
"name": "open-webui/open-webui",
|
||||||
"version": "v0.6.16",
|
"version": "v0.6.16",
|
||||||
@@ -64,16 +179,6 @@
|
|||||||
"version": "3.1.3",
|
"version": "3.1.3",
|
||||||
"date": "2025-07-14T07:14:31Z"
|
"date": "2025-07-14T07:14:31Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.3-beta.9",
|
|
||||||
"date": "2025-07-14T06:07:20Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.22.2154",
|
|
||||||
"date": "2025-07-14T06:00:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "firefly-iii/firefly-iii",
|
"name": "firefly-iii/firefly-iii",
|
||||||
"version": "v6.2.20",
|
"version": "v6.2.20",
|
||||||
@@ -99,11 +204,6 @@
|
|||||||
"version": "5.0.0.M4",
|
"version": "5.0.0.M4",
|
||||||
"date": "2025-07-13T16:04:39Z"
|
"date": "2025-07-13T16:04:39Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "msgbyte/tianji",
|
|
||||||
"version": "v1.23.5",
|
|
||||||
"date": "2025-07-13T15:23:02Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mayswind/AriaNg",
|
"name": "mayswind/AriaNg",
|
||||||
"version": "1.3.11",
|
"version": "1.3.11",
|
||||||
@@ -134,11 +234,6 @@
|
|||||||
"version": "v4.47.1",
|
"version": "v4.47.1",
|
||||||
"date": "2025-01-05T21:14:23Z"
|
"date": "2025-01-05T21:14:23Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "dgtlmoon/changedetection.io",
|
|
||||||
"version": "0.50.6",
|
|
||||||
"date": "2025-07-12T19:52:52Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "advplyr/audiobookshelf",
|
"name": "advplyr/audiobookshelf",
|
||||||
"version": "v2.26.0",
|
"version": "v2.26.0",
|
||||||
@@ -164,41 +259,26 @@
|
|||||||
"version": "v1.28.1",
|
"version": "v1.28.1",
|
||||||
"date": "2025-07-12T08:50:59Z"
|
"date": "2025-07-12T08:50:59Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "fallenbagel/jellyseerr",
|
|
||||||
"version": "preview-seerr",
|
|
||||||
"date": "2025-07-12T08:15:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "leiweibau/Pi.Alert",
|
"name": "leiweibau/Pi.Alert",
|
||||||
"version": "v2025-07-12",
|
"version": "v2025-07-12",
|
||||||
"date": "2025-07-12T07:53:52Z"
|
"date": "2025-07-12T07:53:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.3.1",
|
|
||||||
"date": "2025-07-09T15:41:43Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "fuma-nama/fumadocs",
|
"name": "fuma-nama/fumadocs",
|
||||||
"version": "fumadocs-openapi@9.1.2",
|
"version": "fumadocs-openapi@9.1.2",
|
||||||
"date": "2025-07-12T03:58:47Z"
|
"date": "2025-07-12T03:58:47Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.9.7-rc1",
|
||||||
|
"date": "2025-07-11T22:15:00Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "eclipse-mosquitto/mosquitto",
|
"name": "eclipse-mosquitto/mosquitto",
|
||||||
"version": "v2.0.22",
|
"version": "v2.0.22",
|
||||||
"date": "2025-07-11T21:34:20Z"
|
"date": "2025-07-11T21:34:20Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mongodb/mongo",
|
|
||||||
"version": "r8.2.0-alpha0",
|
|
||||||
"date": "2025-07-11T21:06:26Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "duplicati/duplicati",
|
|
||||||
"version": "v2.1.0.124-2.1.0.124_canary_2025-07-11",
|
|
||||||
"date": "2025-07-11T20:09:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TandoorRecipes/recipes",
|
"name": "TandoorRecipes/recipes",
|
||||||
"version": "1.5.35",
|
"version": "1.5.35",
|
||||||
@@ -219,11 +299,6 @@
|
|||||||
"version": "v10.9.0",
|
"version": "v10.9.0",
|
||||||
"date": "2025-07-11T12:57:54Z"
|
"date": "2025-07-11T12:57:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zitadel/zitadel",
|
|
||||||
"version": "v3.3.1",
|
|
||||||
"date": "2025-07-11T11:51:48Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "traefik/traefik",
|
"name": "traefik/traefik",
|
||||||
"version": "v3.4.4",
|
"version": "v3.4.4",
|
||||||
@@ -244,11 +319,6 @@
|
|||||||
"version": "v0.85.1",
|
"version": "v0.85.1",
|
||||||
"date": "2025-07-11T01:17:53Z"
|
"date": "2025-07-11T01:17:53Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jenkinsci/jenkins",
|
|
||||||
"version": "jenkins-2.518",
|
|
||||||
"date": "2025-07-08T13:52:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "LibreTranslate/LibreTranslate",
|
"name": "LibreTranslate/LibreTranslate",
|
||||||
"version": "v1.7.2",
|
"version": "v1.7.2",
|
||||||
@@ -259,11 +329,6 @@
|
|||||||
"version": "v2.13.0",
|
"version": "v2.13.0",
|
||||||
"date": "2025-07-10T19:27:54Z"
|
"date": "2025-07-10T19:27:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.9.6",
|
|
||||||
"date": "2025-07-08T01:26:29Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "forgejo/forgejo",
|
"name": "forgejo/forgejo",
|
||||||
"version": "v11.0.3",
|
"version": "v11.0.3",
|
||||||
@@ -324,11 +389,6 @@
|
|||||||
"version": "16.0",
|
"version": "16.0",
|
||||||
"date": "2025-07-09T13:28:43Z"
|
"date": "2025-07-09T13:28:43Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "element-hq/synapse",
|
|
||||||
"version": "v1.133.0",
|
|
||||||
"date": "2025-07-01T15:13:42Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "AdguardTeam/AdGuardHome",
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
"version": "v0.107.63",
|
"version": "v0.107.63",
|
||||||
@@ -374,11 +434,6 @@
|
|||||||
"version": "v2.38.2",
|
"version": "v2.38.2",
|
||||||
"date": "2025-07-08T09:35:14Z"
|
"date": "2025-07-08T09:35:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Checkmk/checkmk",
|
|
||||||
"version": "v2.4.0p7",
|
|
||||||
"date": "2025-07-08T05:51:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
"version": "pmm-6401-v1.121.0",
|
"version": "pmm-6401-v1.121.0",
|
||||||
@@ -549,11 +604,6 @@
|
|||||||
"version": "v0.57.0",
|
"version": "v0.57.0",
|
||||||
"date": "2025-07-01T16:47:46Z"
|
"date": "2025-07-01T16:47:46Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.4.0",
|
|
||||||
"date": "2025-07-01T04:36:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "openobserve/openobserve",
|
"name": "openobserve/openobserve",
|
||||||
"version": "v0.15.0-rc3",
|
"version": "v0.15.0-rc3",
|
||||||
@@ -564,11 +614,6 @@
|
|||||||
"version": "v2.32.0",
|
"version": "v2.32.0",
|
||||||
"date": "2025-06-30T22:12:48Z"
|
"date": "2025-06-30T22:12:48Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jhuckaby/Cronicle",
|
|
||||||
"version": "v0.9.81",
|
|
||||||
"date": "2025-06-30T16:40:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jupyter/notebook",
|
"name": "jupyter/notebook",
|
||||||
"version": "v7.4.4",
|
"version": "v7.4.4",
|
||||||
@@ -584,11 +629,6 @@
|
|||||||
"version": "v29.0",
|
"version": "v29.0",
|
||||||
"date": "2025-06-30T03:52:33Z"
|
"date": "2025-06-30T03:52:33Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "plexguide/Huntarr.io",
|
|
||||||
"version": "8.1.11",
|
|
||||||
"date": "2025-06-28T03:42:46Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tobychui/zoraxy",
|
"name": "tobychui/zoraxy",
|
||||||
"version": "v3.2.4",
|
"version": "v3.2.4",
|
||||||
@@ -599,11 +639,6 @@
|
|||||||
"version": "version/2025.6.3",
|
"version": "version/2025.6.3",
|
||||||
"date": "2025-06-27T14:01:06Z"
|
"date": "2025-06-27T14:01:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "netbox-community/netbox",
|
|
||||||
"version": "v4.3.3",
|
|
||||||
"date": "2025-06-26T18:42:56Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tailscale/tailscale",
|
"name": "tailscale/tailscale",
|
||||||
"version": "v1.84.3",
|
"version": "v1.84.3",
|
||||||
@@ -619,11 +654,6 @@
|
|||||||
"version": "v1.6.1",
|
"version": "v1.6.1",
|
||||||
"date": "2025-06-25T21:19:25Z"
|
"date": "2025-06-25T21:19:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.101.2",
|
|
||||||
"date": "2025-06-25T21:18:52Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "moghtech/komodo",
|
"name": "moghtech/komodo",
|
||||||
"version": "v1.18.4",
|
"version": "v1.18.4",
|
||||||
@@ -644,11 +674,6 @@
|
|||||||
"version": "RELEASE.2025-06-13T11-33-47Z",
|
"version": "RELEASE.2025-06-13T11-33-47Z",
|
||||||
"date": "2025-06-23T20:58:42Z"
|
"date": "2025-06-23T20:58:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "gotson/komga",
|
|
||||||
"version": "1.22.0",
|
|
||||||
"date": "2025-06-23T03:11:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "clusterzx/paperless-ai",
|
"name": "clusterzx/paperless-ai",
|
||||||
"version": "v3.0.7",
|
"version": "v3.0.7",
|
||||||
@@ -669,11 +694,6 @@
|
|||||||
"version": "v0.28.4",
|
"version": "v0.28.4",
|
||||||
"date": "2025-06-21T08:29:04Z"
|
"date": "2025-06-21T08:29:04Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "go-gitea/gitea",
|
|
||||||
"version": "v1.24.2",
|
|
||||||
"date": "2025-06-20T20:37:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "immich-app/immich",
|
"name": "immich-app/immich",
|
||||||
"version": "v1.135.3",
|
"version": "v1.135.3",
|
||||||
@@ -874,11 +894,6 @@
|
|||||||
"version": "v0.24.4",
|
"version": "v0.24.4",
|
||||||
"date": "2025-06-02T02:49:05Z"
|
"date": "2025-06-02T02:49:05Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "gethomepage/homepage",
|
|
||||||
"version": "v1.3.2",
|
|
||||||
"date": "2025-06-01T19:02:46Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "release-argus/Argus",
|
"name": "release-argus/Argus",
|
||||||
"version": "0.26.3",
|
"version": "0.26.3",
|
||||||
@@ -924,11 +939,6 @@
|
|||||||
"version": "0.5",
|
"version": "0.5",
|
||||||
"date": "2025-05-21T20:19:14Z"
|
"date": "2025-05-21T20:19:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "sbondCo/Watcharr",
|
|
||||||
"version": "v2.1.0",
|
|
||||||
"date": "2025-05-18T18:20:43Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "YunoHost/yunohost",
|
"name": "YunoHost/yunohost",
|
||||||
"version": "debian/12.1.6.1",
|
"version": "debian/12.1.6.1",
|
||||||
@@ -979,21 +989,11 @@
|
|||||||
"version": "v1.8.1",
|
"version": "v1.8.1",
|
||||||
"date": "2025-05-06T04:27:00Z"
|
"date": "2025-05-06T04:27:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "postgres/postgres",
|
|
||||||
"version": "REL_13_21",
|
|
||||||
"date": "2025-05-05T20:34:49Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "apache/couchdb",
|
"name": "apache/couchdb",
|
||||||
"version": "3.5.0",
|
"version": "3.5.0",
|
||||||
"date": "2025-05-05T16:28:24Z"
|
"date": "2025-05-05T16:28:24Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "WordPress/WordPress",
|
|
||||||
"version": "6.8.1",
|
|
||||||
"date": "2025-04-30T16:44:16Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "deluge-torrent/deluge",
|
"name": "deluge-torrent/deluge",
|
||||||
"version": "deluge-2.2.0",
|
"version": "deluge-2.2.0",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
|
|||||||
nginx
|
nginx
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,20 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
|
SITE_NAME="monitoring"
|
||||||
$STD omd start
|
$STD omd create "$SITE_NAME"
|
||||||
|
MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16)
|
||||||
|
|
||||||
|
echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin"
|
||||||
|
$STD omd start "$SITE_NAME"
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "Application-Credentials"
|
echo "Application-Credentials"
|
||||||
echo "Username: cmkadmin"
|
echo "Username: cmkadmin"
|
||||||
echo "Password: $PASSWORD"
|
echo "Password: $MKPASSWORD"
|
||||||
|
echo "Site: $SITE_NAME"
|
||||||
} >>~/checkmk.creds
|
} >>~/checkmk.creds
|
||||||
|
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
|
FFMPEG_VERSION="latest" FFMPEG_TYPE="full" setup_ffmpeg
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
msg_info "Setting Up Hardware Acceleration"
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||||
|
|||||||
@@ -14,22 +14,17 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Installing NUT"
|
msg_info "Installing NUT"
|
||||||
$STD apt-get install -y nut-client
|
$STD apt-get install -y nut-client
|
||||||
msg_ok "Installed NUT"
|
msg_ok "Installed NUT"
|
||||||
|
|
||||||
msg_info "Installing Peanut"
|
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||||
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
|
|
||||||
mkdir -p /opt/peanut
|
msg_info "Setup Peanut"
|
||||||
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
|
|
||||||
rm peanut.tar.gz
|
|
||||||
cd /opt/peanut
|
cd /opt/peanut
|
||||||
$STD npm install -g pnpm
|
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm run build
|
$STD pnpm run build:local
|
||||||
cp -r .next/static .next/standalone/.next/
|
cp -r .next/static .next/standalone/.next/
|
||||||
mkdir -p /opt/peanut/.next/standalone/config
|
mkdir -p /opt/peanut/.next/standalone/config
|
||||||
mkdir -p /etc/peanut/
|
mkdir -p /etc/peanut/
|
||||||
@@ -40,7 +35,7 @@ NUT_HOST: 0.0.0.0
|
|||||||
NUT_PORT: 3493
|
NUT_PORT: 3493
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
||||||
msg_ok "Installed Peanut"
|
msg_ok "Setup Peanut"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/peanut.service
|
cat <<EOF >/etc/systemd/system/peanut.service
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ write_config() {
|
|||||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Write configfile" --yesno "Do you want to write the selections to a config file?" 10 60; then
|
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Write configfile" --yesno "Do you want to write the selections to a config file?" 10 60; then
|
||||||
FILEPATH="/opt/community-scripts/${NSAPP}.conf"
|
FILEPATH="/opt/community-scripts/${NSAPP}.conf"
|
||||||
if [[ ! -f $FILEPATH ]]; then
|
if [[ ! -f $FILEPATH ]]; then
|
||||||
cat <<EOF >"$FILEPATH"
|
cat <<EOF >"$FILEPATH"
|
||||||
# ${NSAPP} Configuration File
|
# ${NSAPP} Configuration File
|
||||||
# Generated on $(date)
|
# Generated on $(date)
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ EOF
|
|||||||
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
|
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
|
||||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Overwrite configfile" --yesno "Do you want to overwrite the existing config file?" 10 60; then
|
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Overwrite configfile" --yesno "Do you want to overwrite the existing config file?" 10 60; then
|
||||||
rm -f "$FILEPATH"
|
rm -f "$FILEPATH"
|
||||||
cat <<EOF >"$FILEPATH"
|
cat <<EOF >"$FILEPATH"
|
||||||
# ${NSAPP} Configuration File
|
# ${NSAPP} Configuration File
|
||||||
# Generated on $(date)
|
# Generated on $(date)
|
||||||
|
|
||||||
@@ -875,20 +875,24 @@ install_script() {
|
|||||||
header_info
|
header_info
|
||||||
while true; do
|
while true; do
|
||||||
|
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \
|
TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||||
18 60 6 \
|
--title "SETTINGS" \
|
||||||
|
--menu "Choose an option:" 20 60 6 \
|
||||||
"1" "Default Settings" \
|
"1" "Default Settings" \
|
||||||
"2" "Default Settings (with verbose)" \
|
"2" "Default Settings (with verbose)" \
|
||||||
"3" "Advanced Settings" \
|
"3" "Advanced Settings" \
|
||||||
"4" "Use Config File" \
|
"4" "Use Config File" \
|
||||||
"5" "Diagnostic Settings" \
|
"5" "Diagnostic Settings" \
|
||||||
"6" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
|
"6" "Exit" \
|
||||||
|
--default-item "1" 3>&1 1>&2 2>&3) || true
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ -z "$TMP_CHOICE" ]; then
|
||||||
echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}"
|
echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CHOICE="$TMP_CHOICE"
|
||||||
|
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
header_info
|
header_info
|
||||||
@@ -943,11 +947,11 @@ install_script() {
|
|||||||
|
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
echo -e "${CROSS}${RD}Exiting.${CL}"
|
echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
|
echo -e "\n${CROSS}${RD}Invalid option, please try again.${CL}\n"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1772,6 +1772,7 @@ function setup_ffmpeg() {
|
|||||||
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
||||||
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
||||||
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
||||||
|
libva-dev libdrm-dev
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -1808,6 +1809,7 @@ function setup_ffmpeg() {
|
|||||||
|
|
||||||
if [[ "$TYPE" == "full" ]]; then
|
if [[ "$TYPE" == "full" ]]; then
|
||||||
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
|
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
|
||||||
|
args+=(--enable-vaapi --enable-libdrm)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${#args[@]} -eq 0 ]]; then
|
if [[ ${#args[@]} -eq 0 ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user