Compare commits

..

52 Commits

Author SHA1 Message Date
19a2cd25b2 Update CHANGELOG.md 2025-12-24 14:29:32 +00:00
4e417dbdda Update CHANGELOG.md (#10296)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 14:29:18 +00:00
5a230837d3 Update dependencies (#10275) 2025-12-24 15:29:11 +01:00
23e3be00f0 Refactor (#10274) 2025-12-24 15:28:56 +01:00
c074d3f567 Update CHANGELOG.md (#10295)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 14:28:27 +00:00
12037c8468 Update CHANGELOG.md (#10294)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 14:28:05 +00:00
1a5c7680ee Refactor (#10276) 2025-12-24 15:28:00 +01:00
2934b10415 Update CHANGELOG.md (#10293)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 14:27:44 +00:00
133e1484ad Refactor (#10277) 2025-12-24 15:27:39 +01:00
b22265047c Refactor (#10278) 2025-12-24 15:27:20 +01:00
9b728ee2e0 Update CHANGELOG.md (#10292)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 14:25:03 +00:00
bf51483235 Refactor (#10280) 2025-12-24 15:24:42 +01:00
f1fc6b0298 Update CHANGELOG.md (#10291)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:23:40 +00:00
4a878169be Update CHANGELOG.md (#10290)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:23:23 +00:00
f1c6f573aa fix(build): correct local template discovery and simplify pattern logic (#10282) 2025-12-24 14:23:10 +01:00
920a170c1e Update CHANGELOG.md (#10289)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:22:59 +00:00
63e883f9ea Refactir (#10241) 2025-12-24 14:22:49 +01:00
733821bfce Update CHANGELOG.md (#10288)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:22:38 +00:00
7a44080eda Pocketbase: Add note for superuser account creation (#10245) 2025-12-24 14:22:33 +01:00
5730506c03 Refactor (#10256) 2025-12-24 14:22:18 +01:00
ba06d13598 Update CHANGELOG.md (#10287)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:22:05 +00:00
c0f4ac5750 Refactor (#10258) 2025-12-24 14:21:58 +01:00
36391bfc1e Update CHANGELOG.md (#10286)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:21:45 +00:00
509ea946a6 Refactor (#10259) 2025-12-24 14:21:41 +01:00
489b78aaf3 Update CHANGELOG.md (#10285)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:21:27 +00:00
261f746ff1 Reefactor (#10260) 2025-12-24 14:21:23 +01:00
1a7da4bc91 Refactor (#10262) 2025-12-24 14:21:02 +01:00
69f81cec04 Update versions.json (#10283)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 13:06:24 +01:00
cca6521b62 Update CHANGELOG.md (#10273)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 08:26:20 +00:00
0cd82a058c Update recyclarr-install.sh (#10272) 2025-12-24 09:25:52 +01:00
0d3e872c7c Update CHANGELOG.md (#10271)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 00:14:23 +00:00
97f74fd9dd Update versions.json (#10270)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-24 01:14:03 +01:00
42f32804ba Update CHANGELOG.md (#10269)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 23:00:55 +00:00
b6026af8f7 Fixes (#10261) 2025-12-24 00:00:35 +01:00
5dc05ce79f Update CHANGELOG.md (#10268)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 22:58:58 +00:00
85d5693e1a Refactor (#10255) 2025-12-23 23:58:37 +01:00
8e8ae9d992 Update CHANGELOG.md (#10267)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 22:41:02 +00:00
4da54f1593 Small improvement (#10254) 2025-12-23 23:40:41 +01:00
d6ef21c077 Update CHANGELOG.md (#10265)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 21:32:21 +00:00
92ff5f60ff Update CHANGELOG.md (#10264)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 21:32:12 +00:00
3953fa1e25 Fix Recyclarr page TypeError: schema mismatch in notes field (#10253)
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2025-12-23 22:32:01 +01:00
2acac97417 Update CHANGELOG.md (#10263)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 21:31:49 +00:00
6e640f8eb6 Fixes (#10257) 2025-12-23 22:31:27 +01:00
2478aa84e8 Update CHANGELOG.md (#10250)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 13:29:34 +00:00
f02e25182b fix: pihole-exporter: unknown function (#10249) 2025-12-23 14:29:13 +01:00
94d12ff1aa Update CHANGELOG.md (#10248)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 13:19:27 +00:00
f6f4c3411c Refactor: Beszel (#10195)
* Refactor

* Update

* Update

* Update
2025-12-23 14:19:03 +01:00
e819bf69f2 Update CHANGELOG.md (#10247)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 13:18:50 +00:00
d76150d9a3 Migrate service file to refactored installation (#10240) 2025-12-23 14:18:24 +01:00
931dbd8c9f Update CHANGELOG.md (#10246)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 12:51:33 +00:00
eb0486a698 Update forgejo to debian13 and fix env var (#10242) 2025-12-23 13:51:06 +01:00
ae28705178 Update versions.json (#10244)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-23 13:07:35 +01:00
37 changed files with 381 additions and 474 deletions

View File

@ -10,8 +10,64 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-24
### 🚀 Updated Scripts
- recyclarr: increase cron path [@Uncloak2](https://github.com/Uncloak2) ([#10272](https://github.com/community-scripts/ProxmoxVE/pull/10272))
- #### 🔧 Refactor
- Overseerr: Update dependencies [@tremor021](https://github.com/tremor021) ([#10275](https://github.com/community-scripts/ProxmoxVE/pull/10275))
- Refactor: Paperless-GPT [@tremor021](https://github.com/tremor021) ([#10274](https://github.com/community-scripts/ProxmoxVE/pull/10274))
- Refactor: Outline [@tremor021](https://github.com/tremor021) ([#10276](https://github.com/community-scripts/ProxmoxVE/pull/10276))
- Refactor: OTS [@tremor021](https://github.com/tremor021) ([#10277](https://github.com/community-scripts/ProxmoxVE/pull/10277))
- Refactor: OpenProject [@tremor021](https://github.com/tremor021) ([#10278](https://github.com/community-scripts/ProxmoxVE/pull/10278))
- Refactor: Open Archiver [@tremor021](https://github.com/tremor021) ([#10280](https://github.com/community-scripts/ProxmoxVE/pull/10280))
- Refactor: Tautulli [@tremor021](https://github.com/tremor021) ([#10241](https://github.com/community-scripts/ProxmoxVE/pull/10241))
- Refactor: PrivateBin [@tremor021](https://github.com/tremor021) ([#10256](https://github.com/community-scripts/ProxmoxVE/pull/10256))
- Refactor: Podman-Home Assistant [@tremor021](https://github.com/tremor021) ([#10258](https://github.com/community-scripts/ProxmoxVE/pull/10258))
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#10259](https://github.com/community-scripts/ProxmoxVE/pull/10259))
- Refactor: PatchMon [@tremor021](https://github.com/tremor021) ([#10260](https://github.com/community-scripts/ProxmoxVE/pull/10260))
- Refactor: Part-DB [@tremor021](https://github.com/tremor021) ([#10262](https://github.com/community-scripts/ProxmoxVE/pull/10262))
### 💾 Core
- #### 🐞 Bug Fixes
- core: correct local template discovery regex pattern [@MickLesk](https://github.com/MickLesk) ([#10282](https://github.com/community-scripts/ProxmoxVE/pull/10282))
### ❔ Uncategorized
- Pocketbase: Add note for superuser account creation [@tremor021](https://github.com/tremor021) ([#10245](https://github.com/community-scripts/ProxmoxVE/pull/10245))
## 2025-12-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Technitium DNS: Migrate service [@tremor021](https://github.com/tremor021) ([#10240](https://github.com/community-scripts/ProxmoxVE/pull/10240))
- Update forgejo to debian13 and fix env var [@burgerga](https://github.com/burgerga) ([#10242](https://github.com/community-scripts/ProxmoxVE/pull/10242))
- #### 🔧 Refactor
- Passbolt: Small fixes [@tremor021](https://github.com/tremor021) ([#10261](https://github.com/community-scripts/ProxmoxVE/pull/10261))
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#10255](https://github.com/community-scripts/ProxmoxVE/pull/10255))
- Prometheus Paperless NGX Exporter: Small fix [@tremor021](https://github.com/tremor021) ([#10254](https://github.com/community-scripts/ProxmoxVE/pull/10254))
- Podman: Fixes [@tremor021](https://github.com/tremor021) ([#10257](https://github.com/community-scripts/ProxmoxVE/pull/10257))
- Refactor: Beszel [@tremor021](https://github.com/tremor021) ([#10195](https://github.com/community-scripts/ProxmoxVE/pull/10195))
### 🧰 Tools
- #### 🐞 Bug Fixes
- fix: pihole-exporter: unknown function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10249](https://github.com/community-scripts/ProxmoxVE/pull/10249))
### ❔ Uncategorized
- Fix Recyclarr page TypeError: schema mismatch in notes field [@Copilot](https://github.com/Copilot) ([#10253](https://github.com/community-scripts/ProxmoxVE/pull/10253))
## 2025-12-22
### 🚀 Updated Scripts

View File

@ -27,19 +27,22 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
if check_for_gh_release "beszel" "henrygd/beszel"; then
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
msg_info "Updating Beszel"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated Beszel"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@ -44,6 +44,14 @@ function update_script() {
rm -rf forgejo-$RELEASE-linux-amd64
msg_ok "Cleaned"
# Fix env var from older version of community script
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
msg_info "Updating Service File"
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
systemctl daemon-reload
msg_ok "Updated Service File"
fi
msg_info "Starting Service"
systemctl start forgejo
msg_ok "Started Service"

View File

@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Services"
cp /opt/openarchiver/.env /opt/openarchiver.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball" "latest" "/opt/openarchiver"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
mv /opt/openarchiver.env /opt/openarchiver/.env
msg_info "Updating Open Archiver"

View File

@ -27,18 +27,19 @@ function update_script() {
msg_error "No Paperless-GPT installation found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if check_for_gh_release "paperless-gpt" "icereed/paperless-gpt"; then
msg_info "Stopping Service"
systemctl stop paperless-gpt
msg_ok "Service Stopped"
msg_info "Updating Paperless-GPT to ${RELEASE}"
temp_file=$(mktemp)
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
rm -rf /opt/paperless-gpt
mv paperless-gpt-${RELEASE} /opt/paperless-gpt
if should_update_tool "node" "24"; then
NODE_VERSION="24" setup_nodejs
fi
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
msg_info "Updating Paperless-GPT"
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
@ -47,16 +48,12 @@ function update_script() {
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
rm -f $temp_file
echo "${RELEASE}" >"/opt/paperless-gpt_version.txt"
msg_ok "Updated Paperless-GPT to ${RELEASE}"
msg_ok "Updated Paperless-GPT"
msg_info "Starting Service"
systemctl start paperless-gpt
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@ -27,8 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
if check_for_gh_release "partdb" "Part-DB/Part-DB-server"; then
msg_info "Stopping Service"
systemctl stop apache2
msg_ok "Stopped Service"
@ -36,7 +37,7 @@ function update_script() {
msg_info "Updating $APP to v${RELEASE}"
cd /opt
mv /opt/partdb/ /opt/partdb-backup
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip")
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
@ -54,15 +55,13 @@ function update_script() {
chown -R www-data:www-data /opt/partdb
rm -r "/opt/v${RELEASE}.zip"
rm -r /opt/partdb-backup
echo "${RELEASE}" >/opt/${APP}_version.txt
echo "${RELEASE}" >~/.partdb
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}

View File

@ -37,7 +37,7 @@ function update_script() {
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
$STD apt upgrade -y
msg_ok "Updated successfully!"
msg_info "Updating All Containers\n"
@ -65,7 +65,7 @@ function update_script() {
exit
fi
if [ "$UPD" == "3" ]; then
IP=$(hostname -I | awk '{print $1}')
import_local_ip
msg_info "Installing FileBrowser"
$STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
$STD filebrowser config init -a '0.0.0.0'
@ -74,23 +74,25 @@ function update_script() {
msg_ok "Installed FileBrowser"
msg_info "Creating Service"
service_path="/etc/systemd/system/filebrowser.service"
echo "[Unit]
Description=Filebrowser
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target" >$service_path
cat <<EOF >/etc/systemd/system/filebrowser.service
[Unit]
Description=Filebrowser
After=network-online.target
$STD systemctl enable --now filebrowser
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target
EOF
systemctl enable -q --now filebrowser
msg_ok "Created Service"
msg_ok "Completed Successfully!\n"
echo -e "FileBrowser should be reachable by going to the following URL.
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n"
exit
fi
if [ "$UPD" == "4" ]; then
@ -99,7 +101,6 @@ function update_script() {
msg_ok "Removed ALL Unused Images"
exit
fi
}
start

View File

@ -29,7 +29,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
$STD apt upgrade -y
msg_ok "Updated successfully!"
exit
}

View File

@ -48,7 +48,6 @@ function update_script() {
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"

View File

@ -27,7 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /etc/systemd/system/dns.service ]]; then
mv /etc/systemd/system/dns.service /etc/systemd/system/technitium.service
systemctl daemon-reload
fi
if is_package_installed "aspnetcore-runtime-8.0"; then
$STD apt remove -y aspnetcore-runtime-8.0
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
@ -42,7 +45,7 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium)" ]]; then
msg_info "Updating Technitium DNS"
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/

View File

@ -23,7 +23,7 @@
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "12"
"version": "13"
}
},
{

View File

@ -31,5 +31,10 @@
"username": null,
"password": null
},
"notes": []
"notes": [
{
"text": "Type `/opt/pocketbase/pocketbase superuser create YOUREMAIL PASSWORD` to create your superuser account.",
"type": "info"
}
]
}

View File

@ -34,11 +34,11 @@
"notes": [
{
"type": "warning",
"content": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
"text": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
},
{
"type": "info",
"content": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
"text": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
}
]
}

View File

@ -12,7 +12,7 @@
"documentation": "https://github.com/Tautulli/Tautulli/wiki",
"website": "https://tautulli.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tautulli.webp",
"config_path": "",
"config_path": "/opt/Tautulli/config.ini",
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
"install_methods": [
{
@ -23,7 +23,7 @@
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
"version": "13"
}
}
],

View File

@ -1,14 +1,174 @@
[
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@16.4.0",
"date": "2025-12-24T10:16:33Z"
},
{
"name": "rcourtman/Pulse",
"version": "v5.0.0",
"date": "2025-12-23T21:47:01Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.521",
"date": "2025-12-24T05:52:23Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.40.0-rc1",
"date": "2025-12-24T03:37:37Z"
},
{
"name": "comfyanonymous/ComfyUI",
"version": "v0.6.0",
"date": "2025-12-24T03:32:16Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-24T00:27:08Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.4",
"date": "2025-12-23T23:58:16Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.32.1",
"date": "2025-12-23T23:28:06Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.1.4",
"date": "2025-12-23T20:53:07Z"
},
{
"name": "fosrl/pangolin",
"version": "1.14.0-s.2",
"date": "2025-12-23T20:24:26Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.12.6",
"date": "2025-12-23T19:24:15Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2025-12-23T19:01:23Z"
},
{
"name": "prometheus-pve/prometheus-pve-exporter",
"version": "v3.8.0",
"date": "2025-12-23T18:20:46Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.9",
"date": "2025-12-23T17:03:22Z"
},
{
"name": "mongodb/mongo",
"version": "r6.0.27",
"date": "2025-12-23T16:21:51Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.2",
"date": "2025-12-23T16:17:04Z"
},
{
"name": "SonarSource/sonarqube",
"version": "25.12.0.117093",
"date": "2025-12-23T15:00:10Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.7",
"date": "2025-12-23T14:53:51Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.459",
"date": "2025-12-23T14:40:52Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.8.1",
"date": "2025-12-16T09:59:22Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.543",
"date": "2025-12-23T12:39:16Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.16.4",
"date": "2025-12-23T12:08:24Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v1.6.11",
"date": "2025-12-23T10:40:42Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.13",
"date": "2025-12-23T10:14:48Z"
},
{
"name": "pommee/goaway",
"version": "v0.63.2",
"date": "2025-12-23T09:32:55Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.12",
"date": "2025-12-02T08:11:24Z"
},
{
"name": "theonedev/onedev",
"version": "v13.1.6",
"date": "2025-12-23T03:13:32Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.13.3",
"date": "2025-12-23T01:18:58Z"
},
{
"name": "Dispatcharr/Dispatcharr",
"version": "v0.15.1",
"date": "2025-12-22T23:01:26Z"
},
{
"name": "fosrl/pangolin",
"version": "1.14.0",
"date": "2025-12-22T22:41:05Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.5",
@ -24,21 +184,11 @@
"version": "v1.1.0-stable",
"date": "2025-12-22T20:30:40Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.17",
"date": "2025-12-22T20:23:56Z"
},
{
"name": "maxdorninger/MediaManager",
"version": "v1.11.1",
"date": "2025-12-22T18:15:40Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2025-12-22T17:38:26Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.11.rc.1",
@ -59,11 +209,6 @@
"version": "v1.0.9",
"date": "2025-12-22T15:55:49Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.1.2",
"date": "2025-12-22T14:58:39Z"
},
{
"name": "openhab/openhab-core",
"version": "5.1.0",
@ -74,26 +219,11 @@
"version": "v0.88.2",
"date": "2025-12-22T14:36:59Z"
},
{
"name": "pommee/goaway",
"version": "v0.63.1",
"date": "2025-12-22T13:19:01Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "passbolt/passbolt_api",
"version": "v5.8.0",
"date": "2025-12-22T10:12:48Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v1.6.11",
"date": "2025-12-22T09:14:20Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
@ -104,46 +234,11 @@
"version": "v0.6.43",
"date": "2025-12-22T06:03:45Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.504",
"date": "2025-12-22T05:55:56Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.14",
"date": "2025-12-16T05:42:34Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-22T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.32.0",
"date": "2025-12-21T22:27:29Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.12",
"date": "2025-12-21T20:45:14Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.12.5",
"date": "2025-12-21T19:24:42Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.7.1",
@ -159,21 +254,11 @@
"version": "v5.1.1",
"date": "2025-12-21T12:59:32Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.35.0",
"date": "2025-12-21T07:44:15Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@16.3.2",
"date": "2025-12-21T05:23:55Z"
},
{
"name": "dedicatedcode/reitti",
"version": "v3.0.1",
@ -229,11 +314,6 @@
"version": "v1.0.0-beta21",
"date": "2025-12-19T23:04:27Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.3-alpha.1",
@ -264,21 +344,11 @@
"version": "v1.16.3",
"date": "2025-12-19T17:45:42Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.1",
"date": "2025-12-19T15:53:08Z"
},
{
"name": "immich-app/immich",
"version": "v2.4.1",
"date": "2025-12-19T15:50:12Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.30.2",
"date": "2025-12-19T15:18:53Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.19.0",
@ -286,8 +356,8 @@
},
{
"name": "wazuh/wazuh",
"version": "coverity-w51-4.14.2",
"date": "2025-12-15T12:34:36Z"
"version": "coverity-w52-4.14.2",
"date": "2025-12-19T13:31:21Z"
},
{
"name": "fccview/jotty",
@ -344,11 +414,6 @@
"version": "v2.1.5",
"date": "2025-12-18T20:48:01Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.36.2",
"date": "2025-12-03T22:46:29Z"
},
{
"name": "saltstack/salt",
"version": "v3007.10",
@ -384,11 +449,6 @@
"version": "v5.0.1",
"date": "2025-12-18T14:22:38Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.458",
"date": "2025-12-18T12:23:23Z"
},
{
"name": "juanfont/headscale",
"version": "v0.27.1",
@ -409,11 +469,6 @@
"version": "7.4.6",
"date": "2025-12-18T07:00:26Z"
},
{
"name": "comfyanonymous/ComfyUI",
"version": "v0.5.1",
"date": "2025-12-18T03:08:43Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.10.3",
@ -489,31 +544,11 @@
"version": "1.1.7",
"date": "2025-12-16T21:44:58Z"
},
{
"name": "prometheus-pve/prometheus-pve-exporter",
"version": "v3.7.0",
"date": "2025-12-16T19:01:35Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.8",
"date": "2025-12-09T16:29:50Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.6.2",
"date": "2025-12-16T17:54:19Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.542",
"date": "2025-12-16T13:49:44Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.8.1",
"date": "2025-12-16T09:59:22Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.19.0",
@ -544,21 +579,11 @@
"version": "v0.30.0",
"date": "2025-12-15T17:23:59Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.6",
"date": "2025-12-15T14:40:53Z"
},
{
"name": "librenms/librenms",
"version": "25.12.0",
"date": "2025-12-15T14:06:00Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.16.3",
"date": "2025-12-15T12:56:50Z"
},
{
"name": "LimeSurvey/LimeSurvey",
"version": "6.16.2+251209",
@ -684,11 +709,6 @@
"version": "v8.3.7",
"date": "2025-12-12T09:13:40Z"
},
{
"name": "theonedev/onedev",
"version": "v13.1.5",
"date": "2025-12-12T03:30:50Z"
},
{
"name": "umami-software/umami",
"version": "v3.0.3",
@ -699,11 +719,6 @@
"version": "0.43.1",
"date": "2025-12-11T22:45:52Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.13.2",
"date": "2025-12-11T06:31:24Z"
},
{
"name": "TwiN/gatus",
"version": "v5.33.1",
@ -919,11 +934,6 @@
"version": "v6.2.4",
"date": "2025-12-02T17:47:52Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.12",
"date": "2025-12-02T08:11:24Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.7.0",
@ -1029,11 +1039,6 @@
"version": "release-1.24.2",
"date": "2025-11-26T11:22:30Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.3",
"date": "2025-11-25T17:25:41Z"
},
{
"name": "usememos/memos",
"version": "v0.25.3",
@ -1219,11 +1224,6 @@
"version": "1.5.0",
"date": "2025-11-05T11:10:20Z"
},
{
"name": "SonarSource/sonarqube",
"version": "25.11.0.114957",
"date": "2025-11-05T10:26:59Z"
},
{
"name": "nicolargo/glances",
"version": "v4.4.1",

View File

@ -13,11 +13,7 @@ setting_up_container
network_check
update_os
msg_info "Installing Beszel"
mkdir -p /opt/beszel
curl -fsSL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null
chmod +x /opt/beszel/beszel
msg_ok "Installed Beszel"
fetch_and_deploy_gh_release "beszel" "henrygd/beszel" "prebuild" "latest" "/opt/beszel" "beszel_linux_amd64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/beszel-hub.service

View File

@ -50,7 +50,7 @@ Group=git
WorkingDirectory=/var/lib/forgejo/
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
[Install]
WantedBy=multi-user.target
EOF

View File

@ -19,28 +19,12 @@ msg_ok "Installed dependendencies"
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="openarchiver_db" PG_DB_USER="openarchiver" setup_postgresql_db
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
JWT_KEY="$(openssl rand -hex 32)"
SECRET_KEY="$(openssl rand -hex 32)"
IP_ADDR=$(hostname -I | awk '{print $1}')
msg_info "Setting up PostgreSQL"
DB_NAME="openarchiver_db"
DB_USER="openarchiver"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-18)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
{
echo "Open Archiver DB Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/openarchiver.creds
msg_ok "Set up PostgreSQL"
import_local_ip
msg_info "Configuring MeiliSearch"
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
@ -76,10 +60,10 @@ mkdir -p /opt/openarchiver-data
cd /opt/openarchiver
cp .env.example .env
sed -i "s|^NODE_ENV=.*|NODE_ENV=production|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_DB=.*|POSTGRES_DB=openarchiver_db|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_USER=.*|POSTGRES_USER=openarchiver|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$DB_PASS|g" /opt/openarchiver/.env
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=\"postgresql://openarchiver:$DB_PASS@localhost:5432/openarchiver_db\"|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_DB=.*|POSTGRES_DB=$PG_DB_NAME|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_USER=.*|POSTGRES_USER=$PG_DB_USER|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$PG_DB_PASS|g" /opt/openarchiver/.env
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=\"postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME\"|g" /opt/openarchiver/.env
sed -i "s|^MEILI_HOST=.*|MEILI_HOST=http://localhost:7700|g" /opt/openarchiver/.env
sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$MASTER_KEY|g" /opt/openarchiver/.env
sed -i "s|^REDIS_HOST=.*|REDIS_HOST=localhost|g" /opt/openarchiver/.env
@ -88,7 +72,7 @@ sed -i "s|^STORAGE_LOCAL_ROOT_PATH=.*|STORAGE_LOCAL_ROOT_PATH=/opt/openarchiver-
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$JWT_KEY|g" /opt/openarchiver/.env
sed -i "s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$SECRET_KEY|g" /opt/openarchiver/.env
sed -i "s|^TIKA_URL=.*|TIKA_URL=|g" /opt/openarchiver/.env
sed -i "s|^ORIGIN=.*|ORIGIN=http://$IP_ADDR:3000|g" /opt/openarchiver/.env
sed -i "s|^ORIGIN=.*|ORIGIN=http://$LOCAL_IP:3000|g" /opt/openarchiver/.env
$STD pnpm install --shamefully-hoist --frozen-lockfile --prod=false
$STD pnpm run build:oss
$STD pnpm db:migrate

View File

@ -14,28 +14,14 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
apt-transport-https \
ca-certificates
$STD apt install -y apt-transport-https
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
msg_info "Setting up PostgreSQL"
DB_NAME=openproject
DB_USER=openproject
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
PG_DB_NAME="openproject" PG_DB_USER="openproject" setup_postgresql_db
API_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
{
echo "OpenProject-Credentials"
echo -e "OpenProject Database User: $DB_USER"
echo -e "OpenProject Database Password: $DB_PASS"
echo -e "OpenProject Database Name: $DB_NAME"
echo -e "OpenProject API Key: $API_KEY"
} >>~/openproject.creds
msg_ok "Set up PostgreSQL"
echo "OpenProject API Key: $API_KEY" >>~/openproject.creds
import_local_ip
msg_info "Setting up OpenProject Repository"
curl -fsSL "https://dl.packager.io/srv/opf/openproject/key" | gpg --dearmor >/etc/apt/trusted.gpg.d/packager-io.gpg
@ -48,7 +34,6 @@ $STD apt install -y openproject
msg_ok "Installed OpenProject"
msg_info "Configuring OpenProject"
IP_ADDR=$(hostname -I | cut -d' ' -f1)
cat <<EOF >/etc/openproject/installer.dat
openproject/edition default
@ -56,13 +41,13 @@ postgres/retry retry
postgres/autoinstall reuse
postgres/db_host 127.0.0.1
postgres/db_port 5432
postgres/db_username ${DB_USER}
postgres/db_password ${DB_PASS}
postgres/db_name ${DB_NAME}
postgres/db_username ${PG_DB_USER}
postgres/db_password ${PG_DB_PASS}
postgres/db_name ${PG_DB_NAME}
server/autoinstall install
server/variant apache2
server/hostname ${IP_ADDR}
server/hostname ${LOCAL_IP}
server/server_path_prefix /openproject
server/ssl no
server/variant apache2
@ -75,7 +60,6 @@ memcached/autoinstall install
openproject/admin_email admin@example.net
openproject/default_language en
EOF
$STD sudo openproject configure
msg_ok "Configured OpenProject"

View File

@ -16,11 +16,11 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
redis-server \
nginx \
openssl
nginx
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_amd64.tgz"
create_self_signed_cert
msg_info "Setup OTS"
cat <<EOF >/opt/ots/.env
@ -31,14 +31,6 @@ STORAGE_TYPE=redis
EOF
msg_ok "Setup OTS"
msg_info "Generating Universal SSL Certificate"
mkdir -p /etc/ssl/ots
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/ots/key.pem \
-out /etc/ssl/ots/cert.pem \
-subj "/CN=ots"
msg_ok "Certificate Generated"
msg_info "Setting up nginx"
cat <<EOF >/etc/nginx/sites-available/ots.conf
server {
@ -52,8 +44,8 @@ server {
listen [::]:443 ssl;
server_name ots;
ssl_certificate /etc/ssl/ots/cert.pem;
ssl_certificate_key /etc/ssl/ots/key.pem;
ssl_certificate /etc/ssl/ots/ots.crt;
ssl_certificate_key /etc/ssl/ots/ots.key;
location / {
add_header X-Robots-Tag noindex;

View File

@ -22,29 +22,12 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql
msg_info "Set up PostgreSQL Database"
DB_NAME="outline"
DB_USER="outline"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
{
echo "Outline-Credentials"
echo "Outline Database User: $DB_USER"
echo "Outline Database Password: $DB_PASS"
echo "Outline Database Name: $DB_NAME"
} >>~/outline.creds
msg_ok "Set up PostgreSQL Database"
PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
import_local_ip
msg_info "Configuring Outline (Patience)"
SECRET_KEY="$(openssl rand -hex 32)"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cd /opt/outline
cp .env.sample .env
export NODE_ENV=development

View File

@ -13,10 +13,6 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y ca-certificates
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"

View File

@ -16,22 +16,17 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
gcc \
ca-certificates \
musl-dev \
mupdf \
libc6-dev \
musl-tools
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
NODE_VERSION="24" setup_nodejs
setup_go
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
msg_info "Setup Paperless-GPT"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file"
mv paperless-gpt-"${RELEASE}" /opt/paperless-gpt
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
@ -40,21 +35,19 @@ go mod download
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
rm -f "$temp_file"
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Setup Paperless-GPT"
mkdir -p /opt/paperless-gpt-data
read -p "${TAB3}Do you want to enter the Paperless local URL now? (y/n) " input_url
if [[ "$input_url" =~ ^[Yy]$ ]]; then
read -p "${TAB3}Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
read -rp "${TAB3}Do you want to enter the Paperless local URL now? (y/n) " input_url
if [[ $input_url =~ ^[Yy]$ ]]; then
read -rp "${TAB3}Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
else
PAPERLESS_BASE_URL="http://your_paperless_ngx_url"
fi
read -p "${TAB3}Do you want to enter the Paperless API token now? (y/n) " input_token
if [[ "$input_token" =~ ^[Yy]$ ]]; then
read -p "${TAB3}Enter your Paperless API token: " PAPERLESS_API_TOKEN
read -rp "${TAB3}Do you want to enter the Paperless API token now? (y/n) " input_token
if [[ $input_token =~ ^[Yy]$ ]]; then
read -rp "${TAB3}Enter your Paperless API token: " PAPERLESS_API_TOKEN
else
PAPERLESS_API_TOKEN="your_paperless_api_token"
fi

View File

@ -15,39 +15,20 @@ update_os
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="xsl,pgsql" setup_php
PG_DB_NAME="partdb" PG_DB_USER="partdb" setup_postgresql_db
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="xsl,pgsql" PHP_POST_MAX_SIZE="100M" PHP_UPLOAD_MAX_FILESIZE="100M" setup_php
setup_composer
msg_info "Setting up PHP"
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
sed -i "s@post_max_size = 8M@post_max_size = 100M@g" /etc/php/${PHPVER}/apache2/php.ini
sed -i "s@upload_max_filesize = 2M@upload_max_filesize = 100M@g" /etc/php/${PHPVER}/apache2/php.ini
msg_ok "Setting up PHP"
msg_info "Setting up PostgreSQL"
DB_NAME=partdb
DB_USER=partdb
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
{
echo "Part-DB Credentials"
echo "Part-DB Database User: $DB_USER"
echo "Part-DB Database Password: $DB_PASS"
echo "Part-DB Database Name: $DB_NAME"
} >>~/partdb.creds
msg_ok "Set up PostgreSQL"
msg_info "Installing Part-DB (Patience)"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
cd /opt/partdb/
cp .env .env.local
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev -o --no-interaction
@ -64,7 +45,7 @@ ADMIN_PASS=$(grep -oP 'The initial password for the "admin" user is: \K\w+' ~/da
} >>~/partdb.creds
rm -rf ~/database-migration-output
rm -rf "/opt/v${RELEASE}.zip"
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
echo "${RELEASE}" >~/.partdb
msg_ok "Installed Part-DB"
msg_info "Creating Service"

View File

@ -21,18 +21,18 @@ $STD apt install -y \
msg_ok "Installed dependencies"
setup_mariadb
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" MARIADB_DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)" setup_mariadb_db
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" setup_mariadb_db
create_self_signed_cert
import_local_ip
setup_deb822_repo \
"passbolt" \
"https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x3D1A0346C8E1802F774AEF21DE8B853FC155581D" \
"https://download.passbolt.com/ce/debian" \
"buster" \
"stable"
create_self_signed_cert "passbolt"
msg_info "Setting up Passbolt (Patience)"
export DEBIAN_FRONTEND=noninteractive
IP_ADDR=$(hostname -I | awk '{print $1}')
echo passbolt-ce-server passbolt/mysql-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-username string $MARIADB_DB_USER | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-password password $MARIADB_DB_PASS | debconf-set-selections
@ -40,7 +40,7 @@ echo passbolt-ce-server passbolt/mysql-passbolt-password-repeat password $MARIAD
echo passbolt-ce-server passbolt/mysql-passbolt-dbname string $MARIADB_DB_NAME | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration-three-choices select manual | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-domain string $IP_ADDR | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-domain string $LOCAL_IP | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-file string /etc/ssl/passbolt/passbolt.crt | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-key-file string /etc/ssl/passbolt/passbolt.key | debconf-set-selections
$STD apt install -y --no-install-recommends passbolt-ce-server

View File

@ -22,24 +22,9 @@ msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
PG_VERSION="17" setup_postgresql
msg_info "Setup PostgreSQL Database"
DB_NAME=patchmon_db
DB_USER=patchmon_usr
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
{
echo "PatchMon Credentials"
echo "PatchMon Database Name: $DB_NAME"
echo "PatchMon Database User: $DB_USER"
echo "PatchMon Database Password: $DB_PASS"
} >>~/patchmon.creds
msg_ok "Setup PostgreSQL Database"
PG_DB_NAME="patchmon_db" PG_DB_USER="patchmon_usr" setup_postgresql_db
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
import_local_ip
msg_info "Configuring PatchMon"
cd /opt/patchmon
@ -50,12 +35,10 @@ $STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/frontend
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
$STD npm run build
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cat <<EOF >/opt/patchmon/backend/.env
# Database Configuration
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME"
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
PM_DB_CONN_WAIT_INTERVAL=2
@ -272,7 +255,6 @@ async function updateSettings() {
updateSettings();
EOF
cd /opt/patchmon/backend
$STD node update-settings.js
msg_ok "Settings updated successfully"

View File

@ -20,24 +20,8 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
setup_mariadb
MARIADB_DB_NAME="plantit" MARIADB_DB_USER="plantit_usr" setup_mariadb_db
JAVA_VERSION="21" setup_java
msg_info "Setting up MariaDB"
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
DB_NAME=plantit
DB_USER=plantit_usr
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Plant-it Credentials"
echo "Plant-it Database User: $DB_USER"
echo "Plant-it Database Password: $DB_PASS"
echo "Plant-it Database Name: $DB_NAME"
} >>~/plant-it.creds
msg_ok "Set up MariaDB"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "0.10.0" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "0.10.0" "/opt/plant-it/frontend" "client.tar.gz"
@ -46,10 +30,10 @@ mkdir -p /opt/plant-it-data
cat <<EOF >/opt/plant-it/backend/server.env
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=$DB_USER
MYSQL_PSW=$DB_PASS
MYSQL_DATABASE=$DB_NAME
MYSQL_ROOT_PASSWORD=$DB_PASS
MYSQL_USERNAME=$MARIADB_DB_USER
MYSQL_PSW=$MARIADB_DB_PASS
MYSQL_DATABASE=$MARIADB_DB_NAME
MYSQL_ROOT_PASSWORD=$MARIADB_DB_PASS
JWT_SECRET=$JWT_SECRET
JWT_EXP=1
@ -86,7 +70,7 @@ Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now -q plant-it
systemctl enable -q --now plant-it
cat <<EOF >/etc/nginx/nginx.conf
events {

View File

@ -13,12 +13,8 @@ setting_up_container
network_check
update_os
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
if $STD mount | grep 'on / type zfs' >null && echo "ZFS"; then
msg_info "Enabling ZFS support."
@ -44,8 +40,8 @@ EOF
fi
msg_info "Installing Podman"
$STD apt -y install podman
$STD systemctl enable --now podman.socket
$STD apt install -y podman
systemctl enable -q --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman"
@ -97,7 +93,7 @@ $STD podman run -d \
podman generate systemd \
--new --name homeassistant \
>/etc/systemd/system/homeassistant.service
$STD systemctl enable --now homeassistant
systemctl enable -q --now homeassistant
msg_ok "Installed Home Assistant"
motd_ssh

View File

@ -13,12 +13,8 @@ setting_up_container
network_check
update_os
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
if $STD mount | grep 'on / type zfs' >null && echo "ZFS"; then
msg_info "Enabling ZFS support."
@ -44,8 +40,8 @@ EOF
fi
msg_info "Installing Podman"
$STD apt -y install podman
$STD systemctl enable --now podman.socket
$STD apt install -y podman
systemctl enable -q --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman"

View File

@ -20,16 +20,9 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_MODULE="common,fpm" setup_php
create_self_signed_cert
fetch_and_deploy_gh_release "privatebin" "PrivateBin/PrivateBin" "tarball"
msg_info "Generating Universal SSL Certificate"
mkdir -p /etc/ssl/privatebin
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/privatebin/key.pem \
-out /etc/ssl/privatebin/cert.pem \
-subj "/CN=PrivateBin"
msg_ok "Certificate Generated"
msg_info "Configuring Environment"
mkdir -p /opt/privatebin/data
cp /opt/privatebin/cfg/conf.sample.php /opt/privatebin/cfg/conf.php
@ -55,8 +48,8 @@ server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/privatebin/cert.pem;
ssl_certificate_key /etc/ssl/privatebin/key.pem;
ssl_certificate /etc/ssl/privatebin/privatebin.crt;
ssl_certificate_key /etc/ssl/privatebin/privatebin.key;
root /opt/privatebin;
index index.php;

View File

@ -15,31 +15,17 @@ update_os
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="pdo,mysql,gettext,fileinfo" setup_php
setup_mariadb
MARIADB_DB_NAME="projectsend" MARIADB_DB_USER="projectsend" setup_mariadb_db
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
msg_info "Setting up MariaDB"
DB_NAME=projectsend
DB_USER=projectsend
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "projectsend-Credentials"
echo "projectsend Database User: $DB_USER"
echo "projectsend Database Password: $DB_PASS"
echo "projectsend Database Name: $DB_NAME"
} >>~/projectsend.creds
msg_ok "Set up MariaDB"
msg_info "Installing ProjectSend"
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend
chmod 644 /opt/projectsend/includes/sys.config.php
sed -i -e "s/\(define('DB_NAME', \).*/\1'$DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$DB_PASS');/" \
sed -i -e "s/\(define('DB_NAME', \).*/\1'$MARIADB_DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$MARIADB_DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$MARIADB_DB_PASS');/" \
/opt/projectsend/includes/sys.config.php
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
-e "s/^\(post_max_size = \).*/\1 256M/" \

View File

@ -17,9 +17,7 @@ fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-ex
msg_info "Configuring Prometheus Paperless NGX Exporter"
mkdir -p /etc/prometheus-paperless-ngx-exporter
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
SECRET_AUTH_TOKEN
EOF
echo "SECRET_AUTH_TOKEN" >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
msg_ok "Configured Prometheus Paperless NGX Exporter"
msg_info "Creating Service"

View File

@ -27,7 +27,7 @@ msg_ok "Configured Recyclarr"
msg_info "Setting up Daily Sync Cron"
cat <<EOF >/etc/cron.d/recyclarr
# Run recyclarr sync daily
@daily root recyclarr sync >> /root/.config/recyclarr/sync.log 2>&1
@daily root /usr/local/bin/recyclarr sync >> /root/.config/recyclarr/sync.log 2>&1
EOF
chmod 644 /etc/cron.d/recyclarr
msg_ok "Setup Daily Sync Cron"

View File

@ -14,20 +14,17 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
git \
pip \
python3 \
python3-dev \
python3-pip
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
$STD apt install -y git
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
msg_info "Installing Tautulli"
cd /opt
$STD git clone https://github.com/Tautulli/Tautulli.git
$STD pip install -q -r /opt/Tautulli/requirements.txt
$STD pip install pyopenssl
cd /opt/Tautulli
uv venv -q
uv pip install -q -r requirements.txt
uv pip install -q pyopenssl
msg_ok "Installed Tautulli"
msg_info "Creating Service"
@ -41,7 +38,7 @@ WorkingDirectory=/opt/Tautulli/
Restart=on-failure
RestartSec=5
Type=simple
ExecStart=/usr/bin/python3 /opt/Tautulli/Tautulli.py
ExecStart=/opt/Tautulli/.venv/bin/python3 /opt/Tautulli/Tautulli.py
KillSignal=SIGINT
TimeoutStopSec=20
SyslogIdentifier=tautulli

View File

@ -3743,12 +3743,9 @@ create_lxc_container() {
msg_info "Searching for template '$TEMPLATE_SEARCH'"
# Build regex patterns outside awk/grep for clarity
SEARCH_PATTERN="^${TEMPLATE_SEARCH}"
mapfile -t LOCAL_TEMPLATES < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v search="${SEARCH_PATTERN}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
awk -v search="${TEMPLATE_SEARCH}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
sed 's|.*/||' | sort -t - -k 2 -V
)
@ -3757,7 +3754,7 @@ create_lxc_container() {
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 "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" | sort -t - -k 2 -V 2>/dev/null || true)
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=""
@ -3806,13 +3803,12 @@ create_lxc_container() {
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
PCT_OSVERSION="${AVAILABLE_VERSIONS[$((choice - 1))]}"
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION}"
SEARCH_PATTERN="^${TEMPLATE_SEARCH}-"
mapfile -t ONLINE_TEMPLATES < <(
pveam available -section system 2>/dev/null |
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
awk -F'\t' '{print $1}' |
grep -E "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" |
awk '{print $2}' |
grep -E "^${TEMPLATE_SEARCH}-.*${TEMPLATE_PATTERN}" |
sort -t - -k 2 -V 2>/dev/null || true
)
@ -3873,18 +3869,17 @@ create_lxc_container() {
# Retry template search with new version
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
SEARCH_PATTERN="^${TEMPLATE_SEARCH}-"
mapfile -t LOCAL_TEMPLATES < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v search="${SEARCH_PATTERN}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
awk -v search="${TEMPLATE_SEARCH}-" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
sed 's|.*/||' | sort -t - -k 2 -V
)
mapfile -t ONLINE_TEMPLATES < <(
pveam available -section system 2>/dev/null |
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
awk -F'\t' '{print $1}' |
grep -E "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" |
awk '{print $2}' |
grep -E "^${TEMPLATE_SEARCH}-.*${TEMPLATE_PATTERN}" |
sort -t - -k 2 -V 2>/dev/null || true
)
ONLINE_TEMPLATE=""

View File

@ -24,7 +24,7 @@ INSTALL_PATH="/opt/pihole-exporter"
CONFIG_PATH="/opt/pihole-exporter.env"
header_info
ensure_usr_local_bin_persist
get_current_ip &>/dev/null
import_local_ip
# ==============================================================================
# OS DETECTION
@ -195,7 +195,7 @@ UPDATEEOF
# ==============================================================================
header_info
ensure_usr_local_bin_persist
get_current_ip &>/dev/null
import_local_ip
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then