mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-24 05:55:55 +01:00
Compare commits
17 Commits
michelroeg
...
CrazyWolf1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf438f3fc4 | ||
|
|
53ee9403cd | ||
|
|
ed7e71f8c3 | ||
|
|
97d4b3ffc2 | ||
|
|
e226386c9d | ||
|
|
4e7e348322 | ||
|
|
0920d56218 | ||
|
|
071420c39a | ||
|
|
6a7bc481a4 | ||
|
|
11fb4743cc | ||
|
|
b2a710e673 | ||
|
|
49f1f16cba | ||
|
|
8005ddd74f | ||
|
|
2fead98966 | ||
|
|
09de4e9ca9 | ||
|
|
e1815642b2 | ||
|
|
75da6920d5 |
111
.github/workflows/stale_pr_close.yml
generated
vendored
Normal file
111
.github/workflows/stale_pr_close.yml
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
name: Stale PR Management
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
pull_request_target:
|
||||
types:
|
||||
- labeled
|
||||
|
||||
jobs:
|
||||
stale-prs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
issues: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Handle stale PRs
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const now = new Date();
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
// --- When stale label is added, comment immediately ---
|
||||
if (context.eventName === "pull_request_target" && context.payload.action === "labeled") {
|
||||
const label = context.payload.label?.name;
|
||||
if (label === "stale") {
|
||||
const author = context.payload.pull_request.user.login;
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: context.payload.pull_request.number,
|
||||
body: `@${author} This PR has been marked as stale. It will be closed if no new commits are added in 7 days.`
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// --- Scheduled run: check all stale PRs ---
|
||||
const { data: prs } = await github.rest.pulls.list({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
for (const pr of prs) {
|
||||
const hasStale = pr.labels.some(l => l.name === "stale");
|
||||
if (!hasStale) continue;
|
||||
|
||||
// Get timeline events to find when stale label was added
|
||||
const { data: events } = await github.rest.issues.listEvents({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
// Find the most recent time the stale label was added
|
||||
const staleLabelEvents = events
|
||||
.filter(e => e.event === "labeled" && e.label?.name === "stale")
|
||||
.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
|
||||
|
||||
if (staleLabelEvents.length === 0) continue;
|
||||
|
||||
const staleLabelDate = new Date(staleLabelEvents[0].created_at);
|
||||
const daysSinceStale = (now - staleLabelDate) / (1000 * 60 * 60 * 24);
|
||||
|
||||
// Check for new commits since stale label was added
|
||||
const { data: commits } = await github.rest.pulls.listCommits({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: pr.number
|
||||
});
|
||||
|
||||
const lastCommitDate = new Date(commits[commits.length - 1].commit.author.date);
|
||||
const author = pr.user.login;
|
||||
|
||||
// If there are new commits after the stale label, remove it
|
||||
if (lastCommitDate > staleLabelDate) {
|
||||
await github.rest.issues.removeLabel({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
name: "stale"
|
||||
});
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
body: `@${author} Recent activity detected. Removing stale label.`
|
||||
});
|
||||
}
|
||||
// If 7 days have passed since stale label, close the PR
|
||||
else if (daysSinceStale > 7) {
|
||||
await github.rest.pulls.update({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: pr.number,
|
||||
state: "closed"
|
||||
});
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
body: `@${author} Closing stale PR due to inactivity (no commits for 7 days after stale label).`
|
||||
});
|
||||
}
|
||||
}
|
||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -411,15 +411,26 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- SparkyFitness ([#12185](https://github.com/community-scripts/ProxmoxVE/pull/12185))
|
||||
- SeaweedFS ([#12220](https://github.com/community-scripts/ProxmoxVE/pull/12220))
|
||||
- Sonobarr ([#12221](https://github.com/community-scripts/ProxmoxVE/pull/12221))
|
||||
- SparkyFitness ([#12185](https://github.com/community-scripts/ProxmoxVE/pull/12185))
|
||||
- Frigate v16.4 [@MickLesk](https://github.com/MickLesk) ([#11887](https://github.com/community-scripts/ProxmoxVE/pull/11887))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- memos: unpin version due new release artifacts [@MickLesk](https://github.com/MickLesk) ([#12224](https://github.com/community-scripts/ProxmoxVE/pull/12224))
|
||||
- core: Enhance signal handling, reported "status" and logs [@MickLesk](https://github.com/MickLesk) ([#12216](https://github.com/community-scripts/ProxmoxVE/pull/12216))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- booklore v2: embed frontend, bump Java to 25, remove nginx [@MickLesk](https://github.com/MickLesk) ([#12223](https://github.com/community-scripts/ProxmoxVE/pull/12223))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove: Huntarr (deprecated & Security) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12226](https://github.com/community-scripts/ProxmoxVE/pull/12226))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
@@ -30,7 +30,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
if check_for_gh_release "booklore" "booklore-app/BookLore"; then
|
||||
JAVA_VERSION="21" setup_java
|
||||
JAVA_VERSION="25" setup_java
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setup_mariadb
|
||||
setup_yq
|
||||
@@ -60,11 +60,16 @@ function update_script() {
|
||||
$STD npm run build --configuration=production
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Embedding Frontend into Backend"
|
||||
mkdir -p /opt/booklore/booklore-api/src/main/resources/static
|
||||
cp -r /opt/booklore/booklore-ui/dist/booklore/browser/* /opt/booklore/booklore-api/src/main/resources/static/
|
||||
msg_ok "Embedded Frontend into Backend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
cd /opt/booklore/booklore-api
|
||||
APP_VERSION=$(get_latest_github_release "booklore-app/BookLore")
|
||||
yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
|
||||
$STD ./gradlew clean build --no-daemon
|
||||
$STD ./gradlew clean build -x test --no-daemon
|
||||
mkdir -p /opt/booklore/dist
|
||||
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
|
||||
if [[ -z "$JAR_PATH" ]]; then
|
||||
@@ -74,9 +79,22 @@ function update_script() {
|
||||
cp "$JAR_PATH" /opt/booklore/dist/app.jar
|
||||
msg_ok "Built Backend"
|
||||
|
||||
if systemctl is-active --quiet nginx 2>/dev/null; then
|
||||
msg_info "Removing Nginx (no longer needed)"
|
||||
systemctl disable --now nginx
|
||||
$STD apt-get purge -y nginx nginx-common
|
||||
msg_ok "Removed Nginx"
|
||||
fi
|
||||
|
||||
if ! grep -q "^SERVER_PORT=" /opt/booklore_storage/.env 2>/dev/null; then
|
||||
echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env
|
||||
fi
|
||||
|
||||
sed -i 's|ExecStart=/usr/bin/java -jar|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar|' /etc/systemd/system/booklore.service
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start booklore
|
||||
systemctl reload nginx
|
||||
rm -rf /opt/booklore_bak
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
__ __
|
||||
/ /_ __ ______ / /_____ ___________
|
||||
/ __ \/ / / / __ \/ __/ __ `/ ___/ ___/
|
||||
/ / / / /_/ / / / / /_/ /_/ / / / /
|
||||
/_/ /_/\__,_/_/ /_/\__/\__,_/_/ /_/
|
||||
|
||||
6
ct/headers/sonobarr
Normal file
6
ct/headers/sonobarr
Normal file
@@ -0,0 +1,6 @@
|
||||
__
|
||||
_________ ____ ____ / /_ ____ ___________
|
||||
/ ___/ __ \/ __ \/ __ \/ __ \/ __ `/ ___/ ___/
|
||||
(__ ) /_/ / / / / /_/ / /_/ / /_/ / / / /
|
||||
/____/\____/_/ /_/\____/_.___/\__,_/_/ /_/
|
||||
|
||||
@@ -27,12 +27,12 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "memos" "usememos/memos" "v0.25.3"; then
|
||||
if check_for_gh_release "memos" "usememos/memos"; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop memos
|
||||
msg_ok "Service stopped"
|
||||
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "v0.25.3" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start memos
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: BiluliB
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/plexguide/Huntarr.io
|
||||
# Source: https://github.com/seaweedfs/seaweedfs
|
||||
|
||||
APP="huntarr"
|
||||
var_tags="${var_tags:-arr}"
|
||||
APP="SeaweedFS"
|
||||
var_tags="${var_tags:-storage;s3;filesystem}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-16}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@@ -24,28 +25,20 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/huntarr/main.py ]]; then
|
||||
if [[ ! -f /opt/seaweedfs/weed ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
if check_for_gh_release "huntarr" "plexguide/Huntarr.io"; then
|
||||
if check_for_gh_release "seaweedfs" "seaweedfs/seaweedfs"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop huntarr
|
||||
systemctl stop seaweedfs
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
ensure_dependencies build-essential
|
||||
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io" "tarball"
|
||||
|
||||
msg_info "Updating Huntarr"
|
||||
cd /opt/huntarr
|
||||
$STD uv pip install -r requirements.txt --python /opt/huntarr/.venv/bin/python
|
||||
msg_ok "Updated Huntarr"
|
||||
fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start huntarr
|
||||
systemctl start seaweedfs
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
@@ -56,7 +49,7 @@ start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9705${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9333${CL}"
|
||||
63
ct/sonobarr.sh
Normal file
63
ct/sonobarr.sh
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: GoldenSpringness
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Dodelidoo-Labs/sonobarr
|
||||
|
||||
APP="sonobarr"
|
||||
var_tags="${var_tags:-music;discovery}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d "/opt/sonobarr" ]]; then
|
||||
msg_error "No sonobarr Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
if check_for_gh_release "sonobarr" "Dodelidoo-Labs/sonobarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop sonobarr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sonobarr" "Dodelidoo-Labs/sonobarr" "tarball"
|
||||
|
||||
msg_info "Updating sonobarr"
|
||||
$STD uv venv -c /opt/sonobarr/venv
|
||||
$STD source /opt/sonobarr/venv/bin/activate
|
||||
$STD uv pip install --no-cache-dir -r /opt/sonobarr/requirements.txt
|
||||
sed -i "/release_version/s/=.*/=$(cat ~/.sonobarr)/" /etc/sonobarr/.env
|
||||
msg_ok "Updated sonobarr"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start sonobarr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}sonobarr setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-02-23T12:14:19Z",
|
||||
"generated": "2026-02-23T18:26:09Z",
|
||||
"versions": [
|
||||
{
|
||||
"slug": "2fauth",
|
||||
@@ -25,9 +25,9 @@
|
||||
{
|
||||
"slug": "adventurelog",
|
||||
"repo": "seanmorley15/adventurelog",
|
||||
"version": "v0.11.0",
|
||||
"version": "v0.12.0",
|
||||
"pinned": false,
|
||||
"date": "2025-09-01T16:19:38Z"
|
||||
"date": "2026-02-23T14:06:45Z"
|
||||
},
|
||||
{
|
||||
"slug": "alpine-redlib",
|
||||
@@ -151,9 +151,9 @@
|
||||
{
|
||||
"slug": "booklore",
|
||||
"repo": "booklore-app/BookLore",
|
||||
"version": "v1.18.5",
|
||||
"version": "v2.0.0",
|
||||
"pinned": false,
|
||||
"date": "2026-01-24T17:15:32Z"
|
||||
"date": "2026-02-23T17:00:00Z"
|
||||
},
|
||||
{
|
||||
"slug": "bookstack",
|
||||
@@ -200,9 +200,9 @@
|
||||
{
|
||||
"slug": "cleanuparr",
|
||||
"repo": "Cleanuparr/Cleanuparr",
|
||||
"version": "v2.7.1",
|
||||
"version": "v2.7.3",
|
||||
"pinned": false,
|
||||
"date": "2026-02-23T09:58:13Z"
|
||||
"date": "2026-02-23T17:18:55Z"
|
||||
},
|
||||
{
|
||||
"slug": "cloudreve",
|
||||
@@ -228,9 +228,9 @@
|
||||
{
|
||||
"slug": "configarr",
|
||||
"repo": "raydak-labs/configarr",
|
||||
"version": "v1.22.0",
|
||||
"version": "v1.23.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-20T21:55:46Z"
|
||||
"date": "2026-02-23T12:28:13Z"
|
||||
},
|
||||
{
|
||||
"slug": "convertx",
|
||||
@@ -249,9 +249,9 @@
|
||||
{
|
||||
"slug": "cronicle",
|
||||
"repo": "jhuckaby/Cronicle",
|
||||
"version": "v0.9.106",
|
||||
"version": "v0.9.107",
|
||||
"pinned": false,
|
||||
"date": "2026-02-11T17:11:46Z"
|
||||
"date": "2026-02-23T17:48:27Z"
|
||||
},
|
||||
{
|
||||
"slug": "cronmaster",
|
||||
@@ -582,13 +582,6 @@
|
||||
"pinned": false,
|
||||
"date": "2025-12-23T14:53:51Z"
|
||||
},
|
||||
{
|
||||
"slug": "huntarr",
|
||||
"repo": "plexguide/Huntarr.io",
|
||||
"version": "9.4.1",
|
||||
"pinned": false,
|
||||
"date": "2026-02-23T08:46:37Z"
|
||||
},
|
||||
{
|
||||
"slug": "immich-public-proxy",
|
||||
"repo": "alangrainger/immich-public-proxy",
|
||||
@@ -865,9 +858,9 @@
|
||||
{
|
||||
"slug": "memos",
|
||||
"repo": "usememos/memos",
|
||||
"version": "v0.25.3",
|
||||
"pinned": true,
|
||||
"date": "2025-11-25T15:40:41Z"
|
||||
"version": "v0.26.2",
|
||||
"pinned": false,
|
||||
"date": "2026-02-23T13:28:34Z"
|
||||
},
|
||||
{
|
||||
"slug": "metube",
|
||||
@@ -1124,9 +1117,9 @@
|
||||
{
|
||||
"slug": "planka",
|
||||
"repo": "plankanban/planka",
|
||||
"version": "v2.0.1",
|
||||
"version": "v2.0.2",
|
||||
"pinned": false,
|
||||
"date": "2026-02-17T15:26:55Z"
|
||||
"date": "2026-02-23T17:47:15Z"
|
||||
},
|
||||
{
|
||||
"slug": "plant-it",
|
||||
@@ -1250,9 +1243,9 @@
|
||||
{
|
||||
"slug": "qui",
|
||||
"repo": "autobrr/qui",
|
||||
"version": "v1.14.0",
|
||||
"version": "v1.14.1",
|
||||
"pinned": false,
|
||||
"date": "2026-02-21T22:23:46Z"
|
||||
"date": "2026-02-23T13:13:31Z"
|
||||
},
|
||||
{
|
||||
"slug": "radarr",
|
||||
@@ -1411,9 +1404,9 @@
|
||||
{
|
||||
"slug": "snowshare",
|
||||
"repo": "TuroYT/snowshare",
|
||||
"version": "v1.3.6",
|
||||
"version": "v1.3.7",
|
||||
"pinned": false,
|
||||
"date": "2026-02-19T11:06:29Z"
|
||||
"date": "2026-02-23T15:51:39Z"
|
||||
},
|
||||
{
|
||||
"slug": "sonarr",
|
||||
@@ -1422,6 +1415,13 @@
|
||||
"pinned": false,
|
||||
"date": "2025-11-05T01:56:48Z"
|
||||
},
|
||||
{
|
||||
"slug": "sonobarr",
|
||||
"repo": "Dodelidoo-Labs/sonobarr",
|
||||
"version": "0.11.0",
|
||||
"pinned": false,
|
||||
"date": "2026-01-21T19:07:21Z"
|
||||
},
|
||||
{
|
||||
"slug": "speedtest-tracker",
|
||||
"repo": "alexjustesen/speedtest-tracker",
|
||||
@@ -1558,9 +1558,9 @@
|
||||
{
|
||||
"slug": "traefik",
|
||||
"repo": "traefik/traefik",
|
||||
"version": "v3.6.8",
|
||||
"version": "v3.6.9",
|
||||
"pinned": false,
|
||||
"date": "2026-02-11T16:44:37Z"
|
||||
"date": "2026-02-23T17:21:17Z"
|
||||
},
|
||||
{
|
||||
"slug": "trilium",
|
||||
@@ -1572,9 +1572,9 @@
|
||||
{
|
||||
"slug": "trip",
|
||||
"repo": "itskovacs/TRIP",
|
||||
"version": "1.40.0",
|
||||
"version": "1.41.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-10T20:12:53Z"
|
||||
"date": "2026-02-23T17:57:31Z"
|
||||
},
|
||||
{
|
||||
"slug": "tududi",
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"name": "Huntarr",
|
||||
"slug": "huntarr",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2025-06-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9705,
|
||||
"documentation": "https://github.com/plexguide/Huntarr.io/wiki",
|
||||
"config_path": "/opt/huntarr",
|
||||
"website": "https://github.com/plexguide/Huntarr.io",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/huntarr.webp",
|
||||
"description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.",
|
||||
"disable": false,
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/huntarr.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
48
frontend/public/json/seaweedfs.json
Normal file
48
frontend/public/json/seaweedfs.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "SeaweedFS",
|
||||
"slug": "seaweedfs",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2026-02-23",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9333,
|
||||
"documentation": "https://github.com/seaweedfs/seaweedfs/wiki",
|
||||
"website": "https://seaweedfs.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/seaweedfs.webp",
|
||||
"config_path": "",
|
||||
"description": "SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lakes, with O(1) disk seek, S3 API, FUSE mount, WebDAV, and cloud tiering support.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/seaweedfs.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 16,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Master UI available at port 9333, Filer UI at port 8888, S3 API at port 8333.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Data is stored in /opt/seaweedfs-data.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "FUSE mounting requires fuse3 (pre-installed).",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
40
frontend/public/json/sonobarr.json
Normal file
40
frontend/public/json/sonobarr.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "Sonobarr",
|
||||
"slug": "sonobarr",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2026-02-23",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 5000,
|
||||
"documentation": "https://github.com/Dodelidoo-Labs/sonobarr",
|
||||
"config_path": "/etc/sonobarr/.env",
|
||||
"website": "https://github.com/Dodelidoo-Labs/sonobarr",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/sonobarr.webp",
|
||||
"description": "Sonobarr marries your existing Lidarr library with Last.fm’s discovery graph to surface artists you'll actually like. It runs as a Flask + Socket.IO application, ships with a polished Bootstrap UI, and includes admin tooling so folks can share a single instance safely.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/sonobarr.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Default generated admin password is in the env file (sonobarr_superadmin_password)",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -13,11 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
JAVA_VERSION="21" setup_java
|
||||
JAVA_VERSION="25" setup_java
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setup_mariadb
|
||||
setup_yq
|
||||
@@ -30,6 +26,11 @@ $STD npm install --force
|
||||
$STD npm run build --configuration=production
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Embedding Frontend into Backend"
|
||||
mkdir -p /opt/booklore/booklore-api/src/main/resources/static
|
||||
cp -r /opt/booklore/booklore-ui/dist/booklore/browser/* /opt/booklore/booklore-api/src/main/resources/static/
|
||||
msg_ok "Embedded Frontend into Backend"
|
||||
|
||||
msg_info "Creating Environment"
|
||||
mkdir -p /opt/booklore_storage/{data,books,bookdrop}
|
||||
cat <<EOF >/opt/booklore_storage/.env
|
||||
@@ -41,6 +42,7 @@ DATABASE_PASSWORD=${MARIADB_DB_PASS}
|
||||
# App Configuration (Spring Boot mapping from app.* properties)
|
||||
APP_PATH_CONFIG=/opt/booklore_storage/data
|
||||
APP_BOOKDROP_FOLDER=/opt/booklore_storage/bookdrop
|
||||
SERVER_PORT=6060
|
||||
EOF
|
||||
msg_ok "Created Environment"
|
||||
|
||||
@@ -48,7 +50,7 @@ msg_info "Building Backend"
|
||||
cd /opt/booklore/booklore-api
|
||||
APP_VERSION=$(get_latest_github_release "booklore-app/BookLore")
|
||||
yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
|
||||
$STD ./gradlew clean build --no-daemon
|
||||
$STD ./gradlew clean build -x test --no-daemon
|
||||
mkdir -p /opt/booklore/dist
|
||||
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
|
||||
if [[ -z "$JAR_PATH" ]]; then
|
||||
@@ -58,16 +60,6 @@ fi
|
||||
cp "$JAR_PATH" /opt/booklore/dist/app.jar
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
rm -rf /usr/share/nginx/html
|
||||
ln -s /opt/booklore/booklore-ui/dist/booklore/browser /usr/share/nginx/html
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
cp /opt/booklore/nginx.conf /etc/nginx/nginx.conf
|
||||
sed -i 's/listen \${BOOKLORE_PORT};/listen 6060;/' /etc/nginx/nginx.conf
|
||||
sed -i 's/listen \[::\]:${BOOKLORE_PORT};/listen [::]:6060;/' /etc/nginx/nginx.conf
|
||||
systemctl restart nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/booklore.service
|
||||
[Unit]
|
||||
@@ -78,7 +70,7 @@ After=network.target mariadb.service
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/booklore/dist
|
||||
ExecStart=/usr/bin/java -jar /opt/booklore/dist/app.jar
|
||||
ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar /opt/booklore/dist/app.jar
|
||||
EnvironmentFile=/opt/booklore_storage/.env
|
||||
SuccessExitStatus=143
|
||||
TimeoutStopSec=10
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: BiluliB
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/plexguide/Huntarr.io
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io" "tarball"
|
||||
|
||||
msg_info "Configure Huntarr"
|
||||
$STD uv venv --clear /opt/huntarr/.venv
|
||||
$STD uv pip install --python /opt/huntarr/.venv/bin/python -r /opt/huntarr/requirements.txt
|
||||
msg_ok "Configured Huntrarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/huntarr.service
|
||||
[Unit]
|
||||
Description=Huntarr Service
|
||||
After=network.target
|
||||
[Service]
|
||||
WorkingDirectory=/opt/huntarr
|
||||
ExecStart=/opt/huntarr/.venv/bin/python /opt/huntarr/main.py
|
||||
Restart=always
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now huntarr
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -14,7 +14,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "v0.25.3" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
mkdir -p /opt/memos_data
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
50
install/seaweedfs-install.sh
Normal file
50
install/seaweedfs-install.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/seaweedfs/seaweedfs
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y fuse3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Setting up SeaweedFS"
|
||||
mkdir -p /opt/seaweedfs-data
|
||||
ln -sf /opt/seaweedfs/weed /usr/local/bin/weed
|
||||
msg_ok "Set up SeaweedFS"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/seaweedfs.service
|
||||
[Unit]
|
||||
Description=SeaweedFS Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/seaweedfs
|
||||
ExecStart=/opt/seaweedfs/weed server -dir=/opt/seaweedfs-data -master.port=9333 -volume.port=8080 -filer -s3
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
LimitNOFILE=65536
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now seaweedfs
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
52
install/sonobarr-install.sh
Normal file
52
install/sonobarr-install.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: GoldenSpringness
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Dodelidoo-Labs/sonobarr
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "sonobarr" "Dodelidoo-Labs/sonobarr" "tarball"
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Setting up sonobarr"
|
||||
$STD uv venv -c /opt/sonobarr/venv
|
||||
source /opt/sonobarr/venv/bin/activate
|
||||
$STD uv pip install --no-cache-dir -r /opt/sonobarr/requirements.txt
|
||||
mkdir -p /etc/sonobarr
|
||||
mv /opt/sonobarr/.sample-env /etc/sonobarr/.env
|
||||
sed -i "s/^secret_key=.*/secret_key=$(openssl rand -hex 16)/" /etc/sonobarr/.env
|
||||
sed -i "s/^sonobarr_superadmin_password=.*/sonobarr_superadmin_password=$(openssl rand -hex 16)/" /etc/sonobarr/.env
|
||||
echo "release_version=$(cat ~/.sonobarr)" >>/etc/sonobarr/.env
|
||||
echo "sonobarr_config_dir=/etc/sonobarr" >>/etc/sonobarr.env
|
||||
msg_ok "Set up sonobarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/sonobarr.service
|
||||
[Unit]
|
||||
Description=sonobarr Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/sonobarr/src
|
||||
EnvironmentFile=/etc/sonobarr/.env
|
||||
Environment="PATH=/opt/sonobarr/venv/bin"
|
||||
ExecStart=/bin/bash -c 'gunicorn Sonobarr:app -c ../gunicorn_config.py'
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now sonobarr
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
Reference in New Issue
Block a user