Compare commits

...

16 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
f7f871e52f docs(cloudflared): update notes - remove deprecated DoH proxy info
- DoH proxy-dns feature deprecated by Cloudflare (Feb 2026)
- Add tunnel setup instructions instead
2026-01-29 16:04:14 +01:00
CanbiZ (MickLesk)
187b466ffe Remove deprecated DNS-over-HTTPS proxy option from cloudflared installer 2026-01-23 08:38:49 +01:00
community-scripts-pr-app[bot]
0fcc2dd3f3 Update CHANGELOG.md (#11064)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-23 00:15:43 +00:00
community-scripts-pr-app[bot]
49fef798d3 Update versions.json (#11063)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-23 01:15:17 +01:00
community-scripts-pr-app[bot]
04ed636dd9 Update CHANGELOG.md (#11058)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 13:00:42 +00:00
Slaviša Arežina
1d1c2beaa4 Jotty: Increase default disk size from 6 to 8 (#11056)
* Increase default disk size from 6 to 8

* Increase HDD size from 6 to 8
2026-01-22 14:00:15 +01:00
community-scripts-pr-app[bot]
46ffe4bb16 Update CHANGELOG.md (#11057)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 12:42:20 +00:00
Chris
4f794d2b2c Immich: Increase RAM to 6GB (#10965) 2026-01-22 13:41:58 +01:00
community-scripts-pr-app[bot]
07d6942144 Update versions.json (#11055)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 13:07:46 +01:00
community-scripts-pr-app[bot]
c07ecd0008 Update CHANGELOG.md (#11054)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 11:10:14 +00:00
Reynaldo
23b48f08ae Fix tags in several scripts (#11050)
* fix default tags

* Update alpine-komodo.sh

* Update var_tags delimiter in fluid-calendar.sh

Changed default delimiter for var_tags from comma to semicolon.

* Change delimiter in var_tags from comma to semicolon

* Update pulse.sh

* Update streamlink-webui.sh

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-01-22 12:09:45 +01:00
community-scripts-pr-app[bot]
1131dd8430 Update .app files (#11052)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-22 12:08:33 +01:00
community-scripts-pr-app[bot]
9fc7ed32d2 Update CHANGELOG.md (#11053)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 10:57:29 +00:00
push-app-to-main[bot]
efe17a5e63 Loki | Alpine-Loki (#11048)
* Add loki (ct)

* add alpine variant in pr

* Add info note about Promtail installation to loki.json

Added an informational note to loki.json indicating that Promtail can be optionally installed during setup to collect and ship logs to Loki.

* add header

* refactor local_ip

* fix json

* Update alpine-loki-install.sh

* refactor

* refactor

* fix

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-22 11:56:59 +01:00
community-scripts-pr-app[bot]
e69cb6f20c Update CHANGELOG.md (#11051)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-22 10:33:42 +00:00
CanbiZ (MickLesk)
d95a273753 feat(tools.func): use distro packages for MariaDB by default (#11049)
- Changed setup_mariadb() to use Debian/Ubuntu distribution packages by default
- Official MariaDB repository only used when specific version is requested
- Added cleanup logic for old/orphaned repository files with apt update
- Added version comparison to prevent downgrades (keeps higher version installed)
- Added automatic fallback to distro packages if repo installation fails
- Extracted _setup_mariadb_runtime_dir() helper function
- Updated all related documentation

This change improves reliability by avoiding MariaDB mirror issues
(HTTPS->HTTP redirects, geographic availability problems) for standard
installations while still allowing specific versions when needed.
2026-01-22 11:33:13 +01:00
27 changed files with 804 additions and 321 deletions

View File

@@ -10,8 +10,29 @@
> [!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

View File

@@ -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
View 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"

View File

@@ -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
View File

@@ -0,0 +1,6 @@
___ __ _ __ __ _
/ | / /___ (_)___ ___ / / ____ / /__(_)
/ /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ /
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / /
/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/
/_/

6
ct/headers/loki Normal file
View File

@@ -0,0 +1,6 @@
__ __ _
/ / ____ / /__(_)
/ / / __ \/ //_/ /
/ /___/ /_/ / ,< / /
/_____/\____/_/|_/_/

View File

@@ -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}"

View File

@@ -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
View 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

View File

@@ -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}"

View File

@@ -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}"

View File

@@ -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}"

View File

@@ -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}"

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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
```

View File

@@ -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

View File

@@ -33,7 +33,11 @@
},
"notes": [
{
"text": "With an option to configure cloudflared as a DNS-over-HTTPS (DoH) proxy",
"text": "After install, run: cloudflared tunnel login && cloudflared tunnel create <NAME>",
"type": "info"
},
{
"text": "Or create tunnel via Cloudflare Zero Trust Dashboard",
"type": "info"
}
]

View File

@@ -20,7 +20,7 @@
"script": "ct/immich.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"ram": 6144,
"hdd": 20,
"os": "Debian",
"version": "13"

View File

@@ -21,7 +21,7 @@
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 6,
"hdd": 8,
"os": "debian",
"version": "13"
}

View 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"
}
]
}

View File

@@ -1,48 +1,218 @@
[
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.3.0",
"date": "2026-01-15T19:29:02Z"
"name": "esphome/esphome",
"version": "2026.1.1",
"date": "2026-01-22T23:19:21Z"
},
{
"name": "ollama/ollama",
"version": "v0.14.3-rc3",
"date": "2026-01-20T20:20:53Z"
"name": "fosrl/pangolin",
"version": "1.15.0-s.0",
"date": "2026-01-22T23:18:27Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.81.0.rc.4",
"date": "2026-01-21T21:43:55Z"
"name": "plexguide/Huntarr.io",
"version": "8.2.16",
"date": "2026-01-22T23:05:35Z"
},
{
"name": "Infisical/infisical",
"version": "v0.156.2",
"date": "2026-01-21T21:02:11Z"
"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.1.5",
"date": "2026-01-22T19:08:18Z"
},
{
"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",
"date": "2026-01-20T21:01:52Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.8.0",
"date": "2025-12-12T20:25:00Z"
},
{
"name": "livebook-dev/livebook",
"version": "nightly",
"date": "2026-01-20T21:10:15Z"
"date": "2026-01-21T20:40:02Z"
},
{
"name": "Comfy-Org/ComfyUI",
"version": "v0.10.0",
"date": "2026-01-21T19:22:04Z"
},
{
"name": "fccview/jotty",
"version": "1.18.1",
"date": "2026-01-21T19:16:44Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.16",
"date": "2026-01-17T07:54:15Z"
},
{
"name": "metabase/metabase",
"version": "v0.57.x",
"date": "2026-01-21T17:54:29Z"
"name": "keycloak/keycloak",
"version": "26.4.8",
"date": "2026-01-15T13:52:29Z"
},
{
"name": "openobserve/openobserve",
@@ -69,11 +239,6 @@
"version": "4.1.3",
"date": "2026-01-07T16:24:23Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.5.1",
"date": "2026-01-21T13:28:57Z"
},
{
"name": "apache/tomcat",
"version": "10.1.51",
@@ -92,12 +257,7 @@
{
"name": "javedh-dev/tracktor",
"version": "1.2.1",
"date": "2026-01-21T11:12:28Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.17.0",
"date": "2026-01-21T10:55:33Z"
"date": "2026-01-21T09:31:18Z"
},
{
"name": "emqx/emqx",
@@ -114,16 +274,6 @@
"version": "v0.108.0",
"date": "2026-01-21T06:45:16Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.2.2",
"date": "2025-12-15T18:25:36Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.898",
"date": "2026-01-21T05:50:19Z"
},
{
"name": "9001/copyparty",
"version": "v1.20.3",
@@ -134,51 +284,26 @@
"version": "v0.1.70-beta.1",
"date": "2026-01-21T05:35:05Z"
},
{
"name": "esphome/esphome",
"version": "2026.1.0",
"date": "2026-01-21T03:43:09Z"
},
{
"name": "jeedom/core",
"version": "4.5.2",
"date": "2026-01-21T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.20.5",
"date": "2026-01-21T00:12:33Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.8",
"date": "2026-01-15T13:52:29Z"
},
{
"name": "ZoeyVid/NPMplus",
"version": "2026-01-20-r2",
"date": "2026-01-20T22:28:54Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-availability-sync-fix",
"date": "2026-01-20T22:11:24Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.2.0-dev.1",
"date": "2026-01-20T21:46:14Z"
},
{
"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",
@@ -229,16 +354,6 @@
"version": "v0.23.0-rc.1",
"date": "2026-01-20T14:19:56Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.3.6",
"date": "2026-01-16T15:00:42Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.52.8",
"date": "2026-01-20T12:36:05Z"
},
{
"name": "lazy-media/reactive-resume",
"version": "v1.2.7",
@@ -284,16 +399,6 @@
"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": "ghostfolio/ghostfolio",
"version": "2.232.0",
@@ -319,21 +424,11 @@
"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",
@@ -349,11 +444,6 @@
"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",
@@ -419,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",
@@ -454,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",
@@ -500,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",
@@ -554,21 +624,11 @@
"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",
@@ -604,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",
@@ -639,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",
@@ -709,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",
@@ -754,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",
@@ -882,7 +922,7 @@
{
"name": "mealie-recipes/mealie",
"version": "v3.9.2",
"date": "2026-01-02T19:40:19Z"
"date": "2026-01-02T19:40:09Z"
},
{
"name": "gotify/server",
@@ -924,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",
@@ -1034,26 +1069,11 @@
"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",
@@ -1184,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",
@@ -1209,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",
@@ -1289,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",
@@ -1374,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",
@@ -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"
}
]

View 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

View File

@@ -23,41 +23,6 @@ setup_deb822_repo \
$STD apt install -y cloudflared
msg_ok "Installed Cloudflared"
read -r -p "${TAB3}Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Creating Service"
cat <<EOF >/usr/local/etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-address: 0.0.0.0
proxy-dns-port: 53
proxy-dns-max-upstream-conns: 5
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
#- https://8.8.8.8/dns-query
#- https://8.8.4.4/dns-query
#- https://9.9.9.9/dns-query
#- https://149.112.112.112/dns-query
EOF
cat <<EOF >/etc/systemd/system/cloudflared.service
[Unit]
Description=cloudflared DNS-over-HTTPS (DoH) proxy
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/cloudflared --config /usr/local/etc/cloudflared/config.yml
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cloudflared
msg_ok "Created Service"
fi
motd_ssh
customize
cleanup_lxc

83
install/loki-install.sh Normal file
View 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

View File

@@ -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"
}
# ------------------------------------------------------------------------------