mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-04 04:13:26 +01:00
Compare commits
39 Commits
2026-01-20
...
2026-01-22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0fcc2dd3f3 | ||
|
|
49fef798d3 | ||
|
|
04ed636dd9 | ||
|
|
1d1c2beaa4 | ||
|
|
46ffe4bb16 | ||
|
|
4f794d2b2c | ||
|
|
07d6942144 | ||
|
|
c07ecd0008 | ||
|
|
23b48f08ae | ||
|
|
1131dd8430 | ||
|
|
9fc7ed32d2 | ||
|
|
efe17a5e63 | ||
|
|
e69cb6f20c | ||
|
|
d95a273753 | ||
|
|
4e21f411f5 | ||
|
|
fe21d3577f | ||
|
|
3725023ee3 | ||
|
|
c19817af8d | ||
|
|
5378d41acf | ||
|
|
5bb48fc843 | ||
|
|
e935289128 | ||
|
|
0db119d2c3 | ||
|
|
5c9087a91a | ||
|
|
1d7d8c27fa | ||
|
|
fae2d032ab | ||
|
|
2fab70294f | ||
|
|
477199a4c2 | ||
|
|
733425f970 | ||
|
|
7395a44277 | ||
|
|
f555f9ae0c | ||
|
|
fe2384a2fa | ||
|
|
5384adf0c3 | ||
|
|
ed18776710 | ||
|
|
13824931b0 | ||
|
|
88557d53f4 | ||
|
|
0c9653c7cb | ||
|
|
914c316f42 | ||
|
|
49d92afb98 | ||
|
|
dba473b2b3 |
51
CHANGELOG.md
51
CHANGELOG.md
@@ -10,8 +10,59 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-23
|
||||
|
||||
## 2026-01-22
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Loki | Alpine-Loki ([#11048](https://github.com/community-scripts/ProxmoxVE/pull/11048))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Immich: Increase RAM to 6GB [@vhsdream](https://github.com/vhsdream) ([#10965](https://github.com/community-scripts/ProxmoxVE/pull/10965))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Jotty: Increase default disk size from 6 to 8 [@tremor021](https://github.com/tremor021) ([#11056](https://github.com/community-scripts/ProxmoxVE/pull/11056))
|
||||
- Fix tags in several scripts [@s4dmach1ne](https://github.com/s4dmach1ne) ([#11050](https://github.com/community-scripts/ProxmoxVE/pull/11050))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools: use distro packages for MariaDB by default [@MickLesk](https://github.com/MickLesk) ([#11049](https://github.com/community-scripts/ProxmoxVE/pull/11049))
|
||||
|
||||
## 2026-01-21
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Byparr ([#11039](https://github.com/community-scripts/ProxmoxVE/pull/11039))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: Snipe-IT update missing all user uploads (#11032) [@ruanmed](https://github.com/ruanmed) ([#11033](https://github.com/community-scripts/ProxmoxVE/pull/11033))
|
||||
- yubal: fix for v0.2 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11006](https://github.com/community-scripts/ProxmoxVE/pull/11006))
|
||||
- Joplin-Server: use yarn workspaces focus for faster builds [@MickLesk](https://github.com/MickLesk) ([#11027](https://github.com/community-scripts/ProxmoxVE/pull/11027))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools: add ubuntu PHP repository setup [@MickLesk](https://github.com/MickLesk) ([#11034](https://github.com/community-scripts/ProxmoxVE/pull/11034))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: allow empty tags & improve template search [@MickLesk](https://github.com/MickLesk) ([#11020](https://github.com/community-scripts/ProxmoxVE/pull/11020))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Joplin Server: Set disable flag to true in joplin-server.json [@tremor021](https://github.com/tremor021) ([#11008](https://github.com/community-scripts/ProxmoxVE/pull/11008))
|
||||
|
||||
## 2026-01-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://komo.do
|
||||
|
||||
APP="Alpine-Komodo"
|
||||
var_tags="${var_tags:-docker,alpine}"
|
||||
var_tags="${var_tags:-docker;alpine}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-10}"
|
||||
|
||||
71
ct/alpine-loki.sh
Normal file
71
ct/alpine-loki.sh
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/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: hoholms
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
APP="Alpine-Loki"
|
||||
var_tags="${var_tags:-alpine;monitoring}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||
"1" "Check for Loki Updates" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${APP} should be reachable by going to the following URL.
|
||||
${BL}http://${IP}:3100${CL} \n"
|
||||
echo -e "Promtail should be reachable by going to the following URL.
|
||||
${BL}http://${IP}:9080${CL} \n"
|
||||
53
ct/byparr.sh
Normal file
53
ct/byparr.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ThePhaseless/Byparr
|
||||
|
||||
APP="Byparr"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/Byparr ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "Byparr" "ThePhaseless/Byparr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop byparr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start byparr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8191${CL}"
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://fluidcalendar.com
|
||||
|
||||
APP="fluid-calendar"
|
||||
var_tags="${var_tags:-calendar,tasks}"
|
||||
var_tags="${var_tags:-calendar;tasks}"
|
||||
var_cpu="${var_cpu:-3}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-7}"
|
||||
|
||||
6
ct/headers/alpine-loki
Normal file
6
ct/headers/alpine-loki
Normal file
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ __ _
|
||||
/ | / /___ (_)___ ___ / / ____ / /__(_)
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/
|
||||
/_/
|
||||
6
ct/headers/byparr
Normal file
6
ct/headers/byparr
Normal file
@@ -0,0 +1,6 @@
|
||||
____
|
||||
/ __ )__ ______ ____ ___________
|
||||
/ __ / / / / __ \/ __ `/ ___/ ___/
|
||||
/ /_/ / /_/ / /_/ / /_/ / / / /
|
||||
/_____/\__, / .___/\__,_/_/ /_/
|
||||
/____/_/
|
||||
6
ct/headers/loki
Normal file
6
ct/headers/loki
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ _
|
||||
/ / ____ / /__(_)
|
||||
/ / / __ \/ //_/ /
|
||||
/ /___/ /_/ / ,< / /
|
||||
/_____/\____/_/|_/_/
|
||||
|
||||
@@ -9,7 +9,7 @@ APP="immich"
|
||||
var_tags="${var_tags:-photos}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_ram="${var_ram:-6144}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -44,7 +44,9 @@ function update_script() {
|
||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
export BUILD_SEQUENCIAL=1
|
||||
$STD yarn install --inline-builds
|
||||
$STD yarn workspaces focus @joplin/server
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run build
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run tsc
|
||||
msg_ok "Updated Joplin-Server"
|
||||
|
||||
msg_info "Starting Services"
|
||||
|
||||
@@ -9,7 +9,7 @@ APP="jotty"
|
||||
var_tags="${var_tags:-tasks;notes}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
103
ct/loki.sh
Normal file
103
ct/loki.sh
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/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: hoholms
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
APP="Loki"
|
||||
var_tags="${var_tags:-monitoring;logs}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if ! dpkg -s loki >/dev/null 2>&1; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||
"1" "Update Loki & Promtail" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LOCAL_IP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Stopping Loki"
|
||||
systemctl stop loki
|
||||
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
|
||||
systemctl stop promtail
|
||||
fi
|
||||
msg_ok "Stopped Loki"
|
||||
|
||||
msg_info "Updating Loki"
|
||||
$STD apt update
|
||||
$STD apt install -y --only-upgrade loki
|
||||
if dpkg -s promtail >/dev/null 2>&1; then
|
||||
$STD apt install -y --only-upgrade promtail
|
||||
fi
|
||||
msg_ok "Updated Loki"
|
||||
|
||||
msg_info "Starting Loki"
|
||||
systemctl start loki
|
||||
if dpkg -s promtail >/dev/null 2>&1; then
|
||||
systemctl start promtail
|
||||
fi
|
||||
msg_ok "Started Loki"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
msg_info "Configuring Loki to listen on 0.0.0.0"
|
||||
sed -i 's/http_listen_address:.*/http_listen_address: 0.0.0.0/' /etc/loki/config.yml
|
||||
sed -i 's/http_listen_port:.*/http_listen_port: 3100/' /etc/loki/config.yml
|
||||
systemctl restart loki
|
||||
msg_ok "Configured Loki to listen on 0.0.0.0"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
msg_info "Configuring Loki to listen on ${LOCAL_IP}"
|
||||
sed -i "s/http_listen_address:.*/http_listen_address: $LOCAL_IP/" /etc/loki/config.yml
|
||||
sed -i 's/http_listen_port:.*/http_listen_port: 3100/' /etc/loki/config.yml
|
||||
systemctl restart loki
|
||||
msg_ok "Configured Loki to listen on ${LOCAL_IP}"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
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 loki using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3100${CL}\n"
|
||||
if dpkg -s promtail >/dev/null 2>&1; then
|
||||
echo -e "${INFO}${YW} Access promtail using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9080${CL}"
|
||||
fi
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://github.com/opf/openproject
|
||||
|
||||
APP="OpenProject"
|
||||
var_tags="${var_tags:-project-management,erp}"
|
||||
var_tags="${var_tags:-project-management;erp}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://github.com/plankanban/planka
|
||||
|
||||
APP="PLANKA"
|
||||
var_tags="${var_tags:-Todo,kanban}"
|
||||
var_tags="${var_tags:-Todo;kanban}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://github.com/rcourtman/Pulse
|
||||
|
||||
APP="Pulse"
|
||||
var_tags="${var_tags:-monitoring,proxmox}"
|
||||
var_tags="${var_tags:-monitoring;proxmox}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
|
||||
@@ -50,8 +50,8 @@ function update_script() {
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||
cp -r /opt/snipe-it-backup/public/uploads/. /opt/snipe-it/public/uploads/
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads/. /opt/snipe-it/storage/private_uploads/
|
||||
cd /opt/snipe-it/
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://github.com/CrazyWolf13/streamlink-webui
|
||||
|
||||
APP="streamlink-webui"
|
||||
var_tags="${var_tags:-download,streaming}"
|
||||
var_tags="${var_tags:-download;streaming}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
|
||||
@@ -544,7 +544,8 @@ network_check
|
||||
update_os
|
||||
|
||||
PHP_VERSION="8.4" PHP_MODULE="bcmath,curl,pdo_mysql" setup_php
|
||||
MARIADB_VERSION="11.4" setup_mariadb
|
||||
setup_mariadb # Uses distribution packages (recommended)
|
||||
# Or for specific version: MARIADB_VERSION="11.4" setup_mariadb
|
||||
|
||||
# Database setup
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
|
||||
@@ -85,7 +85,8 @@ pkg_install curl wget git
|
||||
```bash
|
||||
setup_nodejs "20"
|
||||
setup_php "8.3"
|
||||
setup_mariadb "11"
|
||||
setup_mariadb # Uses distribution packages (recommended)
|
||||
# MARIADB_VERSION="11.4" setup_mariadb # For specific version
|
||||
```
|
||||
|
||||
### Phase 4: Application Download
|
||||
|
||||
@@ -75,7 +75,8 @@ Complete reference of environment variables and configuration options.
|
||||
```bash
|
||||
setup_nodejs "20" # Install Node.js v20
|
||||
setup_php "8.2" # Install PHP 8.2
|
||||
setup_mariadb "11" # Install MariaDB 11
|
||||
setup_mariadb # Install MariaDB (distribution packages)
|
||||
# MARIADB_VERSION="11.4" setup_mariadb # Specific version from official repo
|
||||
```
|
||||
|
||||
### Safe Package Operations
|
||||
|
||||
@@ -24,7 +24,7 @@ Complete alphabetical reference of all functions in tools.func with parameters,
|
||||
- `setup_golang(VERSION)` - Install Go programming language
|
||||
|
||||
**Databases**:
|
||||
- `setup_mariadb(VERSION)` - Install MariaDB server
|
||||
- `setup_mariadb()` - Install MariaDB server (distro packages by default)
|
||||
- `setup_postgresql(VERSION)` - Install PostgreSQL
|
||||
- `setup_mongodb(VERSION)` - Install MongoDB
|
||||
- `setup_redis(VERSION)` - Install Redis cache
|
||||
@@ -238,17 +238,20 @@ setup_php "8.3"
|
||||
|
||||
---
|
||||
|
||||
### setup_mariadb(VERSION)
|
||||
### setup_mariadb()
|
||||
|
||||
Install MariaDB server and client utilities.
|
||||
|
||||
**Signature**:
|
||||
```bash
|
||||
setup_mariadb VERSION
|
||||
setup_mariadb # Uses distribution packages (recommended)
|
||||
MARIADB_VERSION="11.4" setup_mariadb # Uses official MariaDB repository
|
||||
```
|
||||
|
||||
**Parameters**:
|
||||
- `VERSION` - MariaDB version (e.g., "10.6", "11.0")
|
||||
**Variables**:
|
||||
- `MARIADB_VERSION` - (optional) Specific MariaDB version
|
||||
- Not set or `"latest"`: Uses distribution packages (most reliable, avoids mirror issues)
|
||||
- Specific version (e.g., `"11.4"`, `"12.2"`): Uses official MariaDB repository
|
||||
|
||||
**Returns**:
|
||||
- `0` - Installation successful
|
||||
@@ -259,7 +262,11 @@ setup_mariadb VERSION
|
||||
|
||||
**Example**:
|
||||
```bash
|
||||
setup_mariadb "11.0"
|
||||
# Recommended: Use distribution packages (stable, no mirror issues)
|
||||
setup_mariadb
|
||||
|
||||
# Specific version from official repository
|
||||
MARIADB_VERSION="11.4" setup_mariadb
|
||||
```
|
||||
|
||||
---
|
||||
@@ -441,7 +448,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
|
||||
pkg_update # Update package lists
|
||||
setup_nodejs "20" # Install Node.js
|
||||
setup_mariadb "11" # Install MariaDB
|
||||
setup_mariadb # Install MariaDB (distribution packages)
|
||||
|
||||
# ... application installation ...
|
||||
|
||||
@@ -460,7 +467,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
pkg_update
|
||||
setup_nginx
|
||||
setup_php "8.3"
|
||||
setup_mariadb "11"
|
||||
setup_mariadb # Uses distribution packages
|
||||
setup_composer
|
||||
```
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ pkg_update
|
||||
|
||||
setup_nginx
|
||||
setup_php "8.3"
|
||||
setup_mariadb "11"
|
||||
setup_mariadb # Uses distribution packages (recommended)
|
||||
setup_composer
|
||||
|
||||
msg_ok "Web stack installed"
|
||||
@@ -388,7 +388,7 @@ pkg_install package-name
|
||||
# Chain multiple tools together
|
||||
setup_nodejs "20"
|
||||
setup_php "8.3"
|
||||
setup_mariadb "11"
|
||||
setup_mariadb # Distribution packages (recommended)
|
||||
|
||||
# Check command success
|
||||
if ! setup_docker; then
|
||||
|
||||
35
frontend/public/json/byparr.json
Normal file
35
frontend/public/json/byparr.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Byparr",
|
||||
"slug": "byparr",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2026-01-21",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8191,
|
||||
"documentation": "https://github.com/ThePhaseless/Byparr/blob/master/README.md",
|
||||
"website": "https://github.com/ThePhaseless/Byparr",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/byparr.webp",
|
||||
"config_path": "",
|
||||
"description": "Byparr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/byparr.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
"script": "ct/immich.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"ram": 6144,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 6,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
|
||||
51
frontend/public/json/loki.json
Normal file
51
frontend/public/json/loki.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "Loki",
|
||||
"slug": "loki",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2026-01-22",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3100,
|
||||
"documentation": "https://grafana.com/docs/loki/latest/",
|
||||
"website": "https://github.com/grafana/loki",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/loki.webp",
|
||||
"config_path": "Debian: /etc/loki/config.yml | Alpine: /etc/loki/loki-local-config.yaml",
|
||||
"description": "Grafana Loki is a set of open source components that can be composed into a fully featured logging stack. A small index and highly compressed chunks simplifies the operation and significantly lowers the cost of Loki.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/loki.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "ct/alpine-loki.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 1,
|
||||
"os": "alpine",
|
||||
"version": "3.23"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Promtail can be optionally installed during setup to collect and ship logs to Loki.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,38 +1,208 @@
|
||||
[
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.17.0-rc5",
|
||||
"date": "2026-01-20T23:36:16Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2026-01-20-r2",
|
||||
"date": "2026-01-20T22:28:54Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.12.7",
|
||||
"date": "2026-01-17T03:49:29Z"
|
||||
"version": "2026.1.1",
|
||||
"date": "2026-01-22T23:19:21Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.15.0-s.0",
|
||||
"date": "2026-01-22T23:18:27Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.16",
|
||||
"date": "2026-01-22T23:05:35Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.18.2",
|
||||
"date": "2026-01-22T20:54:05Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.8.0",
|
||||
"date": "2026-01-22T20:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.2.0-dev.1",
|
||||
"date": "2026-01-20T21:46:14Z"
|
||||
"version": "v1.1.5",
|
||||
"date": "2026-01-22T19:08:18Z"
|
||||
},
|
||||
{
|
||||
"name": "SigNoz/signoz",
|
||||
"version": "v0.108.0-rc.1",
|
||||
"date": "2026-01-20T20:46:43Z"
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.94.1",
|
||||
"date": "2026-01-22T19:07:16Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "develop",
|
||||
"date": "2026-01-22T18:59:33Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.7.0",
|
||||
"date": "2026-01-22T18:41:40Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.58.x",
|
||||
"date": "2026-01-22T17:18:07Z"
|
||||
},
|
||||
{
|
||||
"name": "redis/redis",
|
||||
"version": "8.4.0",
|
||||
"date": "2025-11-18T15:06:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Leantime/leantime",
|
||||
"version": "latest",
|
||||
"date": "2026-01-22T15:16:09Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@2.4.5",
|
||||
"date": "2026-01-22T14:32:55Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v3.5.1",
|
||||
"date": "2026-01-22T13:50:27Z"
|
||||
},
|
||||
{
|
||||
"name": "endurain-project/endurain",
|
||||
"version": "v0.17.1",
|
||||
"date": "2026-01-22T13:45:46Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.2.11",
|
||||
"date": "2026-01-22T13:26:11Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.1.10",
|
||||
"date": "2026-01-22T13:09:53Z"
|
||||
},
|
||||
{
|
||||
"name": "verdaccio/verdaccio",
|
||||
"version": "@verdaccio/web@8.1.0-next-8.29",
|
||||
"date": "2026-01-22T13:01:04Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.2",
|
||||
"date": "2025-10-22T17:03:54Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.7.5",
|
||||
"date": "2026-01-22T12:08:54Z"
|
||||
},
|
||||
{
|
||||
"name": "plankanban/planka",
|
||||
"version": "planka-1.1.2",
|
||||
"date": "2026-01-22T11:54:21Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.9.2",
|
||||
"date": "2026-01-22T10:49:06Z"
|
||||
},
|
||||
{
|
||||
"name": "healthchecks/healthchecks",
|
||||
"version": "v4.0",
|
||||
"date": "2026-01-22T10:21:35Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2026-01-22-r1",
|
||||
"date": "2026-01-22T10:20:04Z"
|
||||
},
|
||||
{
|
||||
"name": "eclipse-mosquitto/mosquitto",
|
||||
"version": "v2.1.0rc2",
|
||||
"date": "2026-01-22T09:42:43Z"
|
||||
},
|
||||
{
|
||||
"name": "OliveTin/OliveTin",
|
||||
"version": "3000.9.2",
|
||||
"date": "2026-01-22T09:41:15Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.52.9",
|
||||
"date": "2026-01-22T09:30:49Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.27.1",
|
||||
"date": "2025-11-11T19:32:29Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v7.0.0-7",
|
||||
"date": "2026-01-22T06:46:13Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.900",
|
||||
"date": "2026-01-22T05:57:44Z"
|
||||
},
|
||||
{
|
||||
"name": "rabbitmq/rabbitmq-server",
|
||||
"version": "v4.2.3",
|
||||
"date": "2026-01-22T03:57:50Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.81.0.rc.5",
|
||||
"date": "2026-01-22T03:30:46Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.25.4",
|
||||
"date": "2026-01-22T01:43:42Z"
|
||||
},
|
||||
{
|
||||
"name": "Infisical/infisical",
|
||||
"version": "v0.156.3",
|
||||
"date": "2026-01-22T00:44:20Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-22T00:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.3.1",
|
||||
"date": "2026-01-21T22:50:25Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.14.3-rc2",
|
||||
"date": "2026-01-19T20:48:34Z"
|
||||
"version": "v0.14.3",
|
||||
"date": "2026-01-20T21:01:52Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v5.0.17",
|
||||
"date": "2026-01-20T19:07:30Z"
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v2.8.0",
|
||||
"date": "2025-12-12T20:25:00Z"
|
||||
},
|
||||
{
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-21T20:40:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Comfy-Org/ComfyUI",
|
||||
"version": "v0.10.0",
|
||||
"date": "2026-01-21T19:22:04Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
@@ -40,19 +210,104 @@
|
||||
"date": "2026-01-17T07:54:15Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.5.1",
|
||||
"date": "2026-01-20T19:45:05Z"
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.8",
|
||||
"date": "2026-01-15T13:52:29Z"
|
||||
},
|
||||
{
|
||||
"name": "Infisical/infisical",
|
||||
"version": "v0.155.7",
|
||||
"date": "2026-01-20T19:42:20Z"
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.50.2",
|
||||
"date": "2026-01-21T17:02:52Z"
|
||||
},
|
||||
{
|
||||
"name": "LimeSurvey/LimeSurvey",
|
||||
"version": "7.0.0-beta1+260113",
|
||||
"date": "2026-01-21T15:14:45Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.541.1",
|
||||
"date": "2026-01-21T15:09:10Z"
|
||||
},
|
||||
{
|
||||
"name": "dedicatedcode/reitti",
|
||||
"version": "v3.4.0",
|
||||
"date": "2026-01-21T14:29:46Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.3",
|
||||
"date": "2026-01-07T16:24:23Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.51",
|
||||
"date": "2026-01-21T13:19:21Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.17.0-rc7",
|
||||
"date": "2026-01-21T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.5",
|
||||
"date": "2026-01-21T11:35:44Z"
|
||||
},
|
||||
{
|
||||
"name": "javedh-dev/tracktor",
|
||||
"version": "1.2.1",
|
||||
"date": "2026-01-21T09:31:18Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e5.10.3-rc.2",
|
||||
"date": "2026-01-21T08:57:16Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v5.0.2",
|
||||
"date": "2026-01-21T07:42:38Z"
|
||||
},
|
||||
{
|
||||
"name": "SigNoz/signoz",
|
||||
"version": "v0.108.0",
|
||||
"date": "2026-01-21T06:45:16Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.20.3",
|
||||
"date": "2026-01-21T05:39:57Z"
|
||||
},
|
||||
{
|
||||
"name": "donetick/donetick",
|
||||
"version": "v0.1.70-beta.1",
|
||||
"date": "2026-01-21T05:35:05Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.20.5",
|
||||
"date": "2026-01-21T00:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-availability-sync-fix",
|
||||
"date": "2026-01-20T19:12:59Z"
|
||||
"date": "2026-01-20T22:11:24Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v5.0.17",
|
||||
"date": "2026-01-20T19:07:30Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "coverity-w4-4.14.3",
|
||||
"date": "2026-01-20T19:50:07Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.5.1",
|
||||
"date": "2026-01-20T19:45:05Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
@@ -69,11 +324,6 @@
|
||||
"version": "v1.145.0",
|
||||
"date": "2026-01-13T16:49:51Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.81.0.rc.1",
|
||||
"date": "2026-01-20T16:55:00Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.88.4",
|
||||
@@ -94,11 +344,6 @@
|
||||
"version": "v14.0.8",
|
||||
"date": "2026-01-20T15:10:44Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.57.10",
|
||||
"date": "2026-01-20T14:55:34Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
@@ -110,32 +355,7 @@
|
||||
"date": "2026-01-20T14:19:56Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "9.0.114",
|
||||
"date": "2026-01-20T14:13:00Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@2.3.6",
|
||||
"date": "2026-01-16T15:00:42Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.547",
|
||||
"date": "2026-01-20T13:46:00Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v5.0.2",
|
||||
"date": "2026-01-20T12:57:53Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.52.8",
|
||||
"date": "2026-01-20T12:36:05Z"
|
||||
},
|
||||
{
|
||||
"name": "lazy-media/Reactive-Resume",
|
||||
"name": "lazy-media/reactive-resume",
|
||||
"version": "v1.2.7",
|
||||
"date": "2026-01-20T11:59:40Z"
|
||||
},
|
||||
@@ -159,11 +379,6 @@
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.50.0",
|
||||
"date": "2026-01-20T07:34:31Z"
|
||||
},
|
||||
{
|
||||
"name": "HydroshieldMKII/Guardian",
|
||||
"version": "v1.3.4",
|
||||
@@ -174,51 +389,16 @@
|
||||
"version": "v1.5.4",
|
||||
"date": "2026-01-04T22:41:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Comfy-Org/ComfyUI",
|
||||
"version": "v0.10.0",
|
||||
"date": "2026-01-20T03:40:18Z"
|
||||
},
|
||||
{
|
||||
"name": "diced/zipline",
|
||||
"version": "v4.4.1",
|
||||
"date": "2026-01-20T01:29:01Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-20T00:27:06Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "binwiederhier/ntfy",
|
||||
"version": "v2.16.0",
|
||||
"date": "2026-01-19T23:40:31Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.1.9",
|
||||
"date": "2026-01-19T20:51:19Z"
|
||||
},
|
||||
{
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-19T18:03:38Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.8",
|
||||
"date": "2026-01-15T13:52:29Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.20.5",
|
||||
"date": "2026-01-19T17:55:57Z"
|
||||
},
|
||||
{
|
||||
"name": "ghostfolio/ghostfolio",
|
||||
"version": "2.232.0",
|
||||
@@ -244,51 +424,26 @@
|
||||
"version": "pmm-6401-v1.134.0",
|
||||
"date": "2026-01-19T13:31:08Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.7.4",
|
||||
"date": "2025-12-04T13:56:39Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/operating-system",
|
||||
"version": "17.0",
|
||||
"date": "2026-01-19T11:11:37Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.2.10",
|
||||
"date": "2026-01-19T10:13:52Z"
|
||||
},
|
||||
{
|
||||
"name": "AlexxIT/go2rtc",
|
||||
"version": "v1.9.14",
|
||||
"date": "2026-01-19T09:16:56Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.887",
|
||||
"date": "2026-01-19T05:55:24Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.9.0",
|
||||
"date": "2026-01-19T05:46:09Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.20.2",
|
||||
"date": "2026-01-19T02:20:10Z"
|
||||
},
|
||||
{
|
||||
"name": "jellyfin/jellyfin",
|
||||
"version": "v10.11.6",
|
||||
"date": "2026-01-19T01:03:03Z"
|
||||
},
|
||||
{
|
||||
"name": "eclipse-mosquitto/mosquitto",
|
||||
"version": "2.1.0rc1",
|
||||
"date": "2026-01-19T00:48:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Kareadita/Kavita",
|
||||
"version": "v0.8.9.1",
|
||||
@@ -309,11 +464,6 @@
|
||||
"version": "v2.5.0",
|
||||
"date": "2026-01-18T22:16:38Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.18.0",
|
||||
"date": "2026-01-18T19:00:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
"version": "v5.21.2",
|
||||
@@ -349,11 +499,6 @@
|
||||
"version": "v1.3.0",
|
||||
"date": "2026-01-17T16:28:04Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.4",
|
||||
"date": "2026-01-17T14:11:01Z"
|
||||
},
|
||||
{
|
||||
"name": "LogicLabs-OU/OpenArchiver",
|
||||
"version": "v0.4.1",
|
||||
@@ -364,11 +509,6 @@
|
||||
"version": "v14.0.1",
|
||||
"date": "2026-01-17T07:14:19Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.13.6",
|
||||
"date": "2025-11-04T13:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.108.1",
|
||||
@@ -389,11 +529,6 @@
|
||||
"version": "v1.50.1",
|
||||
"date": "2026-01-16T19:27:38Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "6.0.2",
|
||||
"date": "2026-01-16T13:52:11Z"
|
||||
},
|
||||
{
|
||||
"name": "silverbulletmd/silverbullet",
|
||||
"version": "2.4.1",
|
||||
@@ -404,11 +539,6 @@
|
||||
"version": "v4.0.0-beta.462",
|
||||
"date": "2026-01-16T11:05:11Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.14.2",
|
||||
"date": "2026-01-15T11:19:35Z"
|
||||
},
|
||||
{
|
||||
"name": "garethgeorge/backrest",
|
||||
"version": "v1.11.1",
|
||||
@@ -429,16 +559,6 @@
|
||||
"version": "v0.20.0",
|
||||
"date": "2026-01-15T20:59:44Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-15T20:03:50Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.3.0",
|
||||
"date": "2026-01-15T19:29:02Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v11.10.1",
|
||||
@@ -460,19 +580,9 @@
|
||||
"date": "2026-01-15T11:18:58Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.9.1",
|
||||
"date": "2026-01-14T10:37:28Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.14.1-s.3",
|
||||
"date": "2026-01-15T06:09:56Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.95.0-pre",
|
||||
"date": "2026-01-14T22:24:18Z"
|
||||
"name": "grafana/grafana",
|
||||
"version": "pkg/promlib/v0.0.9",
|
||||
"date": "2026-01-14T23:50:10Z"
|
||||
},
|
||||
{
|
||||
"name": "icereed/paperless-gpt",
|
||||
@@ -509,31 +619,16 @@
|
||||
"version": "v3.3.1-rc2",
|
||||
"date": "2026-01-14T12:29:28Z"
|
||||
},
|
||||
{
|
||||
"name": "dedicatedcode/reitti",
|
||||
"version": "v3.3.0",
|
||||
"date": "2026-01-14T11:06:59Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudreve/cloudreve",
|
||||
"version": "4.11.1",
|
||||
"date": "2026-01-14T08:40:47Z"
|
||||
},
|
||||
{
|
||||
"name": "Whisparr/Whisparr",
|
||||
"version": "v3.1.0.2116",
|
||||
"date": "2026-01-14T05:56:17Z"
|
||||
},
|
||||
{
|
||||
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||
"version": "v2.13.6",
|
||||
"date": "2026-01-14T05:04:11Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.2",
|
||||
"date": "2025-10-22T17:03:54Z"
|
||||
},
|
||||
{
|
||||
"name": "Dispatcharr/Dispatcharr",
|
||||
"version": "v0.17.0",
|
||||
@@ -554,16 +649,6 @@
|
||||
"version": "v0.5.5",
|
||||
"date": "2026-01-13T17:03:32Z"
|
||||
},
|
||||
{
|
||||
"name": "LimeSurvey/LimeSurvey",
|
||||
"version": "6.16.3+251215",
|
||||
"date": "2026-01-13T10:36:10Z"
|
||||
},
|
||||
{
|
||||
"name": "endurain-project/endurain",
|
||||
"version": "v0.16.6",
|
||||
"date": "2026-01-13T10:28:14Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.18.2",
|
||||
@@ -579,11 +664,6 @@
|
||||
"version": "26.1.1",
|
||||
"date": "2026-01-12T23:26:02Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v2.8.0",
|
||||
"date": "2025-12-12T20:25:00Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/telegraf",
|
||||
"version": "v1.37.1",
|
||||
@@ -614,11 +694,6 @@
|
||||
"version": "1.1.15",
|
||||
"date": "2026-01-12T05:38:30Z"
|
||||
},
|
||||
{
|
||||
"name": "OliveTin/OliveTin",
|
||||
"version": "3000.9.0",
|
||||
"date": "2026-01-12T00:37:54Z"
|
||||
},
|
||||
{
|
||||
"name": "hargata/lubelog",
|
||||
"version": "v1.5.7",
|
||||
@@ -684,11 +759,6 @@
|
||||
"version": "v3.6.0",
|
||||
"date": "2026-01-10T06:56:46Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.17.0",
|
||||
"date": "2026-01-09T22:48:21Z"
|
||||
},
|
||||
{
|
||||
"name": "dani-garcia/vaultwarden",
|
||||
"version": "1.35.2",
|
||||
@@ -729,11 +799,6 @@
|
||||
"version": "4.9.3.0",
|
||||
"date": "2026-01-08T16:08:34Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.11",
|
||||
"date": "2026-01-08T15:10:01Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "5.1.1",
|
||||
@@ -759,21 +824,11 @@
|
||||
"version": "5.2.7",
|
||||
"date": "2026-01-07T23:48:00Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v0.309.1",
|
||||
"date": "2026-01-07T19:20:52Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2026-01-07",
|
||||
"date": "2026-01-07T18:50:28Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.3",
|
||||
"date": "2026-01-07T16:24:23Z"
|
||||
},
|
||||
{
|
||||
"name": "MDeLuise/plant-it",
|
||||
"version": "1.0.1",
|
||||
@@ -894,11 +949,6 @@
|
||||
"version": "v25.12.1",
|
||||
"date": "2025-12-30T17:25:57Z"
|
||||
},
|
||||
{
|
||||
"name": "javedh-dev/tracktor",
|
||||
"version": "1.1.0",
|
||||
"date": "2025-12-30T04:42:18Z"
|
||||
},
|
||||
{
|
||||
"name": "ArchiveBox/ArchiveBox",
|
||||
"version": "v0.8.6rc1",
|
||||
@@ -914,11 +964,6 @@
|
||||
"version": "v2.13.5",
|
||||
"date": "2025-12-28T09:15:51Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.7.0",
|
||||
"date": "2025-12-27T20:37:54Z"
|
||||
},
|
||||
{
|
||||
"name": "matze/wastebin",
|
||||
"version": "3.4.0",
|
||||
@@ -1024,36 +1069,16 @@
|
||||
"version": "v1.19.5",
|
||||
"date": "2025-09-27T20:59:46Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.25.3",
|
||||
"date": "2025-12-18T18:11:48Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.27.1",
|
||||
"date": "2025-11-11T19:32:29Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.6",
|
||||
"date": "2025-12-18T07:00:26Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v12.3.1",
|
||||
"date": "2025-12-16T21:58:21Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-12-15T18:53:25Z"
|
||||
},
|
||||
{
|
||||
"name": "rabbitmq/rabbitmq-server",
|
||||
"version": "v4.2.2",
|
||||
"date": "2025-12-15T18:25:36Z"
|
||||
},
|
||||
{
|
||||
"name": "docmost/docmost",
|
||||
"version": "v0.24.1",
|
||||
@@ -1179,11 +1204,6 @@
|
||||
"version": "6.9",
|
||||
"date": "2025-12-02T18:36:17Z"
|
||||
},
|
||||
{
|
||||
"name": "verdaccio/verdaccio",
|
||||
"version": "v6.2.4",
|
||||
"date": "2025-12-02T17:47:52Z"
|
||||
},
|
||||
{
|
||||
"name": "OctoPrint/OctoPrint",
|
||||
"version": "1.11.5",
|
||||
@@ -1204,11 +1224,6 @@
|
||||
"version": "0.11.1",
|
||||
"date": "2025-11-30T14:54:03Z"
|
||||
},
|
||||
{
|
||||
"name": "healthchecks/healthchecks",
|
||||
"version": "v3.13",
|
||||
"date": "2025-11-30T08:52:20Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
"version": "v4.39.15",
|
||||
@@ -1284,11 +1299,6 @@
|
||||
"version": "2025.5",
|
||||
"date": "2025-11-19T14:48:47Z"
|
||||
},
|
||||
{
|
||||
"name": "redis/redis",
|
||||
"version": "8.4.0",
|
||||
"date": "2025-11-18T15:06:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Hosteroid/domain-monitor",
|
||||
"version": "v1.1.1",
|
||||
@@ -1369,11 +1379,6 @@
|
||||
"version": "v3.0.9",
|
||||
"date": "2025-11-04T07:28:45Z"
|
||||
},
|
||||
{
|
||||
"name": "plankanban/planka",
|
||||
"version": "planka-1.1.1",
|
||||
"date": "2025-10-31T12:38:47Z"
|
||||
},
|
||||
{
|
||||
"name": "sassanix/Warracker",
|
||||
"version": "1.0.2",
|
||||
@@ -1439,11 +1444,6 @@
|
||||
"version": "v1.5.9",
|
||||
"date": "2025-10-06T08:34:01Z"
|
||||
},
|
||||
{
|
||||
"name": "donetick/donetick",
|
||||
"version": "v0.1.64",
|
||||
"date": "2025-10-03T05:18:24Z"
|
||||
},
|
||||
{
|
||||
"name": "thomiceli/opengist",
|
||||
"version": "v1.11.1",
|
||||
@@ -1539,11 +1539,6 @@
|
||||
"version": "v0.8.3",
|
||||
"date": "2025-08-17T06:24:54Z"
|
||||
},
|
||||
{
|
||||
"name": "Leantime/leantime",
|
||||
"version": "latest",
|
||||
"date": "2025-08-15T15:33:51Z"
|
||||
},
|
||||
{
|
||||
"name": "swapplications/uhf-server-dist",
|
||||
"version": "1.5.1",
|
||||
@@ -1748,5 +1743,10 @@
|
||||
"name": "deepch/RTSPtoWeb",
|
||||
"version": "v2.4.3",
|
||||
"date": "2023-03-29T12:05:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Shinobi-Systems/Shinobi",
|
||||
"version": "furrykitten-3",
|
||||
"date": "2022-07-15T05:20:17Z"
|
||||
}
|
||||
]
|
||||
|
||||
86
install/alpine-loki-install.sh
Normal file
86
install/alpine-loki-install.sh
Normal file
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: hoholms
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Loki"
|
||||
$STD apk add loki
|
||||
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki
|
||||
mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache}
|
||||
chown -R loki:grafana /var/lib/loki
|
||||
mkdir -p /var/log/loki
|
||||
chown -R loki:grafana /var/log/loki
|
||||
cat <<EOF >/etc/loki/loki-local-config.yaml
|
||||
auth_enabled: false
|
||||
|
||||
server:
|
||||
http_listen_port: 3100
|
||||
log_level: info
|
||||
|
||||
common:
|
||||
instance_addr: 127.0.0.1
|
||||
path_prefix: /var/lib/loki
|
||||
storage:
|
||||
filesystem:
|
||||
chunks_directory: /var/lib/loki/chunks
|
||||
rules_directory: /var/lib/loki/rules
|
||||
replication_factor: 1
|
||||
ring:
|
||||
kvstore:
|
||||
store: inmemory
|
||||
|
||||
schema_config:
|
||||
configs:
|
||||
- from: 2020-10-24
|
||||
store: tsdb
|
||||
object_store: filesystem
|
||||
schema: v13
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
|
||||
query_range:
|
||||
results_cache:
|
||||
cache:
|
||||
embedded_cache:
|
||||
enabled: true
|
||||
max_size_mb: 100
|
||||
|
||||
limits_config:
|
||||
metric_aggregation_enabled: true
|
||||
|
||||
ruler:
|
||||
alertmanager_url: http://localhost:9093
|
||||
EOF
|
||||
chown loki:grafana /etc/loki/loki-local-config.yaml
|
||||
chmod 644 /etc/loki/loki-local-config.yaml
|
||||
echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki
|
||||
echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki
|
||||
echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki
|
||||
$STD rc-update add loki default
|
||||
$STD rc-service loki start
|
||||
msg_ok "Installed Loki"
|
||||
|
||||
read -rp "Would you like to install Promtail? (y/N): " INSTALL_PROMTAIL
|
||||
if [[ "${INSTALL_PROMTAIL,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Promtail"
|
||||
$STD apk add loki-promtail
|
||||
$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki-promtail
|
||||
$STD rc-update add loki-promtail default
|
||||
$STD rc-service loki-promtail start
|
||||
msg_ok "Installed Promtail"
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
50
install/byparr-install.sh
Normal file
50
install/byparr-install.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ThePhaseless/Byparr
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt -y install \
|
||||
xauth \
|
||||
xvfb \
|
||||
scrot \
|
||||
chromium \
|
||||
chromium-driver \
|
||||
ca-certificates
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
setup_uv
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/byparr.service
|
||||
[Unit]
|
||||
Description=Byparr
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/Byparr
|
||||
ExecStart=/usr/local/bin/uv run python3 main.py
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now byparr
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -36,8 +36,9 @@ cd /opt/joplin-server
|
||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
export BUILD_SEQUENCIAL=1
|
||||
$STD yarn install --inline-builds
|
||||
|
||||
$STD yarn workspaces focus @joplin/server
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run build
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run tsc
|
||||
cat <<EOF >/opt/joplin-server/.env
|
||||
PM2_HOME=/opt/pm2
|
||||
NODE_ENV=production
|
||||
|
||||
83
install/loki-install.sh
Normal file
83
install/loki-install.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: bysinka-95
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/grafana/loki
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
setup_deb822_repo \
|
||||
"grafana" \
|
||||
"https://apt.grafana.com/gpg.key" \
|
||||
"https://apt.grafana.com" \
|
||||
"stable" \
|
||||
"main"
|
||||
|
||||
msg_info "Installing Loki"
|
||||
$STD apt install -y loki
|
||||
mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache}
|
||||
chown -R loki /var/lib/loki
|
||||
cat <<EOF >/etc/loki/config.yml
|
||||
auth_enabled: false
|
||||
|
||||
server:
|
||||
http_listen_port: 3100
|
||||
log_level: info
|
||||
|
||||
common:
|
||||
instance_addr: 127.0.0.1
|
||||
path_prefix: /var/lib/loki
|
||||
storage:
|
||||
filesystem:
|
||||
chunks_directory: /var/lib/loki/chunks
|
||||
rules_directory: /var/lib/loki/rules
|
||||
replication_factor: 1
|
||||
ring:
|
||||
kvstore:
|
||||
store: inmemory
|
||||
|
||||
schema_config:
|
||||
configs:
|
||||
- from: 2020-10-24
|
||||
store: tsdb
|
||||
object_store: filesystem
|
||||
schema: v13
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
|
||||
query_range:
|
||||
results_cache:
|
||||
cache:
|
||||
embedded_cache:
|
||||
enabled: true
|
||||
max_size_mb: 100
|
||||
|
||||
limits_config:
|
||||
metric_aggregation_enabled: true
|
||||
|
||||
ruler:
|
||||
alertmanager_url: http://localhost:9093
|
||||
EOF
|
||||
chown loki /etc/loki/config.yml
|
||||
systemctl enable -q --now loki
|
||||
msg_ok "Installed Loki"
|
||||
|
||||
read -rp "Would you like to install Promtail? (y/N): " INSTALL_PROMTAIL
|
||||
if [[ "${INSTALL_PROMTAIL,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Promtail"
|
||||
$STD apt install -y promtail
|
||||
systemctl enable -q --now promtail
|
||||
msg_ok "Installed Promtail"
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -59,7 +59,7 @@ msg_ok "Installed Python Dependencies"
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/opt/yubal.env
|
||||
YUBAL_HOST=0.0.0.0
|
||||
YUBAL_PORT=8001
|
||||
YUBAL_PORT=8000
|
||||
YUBAL_DATA=/opt/yubal_data
|
||||
YUBAL_CONFIG=/opt/yubal_config
|
||||
YUBAL_ROOT=/opt/yubal
|
||||
@@ -76,7 +76,7 @@ User=root
|
||||
WorkingDirectory=/opt/yubal
|
||||
EnvironmentFile=/opt/yubal.env
|
||||
Environment="PATH=/opt/yubal/.venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||
ExecStart=/opt/yubal/.venv/bin/python -m yubal
|
||||
ExecStart=/opt/yubal/.venv/bin/python -m yubal_api
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
|
||||
@@ -3442,8 +3442,13 @@ build_container() {
|
||||
export DEV_MODE_DRYRUN="${DEV_MODE_DRYRUN:-false}"
|
||||
|
||||
# Build PCT_OPTIONS as multi-line string
|
||||
PCT_OPTIONS_STRING=" -hostname $HN
|
||||
PCT_OPTIONS_STRING=" -hostname $HN"
|
||||
|
||||
# Only add -tags if TAGS is not empty
|
||||
if [ -n "$TAGS" ]; then
|
||||
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
|
||||
-tags $TAGS"
|
||||
fi
|
||||
|
||||
# Only add -features if FEATURES is not empty
|
||||
if [ -n "$FEATURES" ]; then
|
||||
@@ -4473,37 +4478,42 @@ create_lxc_container() {
|
||||
|
||||
msg_info "Searching for template '$TEMPLATE_SEARCH'"
|
||||
|
||||
# Initialize variables
|
||||
ONLINE_TEMPLATE=""
|
||||
ONLINE_TEMPLATES=()
|
||||
|
||||
# Step 1: Check local templates first (instant)
|
||||
mapfile -t LOCAL_TEMPLATES < <(
|
||||
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
|
||||
awk -v search="${TEMPLATE_SEARCH}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
|
||||
sed 's|.*/||' | sort -t - -k 2 -V
|
||||
)
|
||||
|
||||
pveam update >/dev/null 2>&1 || msg_warn "Could not update template catalog (pveam update failed)."
|
||||
|
||||
msg_ok "Template search completed"
|
||||
|
||||
set +u
|
||||
mapfile -t ONLINE_TEMPLATES < <(pveam available -section system 2>/dev/null | grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' | awk '{print $2}' | grep -E "^${TEMPLATE_SEARCH}.*${TEMPLATE_PATTERN}" | sort -t - -k 2 -V 2>/dev/null || true)
|
||||
set -u
|
||||
|
||||
ONLINE_TEMPLATE=""
|
||||
[[ ${#ONLINE_TEMPLATES[@]} -gt 0 ]] && ONLINE_TEMPLATE="${ONLINE_TEMPLATES[-1]}"
|
||||
|
||||
if [[ ${#ONLINE_TEMPLATES[@]} -gt 0 ]]; then
|
||||
count=0
|
||||
for idx in "${!ONLINE_TEMPLATES[@]}"; do
|
||||
((count++))
|
||||
[[ $count -ge 3 ]] && break
|
||||
done
|
||||
fi
|
||||
|
||||
# Step 2: If local template found, use it immediately (skip pveam update)
|
||||
if [[ ${#LOCAL_TEMPLATES[@]} -gt 0 ]]; then
|
||||
TEMPLATE="${LOCAL_TEMPLATES[-1]}"
|
||||
TEMPLATE_SOURCE="local"
|
||||
msg_ok "Template search completed"
|
||||
else
|
||||
# Step 3: No local template - need to check online (this may be slow)
|
||||
msg_info "No local template found, checking online catalog..."
|
||||
|
||||
# Update catalog with timeout to prevent long hangs
|
||||
if command -v timeout &>/dev/null; then
|
||||
if ! timeout 30 pveam update >/dev/null 2>&1; then
|
||||
msg_warn "Template catalog update timed out (possible network/DNS issue). Run 'pveam update' manually to diagnose."
|
||||
fi
|
||||
else
|
||||
pveam update >/dev/null 2>&1 || msg_warn "Could not update template catalog (pveam update failed)"
|
||||
fi
|
||||
|
||||
ONLINE_TEMPLATES=()
|
||||
mapfile -t ONLINE_TEMPLATES < <(pveam available -section system 2>/dev/null | grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' | awk '{print $2}' | grep -E "^${TEMPLATE_SEARCH}.*${TEMPLATE_PATTERN}" | sort -t - -k 2 -V 2>/dev/null || true)
|
||||
[[ ${#ONLINE_TEMPLATES[@]} -gt 0 ]] && ONLINE_TEMPLATE="${ONLINE_TEMPLATES[-1]}"
|
||||
|
||||
TEMPLATE="$ONLINE_TEMPLATE"
|
||||
TEMPLATE_SOURCE="online"
|
||||
msg_ok "Template search completed"
|
||||
fi
|
||||
|
||||
# If still no template, try to find alternatives
|
||||
@@ -4512,6 +4522,7 @@ create_lxc_container() {
|
||||
echo "[DEBUG] No template found for ${PCT_OSTYPE} ${PCT_OSVERSION}, searching for alternatives..."
|
||||
|
||||
# Get all available versions for this OS type
|
||||
AVAILABLE_VERSIONS=()
|
||||
mapfile -t AVAILABLE_VERSIONS < <(
|
||||
pveam available -section system 2>/dev/null |
|
||||
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
|
||||
@@ -4534,6 +4545,7 @@ create_lxc_container() {
|
||||
PCT_OSVERSION="${AVAILABLE_VERSIONS[$((choice - 1))]}"
|
||||
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION}"
|
||||
|
||||
ONLINE_TEMPLATES=()
|
||||
mapfile -t ONLINE_TEMPLATES < <(
|
||||
pveam available -section system 2>/dev/null |
|
||||
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
|
||||
|
||||
207
misc/tools.func
207
misc/tools.func
@@ -3601,57 +3601,37 @@ EOF
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Installs or updates MariaDB from official repo.
|
||||
# Installs or updates MariaDB.
|
||||
#
|
||||
# Description:
|
||||
# - Uses Debian/Ubuntu distribution packages by default (most reliable)
|
||||
# - Only uses official MariaDB repository when a specific version is requested
|
||||
# - Detects current MariaDB version and replaces it if necessary
|
||||
# - Preserves existing database data
|
||||
# - Dynamically determines latest GA version if "latest" is given
|
||||
#
|
||||
# Variables:
|
||||
# MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest)
|
||||
# MARIADB_VERSION - MariaDB version to install (optional)
|
||||
# - Not set or "latest": Uses distribution packages (recommended)
|
||||
# - Specific version (e.g. "11.4", "12.2"): Uses MariaDB official repo
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
setup_mariadb() {
|
||||
local MARIADB_VERSION="${MARIADB_VERSION:-latest}"
|
||||
local USE_DISTRO_PACKAGES=false
|
||||
|
||||
# Ensure non-interactive mode for all apt operations
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export NEEDRESTART_MODE=a
|
||||
export NEEDRESTART_SUSPEND=1
|
||||
|
||||
# Resolve "latest" to actual version
|
||||
if [[ "$MARIADB_VERSION" == "latest" ]]; then
|
||||
if ! curl -fsI --max-time 10 http://mirror.mariadb.org/repo/ >/dev/null 2>&1; then
|
||||
msg_warn "MariaDB mirror not reachable - trying mariadb_repo_setup fallback"
|
||||
# Try using official mariadb_repo_setup script as fallback
|
||||
if curl -fsSL --max-time 15 https://r.mariadb.com/downloads/mariadb_repo_setup 2>/dev/null | bash -s -- --skip-verify >/dev/null 2>&1; then
|
||||
msg_ok "MariaDB repository configured via mariadb_repo_setup"
|
||||
# Extract version from configured repo
|
||||
MARIADB_VERSION=$(grep -oP 'repo/\K[0-9]+\.[0-9]+\.[0-9]+' /etc/apt/sources.list.d/mariadb.list 2>/dev/null | head -n1 || echo "12.2")
|
||||
else
|
||||
msg_warn "mariadb_repo_setup failed - using hardcoded fallback version"
|
||||
MARIADB_VERSION="12.2"
|
||||
fi
|
||||
else
|
||||
MARIADB_VERSION=$(curl -fsSL --max-time 15 http://mirror.mariadb.org/repo/ 2>/dev/null |
|
||||
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' |
|
||||
grep -vE 'rc/|rolling/' |
|
||||
sed 's|/||' |
|
||||
sort -Vr |
|
||||
head -n1 || echo "")
|
||||
|
||||
if [[ -z "$MARIADB_VERSION" ]]; then
|
||||
msg_warn "Could not parse latest GA MariaDB version from mirror - trying mariadb_repo_setup"
|
||||
if curl -fsSL --max-time 15 https://r.mariadb.com/downloads/mariadb_repo_setup 2>/dev/null | bash -s -- --skip-verify >/dev/null 2>&1; then
|
||||
msg_ok "MariaDB repository configured via mariadb_repo_setup"
|
||||
MARIADB_VERSION=$(grep -oP 'repo/\K[0-9]+\.[0-9]+\.[0-9]+' /etc/apt/sources.list.d/mariadb.list 2>/dev/null | head -n1 || echo "12.2")
|
||||
else
|
||||
msg_warn "mariadb_repo_setup failed - using hardcoded fallback version"
|
||||
MARIADB_VERSION="12.2"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
# Determine installation method:
|
||||
# - "latest" or empty: Use distribution packages (avoids mirror issues)
|
||||
# - Specific version: Use MariaDB official repository
|
||||
if [[ "$MARIADB_VERSION" == "latest" || -z "$MARIADB_VERSION" ]]; then
|
||||
USE_DISTRO_PACKAGES=true
|
||||
msg_info "Setup MariaDB (distribution packages)"
|
||||
else
|
||||
msg_info "Setup MariaDB $MARIADB_VERSION (official repository)"
|
||||
fi
|
||||
|
||||
# Get currently installed version
|
||||
@@ -3659,17 +3639,105 @@ setup_mariadb() {
|
||||
CURRENT_VERSION=$(is_tool_installed "mariadb" 2>/dev/null) || true
|
||||
|
||||
# Pre-configure debconf to prevent any interactive prompts during install/upgrade
|
||||
local MARIADB_MAJOR_MINOR
|
||||
MARIADB_MAJOR_MINOR=$(echo "$MARIADB_VERSION" | awk -F. '{print $1"."$2}')
|
||||
if [[ -n "$MARIADB_MAJOR_MINOR" ]]; then
|
||||
debconf-set-selections <<EOF
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/feedback boolean false
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/root_password password
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/root_password_again password
|
||||
debconf-set-selections <<EOF
|
||||
mariadb-server mariadb-server/feedback boolean false
|
||||
mariadb-server mariadb-server/root_password password
|
||||
mariadb-server mariadb-server/root_password_again password
|
||||
EOF
|
||||
|
||||
# If specific version requested, also configure version-specific debconf
|
||||
if [[ "$USE_DISTRO_PACKAGES" == "false" ]]; then
|
||||
local MARIADB_MAJOR_MINOR
|
||||
MARIADB_MAJOR_MINOR=$(echo "$MARIADB_VERSION" | awk -F. '{print $1"."$2}')
|
||||
if [[ -n "$MARIADB_MAJOR_MINOR" ]]; then
|
||||
debconf-set-selections <<EOF
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/feedback boolean false
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/root_password password
|
||||
mariadb-server-$MARIADB_MAJOR_MINOR mariadb-server/root_password_again password
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# DISTRIBUTION PACKAGES PATH (default, most reliable)
|
||||
# ============================================================================
|
||||
if [[ "$USE_DISTRO_PACKAGES" == "true" ]]; then
|
||||
# Check if MariaDB was previously installed from official repo
|
||||
local HAD_MARIADB_REPO=false
|
||||
if [[ -f /etc/apt/sources.list.d/mariadb.sources ]] || [[ -f /etc/apt/sources.list.d/mariadb.list ]]; then
|
||||
HAD_MARIADB_REPO=true
|
||||
msg_info "Removing MariaDB official repository (switching to distribution packages)"
|
||||
fi
|
||||
|
||||
# Clean up any existing MariaDB repository files to avoid conflicts
|
||||
cleanup_old_repo_files "mariadb"
|
||||
|
||||
# If we had a repo, we need to refresh APT cache
|
||||
if [[ "$HAD_MARIADB_REPO" == "true" ]]; then
|
||||
$STD apt update || msg_warn "APT update had issues, continuing..."
|
||||
fi
|
||||
|
||||
# Ensure APT is working
|
||||
ensure_apt_working || return 1
|
||||
|
||||
# Check if installed version is from official repo and higher than distro version
|
||||
# In this case, we keep the existing installation to avoid data issues
|
||||
if [[ -n "$CURRENT_VERSION" ]]; then
|
||||
# Get available distro version
|
||||
local DISTRO_VERSION=""
|
||||
DISTRO_VERSION=$(apt-cache policy mariadb-server 2>/dev/null | grep -E "Candidate:" | awk '{print $2}' | grep -oP '^\d+:\K\d+\.\d+\.\d+' || echo "")
|
||||
|
||||
if [[ -n "$DISTRO_VERSION" ]]; then
|
||||
# Compare versions - if current is higher, keep it
|
||||
local CURRENT_MAJOR DISTRO_MAJOR
|
||||
CURRENT_MAJOR=$(echo "$CURRENT_VERSION" | awk -F. '{print $1}')
|
||||
DISTRO_MAJOR=$(echo "$DISTRO_VERSION" | awk -F. '{print $1}')
|
||||
|
||||
if [[ "$CURRENT_MAJOR" -gt "$DISTRO_MAJOR" ]]; then
|
||||
msg_warn "MariaDB $CURRENT_VERSION is already installed (higher than distro $DISTRO_VERSION)"
|
||||
msg_warn "Keeping existing installation to preserve data integrity"
|
||||
msg_warn "To use distribution packages, manually remove MariaDB first"
|
||||
_setup_mariadb_runtime_dir
|
||||
cache_installed_version "mariadb" "$CURRENT_VERSION"
|
||||
msg_ok "Setup MariaDB $CURRENT_VERSION (existing installation kept)"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Install or upgrade MariaDB from distribution packages
|
||||
if ! install_packages_with_retry "mariadb-server" "mariadb-client"; then
|
||||
msg_error "Failed to install MariaDB packages from distribution"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get installed version for caching
|
||||
local INSTALLED_VERSION=""
|
||||
INSTALLED_VERSION=$(mariadb --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -n1 || echo "distro")
|
||||
|
||||
# Configure runtime directory and finish
|
||||
_setup_mariadb_runtime_dir
|
||||
cache_installed_version "mariadb" "$INSTALLED_VERSION"
|
||||
msg_ok "Setup MariaDB $INSTALLED_VERSION (distribution packages)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# OFFICIAL REPOSITORY PATH (only when specific version requested)
|
||||
# ============================================================================
|
||||
|
||||
# First, check if there's an old/broken repository that needs cleanup
|
||||
if [[ -f /etc/apt/sources.list.d/mariadb.sources ]] || [[ -f /etc/apt/sources.list.d/mariadb.list ]]; then
|
||||
local OLD_REPO_VERSION=""
|
||||
OLD_REPO_VERSION=$(grep -oP 'repo/\K[0-9]+\.[0-9]+(\.[0-9]+)?' /etc/apt/sources.list.d/mariadb.sources 2>/dev/null || \
|
||||
grep -oP 'repo/\K[0-9]+\.[0-9]+(\.[0-9]+)?' /etc/apt/sources.list.d/mariadb.list 2>/dev/null || echo "")
|
||||
|
||||
# Check if old repo points to a different version
|
||||
if [[ -n "$OLD_REPO_VERSION" ]] && [[ "${OLD_REPO_VERSION%.*}" != "${MARIADB_VERSION%.*}" ]]; then
|
||||
msg_info "Cleaning up old MariaDB repository (was: $OLD_REPO_VERSION, requested: $MARIADB_VERSION)"
|
||||
cleanup_old_repo_files "mariadb"
|
||||
$STD apt update || msg_warn "APT update had issues, continuing..."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Scenario 1: Already installed at target version - just update packages
|
||||
@@ -3710,9 +3778,7 @@ EOF
|
||||
remove_old_tool_version "mariadb"
|
||||
fi
|
||||
|
||||
# Scenario 3: Fresh install or version change
|
||||
msg_info "Setup MariaDB $MARIADB_VERSION"
|
||||
|
||||
# Scenario 3: Fresh install or version change with specific version
|
||||
# Prepare repository (cleanup + validation)
|
||||
prepare_repository_setup "mariadb" || {
|
||||
msg_error "Failed to prepare MariaDB repository"
|
||||
@@ -3740,21 +3806,37 @@ EOF
|
||||
|
||||
# Install packages with retry logic
|
||||
if ! install_packages_with_retry "mariadb-server" "mariadb-client"; then
|
||||
# Fallback: try without specific version
|
||||
msg_warn "Failed to install MariaDB packages from upstream repo, trying distro fallback..."
|
||||
# Fallback: try distribution packages
|
||||
msg_warn "Failed to install MariaDB $MARIADB_VERSION from official repo, falling back to distribution packages..."
|
||||
cleanup_old_repo_files "mariadb"
|
||||
$STD apt update || {
|
||||
msg_warn "APT update also failed, continuing with cache"
|
||||
}
|
||||
install_packages_with_retry "mariadb-server" "mariadb-client" || {
|
||||
msg_error "Failed to install MariaDB packages (both upstream and distro)"
|
||||
if install_packages_with_retry "mariadb-server" "mariadb-client"; then
|
||||
local FALLBACK_VERSION=""
|
||||
FALLBACK_VERSION=$(mariadb --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -n1 || echo "distro")
|
||||
msg_warn "Installed MariaDB $FALLBACK_VERSION from distribution instead of requested $MARIADB_VERSION"
|
||||
_setup_mariadb_runtime_dir
|
||||
cache_installed_version "mariadb" "$FALLBACK_VERSION"
|
||||
msg_ok "Setup MariaDB $FALLBACK_VERSION (fallback to distribution packages)"
|
||||
return 0
|
||||
else
|
||||
msg_error "Failed to install MariaDB packages (both official repo and distribution)"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
fi
|
||||
|
||||
_setup_mariadb_runtime_dir
|
||||
cache_installed_version "mariadb" "$MARIADB_VERSION"
|
||||
msg_ok "Setup MariaDB $MARIADB_VERSION"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Helper function: Configure MariaDB runtime directory persistence
|
||||
# ------------------------------------------------------------------------------
|
||||
_setup_mariadb_runtime_dir() {
|
||||
# Configure tmpfiles.d to ensure /run/mysqld directory is created on boot
|
||||
# This fixes the issue where MariaDB fails to start after container reboot
|
||||
msg_info "Configuring MariaDB runtime directory persistence"
|
||||
|
||||
# Create tmpfiles.d configuration with error handling
|
||||
if ! printf '# Ensure /run/mysqld directory exists with correct permissions for MariaDB\nd /run/mysqld 0755 mysql mysql -\n' >/etc/tmpfiles.d/mariadb.conf; then
|
||||
@@ -3774,11 +3856,6 @@ EOF
|
||||
msg_warn "mysql user not found - directory created with correct permissions but ownership not set"
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_ok "Configured MariaDB runtime directory persistence"
|
||||
|
||||
cache_installed_version "mariadb" "$MARIADB_VERSION"
|
||||
msg_ok "Setup MariaDB $MARIADB_VERSION"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
@@ -4387,11 +4464,19 @@ EOF
|
||||
return 1
|
||||
}
|
||||
|
||||
manage_tool_repository "php" "$PHP_VERSION" "" "https://packages.sury.org/debsuryorg-archive-keyring.deb" || {
|
||||
msg_error "Failed to setup PHP repository"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Use different repository based on OS
|
||||
if [[ "$DISTRO_ID" == "ubuntu" ]]; then
|
||||
# Ubuntu: Use ondrej/php PPA
|
||||
msg_info "Adding ondrej/php PPA for Ubuntu"
|
||||
$STD apt install -y software-properties-common
|
||||
$STD add-apt-repository -y ppa:ondrej/php
|
||||
else
|
||||
# Debian: Use Sury repository
|
||||
manage_tool_repository "php" "$PHP_VERSION" "" "https://packages.sury.org/debsuryorg-archive-keyring.deb" || {
|
||||
msg_error "Failed to setup PHP repository"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
ensure_apt_working || return 1
|
||||
$STD apt update
|
||||
|
||||
|
||||
Reference in New Issue
Block a user