1 Commits

Author SHA1 Message Date
michel.roegl-brunner
6bfd19484d Update CHANGELOG.md 2025-05-14 10:43:02 +02:00
151 changed files with 2753 additions and 5165 deletions

View File

@@ -25,13 +25,6 @@ jobs:
app-id: ${{ vars.APP_ID }} app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
# Step 1: Checkout repository # Step 1: Checkout repository
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v2
@@ -98,17 +91,14 @@ jobs:
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
fi fi
- name: Approve pull request and merge - name: Re-approve pull request after update
if: env.changed == 'true' if: env.changed == 'true'
env: env:
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
git config --global user.name "github-actions-automege[bot]" PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review "$PR_NUMBER" --approve gh pr review $PR_NUMBER --approve
gh pr merge "$PR_NUMBER" --squash --admin
fi fi
# Step 8: Output success message when no changes # Step 8: Output success message when no changes

View File

@@ -80,25 +80,7 @@ jobs:
VAR+="${{ github.event.issue.html_url }}" VAR+="${{ github.event.issue.html_url }}"
echo "message=$VAR" >> $GITHUB_ENV echo "message=$VAR" >> $GITHUB_ENV
- name: Check if Discord thread exists
id: check_thread
run: |
ISSUE_TITLE="${{ github.event.issue.title }}"
THREAD_ID=$(curl -s -X GET "https://discord.com/api/v10/guilds/${{ secrets.DISCORD_GUILD_ID }}/threads/active" \
-H "Authorization: Bot ${{ secrets.DISCORD_BOT_TOKEN }}" \
-H "Content-Type: application/json" | \
jq -r --arg TITLE "$ISSUE_TITLE" --arg PARENT_ID "${{ secrets.DISCORD_CHANNEL_ID }}" \
'.threads[] | select(.parent_id == $PARENT_ID and .name == ("Wanted Tester for " + $TITLE)) | .id')
if [ -n "$THREAD_ID" ]; then
echo "thread_exists=true" >> "$GITHUB_OUTPUT"
else
echo "thread_exists=false" >> "$GITHUB_OUTPUT"
fi
- name: Create a forumpost in Discord - name: Create a forumpost in Discord
if: steps.check_thread.outputs.thread_exists != 'true'
id: post_to_discord id: post_to_discord
env: env:
DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }} DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }}
@@ -124,7 +106,6 @@ jobs:
fi fi
- name: Comment on Issue - name: Comment on Issue
if: steps.check_thread.outputs.thread_exists != 'true'
id: comment_on_issue id: comment_on_issue
env: env:
MESSAGE: ${{ env.message }} MESSAGE: ${{ env.message }}

View File

@@ -14,13 +14,6 @@ jobs:
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
- name: Extract Issue Title (Lowercase & Underscores) - name: Extract Issue Title (Lowercase & Underscores)
id: extract_title id: extract_title
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
@@ -59,7 +52,7 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
$branch="delete_files" branch=$(echo "delete-files_${{ github.event.issue.number }}_${TITLE}" | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')
git config --global user.name "github-actions[bot]" git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com" git config --global user.email "github-actions[bot]@users.noreply.github.com"
git checkout -b $branch git checkout -b $branch
@@ -72,26 +65,13 @@ jobs:
exit 0 exit 0
fi fi
git commit -m "Deleted files for issue: ${{ github.event.issue.title }}" git commit -m "Deleted files for issue: ${{ github.event.issue.title }}"
git push origin $branch --force git push origin $branch
gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch
pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}') pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}')
#gh pr merge $pr_number --squash #gh pr merge $pr_number --squash
echo pr_number=$pr_number >> $GITHUB_ENV echo pr_number=$pr_number >> $GITHUB_ENV
- name: Approve pull request and merge
if: env.changed == 'true'
env:
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: |
git config --global user.name "github-actions-automege[bot]"
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin
fi
- name: Comment on Issue - name: Comment on Issue
uses: actions/github-script@v7 uses: actions/github-script@v7
with: with:

View File

@@ -29,13 +29,6 @@ jobs:
app-id: ${{ vars.APP_ID }} app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Generate a token for PR approval and merge
id: generate-token-merge
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
- name: Crawl from newreleases.io - name: Crawl from newreleases.io
env: env:
token: ${{ secrets.NEWRELEASES_TOKEN }} token: ${{ secrets.NEWRELEASES_TOKEN }}
@@ -117,12 +110,10 @@ jobs:
- name: Approve pull request and merge - name: Approve pull request and merge
if: env.changed == 'true' if: env.changed == 'true'
env: env:
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }} GH_TOKEN: ${{ secrets.PAT_MICHEL }}
run: | run: |
git config --global user.name "github-actions-automege[bot]" PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review "$PR_NUMBER" --approve gh pr review $PR_NUMBER --approve
gh pr merge "$PR_NUMBER" --squash --admin gh pr merge $PR_NUMBER --squash --delete-branch --admin
fi fi

View File

@@ -133,6 +133,10 @@ jobs:
echo "install file already exists in ProxmoxVE" echo "install file already exists in ProxmoxVE"
exit 1 exit 1
fi fi
if [[ -f "frontend/public/json/${script_name}.json" ]]; then
echo "json file already exists in ProxmoxVE"
exit 1
fi
git checkout -b "$branch_name" git checkout -b "$branch_name"
@@ -153,13 +157,10 @@ jobs:
cp ../frontend/public/json/$json_file frontend/public/json/. || true cp ../frontend/public/json/$json_file frontend/public/json/. || true
fi fi
echo $script_name sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|' ct/$script_name.sh
sed -i "s|https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' ct/$script_name.sh
sed -i "s|https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' install/$script_name-install.sh
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" ct/$script_name.sh git add .
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" install/$script_name-install.sh
git add . > /dev/null 2>&1
if git diff --cached --exit-code; then if git diff --cached --exit-code; then
echo "No changes detected, skipping commit." echo "No changes detected, skipping commit."
exit 0 exit 0

View File

@@ -1,31 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Function for generating Figlet headers # Base directory for headers
generate_headers() { headers_dir="./ct/headers"
local base_dir=$1
local target_subdir=$2
local search_pattern=$3
local headers_dir="${base_dir}/headers" # Ensure the headers directory exists and clear it
mkdir -p "$headers_dir" mkdir -p "$headers_dir"
rm -f "$headers_dir"/* rm -f "$headers_dir"/*
# Recursive or non-recursive search # Find all .sh files in ./ct directory, sorted alphabetically
if [[ "$search_pattern" == "**" ]]; then find ./ct -type f -name "*.sh" | sort | while read -r script; do
shopt -s globstar nullglob # Extract the APP name from the APP line
file_list=("${base_dir}"/**/*.sh)
shopt -u globstar
else
file_list=("${base_dir}"/*.sh)
fi
for script in "${file_list[@]}"; do
[[ -f "$script" ]] || continue
app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null) app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
if [[ -n "$app_name" ]]; then if [[ -n "$app_name" ]]; then
# Define the output file name in the headers directory
output_file="${headers_dir}/$(basename "${script%.*}")" output_file="${headers_dir}/$(basename "${script%.*}")"
# Generate figlet output
figlet_output=$(figlet -w 500 -f slant "$app_name") figlet_output=$(figlet -w 500 -f slant "$app_name")
# Check if figlet output is not empty
if [[ -n "$figlet_output" ]]; then if [[ -n "$figlet_output" ]]; then
echo "$figlet_output" > "$output_file" echo "$figlet_output" > "$output_file"
echo "Generated: $output_file" echo "Generated: $output_file"
@@ -36,15 +30,5 @@ generate_headers() {
echo "No APP name found in $script, skipping." echo "No APP name found in $script, skipping."
fi fi
done done
}
# ct echo "Completed processing .sh files."
generate_headers "./ct" "headers" "*"
# tools (addon, pve, ...)
generate_headers "./tools" "headers" "**"
# vm
generate_headers "./vm" "headers" "*"
echo "Completed processing all sections."

View File

@@ -7,76 +7,6 @@
<h3 align="center">All notable changes to this project will be documented in this file.</h3> <h3 align="center">All notable changes to this project will be documented in this file.</h3>
## 2025-05-14
### 🆕 New Scripts
- odoo ([#4477](https://github.com/community-scripts/ProxmoxVE/pull/4477))
- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
- asterisk ([#4468](https://github.com/community-scripts/ProxmoxVE/pull/4468))
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
### 🚀 Updated Scripts
- fix: fetch_release_and_deploy function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4478](https://github.com/community-scripts/ProxmoxVE/pull/4478))
- Website: re-add documenso & some little bugfixes [@MickLesk](https://github.com/MickLesk) ([#4456](https://github.com/community-scripts/ProxmoxVE/pull/4456))
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
- #### 🐞 Bug Fixes
- Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) [@MickLesk](https://github.com/MickLesk) ([#4313](https://github.com/community-scripts/ProxmoxVE/pull/4313))
- Bookstack: fix copy of themes/uploads/storage [@MickLesk](https://github.com/MickLesk) ([#4457](https://github.com/community-scripts/ProxmoxVE/pull/4457))
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
- Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
- Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
- Alpine-Rclone: Fix location of passwords file [@tremor021](https://github.com/tremor021) ([#4465](https://github.com/community-scripts/ProxmoxVE/pull/4465))
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
- (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
- #### ✨ New Features
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
- Feature: get correct next VMID [@MickLesk](https://github.com/MickLesk) ([#4292](https://github.com/community-scripts/ProxmoxVE/pull/4292))
- HomeAssistant-Core: update script for 2025.5+ [@MickLesk](https://github.com/MickLesk) ([#4363](https://github.com/community-scripts/ProxmoxVE/pull/4363))
- Feature: autologin for Alpine [@MickLesk](https://github.com/MickLesk) ([#4344](https://github.com/community-scripts/ProxmoxVE/pull/4344))
- monitor-all: improvements - tag based filtering [@grizmin](https://github.com/grizmin) ([#4437](https://github.com/community-scripts/ProxmoxVE/pull/4437))
- Make apt-cacher-ng a client of its own server [@pgcudahy](https://github.com/pgcudahy) ([#4092](https://github.com/community-scripts/ProxmoxVE/pull/4092))
- #### 🔧 Refactor
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
### 🧰 Maintenance
- #### 💾 Core
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
- fix: detect all bridge types, not just vmbr prefix [@filippolauria](https://github.com/filippolauria) ([#4351](https://github.com/community-scripts/ProxmoxVE/pull/4351))
- #### 📂 Github
- Add Github app for auto PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4461](https://github.com/community-scripts/ProxmoxVE/pull/4461))
### 🌐 Website
- FAQ: Explanation "updatable" [@tremor021](https://github.com/tremor021) ([#4300](https://github.com/community-scripts/ProxmoxVE/pull/4300))
- #### 📝 Script Information
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
- Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
## 2025-03-24 ## 2025-03-24
### 🆕 New Scripts ### 🆕 New Scripts
@@ -104,7 +34,7 @@
- GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313)) - GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313))
- GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303)) - GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303))
- Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232)) - Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232))
- Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.cooxVE/pull/3245)) - Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.com/community-scripts/ProxmoxVE/pull/3245))
- TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160)) - TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160))
- #### ✨ New Features - #### ✨ New Features

88
ct/alpine-bitmagnet.sh Normal file
View File

@@ -0,0 +1,88 @@
#!/usr/bin/env bash
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet-io/bitmagnet
APP="Alpine-bitmagnet"
var_tags="${var_tags:-alpine;torrent}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-3}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /opt/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
msg_info "Backing up database"
rm -f /tmp/backup.sql
$STD sudo -u postgres pg_dump \
--column-inserts \
--data-only \
--on-conflict-do-nothing \
--rows-per-insert=1000 \
--table=metadata_sources \
--table=content \
--table=content_attributes \
--table=content_collections \
--table=content_collections_content \
--table=torrent_sources \
--table=torrents \
--table=torrent_files \
--table=torrent_hints \
--table=torrent_contents \
--table=torrent_tags \
--table=torrents_torrent_sources \
--table=key_values \
bitmagnet \
>/tmp/backup.sql
mv /tmp/backup.sql /opt/
msg_ok "Database backed up"
msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
$STD apk -U upgrade
$STD service bitmagnet stop
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
rm -rf /opt/bitmagnet/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
$STD go build
chmod +x bitmagnet
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
$STD service bitmagnet start
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
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 it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3333${CL}"

View File

@@ -1,114 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://homarr.dev/
APP="alpine-homarr"
var_tags="${var_tags:-arr;dashboard}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-8}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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
msg_info "Stopping Services (Patience)"
systemctl stop homarr
msg_ok "Services Stopped"
msg_info "Backup Data"
mkdir -p /opt/homarr-data-backup
cp /opt/homarr/.env /opt/homarr-data-backup/.env
msg_ok "Backup Data"
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
rm /opt/run_homarr.sh
cat <<'EOF' >/opt/run_homarr.sh
#!/bin/bash
set -a
source /opt/homarr/.env
set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &
redis-server /opt/homarr/packages/redis/redis.conf &
node apps/tasks/tasks.cjs &
node apps/websocket/wssServer.cjs &
node apps/nextjs/server.js & PID=$!
wait $PID
EOF
chmod +x /opt/run_homarr.sh
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
install_node_and_modules
rm -rf /opt/homarr
fetch_and_deploy_gh_release "homarr-labs/homarr"
mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr
echo "test2"
export NODE_ENV=""
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
$STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json .
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
mkdir -p /appdata/redis
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
rm /etc/nginx/nginx.conf
mkdir -p /etc/nginx/templates
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
mkdir -p /opt/homarr/apps/cli
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
chmod +x /usr/bin/homarr
mkdir /opt/homarr/build
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Services"
systemctl start homarr
msg_ok "Started Services"
msg_ok "Updated Successfully"
read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
reboot
fi
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"

View File

@@ -1,53 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://release-argus.io/
APP="Argus"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/argus ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
rm -f /opt/argus/Argus
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
chmod +x /opt/argus/Argus
systemctl restart argus
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

39
ct/asterisk.sh Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://asterisk.org/
APP="Asterisk"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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 /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "No Update function provided for ${APP} LXC"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@@ -23,57 +23,16 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/babybuddy ]]; then if [[ ! -d /opt/maxun ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/xxxxx/xxxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/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 [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
setup_uv
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop nginx systemctl stop APP
systemctl stop uwsgi
msg_ok "Services Stopped" msg_ok "Services Stopped"
msg_info "Cleaning old files"
cp babybuddy/settings/production.py /tmp/production.py.bak
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
msg_ok "Cleaned old files"
msg_info "Updating ${APP} to v${RELEASE}"
temp_file=$(mktemp)
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
cd /opt/babybuddy
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
mv /tmp/production.py.bak babybuddy/settings/production.py
cd /opt/babybuddy
source .venv/bin/activate
$STD uv pip install -r requirements.txt
$STD python manage.py migrate
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Fixing permissions"
chown -R www-data:www-data /opt/data
chmod 640 /opt/data/db.sqlite3
chmod 750 /opt/data
msg_ok "Permissions fixed"
msg_info "Starting Services"
systemctl start uwsgi
systemctl start nginx
msg_ok "Services Started"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit
} }
start start
@@ -83,4 +42,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -1,63 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: ksad (enirys31)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://garethgeorge.github.io/backrest/
APP="Backrest"
var_tags="${var_tags:-backup}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/backrest ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/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
msg_info "Stopping ${APP}"
systemctl stop backrest
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}"
cd /opt/backrest/bin
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "backrest_Linux_x86_64.tar.gz"
tar -xzf backrest_Linux_x86_64.tar.gz
rm -rf backrest_Linux_x86_64.tar.gz
rm -f install.sh uninstall.sh
chmod +x backrest
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP}"
systemctl start backrest
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9898${CL}"

View File

@@ -48,13 +48,13 @@ function update_script() {
cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
cd /opt/bar-assistant cd /opt/bar-assistant
composer install composer install
$STD php artisan migrate --force php artisan migrate --force
$STD php artisan storage:link php artisan storage:link
$STD php artisan bar:setup-meilisearch php artisan bar:setup-meilisearch
$STD php artisan scout:sync-index-settings php artisan scout:sync-index-settings
$STD php artisan config:cache php artisan config:cache
$STD php artisan route:cache php artisan route:cache
$STD php artisan event:cache php artisan event:cache
echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}" msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}"

View File

@@ -1,66 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: finkerle
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/raydak-labs/configarr
APP="Configarr"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/configarr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/raydak-labs/configarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/configarr_version.txt)" ]] || [[ ! -f /opt/configarr_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop configarr-task.timer
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
mkdir -p /opt/backup/
mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
rm -rf /opt/configarr
fetch_and_deploy_gh_release "raydak-labs/configarr"
mv /opt/backup/* /opt/configarr/
cd /opt/configarr
$STD pnpm install
$STD pnpm run build
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start configarr-task.timer
msg_ok "Started configarr"
rm -rf /opt/backup
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL (no web-ui):${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8989${CL}"

View File

@@ -126,24 +126,19 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
exit 206 exit 206
fi fi
# # Get template storage
# TEMPLATE_STORAGE=$(select_storage template)
# CONTAINER_STORAGE=$(select_storage container) || exit
# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}Container Storage: ${BL}$CONTAINER_STORAGE${CL}."
# Get template storage # Get template storage
TEMPLATE_STORAGE=$(select_storage template) TEMPLATE_STORAGE=$(select_storage template) || exit
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
# Get container storage # Get container storage
CONTAINER_STORAGE=$(select_storage container) CONTAINER_STORAGE=$(select_storage container) || exit
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# Update LXC template list # Update LXC template list
$STD msg_info "Updating LXC Template List" msg_info "Updating LXC Template List"
#check_network #check_network
pveam update >/dev/null pveam update >/dev/null
$STD msg_ok "Updated LXC Template List" msg_ok "Updated LXC Template List"
# Get LXC template string # Get LXC template string
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-} TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
@@ -187,54 +182,29 @@ grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgi
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}") [[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
# Secure creation of the LXC container with lock and template check
lockfile="/tmp/template.${TEMPLATE}.lock"
exec 9>"$lockfile"
flock -w 60 9 || {
msg_error "Timeout while waiting for template lock"
exit 211
}
msg_info "Creating LXC Container" msg_info "Creating LXC Container"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "Container creation failed. Checking if template is corrupted or incomplete." msg_error "Container creation failed. Checking if template is corrupted."
if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH")" -lt 1000000 ]]; then if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_error "Template file too small or missing re-downloading." msg_error "Template appears to be corrupted. Removing and re-downloading."
rm -f "$TEMPLATE_PATH" rm -f "$TEMPLATE_PATH"
elif ! zstdcat "$TEMPLATE_PATH" | tar -tf - &>/dev/null; then
msg_error "Template appears to be corrupted re-downloading."
rm -f "$TEMPLATE_PATH"
else
msg_error "Template is valid, but container creation still failed."
exit 209
fi
# Retry download if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
for attempt in {1..3}; do msg_error "Failed to re-download template."
msg_info "Attempt $attempt: Re-downloading template..."
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
msg_ok "Template re-download successful."
break
fi
if [ "$attempt" -eq 3 ]; then
msg_error "Three failed attempts. Aborting."
exit 208 exit 208
fi fi
sleep $((attempt * 5))
done
sleep 1 # I/O-Sync-Delay msg_ok "Re-downloaded LXC Template"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "Container creation failed after re-downloading template." msg_error "Container creation failed after re-downloading template."
exit 200 exit 200
fi fi
else
msg_error "Container creation failed, but template is not corrupted."
exit 209
fi fi
if ! pct status "$CTID" &>/dev/null; then
msg_error "Container not found after pct create assuming failure."
exit 210
fi fi
: "${UDHCPC_FIX:=}" : "${UDHCPC_FIX:=}"
if [ "$UDHCPC_FIX" == "yes" ]; then if [ "$UDHCPC_FIX" == "yes" ]; then

View File

@@ -13,8 +13,6 @@ var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_fuse="${var_fuse:-yes}"
var_tun="${var_tun:-yes}"
header_info "$APP" header_info "$APP"
variables variables
@@ -42,12 +40,3 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
read -p "Remove this Container? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
pct stop "$CTID"
pct destroy "$CTID"
msg_ok "Removed this script"
else
msg_warn "Did not remove this script"
fi

View File

@@ -6,10 +6,10 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
# Source: https://www.freepbx.org/ # Source: https://www.freepbx.org/
APP="FreePBX" APP="FreePBX"
var_tags="pbx;voip;telephony" var_tags=""
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-10}" var_disk="${var_disk:-20}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -24,6 +24,7 @@ function update_script() {
check_container_storage check_container_storage
check_container_resources check_container_resources
# Check if installation is present | -f for file, -d for folder
if [[ ! -f /lib/systemd/system/freepbx.service ]]; then if [[ ! -f /lib/systemd/system/freepbx.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit

View File

@@ -1,101 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/raw/main/garmin-grafana/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: aliaksei135
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/arpanghosh8453/garmin-grafana
APP="garmin-grafana"
var_tags="${var_tags:-sports;visualization}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
# this only updates garmin-grafana, not influxdb or grafana, which are upgraded with apt
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/garmin-grafana/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/arpanghosh8453/garmin-grafana/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ ! -d /opt/garmin-grafana/ ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop garmin-grafana
systemctl stop grafana-server
systemctl stop influxdb
msg_ok "Stopped $APP"
if [[ ! -f /opt/garmin-grafana/.env ]]; then
msg_error "No .env file found in /opt/garmin-grafana/.env"
exit
fi
source /opt/garmin-grafana/.env
if [[ -z "${INFLUXDB_USER}" || -z "${INFLUXDB_PASSWORD}" || -z "${INFLUXDB_NAME}" ]]; then
msg_error "INFLUXDB_USER, INFLUXDB_PASSWORD, or INFLUXDB_NAME not set in .env file"
exit
fi
msg_info "Creating Backup"
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/garmin-grafana/.garminconnect /opt/garmin-grafana/.env
mv /opt/garmin-grafana/ /opt/garmin-grafana-backup/
msg_ok "Backup Created"
msg_info "Updating $APP to v${RELEASE}"
curl -fsSL -o "${RELEASE}.zip" "https://github.com/arpanghosh8453/garmin-grafana/archive/refs/tags/${RELEASE}.zip"
unzip -q "${RELEASE}.zip"
mv "garmin-grafana-${RELEASE}/" "/opt/garmin-grafana"
rm -f "${RELEASE}.zip"
$STD uv sync --locked --project /opt/garmin-grafana/
# shellcheck disable=SC2016
sed -i 's/\${DS_GARMIN_STATS}/garmin_influxdb/g' /opt/garmin-grafana/Grafana_Dashboard/Garmin-Grafana-Dashboard.json
sed -i 's/influxdb:8086/localhost:8086/' /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
sed -i "s/influxdb_user/${INFLUXDB_USER}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
sed -i "s/influxdb_secret_password/${INFLUXDB_PASSWORD}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
sed -i "s/GarminStats/${INFLUXDB_NAME}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
# Copy across grafana data
cp -r /opt/garmin-grafana/Grafana_Datasource/* /etc/grafana/provisioning/datasources
cp -r /opt/garmin-grafana/Grafana_Dashboard/* /etc/grafana/provisioning/dashboards
# Copy back the env and token files
cp /opt/garmin-grafana-backup/.env /opt/garmin-grafana/.env
cp -r /opt/garmin-grafana-backup/.garminconnect /opt/garmin-grafana/.garminconnect
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start garmin-grafana
systemctl start grafana-server
systemctl start influxdb
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf /opt/garmin-grafana-backup
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@@ -1,75 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/arunavo4/gitea-mirror
APP="gitea-mirror"
var_tags="${var_tags:-arr;dashboard}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/homarr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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
msg_info "Stopping Services (Patience)"
systemctl stop homarr
msg_ok "Services Stopped"
msg_info "Backup Data"
mkdir -p /opt/homarr-data-backup
cp /opt/homarr/.env /opt/homarr-data-backup/.env
msg_ok "Backup Data"
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
export BUN_INSTALL=/opt/bun
curl -fsSL https://bun.sh/install | bash
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
bun --version
apt install -y git
git clone https://github.com/arunavo4/gitea-mirror.git
cd /opt/gitea-mirror
bun install
bun run build
bun run manage-db init
install_node_and_modules
rm -rf /opt/homarr
fetch_and_deploy_gh_release "homarr-labs/homarr"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"

View File

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

View File

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

6
ct/headers/ampache Normal file
View File

@@ -0,0 +1,6 @@
___ __
/ | ____ ___ ____ ____ ______/ /_ ___
/ /| | / __ `__ \/ __ \/ __ `/ ___/ __ \/ _ \
/ ___ |/ / / / / / /_/ / /_/ / /__/ / / / __/
/_/ |_/_/ /_/ /_/ .___/\__,_/\___/_/ /_/\___/
/_/

View File

@@ -1,6 +0,0 @@
___
/ | _________ ___ _______
/ /| | / ___/ __ `/ / / / ___/
/ ___ |/ / / /_/ / /_/ (__ )
/_/ |_/_/ \__, /\__,_/____/
/____/

6
ct/headers/asterisk Normal file
View File

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

6
ct/headers/authentik Normal file
View File

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

View File

@@ -1,6 +1,6 @@
____ __ ____ __ __ ____ __ ____ __ __
/ __ )____ _/ /_ __ __/ __ )__ ______/ /___/ /_ __ / __ )____ _/ /_ __ __/ __ )__ ______/ /___/ /_ __
/ __ / __ `/ __ \/ / / / / __ / / / / __ / __ / / / / / __ / __ `/ __ \/ / / / __ / / / / __ / __ / / / /
/ /_/ / /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ /
/_____/\__,_/_.___/\__, / /_____/\__,_/\__,_/\__,_/\__, / /_____/\__,_/_.___/\__, /_____/\__,_/\__,_/\__,_/\__, /
/____/ /____/ /____/ /____/

View File

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

6
ct/headers/bookstack Normal file
View File

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

View File

@@ -1,6 +0,0 @@
______ _____
/ ____/___ ____ / __(_)___ _____ ___________
/ / / __ \/ __ \/ /_/ / __ `/ __ `/ ___/ ___/
/ /___/ /_/ / / / / __/ / /_/ / /_/ / / / /
\____/\____/_/ /_/_/ /_/\__, /\__,_/_/ /_/
/____/

View File

@@ -1,6 +0,0 @@
_ ____
____ _____ __________ ___ (_)___ ____ __________ _/ __/___ _____ ____ _
/ __ `/ __ `/ ___/ __ `__ \/ / __ \______/ __ `/ ___/ __ `/ /_/ __ `/ __ \/ __ `/
/ /_/ / /_/ / / / / / / / / / / / /_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
\__, /\__,_/_/ /_/ /_/ /_/_/_/ /_/ \__, /_/ \__,_/_/ \__,_/_/ /_/\__,_/
/____/ /____/

6
ct/headers/gatus Normal file
View File

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

6
ct/headers/ghostfolio Normal file
View File

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

View File

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

View File

@@ -1,6 +1,6 @@
__ __ __
/ /_ ____ ____ ___ ____ ___________ / / / /___ ____ ___ ____ ___________
/ __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/ / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/
/ / / / /_/ / / / / / / /_/ / / / / / __ / /_/ / / / / / / /_/ / / / /
/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/

View File

@@ -1,6 +1,6 @@
__ __ ___ _ __ __ ______ __ __ ___ _ __ __ ______
/ / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ / ____/___ ________ / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ / ____/___ ________
/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ / / / __ \/ ___/ _ \ / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \
/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ / /___/ /_/ / / / __/ / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/
/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/ /_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/

6
ct/headers/hoodik Normal file
View File

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

View File

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

View File

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

6
ct/headers/koel Normal file
View File

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

View File

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

6
ct/headers/matterbridge Normal file
View File

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

6
ct/headers/mattermost Normal file
View File

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

6
ct/headers/maxun Normal file
View File

@@ -0,0 +1,6 @@
__ ___
/ |/ /___ __ ____ ______
/ /|_/ / __ `/ |/_/ / / / __ \
/ / / / /_/ /> </ /_/ / / / /
/_/ /_/\__,_/_/|_|\__,_/_/ /_/

6
ct/headers/netbootxyz Normal file
View File

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

6
ct/headers/odoo Normal file
View File

@@ -0,0 +1,6 @@
____ __
/ __ \____/ /___ ____
/ / / / __ / __ \/ __ \
/ /_/ / /_/ / /_/ / /_/ /
\____/\__,_/\____/\____/

6
ct/headers/openproject Normal file
View File

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

View File

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

6
ct/headers/paperless-ngx Normal file
View File

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

6
ct/headers/pixelfed Normal file
View File

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

View File

@@ -1,6 +0,0 @@
____ __
/ __ \__ __/ /_______
/ /_/ / / / / / ___/ _ \
/ ____/ /_/ / (__ ) __/
/_/ \__,_/_/____/\___/

6
ct/headers/rclone Normal file
View File

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

6
ct/headers/roundcubemail Normal file
View File

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

View File

@@ -0,0 +1,6 @@
_____ _ __ _____ __ ___
/ ___/____ ___ __(_)____________ / / / ___/___ ______ _____ __________ / |/ /___ _____ ____ _____ ____ _____
\__ \/ __ `/ / / / / ___/ ___/ _ \/ / \__ \/ _ \/ ___/ | / / _ \/ ___/ ___/ / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
___/ / /_/ / /_/ / / / / / / __/ / ___/ / __/ / | |/ / __/ / (__ ) / / / / /_/ / / / / /_/ / /_/ / __/ /
/____/\__, /\__,_/_/_/ /_/ \___/_/ /____/\___/_/ |___/\___/_/ /____/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
/_/ /____/

View File

@@ -1,11 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13 # Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://homarr.dev/ # Source: https://homarr.dev/
APP="homarr" APP="Homarr"
var_tags="${var_tags:-arr;dashboard}" var_tags="${var_tags:-arr;dashboard}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
@@ -124,9 +124,7 @@ EOF
fetch_and_deploy_gh_release "homarr-labs/homarr" fetch_and_deploy_gh_release "homarr-labs/homarr"
mv /opt/homarr-data-backup/.env /opt/homarr/.env mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr cd /opt/homarr
echo "test2" $STD pnpm install
export NODE_ENV=""
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
$STD pnpm build $STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts . cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json . cp /opt/homarr/apps/nextjs/package.json .

View File

@@ -46,13 +46,13 @@ function update_script() {
rm ~/Dockerfile rm ~/Dockerfile
fi fi
if [[ -f ~/.immich_library_revisions ]]; then if [[ -f ~/.immich_library_revisions ]]; then
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips") curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/bin/build-lock.json
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do jq -cr '.sources[].revision' ./build-lock.json >~/.new_revisions
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)" readarray -t UPDATED_REVISIONS < <(comm -13 <(sort ~/.immich_library_revisions) <(sort ~/.new_revisions))
if [[ "${#UPDATED_REVISIONS[@]}" -gt 0 ]]; then
readarray -t NAMES < <(for revision in "${UPDATED_REVISIONS[@]}"; do
jq -cr --arg jq_revision "$revision" '.sources[] | select(.revision == $jq_revision).name' ./build-lock.json
done) done)
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
if [[ "$UPDATED_REVISIONS" ]]; then
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
rm -rf "$SOURCE_DIR" rm -rf "$SOURCE_DIR"
mkdir -p "$SOURCE_DIR" mkdir -p "$SOURCE_DIR"
cd "$BASE_DIR" cd "$BASE_DIR"
@@ -64,13 +64,13 @@ function update_script() {
SOURCE=${SOURCE_DIR}/libjxl SOURCE=${SOURCE_DIR}/libjxl
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}" : "${LIBJXL_REVISION:=$(jq -cr '.sources[] | select(.name == "libjxl").revision' $BASE_DIR/server/bin/build-lock.json)}"
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBJXL_REVISION" $STD git reset --hard "$LIBJXL_REVISION"
$STD git submodule update --init --recursive --depth 1 --recommend-shallow $STD git submodule update --init --recursive --depth 1 --recommend-shallow
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch $STD git apply "$BASE_DIR"/server/bin/patches/jpegli-empty-dht-marker.patch
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch $STD git apply "$BASE_DIR"/server/bin/patches/jpegli-icc-warning.patch
mkdir build mkdir build
cd build cd build
$STD cmake \ $STD cmake \
@@ -102,7 +102,7 @@ function update_script() {
if [[ "$name" == "libheif" ]]; then if [[ "$name" == "libheif" ]]; then
msg_info "Recompiling libheif" msg_info "Recompiling libheif"
SOURCE=${SOURCE_DIR}/libheif SOURCE=${SOURCE_DIR}/libheif
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}" : "${LIBHEIF_REVISION:=$(jq -cr '.sources[] | select(.name == "libheif").revision' $BASE_DIR/server/bin/build-lock.json)}"
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE" $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION" $STD git reset --hard "$LIBHEIF_REVISION"
@@ -128,7 +128,7 @@ function update_script() {
if [[ "$name" == "libraw" ]]; then if [[ "$name" == "libraw" ]]; then
msg_info "Recompiling libraw" msg_info "Recompiling libraw"
SOURCE=${SOURCE_DIR}/libraw SOURCE=${SOURCE_DIR}/libraw
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}" : "${LIBRAW_REVISION:=$(jq -cr '.sources[] | select(.name == "libraw").revision' $BASE_DIR/server/bin/build-lock.json)}"
$STD git clone https://github.com/libraw/libraw.git "$SOURCE" $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION" $STD git reset --hard "$LIBRAW_REVISION"
@@ -144,7 +144,7 @@ function update_script() {
if [[ "$name" == "imagemagick" ]]; then if [[ "$name" == "imagemagick" ]]; then
msg_info "Recompiling ImageMagick" msg_info "Recompiling ImageMagick"
SOURCE=$SOURCE_DIR/imagemagick SOURCE=$SOURCE_DIR/imagemagick
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}" : "${IMAGEMAGICK_REVISION:=$(jq -cr '.sources[] | select(.name == "imagemagick").revision' $BASE_DIR/server/bin/build-lock.json)}"
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE" $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$IMAGEMAGICK_REVISION" $STD git reset --hard "$IMAGEMAGICK_REVISION"
@@ -159,7 +159,7 @@ function update_script() {
if [[ "$name" == "libvips" ]]; then if [[ "$name" == "libvips" ]]; then
msg_info "Recompiling libvips" msg_info "Recompiling libvips"
SOURCE=$SOURCE_DIR/libvips SOURCE=$SOURCE_DIR/libvips
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" : "${LIBVIPS_REVISION:=$(jq -cr '.sources[] | select(.name == "libvips").revision' $BASE_DIR/server/bin/build-lock.json)}"
$STD git clone https://github.com/libvips/libvips.git "$SOURCE" $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION" $STD git reset --hard "$LIBVIPS_REVISION"
@@ -172,9 +172,10 @@ function update_script() {
msg_ok "Recompiled libvips" msg_ok "Recompiled libvips"
fi fi
done done
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions mv ~/.new_revisions ~/.immich_library_revisions
msg_ok "Image-processing libraries compiled" msg_ok "Image-processing libraries compiled"
fi fi
rm ~/build-lock.json
fi fi
RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
@@ -182,18 +183,6 @@ function update_script() {
systemctl stop immich-web systemctl stop immich-web
systemctl stop immich-ml systemctl stop immich-ml
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
if [[ "$(cat /opt/${APP}_version.txt)" < "1.133.0" ]]; then
msg_info "Upgrading to the VectorChord PostgreSQL extension"
$STD apt-get update
$STD apt-get install postgresql-16-pgvector -y
curl -fsSL https://github.com/tensorchord/VectorChord/releases/download/0.3.0/postgresql-16-vchord_0.3.0-1_amd64.deb -o vchord.deb
$STD dpkg -i vchord.deb
rm vchord.deb
sed -i -e "s/'vectors.so'/'vchord.so, vectors.so'/" \
-e "/^search_path/s/, vectors//" /etc/postgresql/16/main/postgresql.conf
systemctl restart postgresql.service
msg_ok "Upgrade in progress. When Immich restarts, watch the logs for 're-indexing' to complete"
fi
INSTALL_DIR="/opt/${APP}" INSTALL_DIR="/opt/${APP}"
UPLOAD_DIR="${INSTALL_DIR}/upload" UPLOAD_DIR="${INSTALL_DIR}/upload"
SRC_DIR="${INSTALL_DIR}/source" SRC_DIR="${INSTALL_DIR}/source"
@@ -224,6 +213,7 @@ function update_script() {
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/ cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR" cp LICENSE "$APP_DIR"
cp "$BASE_DIR"/server/bin/build-lock.json "$APP_DIR"
msg_ok "Updated ${APP} web and microservices" msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning cd "$SRC_DIR"/machine-learning
@@ -267,8 +257,6 @@ function update_script() {
$STD npm i -g @immich/cli $STD npm i -g @immich/cli
msg_ok "Updated Immich CLI" msg_ok "Updated Immich CLI"
sed -i "s|pgvecto.rs|vectorchord|" /opt/"${APP}"/.env
chown -R immich:immich "$INSTALL_DIR" chown -R immich:immich "$INSTALL_DIR"
echo "$RELEASE" >/opt/"${APP}"_version.txt echo "$RELEASE" >/opt/"${APP}"_version.txt
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"

View File

@@ -1,46 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.kasmweb.com/docs/latest/index.html
APP="Kasm"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4192}"
var_disk="${var_disk:-30}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
var_fuse="${var_fuse:-yes}"
var_tun="${var_tun:-yes}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}"

View File

@@ -6,15 +6,19 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
## App Default Values ## App Default Values
APP="Koel" APP="Koel"
var_tags="${var_tags:-music}" var_tags="${var_tags:-music;player;homelab}"
var_disk="${var_disk:-9}" var_disk="${var_disk:-9}"
var_cpu="${var_cpu:-3}" var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-3072}" var_ram="${var_ram:-3072}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_verbose="${var_verbose:-yes}"
# App Output & Base Settings
header_info "$APP" header_info "$APP"
base_settings
# Core
variables variables
color color
catch_errors catch_errors

View File

@@ -38,7 +38,7 @@ function update_script() {
start start
build_container build_container
desiption description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@@ -1,61 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://lyrion.org/getting-started/
APP="Lyrion Music Server"
var_tags="${var_tags:-media}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /lib/systemd/system/lyrionmusicserver.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
DEB_URL=$(curl -s 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
curl -fsSL -o "$DEB_FILE" "$DEB_URL"
$STD apt install "$DEB_FILE" -y
systemctl restart lyrion
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Cleaning up"
$STD rm -f "$DEB_FILE"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
else
msg_ok "$APP is already up to date (${RELEASE})"
fi
}
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 the web interface at:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
echo -e "${INFO}${YW} Check logs for setup details: ~/lyrion-install.log${CL}"

72
ct/odoo.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/odoo/odoo
APP="Odoo"
# shellcheck disable=SC2034
var_tags="${var_tags:-erp}"
var_disk="${var_disk:-6}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/odoo/odoo.conf ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |
sed -E "s/odoo_(${RELEASE}\.[0-9]+)_all\.deb/\1/" |
sort -V |
tail -n1)
if [[ "${LATEST_VERSION}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping ${APP} service"
systemctl stop odoo
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${LATEST_VERSION}"
curl -fsSL https://nightly.odoo.com/${RELEASE}/nightly/deb/odoo_${RELEASE}.latest_all.deb -o /opt/odoo.deb
$STD apt install -y /opt/odoo.deb
echo "$RELEASE" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP} service"
systemctl start odoo
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -f /opt/odoo.deb
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${LATEST_VERSION}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8069${CL}"

View File

@@ -1,73 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: havardthom
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://openwebui.com/
APP="Open WebUI"
var_tags="${var_tags:-ai;interface}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/open-webui ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if [ -x "/usr/bin/ollama" ]; then
msg_info "Updating Ollama"
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
tar -C /usr -xzf ollama-linux-amd64.tgz
rm -rf ollama-linux-amd64.tgz
msg_ok "Ollama updated to version $RELEASE"
else
msg_ok "Ollama is already up to date."
fi
fi
msg_info "Updating ${APP} (Patience)"
systemctl stop open-webui.service
mkdir -p /opt/openwebui-backup
cp -rf /opt/openwebui/backend/data /opt/openwebui-backup
cp /opt/openwebui/.env /opt
rm -rf /opt/openwebui
fetch_and_deploy_gh_release "open-webui/open-webui"
cd /opt/openwebui
$STD npm install
export NODE_OPTIONS="--max-old-space-size=3584"
sed -i "s/git rev-parse HEAD/openssl rand -hex 20/g" /opt/openwebui/svelte.config.js
$STD npm run build
cd ./backend
$STD pip install -r requirements.txt -U
cp -rf /opt/openwebui-backup/* /opt/openwebui/backend
mv /opt/.env /opt/openwebui/
systemctl start open-webui.service
msg_ok "Updated Successfully"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -1,79 +0,0 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: rcourtman
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://github.com/rcourtman/Pulse
APP="Pulse"
var_tags="monitoring;proxmox"
var_cpu="1"
var_ram="1024"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/pulse-proxmox ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/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
msg_info "Stopping ${APP}"
systemctl stop pulse-monitor
msg_ok "Stopped ${APP}"
msg_info "Updating Pulse"
if [[ -f /opt/pulse-proxmox/.env ]]; then
cp /opt/pulse-proxmox/.env /tmp/.env.backup.pulse
fi
temp_file=$(mktemp)
mkdir -p /opt/pulse-proxmox
rm -rf /opt/pulse-proxmox/*
curl -fsSL "https://github.com/rcourtman/Pulse/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/pulse-proxmox
if [[ -f /tmp/.env.backup.pulse ]]; then
mv /tmp/.env.backup.pulse /opt/pulse-proxmox/.env
fi
cd /opt/pulse-proxmox
$STD npm install --unsafe-perm
cd /opt/pulse-proxmox/server
$STD npm install --unsafe-perm
cd /opt/pulse-proxmox
$STD npm run build:css
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Pulse to ${RELEASE}"
msg_info "Setting permissions for /opt/pulse-proxmox..."
chown -R pulse:pulse "/opt/pulse-proxmox"
find "/opt/pulse-proxmox" -type d -exec chmod 755 {} \;
find "/opt/pulse-proxmox" -type f -exec chmod 644 {} \;
chmod 600 /opt/pulse-proxmox/.env
msg_ok "Set permissions."
msg_info "Starting ${APP}"
systemctl start pulse-monitor
msg_ok "Started ${APP}"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
fi
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}(:your_port)${CL}"

View File

@@ -1,15 +1,15 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func) source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021) # Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://github.com/jitsi/jitsi-meet # Source: https://rclone.org/
APP="Jitsi-Meet" APP="Rclone"
var_tags="${var_tags:-os}" var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-20}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -23,14 +23,14 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /lib/systemd/system/jitsi-videobridge2.service ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating Jitsi-Meet LXC" msg_info "Updating $APP LXC"
$STD apt-get update $STD apt-get update
$STD apt-get upgrade -y $STD apt-get -y upgrade
msg_ok "Updated Jitsi-Meet LXC" msg_ok "Updated $APP LXC"
exit exit
} }
@@ -40,5 +40,3 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" 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}https://${IP}${CL}"

View File

@@ -1,35 +0,0 @@
{
"name": "Argus",
"slug": "argus",
"categories": [
11
],
"date_created": "2025-05-19",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://release-argus.io/docs/overview/",
"website": "https://release-argus.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/argus.webp",
"config_path": "/opt/argus/config.yml",
"description": "Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found. For example, you could set it to monitor the Argus repo (release-argus/argus). This will query the GitHub API and track the tag_name variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.",
"install_methods": [
{
"type": "default",
"script": "ct/argus.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,36 @@
{
"name": "Asterisk",
"slug": "asterisk",
"categories": [
0,
4
],
"date_created": "2025-05-13",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": "https://docs.asterisk.org/",
"config_path": "/etc/asterisk",
"website": "https://asterisk.org/",
"logo": "https://docs.asterisk.org/favicon.ico",
"description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.",
"install_methods": [
{
"type": "default",
"script": "ct/asterisk.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,41 @@
{
"name": "authentik",
"slug": "authentik",
"categories": [
6
],
"date_created": "2024-12-27",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9000,
"documentation": "https://docs.goauthentik.io/docs/",
"website": "https://goauthentik.io/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/authentik.svg",
"config_path": "/etc/authentik/config.yml",
"description": "authentik is an IdP (Identity Provider) and SSO (single sign on) that is built with security at the forefront of every piece of code, every feature, with an emphasis on flexibility and versatility.",
"install_methods": [
{
"type": "default",
"script": "ct/authentik.sh",
"resources": {
"cpu": 6,
"ram": 8192,
"hdd": 12,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
"type": "warning"
}
]
}

View File

@@ -1,40 +0,0 @@
{
"name": "Baby Buddy",
"slug": "babybuddy",
"categories": [
23
],
"date_created": "2025-05-16",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://docs.baby-buddy.net/",
"website": "https://github.com/babybuddy/babybuddy",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp",
"config_path": "/opt/babybuddy/babybuddy/production.py",
"description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
"install_methods": [
{
"type": "default",
"script": "ct/babybuddy.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`",
"type": "info"
}
]
}

View File

@@ -1,40 +0,0 @@
{
"name": "Backrest",
"slug": "backrest",
"categories": [
7
],
"date_created": "2025-05-11",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9898,
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
"website": "https://garethgeorge.github.io/backrest",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/backrest.webp",
"config_path": "/opt/backrest/config/config.json",
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
"install_methods": [
{
"type": "default",
"script": "ct/backrest.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
}
]
}

View File

@@ -0,0 +1,46 @@
{
"name": "Bitmagnet",
"slug": "bitmagnet",
"categories": [
11
],
"date_created": "2025-05-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://bitmagnet.io/setup.html",
"website": "https://bitmagnet.io/",
"logo": "https://github.com/bitmagnet-io/bitmagnet/blob/main/webui/public/magnet.svg",
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-bitmagnet.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-bitmagnet.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -12,7 +12,7 @@
"documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown", "documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown",
"config_path": "/etc/systemd/system/cloudflare-ddns.service", "config_path": "/etc/systemd/system/cloudflare-ddns.service",
"website": "https://github.com/favonia/cloudflare-ddns", "website": "https://github.com/favonia/cloudflare-ddns",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudflare.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/cloudflare.svg",
"description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machines public IP addresses and update DNS records using the Cloudflare API", "description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machines public IP addresses and update DNS records using the Cloudflare API",
"install_methods": [ "install_methods": [
{ {

View File

@@ -1,40 +0,0 @@
{
"name": "Configarr",
"slug": "configarr",
"categories": [
14
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8989,
"documentation": "https://configarr.raydak.de/docs/intro",
"config_path": "/opt/configarr/config.yml",
"website": "https://configarr.raydak.de/",
"logo": "https://github.com/raydak-labs/configarr/blob/main/docs/static/img/logo.webp",
"description": "Configarr is an open-source tool designed to simplify configuration and synchronization for Sonarr and Radarr (and other experimental). It integrates with TRaSH Guides to automate updates of custom formats, quality profiles, and other settings, while also supporting user-defined configurations.",
"install_methods": [
{
"type": "default",
"script": "ct/configarr.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "change secrets file /opt/configarr/secrets.yml",
"type": "info"
}
]
}

View File

@@ -19,9 +19,9 @@
"type": "default", "type": "default",
"script": "ct/freepbx.sh", "script": "ct/freepbx.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 1,
"ram": 2048, "ram": 1024,
"hdd": 10, "hdd": 20,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
@@ -31,11 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": []
{
"text": "This script uses the official FreePBX install script. Check it here: https://github.com/FreePBX/sng_freepbx_debian_install",
"type": "info"
}
]
} }

View File

@@ -1,44 +0,0 @@
{
"name": "garmin-grafana",
"slug": "garmin-grafana",
"categories": [
24
],
"date_created": "2025-05-08",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/arpanghosh8453/garmin-grafana",
"config_path": "",
"website": "https://github.com/arpanghosh8453/garmin-grafana",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garmin-grafana.webp",
"description": "A docker container to fetch data from Garmin servers and store the data in a local influxdb database for appealing visualization with Grafana.",
"install_methods": [
{
"type": "default",
"script": "ct/garmin-grafana.sh",
"resources": {
"cpu": 2,
"ram": 2,
"hdd": 8,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Show login and database credentials: `cat ~/.garmin-grafana.creds`",
"type": "info"
},
{
"text": "`garmin-grafana` only imports the past 7 days by default. To import historical data, use the `~/bulk-import.sh` script after installation.",
"type": "info"
}
]
}

View File

@@ -0,0 +1,46 @@
{
"name": "Alpine-gatus",
"slug": "alpine-gatus",
"categories": [
9
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://gatus.io/docs",
"website": "https://gatus.io/",
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
"config_path": "/opt/gatus/config/config.yaml",
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
"install_methods": [
{
"type": "default",
"script": "ct/gatus.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-gatus.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,35 @@
{
"name": "Homarr",
"slug": "homarr",
"categories": [
10
],
"date_created": "2025-05-08",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7575,
"documentation": null,
"website": "https://homarr.dev/",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg",
"config_path": "/opt/homarr/.env",
"description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.",
"install_methods": [
{
"type": "default",
"script": "ct/homarr.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -11,7 +11,7 @@
"interface_port": 2283, "interface_port": 2283,
"documentation": "https://immich.app/docs/overview/introduction", "documentation": "https://immich.app/docs/overview/introduction",
"website": "https://immich.app", "website": "https://immich.app",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/immich.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/immich.png",
"config_path": "/opt/immich/.env", "config_path": "/opt/immich/.env",
"description": "High performance self-hosted photo and video management solution.", "description": "High performance self-hosted photo and video management solution.",
"install_methods": [ "install_methods": [
@@ -38,3 +38,4 @@
} }
] ]
} }

View File

@@ -1,35 +0,0 @@
{
"name": "jitsi-meet",
"slug": "jitsi-meet",
"categories": [
18
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://jitsi.github.io/handbook/docs/intro",
"website": "https://jitsi.org/jitsi-meet/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jitsi-meet.webp",
"config_path": "/etc/jitsi/meet/[your-hostname]-config.js",
"description": "Go ahead, video chat with the whole team. In fact, invite everyone you know. Jitsi Meet is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed.",
"install_methods": [
{
"type": "default",
"script": "ct/jitsi-meet.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 20,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,44 +0,0 @@
{
"name": "Kasm",
"slug": "kasm",
"categories": [
9
],
"date_created": "2025-03-24",
"type": "ct",
"updateable": false,
"privileged": true,
"config_path": "",
"interface_port": 443,
"documentation": "https://www.kasmweb.com/docs/",
"website": "https://www.kasmweb.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/kasm-workspaces.webp",
"description": "Kasm Workspaces is a container streaming platform that delivers browser-based access to desktops, applications, and web services with enhanced security and scalability.",
"install_methods": [
{
"type": "default",
"script": "ct/kasm.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 50,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
},
{
"text": "Show password: `cat ~/kasm.creds`",
"type": "info"
}
]
}

View File

@@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://docs.librenms.org/", "documentation": "https://docs.librenms.org/",
"website": "https://librenms.org/", "website": "https://librenms.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librenms.webp", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librenms.svg",
"config_path": "/opt/librenms/config.php and /opt/librenms/.env", "config_path": "/opt/librenms/config.php and /opt/librenms/.env",
"description": "LibreNMS is an open-source, community-driven network monitoring system that provides automatic discovery, alerting, and performance tracking for network devices. It supports a wide range of hardware and integrates with various notification and logging platforms.", "description": "LibreNMS is an open-source, community-driven network monitoring system that provides automatic discovery, alerting, and performance tracking for network devices. It supports a wide range of hardware and integrates with various notification and logging platforms.",
"install_methods": [ "install_methods": [
@@ -33,3 +33,4 @@
}, },
"notes": [] "notes": []
} }

View File

@@ -12,7 +12,7 @@
"documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md", "documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md",
"config_path": "", "config_path": "",
"website": "https://librespeed.org", "website": "https://librespeed.org",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librespeed.webp", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librespeed.svg",
"description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.", "description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -1,35 +0,0 @@
{
"name": "Lyrion Music Server",
"slug": "lyrionmusicserver",
"categories": [
9
],
"date_created": "2025-05-21",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/etc/default/lyrionmusicserver",
"interface_port": 9000,
"documentation": "https://lyrion.org/",
"website": "https://lyrion.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-media-server.webp",
"description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.",
"install_methods": [
{
"type": "default",
"script": "ct/lyrionmusicserver.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 3,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://manyfold.app/sysadmin/", "documentation": "https://manyfold.app/sysadmin/",
"website": "https://manyfold.app/", "website": "https://manyfold.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/manyfold.webp",
"config_path": "", "config_path": "",
"description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.",
"install_methods": [ "install_methods": [
@@ -33,3 +33,4 @@
}, },
"notes": [] "notes": []
} }

View File

@@ -0,0 +1,40 @@
{
"name": "Odoo",
"slug": "odoo",
"categories": [
25
],
"date_created": "2025-05-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8069,
"documentation": "https://www.odoo.com/en_EN/page/docs",
"website": "https://www.odoo.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/odoo.svg",
"config_path": "/etc/odoo/odoo.conf",
"description": "Odoo is a comprehensive open-source business platform made up of modular apps that cover key areas such as CRM, accounting, inventory, sales, project management, HR, helpdesk, and e-commerce. All modules are tightly integrated, allowing businesses to fully digitize and automate their workflows. Its modular design makes it suitable for both small companies and large enterprises, with flexibility to adapt to different industries. Odoo combines user-friendliness with powerful functionality, offering a unified solution for managing a wide range of business operations.",
"install_methods": [
{
"type": "default",
"script": "ct/odoo.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "Database Credentials: `cat ~/odoo.creds`",
"type": "info"
}
]
}

View File

@@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://github.com/agersant/polaris/blob/master/docs/SETUP.md", "documentation": "https://github.com/agersant/polaris/blob/master/docs/SETUP.md",
"website": "https://github.com/agersant/polaris", "website": "https://github.com/agersant/polaris",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/polaris.webp", "logo": "https://raw.githubusercontent.com/agersant/polaris/refs/heads/master/res/branding/logo/sticker_print.svg",
"config_path": "", "config_path": "",
"description": "Polaris is a self-hosted music streaming server that allows you to enjoy your personal music collection from any computer or mobile device. It is a free and open-source application with no premium version. Polaris is highly performant and responsive, supporting large music libraries with over 100,000 tracks. It features an intuitive user interface and supports various audio formats, including FLAC, MP3, MP4, OGG, and WAV. There is an Android client available through the Google Play Store, F-Droid, or GitHub Releases.", "description": "Polaris is a self-hosted music streaming server that allows you to enjoy your personal music collection from any computer or mobile device. It is a free and open-source application with no premium version. Polaris is highly performant and responsive, supporting large music libraries with over 100,000 tracks. It features an intuitive user interface and supports various audio formats, including FLAC, MP3, MP4, OGG, and WAV. There is an Android client available through the Google Play Store, F-Droid, or GitHub Releases.",
"install_methods": [ "install_methods": [

View File

@@ -1,40 +0,0 @@
{
"name": "Pulse",
"slug": "pulse",
"categories": [
9
],
"date_created": "2025-05-22",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7655,
"documentation": null,
"website": "https://github.com/rcourtman/Pulse",
"logo": "https://raw.githubusercontent.com/rcourtman/Pulse/main/src/public/logos/pulse-logo-256x256.png",
"config_path": "/opt/pulse-proxmox/.env",
"description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.",
"install_methods": [
{
"type": "default",
"script": "ct/pulse.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Create Proxmox-API-Token first: `https: //github.com/rcourtman/Pulse?tab=readme-ov-file#creating-a-proxmox-api-token`",
"type": "Info"
}
]
}

View File

@@ -1,48 +0,0 @@
{
"name": "PVE Privilege Converter",
"slug": "pve-privilege-converter",
"categories": [
1
],
"date_created": "2025-05-22",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": "https://github.com/onethree7/proxmox-lxc-privilege-converter",
"website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
"config_path": "",
"description": "This script allows converting Proxmox LXC containers between privileged and unprivileged modes using vzdump backup and restore. It guides you through container selection, backup storage, ID assignment, and privilege flipping via automated restore. Useful for applying changes that require different LXC modes.",
"install_methods": [
{
"type": "default",
"script": "tools/pve/pve-privilege-converter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Execute this script inside the Proxmox shell as root.",
"type": "info"
},
{
"text": "Ensure that the backup and target storage have enough space.",
"type": "warning"
},
{
"text": "The container will be recreated with a new ID and desired privilege setting.",
"type": "info"
}
]
}

View File

@@ -1,123 +1,53 @@
[ [
{ {
"name": "tobychui/zoraxy", "name": "theonedev/onedev",
"version": "v3.1.9", "version": "v11.9.6",
"date": "2025-03-01T02:24:33Z" "date": "2025-05-13T12:16:17Z"
}, },
{ {
"name": "ollama/ollama", "name": "zabbix/zabbix",
"version": "v0.7.0", "version": "7.2.7rc1",
"date": "2025-05-14T23:42:30Z" "date": "2025-05-13T11:55:32Z"
}, },
{ {
"name": "immich-app/immich", "name": "Graylog2/graylog2-server",
"version": "v1.133.0", "version": "6.3.0-alpha.4",
"date": "2025-05-21T20:17:38Z" "date": "2025-05-13T11:18:29Z"
}, },
{ {
"name": "apache/tika", "name": "firefly-iii/firefly-iii",
"version": "3.2.0-rc2", "version": "v6.2.12",
"date": "2025-05-21T20:09:07Z" "date": "2025-04-20T19:22:17Z"
},
{
"name": "0xERR0R/blocky",
"version": "v0.26.2",
"date": "2025-05-21T19:52:07Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.84.0",
"date": "2025-05-21T19:39:53Z"
},
{
"name": "clusterzx/paperless-ai",
"version": "v3.0.4",
"date": "2025-05-21T19:03:53Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.10-rc0",
"date": "2025-05-21T18:22:25Z"
},
{
"name": "ipfs/kubo",
"version": "v0.35.0",
"date": "2025-05-21T18:00:32Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.20.10",
"date": "2025-05-21T17:22:32Z"
}, },
{ {
"name": "cross-seed/cross-seed", "name": "cross-seed/cross-seed",
"version": "v6.12.5", "version": "v6.12.4",
"date": "2025-05-17T02:52:33Z" "date": "2025-05-11T11:41:32Z"
}, },
{ {
"name": "cockpit-project/cockpit", "name": "element-hq/synapse",
"version": "339", "version": "v1.129.0",
"date": "2025-05-21T14:49:36Z" "date": "2025-05-06T12:28:54Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.16",
"date": "2025-05-21T13:57:13Z"
},
{
"name": "theonedev/onedev",
"version": "v11.9.9",
"date": "2025-05-21T13:13:31Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.18",
"date": "2025-02-12T11:07:02Z"
},
{
"name": "zitadel/zitadel",
"version": "v3.1.0",
"date": "2025-05-21T12:40:54Z"
},
{
"name": "esphome/esphome",
"version": "2025.5.0",
"date": "2025-05-21T08:32:53Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w21-4.13.0",
"date": "2025-05-21T08:15:52Z"
},
{
"name": "syncthing/syncthing",
"version": "v1.29.6",
"date": "2025-05-06T07:57:02Z"
}, },
{ {
"name": "Jackett/Jackett", "name": "Jackett/Jackett",
"version": "v0.22.1933", "version": "v0.22.1893",
"date": "2025-05-21T05:53:49Z" "date": "2025-05-13T05:57:50Z"
}, },
{ {
"name": "inventree/InvenTree", "name": "zitadel/zitadel",
"version": "0.17.12", "version": "v2.65.9",
"date": "2025-05-21T05:44:55Z" "date": "2025-05-13T05:14:39Z"
}, },
{ {
"name": "diced/zipline", "name": "ollama/ollama",
"version": "v4.1.0", "version": "v0.6.9-rc0",
"date": "2025-05-21T04:12:44Z" "date": "2025-05-10T18:57:30Z"
}, },
{ {
"name": "icereed/paperless-gpt", "name": "go-gitea/gitea",
"version": "v0.19.0", "version": "v1.23.8",
"date": "2025-05-21T03:46:14Z" "date": "2025-05-12T22:40:50Z"
},
{
"name": "matze/wastebin",
"version": "3.1.0",
"date": "2025-05-20T19:20:03Z"
}, },
{ {
"name": "MediaBrowser/Emby.Releases", "name": "MediaBrowser/Emby.Releases",
@@ -126,313 +56,8 @@
}, },
{ {
"name": "keycloak/keycloak", "name": "keycloak/keycloak",
"version": "26.0.12", "version": "26.2.4",
"date": "2025-05-15T14:06:52Z" "date": "2025-05-08T09:10:10Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.511",
"date": "2025-05-20T15:39:17Z"
},
{
"name": "element-hq/synapse",
"version": "v1.130.0",
"date": "2025-05-20T15:33:54Z"
},
{
"name": "documenso/documenso",
"version": "v1.11.1",
"date": "2025-05-20T12:37:46Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v0.46.2",
"date": "2025-05-20T11:21:04Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.7",
"date": "2025-05-20T11:00:56Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.0.3",
"date": "2025-05-20T06:51:42Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.4.9",
"date": "2025-05-20T00:08:29Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.36.4",
"date": "2025-05-19T22:28:11Z"
},
{
"name": "apache/cassandra",
"version": "cassandra-4.1.9",
"date": "2025-05-19T21:37:07Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.16.1",
"date": "2025-05-19T21:26:44Z"
},
{
"name": "glanceapp/glance",
"version": "v0.8.3",
"date": "2025-05-19T20:45:10Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.1",
"date": "2025-03-15T17:29:17Z"
},
{
"name": "Forceu/Gokapi",
"version": "v1.9.6",
"date": "2024-12-18T14:35:37Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p2",
"date": "2025-05-19T17:06:15Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.12",
"date": "2025-04-20T19:22:17Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.91.3",
"date": "2025-05-08T12:25:10Z"
},
{
"name": "docker/compose",
"version": "v2.36.1",
"date": "2025-05-19T12:26:41Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.3.0-beta.1",
"date": "2025-05-19T11:23:27Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.10",
"date": "2025-05-19T01:34:37Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v1.17.1",
"date": "2025-05-18T21:06:41Z"
},
{
"name": "sbondCo/Watcharr",
"version": "v2.1.0",
"date": "2025-05-18T18:20:43Z"
},
{
"name": "rogerfar/rdt-client",
"version": "v2.0.112",
"date": "2025-05-18T17:44:52Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.6.1",
"date": "2025-05-18T17:01:42Z"
},
{
"name": "kimai/kimai",
"version": "2.34.0",
"date": "2025-05-18T13:22:17Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-05-18T13:00:01Z"
},
{
"name": "hansmi/prometheus-paperless-exporter",
"version": "v0.0.8",
"date": "2025-05-18T11:37:31Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v1.35.1.5034",
"date": "2025-04-30T11:02:36Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.23.3.9987",
"date": "2025-05-17T12:55:29Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.05.2",
"date": "2025-05-17T12:53:29Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.02.5",
"date": "2025-05-17T11:24:01Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.1.1",
"date": "2025-05-17T10:10:36Z"
},
{
"name": "evcc-io/evcc",
"version": "0.203.6",
"date": "2025-05-17T07:30:49Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.304.0",
"date": "2025-05-17T07:29:09Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.23.0",
"date": "2025-05-16T22:13:53Z"
},
{
"name": "home-assistant/core",
"version": "2025.5.2",
"date": "2025-05-16T21:09:45Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.20.0",
"date": "2025-05-16T19:18:10Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.4.1",
"date": "2025-05-16T16:37:51Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.0.3",
"date": "2025-05-16T15:41:16Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.4",
"date": "2025-05-16T15:09:53Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.0-alpha.1",
"date": "2025-05-16T13:30:53Z"
},
{
"name": "gotson/komga",
"version": "1.21.3",
"date": "2025-05-16T04:31:05Z"
},
{
"name": "coder/code-server",
"version": "v4.100.2",
"date": "2025-05-15T23:02:46Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.4.1",
"date": "2025-05-15T17:48:29Z"
},
{
"name": "cloudflare/cloudflared",
"version": "2025.5.0",
"date": "2025-05-15T17:09:50Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.117.1",
"date": "2025-05-15T15:45:22Z"
},
{
"name": "ellite/Wallos",
"version": "v3.1.1",
"date": "2025-05-15T15:17:57Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.5.1",
"date": "2025-05-15T09:59:28Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.2",
"date": "2025-05-11T16:40:55Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.0",
"date": "2025-05-15T01:49:47Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "Athou/commafeed",
"version": "5.9.0",
"date": "2025-05-14T15:29:48Z"
},
{
"name": "juanfont/headscale",
"version": "v0.26.0",
"date": "2025-05-14T15:12:14Z"
},
{
"name": "motioneye-project/motioneye",
"version": "0.42.1",
"date": "2020-06-07T07:27:04Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.0",
"date": "2025-05-12T09:12:04Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.0.0-alpha-4",
"date": "2025-05-14T05:01:45Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.1",
"date": "2025-05-13T19:45:00Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.28.1",
"date": "2025-05-13T18:45:47Z"
},
{
"name": "OctoPrint/OctoPrint",
"version": "1.11.1",
"date": "2025-05-13T13:32:07Z"
},
{
"name": "redis/redis",
"version": "8.0.1",
"date": "2025-05-13T13:31:53Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.23.8",
"date": "2025-05-12T22:40:50Z"
}, },
{ {
"name": "leiweibau/Pi.Alert", "name": "leiweibau/Pi.Alert",
@@ -444,6 +69,16 @@
"version": "v2.1.0.118-2.1.0.118_canary_2025-05-12", "version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
"date": "2025-05-12T18:50:44Z" "date": "2025-05-12T18:50:44Z"
}, },
{
"name": "runtipi/runtipi",
"version": "v4.1.0",
"date": "2025-05-12T07:13:15Z"
},
{
"name": "coder/code-server",
"version": "v4.100.0",
"date": "2025-05-12T18:23:47Z"
},
{ {
"name": "neo4j/neo4j", "name": "neo4j/neo4j",
"version": "4.4.43", "version": "4.4.43",
@@ -454,6 +89,41 @@
"version": "v0.24.3", "version": "v0.24.3",
"date": "2025-05-12T15:23:21Z" "date": "2025-05-12T15:23:21Z"
}, },
{
"name": "NodeBB/NodeBB",
"version": "v2.8.18",
"date": "2025-05-12T15:08:09Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.91.3",
"date": "2025-05-08T12:25:10Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.1.0",
"date": "2025-05-12T14:40:27Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.117.0",
"date": "2025-05-12T13:24:20Z"
},
{
"name": "apache/tika",
"version": "3.2.0-rc1",
"date": "2025-05-12T13:06:47Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.7.2",
"date": "2025-05-12T10:42:32Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.0",
"date": "2025-05-12T09:12:04Z"
},
{ {
"name": "dgtlmoon/changedetection.io", "name": "dgtlmoon/changedetection.io",
"version": "0.49.17", "version": "0.49.17",
@@ -469,6 +139,16 @@
"version": "v2.18.1", "version": "v2.18.1",
"date": "2025-05-12T07:16:12Z" "date": "2025-05-12T07:16:12Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.4.2",
"date": "2025-05-11T22:18:43Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.2",
"date": "2025-05-11T16:40:55Z"
},
{ {
"name": "outline/outline", "name": "outline/outline",
"version": "v0.84.0", "version": "v0.84.0",
@@ -479,9 +159,339 @@
"version": "v3.5.3", "version": "v3.5.3",
"date": "2025-05-11T15:17:13Z" "date": "2025-05-11T15:17:13Z"
}, },
{
"name": "Prowlarr/Prowlarr",
"version": "v1.35.1.5034",
"date": "2025-04-30T11:02:36Z"
},
{ {
"name": "authelia/authelia", "name": "authelia/authelia",
"version": "v4.39.3", "version": "v4.39.3",
"date": "2025-05-11T11:12:15Z" "date": "2025-05-11T11:12:15Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.22.4.9896",
"date": "2025-04-23T18:51:12Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.28.0",
"date": "2025-05-11T06:25:22Z"
},
{
"name": "owncast/owncast",
"version": "v0.2.3",
"date": "2025-05-10T21:14:45Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.9",
"date": "2025-05-10T19:05:02Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v0.46.1",
"date": "2025-05-10T15:39:10Z"
},
{
"name": "juanfont/headscale",
"version": "v0.25.1",
"date": "2025-02-25T17:30:48Z"
},
{
"name": "pelican-dev/wings",
"version": "v1.0.0-beta13",
"date": "2025-05-09T23:14:41Z"
},
{
"name": "pelican-dev/panel",
"version": "v1.0.0-beta21",
"date": "2025-05-09T23:14:23Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.19.1",
"date": "2025-05-09T19:15:10Z"
},
{
"name": "home-assistant/core",
"version": "2025.5.1",
"date": "2025-05-09T15:05:54Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.8",
"date": "2025-03-25T13:33:10Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v0.53.0",
"date": "2025-05-08T19:56:55Z"
},
{
"name": "ellite/Wallos",
"version": "v3.1.0",
"date": "2025-05-08T15:33:17Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.02.4",
"date": "2025-05-08T15:03:17Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.12.0",
"date": "2025-05-08T13:27:46Z"
},
{
"name": "apache/tomcat",
"version": "10.1.41",
"date": "2025-05-08T12:45:44Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.4.2",
"date": "2025-05-08T08:11:27Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.14.10",
"date": "2025-05-07T20:23:29Z"
},
{
"name": "readeck/readeck",
"version": "0.18.2",
"date": "2025-05-07T19:22:22Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.36.3",
"date": "2025-05-07T17:22:07Z"
},
{
"name": "ipfs/kubo",
"version": "v0.34.1",
"date": "2025-03-25T18:11:12Z"
},
{
"name": "donaldzou/WGDashboard",
"version": "v4.2.3",
"date": "2025-05-07T15:35:04Z"
},
{
"name": "stonith404/pingvin-share",
"version": "v1.12.0",
"date": "2025-05-07T14:12:11Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.7.5",
"date": "2025-05-07T14:01:45Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.18",
"date": "2025-02-12T11:07:02Z"
},
{
"name": "ZoeyVid/NPMplus",
"version": "2025-05-07-r1",
"date": "2025-05-07T12:18:42Z"
},
{
"name": "docker/compose",
"version": "v2.36.0",
"date": "2025-05-07T11:54:14Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.2.0p42-rc1",
"date": "2025-05-07T11:50:30Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.14.7",
"date": "2025-05-07T11:32:23Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.1.3",
"date": "2025-05-07T11:09:21Z"
},
{
"name": "cockpit-project/cockpit",
"version": "338",
"date": "2025-05-07T10:43:29Z"
},
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
"date": "2025-05-07T09:12:08Z"
},
{
"name": "influxdata/influxdb",
"version": "v1.12.1rc0",
"date": "2025-05-06T20:56:30Z"
},
{
"name": "redis/redis",
"version": "8.0.1-int",
"date": "2025-05-06T18:40:34Z"
},
{
"name": "Athou/commafeed",
"version": "5.8.0",
"date": "2025-05-06T18:33:07Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.19.0",
"date": "2025-05-06T18:05:42Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.509",
"date": "2025-05-06T15:37:10Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-11.4.6",
"date": "2025-05-06T15:30:49Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.12.2",
"date": "2025-05-06T15:30:10Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.61",
"date": "2025-04-22T12:42:26Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.0.1",
"date": "2025-05-06T10:24:43Z"
},
{
"name": "syncthing/syncthing",
"version": "v1.29.6",
"date": "2025-05-06T07:57:02Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.10.2",
"date": "2025-05-06T03:12:53Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-tvdb",
"date": "2025-05-06T01:32:52Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.62.0",
"date": "2025-05-05T20:35:18Z"
},
{
"name": "postgres/postgres",
"version": "REL_13_21",
"date": "2025-05-05T20:34:49Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.20.9",
"date": "2025-05-05T19:24:09Z"
},
{
"name": "grafana/grafana",
"version": "v12.0.0",
"date": "2025-05-05T18:28:19Z"
},
{
"name": "apache/couchdb",
"version": "3.5.0",
"date": "2025-05-05T16:28:24Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.18.0",
"date": "2025-05-05T15:34:40Z"
},
{
"name": "traefik/traefik",
"version": "v3.4.0",
"date": "2025-05-05T13:59:23Z"
},
{
"name": "evcc-io/evcc",
"version": "0.203.5",
"date": "2025-05-05T06:41:02Z"
},
{
"name": "moghtech/komodo",
"version": "v1.17.5",
"date": "2025-05-04T22:17:06Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.0.16",
"date": "2025-05-04T22:06:15Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.11.2.4629",
"date": "2025-04-28T11:59:37Z"
},
{
"name": "Readarr/Readarr",
"version": "v2.0.0.4645",
"date": "2017-03-07T18:56:06Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.05.1",
"date": "2025-05-04T12:17:00Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.26.2",
"date": "2025-05-03T20:23:27Z"
},
{
"name": "actualbudget/actual",
"version": "v25.5.0",
"date": "2025-05-03T19:03:17Z"
},
{
"name": "rogerfar/rdt-client",
"version": "v2.0.111",
"date": "2025-05-03T16:25:30Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "kimai/kimai",
"version": "2.33.0",
"date": "2025-05-03T10:33:49Z"
},
{
"name": "documenso/documenso",
"version": "v1.10.3",
"date": "2025-05-02T23:23:25Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.304.0-rc.0",
"date": "2025-05-02T17:29:18Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.80",
"date": "2025-05-02T16:48:15Z"
} }
] ]

View File

@@ -12,9 +12,7 @@ const Sidebar = ({
selectedScript: string | null; selectedScript: string | null;
setSelectedScript: (script: string | null) => void; setSelectedScript: (script: string | null) => void;
}) => { }) => {
const filteredItems = items.filter(category => category.scripts && category.scripts.length > 0); const uniqueScripts = items.reduce((acc, category) => {
const uniqueScripts = filteredItems.reduce((acc, category) => {
for (const script of category.scripts) { for (const script of category.scripts) {
if (!acc.some((s) => s.name === script.name)) { if (!acc.some((s) => s.name === script.name)) {
acc.push(script); acc.push(script);
@@ -33,7 +31,7 @@ const Sidebar = ({
</div> </div>
<div className="rounded-lg"> <div className="rounded-lg">
<ScriptAccordion <ScriptAccordion
items={filteredItems} items={items}
selectedScript={selectedScript} selectedScript={selectedScript}
setSelectedScript={setSelectedScript} setSelectedScript={setSelectedScript}
/> />

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bitmagnet-io/bitmagnet
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apk add --no-cache \
gcc \
musl-dev \
git \
iproute2-ss \
sudo
$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go
msg_ok "Installed dependencies"
msg_info "Installing PostgreSQL"
$STD apk add --no-cache \
postgresql16 \
postgresql16-contrib \
postgresql16-openrc
$STD rc-update add postgresql
$STD rc-service postgresql start
msg_ok "Installed PostreSQL"
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing bitmagnet v${RELEASE}"
mkdir -p /opt/bitmagnet
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
cd /opt/bitmagnet
$STD go build
chmod +x bitmagnet
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
msg_ok "Installed bitmagnet v${RELEASE}"
msg_info "Enabling bitmagnet Service"
cat <<EOF >/etc/init.d/bitmagnet
#!/sbin/openrc-run
description="bitmagnet Service"
directory="/opt/bitmagnet"
command="/opt/bitmagnet/bitmagnet"
command_args="worker run --all"
command_background="true"
command_user="root"
pidfile="/var/run/bitmagnet.pid"
depend() {
use net
}
EOF
chmod +x /etc/init.d/bitmagnet
$STD rc-update add bitmagnet default
msg_ok "Enabled bitmagnet Service"
msg_info "Starting bitmagnet"
$STD service bitmagnet start
msg_ok "Started bitmagnet"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -1,105 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/homarr-labs/homarr
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apk add --no-cache \
redis \
nginx \
ca-certificates \
openssl \
jq \
make \
g++ \
gettext \
libstdc++ \
libgcc \
python3 \
py3-pip
msg_ok "Installed Dependencies"
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
install_node_and_modules
fetch_and_deploy_gh_release "homarr-labs/homarr"
msg_info "Installing Homarr"
mkdir -p /opt/homarr_db
touch /opt/homarr_db/db.sqlite
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
cd /opt/homarr
cat <<EOF >/opt/homarr/.env
DB_DRIVER='better-sqlite3'
DB_DIALECT='sqlite'
SECRET_ENCRYPTION_KEY='${SECRET_ENCRYPTION_KEY}'
DB_URL='/opt/homarr_db/db.sqlite'
TURBO_TELEMETRY_DISABLED=1
AUTH_PROVIDERS='credentials'
NODE_ENV='production'
EOF
$STD pnpm install
$STD pnpm build
msg_ok "Installed Homarr"
msg_info "Copying build and config files"
cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json .
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
mkdir -p /appdata/redis
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
mkdir -p /etc/nginx/templates
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
mkdir -p /opt/homarr/apps/cli
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
echo -e '#!/bin/sh\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
chmod +x /usr/bin/homarr
mkdir -p /opt/homarr/build
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Finished copying"
msg_info "Creating run script"
cat <<'EOF' >/opt/run_homarr.sh
#!/bin/sh
set -a
. /opt/homarr/.env
set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | awk '/src/ { print $7 }')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &
redis-server /opt/homarr/redis.conf &
node apps/tasks/tasks.cjs &
node apps/websocket/wssServer.cjs &
node apps/nextjs/server.js & PID=$!
wait $PID
EOF
chmod +x /opt/run_homarr.sh
msg_ok "Created run script"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf /opt/v${RELEASE}.zip
msg_ok "Cleaned"

Some files were not shown because too many files have changed in this diff Show More