diff --git a/.github/ISSUE_TEMPLATE/new-script.yaml b/.github/ISSUE_TEMPLATE/new-script.yaml index 419fd49b..e4ffbc8a 100644 --- a/.github/ISSUE_TEMPLATE/new-script.yaml +++ b/.github/ISSUE_TEMPLATE/new-script.yaml @@ -27,6 +27,17 @@ body: - PVE Tool (tools/pve) validations: required: true + - type: dropdown + id: arm64_support + attributes: + label: Does this script support arm64? + description: amd64 support is assumed. + options: + - arm64 supported + - arm64 not tested + - arm64 not supported + validations: + required: true - type: textarea id: task_details attributes: diff --git a/.github/agents/pve-script-creator.agent.md b/.github/agents/pve-script-creator.agent.md index 0fe427bf..ca88cc71 100644 --- a/.github/agents/pve-script-creator.agent.md +++ b/.github/agents/pve-script-creator.agent.md @@ -36,9 +36,10 @@ You are a specialist for creating and maintaining ProxmoxVED application scripts - All `apt` / `npm` / build commands must be prefixed with `$STD`. ### JSON Metadata -- Must include: `name`, `slug`, `categories`, `date_created`, `type`, `updateable`, `privileged`, `interface_port`, `documentation`, `website`, `logo`, `config_path`, `description`, `install_methods`, `default_credentials`, `notes`. +- Must include: `name`, `slug`, `categories`, `date_created`, `type`, `updateable`, `privileged`, `has_arm`, `interface_port`, `documentation`, `website`, `logo`, `config_path`, `description`, `install_methods`, `default_credentials`, `notes`. - `date_created` uses today's date (YYYY-MM-DD). - Resources in `install_methods` must match `var_*` values in the CT script. +- CT scripts must include `var_arm64="${var_arm64:-no}"` unless arm64 support has been verified. - Logo URL pattern: `https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/.webp` ## Checklist (verify before finishing) @@ -57,6 +58,8 @@ You are a specialist for creating and maintaining ProxmoxVED application scripts - [ ] `update_script()` present with backup/restore - [ ] Footer: `motd_ssh`, `customize`, `cleanup_lxc` - [ ] JSON metadata file matches CT script resources +- [ ] JSON `has_arm` accurately reflects arm64 support +- [ ] CT `var_arm64` accurately reflects arm64 support - [ ] Backups go to `/opt`, not `/tmp` ## Output Format diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0f59af6b..7e48f11e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -16,6 +16,14 @@ Link: # --- +## arm64 Support (**X** in brackets) + +- [ ] **arm64 supported** - Tested and supported on arm64. +- [ ] **arm64 not tested** - Assumed to work on arm64, but testing has not been done. +- [ ] **arm64 not supported** - Confirmed upstream dependencies or binaries do not support arm64. + +--- + ## 🛠️ Type of Change (**X** in brackets) - [ ] 🐞 **Bug fix** – Resolves an issue without breaking functionality. diff --git a/.github/workflows/push_json_to_pocketbase.yml b/.github/workflows/push_json_to_pocketbase.yml index b2fca5a1..67134418 100644 --- a/.github/workflows/push_json_to_pocketbase.yml +++ b/.github/workflows/push_json_to_pocketbase.yml @@ -230,6 +230,7 @@ jobs: if (resolvedType) payload.type = resolvedType; var resolvedCats = (data.categories || []).map(function(n) { return categoryNameToPbId[categoryIdToName[n]]; }).filter(Boolean); if (resolvedCats.length) payload.categories = resolvedCats; + if (data.has_arm !== undefined) payload.has_arm = data.has_arm === true || data.has_arm === 'true'; if (data.version !== undefined) payload.version = data.version; if (data.changelog !== undefined) payload.changelog = data.changelog; if (data.screenshots !== undefined) payload.screenshots = data.screenshots; diff --git a/.github/workflows/unmet-pr-close.yml b/.github/workflows/unmet-pr-close.yml index e107ecc6..a5c70e51 100644 --- a/.github/workflows/unmet-pr-close.yml +++ b/.github/workflows/unmet-pr-close.yml @@ -91,6 +91,19 @@ jobs: } } + const architectureOptions = [ + "**arm64 supported**", + "**arm64 not tested**", + "**arm64 not supported**" + ]; + const hasArchitectureSelection = architectureOptions.some(req => { + const line = findLine(req); + return line && checkboxChecked(line); + }); + if (!hasArchitectureSelection) { + missing.push("One arm64 support option (`arm64 supported`, `arm64 not tested`, or `arm64 not supported`) must be checked"); + } + if (missing.length > 0) { let list = ""; for (const m of missing) { diff --git a/.gitignore b/.gitignore index fb667408..80fd8294 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ vm/vm-manager.sh vm/debian-13-vm.sh stars.json stars.txt +.DS_Store diff --git a/ct/affine.sh b/ct/affine.sh index 31854548..9a2eeca6 100644 --- a/ct/affine.sh +++ b/ct/affine.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/airflow.sh b/ct/airflow.sh index e1564786..0e9f55d4 100644 --- a/ct/airflow.sh +++ b/ct/airflow.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/akaunting.sh b/ct/akaunting.sh index bb6df16e..d939a073 100644 --- a/ct/akaunting.sh +++ b/ct/akaunting.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/aliasvault.sh b/ct/aliasvault.sh index 534c8b79..a03512a8 100644 --- a/ct/aliasvault.sh +++ b/ct/aliasvault.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-30}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/almalinux.sh b/ct/almalinux.sh index 8e421d59..5522d8a0 100644 --- a/ct/almalinux.sh +++ b/ct/almalinux.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-almalinux}" var_version="${var_version:-10}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/alpine-cinny.sh b/ct/alpine-cinny.sh index bba4869c..6a4e6cce 100644 --- a/ct/alpine-cinny.sh +++ b/ct/alpine-cinny.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-256}" var_disk="${var_disk:-1}" var_os="${var_os:-alpine}" var_version="${var_version:-3.23}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-0}" diff --git a/ct/alpine.sh b/ct/alpine.sh index f9a814db..5da30046 100644 --- a/ct/alpine.sh +++ b/ct/alpine.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-5}" var_os="${var_os:-alpine}" var_version="${var_version:-3.22}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/archlinux.sh b/ct/archlinux.sh index 64ff64a9..b9bdfdb0 100644 --- a/ct/archlinux.sh +++ b/ct/archlinux.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-archlinux}" var_version="${var_version:-base}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/arm/adguard.sh b/ct/arm/adguard.sh deleted file mode 100644 index f0c2b99d..00000000 --- a/ct/arm/adguard.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://adguard.com/ - -APP="Adguard" -var_tags="${var_tags:-adblock}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/AdGuardHome ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_error "Adguard Home can only be updated via the user interface." - 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}" diff --git a/ct/arm/bazarr.sh b/ct/arm/bazarr.sh deleted file mode 100644 index 7c4642af..00000000 --- a/ct/arm/bazarr.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://www.bazarr.media/ - -APP="Bazarr" -var_tags="${var_tags:-arr}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var/lib/bazarr/ ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then - apt-get install -y libicu76 &>/dev/null - msg_info "Stopping Service" - systemctl stop bazarr - msg_ok "Stopped Service" - - PYTHON_VERSION="3.12" setup_uv - fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip" - - msg_info "Setup Bazarr" - mkdir -p /var/lib/bazarr/ - chmod 775 /opt/bazarr /var/lib/bazarr/ - # Always ensure venv exists - if [[ ! -d /opt/bazarr/venv/ ]]; then - $STD uv venv --clear /opt/bazarr/venv --python 3.12 - fi - - # Always check and fix service file if needed - if [[ -f /etc/systemd/system/bazarr.service ]] && grep -q "ExecStart=/usr/bin/python3" /etc/systemd/system/bazarr.service; then - sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service - systemctl daemon-reload - fi - sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt - $STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3 - msg_ok "Setup Bazarr" - - msg_info "Starting Service" - systemctl start bazarr - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}" diff --git a/ct/arm/bentopdf.sh b/ct/arm/bentopdf.sh deleted file mode 100644 index f7fb63e8..00000000 --- a/ct/arm/bentopdf.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/alam00000/bentopdf - -APP="BentoPDF" -var_tags="${var_tags:-pdf-editor}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/bentopdf ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - NODE_VERSION="24" setup_nodejs - - if check_for_gh_release "bentopdf" "alam00000/bentopdf"; then - msg_info "Stopping Service" - systemctl stop bentopdf - msg_ok "Stopped Service" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf" - - msg_info "Updating BentoPDF" - cd /opt/bentopdf - $STD npm ci --no-audit --no-fund - export SIMPLE_MODE=true - $STD npm run build -- --mode production - msg_ok "Updated BentoPDF" - - msg_info "Starting Service" - systemctl start bentopdf - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/arm/homeassistant.sh b/ct/arm/homeassistant.sh deleted file mode 100644 index 918f2d55..00000000 --- a/ct/arm/homeassistant.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://www.home-assistant.io/ - -APP="Home Assistant" -var_tags="${var_tags:-automation;smarthome}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-16}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var/lib/docker/volumes/hass_config/_data ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - UPD=$(msg_menu "Home Assistant Update Options" \ - "1" "Update ALL Containers" \ - "2" "Remove ALL Unused Images" \ - "3" "Install HACS" \ - "4" "Install FileBrowser") - - if [ "$UPD" == "1" ]; then - msg_info "Updating All Containers" - CONTAINER_LIST="${1:-$(docker ps -q)}" - for container in ${CONTAINER_LIST}; do - CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container "${container}")" - RUNNING_IMAGE="$(docker inspect --format "{{.Image}}" --type container "${container}")" - docker pull "${CONTAINER_IMAGE}" - LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")" - if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then - pip install -U runlike - echo "Updating ${container} image ${CONTAINER_IMAGE}" - DOCKER_COMMAND="$(runlike --use-volume-id "${container}")" - docker rm --force "${container}" - eval "${DOCKER_COMMAND}" - fi - done - msg_ok "Updated All Containers" - exit - fi - if [ "$UPD" == "2" ]; then - msg_info "Removing ALL Unused Images" - docker image prune -af - msg_ok "Removed ALL Unused Images" - exit - fi - if [ "$UPD" == "3" ]; then - msg_info "Installing Home Assistant Community Store (HACS)" - $STD apt update - cd /var/lib/docker/volumes/hass_config/_data - $STD bash <(curl -fsSL https://get.hacs.xyz) - msg_ok "Installed Home Assistant Community Store (HACS)" - echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" - exit - fi - if [ "$UPD" == "4" ]; then - msg_info "Installing FileBrowser" - RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') - $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-arm64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin - $STD filebrowser config init -a '0.0.0.0' - $STD filebrowser config set -a '0.0.0.0' - $STD filebrowser users add admin helper-scripts.com --perm.admin - msg_ok "Installed FileBrowser" - - msg_info "Creating Service" - service_path="/etc/systemd/system/filebrowser.service" - echo "[Unit] -Description=Filebrowser -After=network-online.target -[Service] -User=root -WorkingDirectory=/root/ -ExecStart=/usr/local/bin/filebrowser -r / -[Install] -WantedBy=default.target" >$service_path - - $STD systemctl enable --now filebrowser - msg_ok "Created Service" - - msg_ok "Completed successfully!\n" - echo -e "FileBrowser should be reachable by going to the following URL. - ${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n" - exit - 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}HA: http://${IP}:8123${CL}" -echo -e "${TAB}${GATEWAY}${BGN}Portainer: https://${IP}:9443${CL}" diff --git a/ct/arm/jellyfin.sh b/ct/arm/jellyfin.sh deleted file mode 100644 index 2bba8fdf..00000000 --- a/ct/arm/jellyfin.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://jellyfin.org/ - -APP="Jellyfin" -var_tags="${var_tags:-media}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-16}" -var_os="${var_os:-ubuntu}" -var_version="${var_version:-24.04}" -var_unprivileged="${var_unprivileged:-0}" -var_gpu="${var_gpu:-yes}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /usr/lib/jellyfin ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating Jellyfin" - ensure_dependencies libjemalloc2 - if [[ ! -f /usr/lib/libjemalloc.so ]]; then - ln -sf /usr/lib/aarch64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so - fi - $STD apt update - $STD apt -y upgrade - $STD apt -y --with-new-pkgs upgrade jellyfin jellyfin-server - msg_ok "Updated Jellyfin" - 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}:8096${CL}" diff --git a/ct/arm/kima-hub.sh b/ct/arm/kima-hub.sh deleted file mode 100644 index c7523027..00000000 --- a/ct/arm/kima-hub.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/Chevron7Locked/kima-hub - -APP="Kima-Hub" -var_tags="${var_tags:-music;streaming;media}" -var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-8192}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /opt/kima-hub ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then - msg_info "Stopping Services" - systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap - msg_ok "Stopped Services" - - msg_info "Backing up Data" - cp /opt/kima-hub/backend/.env /opt/kima-hub-backend-env.bak - cp /opt/kima-hub/frontend/.env /opt/kima-hub-frontend-env.bak - msg_ok "Backed up Data" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kima-hub" "Chevron7Locked/kima-hub" "tarball" - - msg_info "Restoring Data" - cp /opt/kima-hub-backend-env.bak /opt/kima-hub/backend/.env - cp /opt/kima-hub-frontend-env.bak /opt/kima-hub/frontend/.env - rm -f /opt/kima-hub-backend-env.bak /opt/kima-hub-frontend-env.bak - msg_ok "Restored Data" - - msg_info "Rebuilding Backend" - cd /opt/kima-hub/backend - $STD npm install - $STD npm run build - $STD npx prisma generate - $STD npx prisma migrate deploy - msg_ok "Rebuilt Backend" - - msg_info "Rebuilding Frontend" - cd /opt/kima-hub/frontend - $STD npm install - $STD npm run build - msg_ok "Rebuilt Frontend" - - msg_info "Starting Services" - systemctl start kima-backend kima-frontend kima-analyzer kima-analyzer-clap - msg_ok "Started Services" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3030${CL}" diff --git a/ct/arm/lubelogger.sh b/ct/arm/lubelogger.sh deleted file mode 100644 index 5d314abf..00000000 --- a/ct/arm/lubelogger.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: kristocopani -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://lubelogger.com/ - -APP="LubeLogger" -var_tags="${var_tags:-vehicle;car}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/lubelogger.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if check_for_gh_release "lubelogger" "hargata/lubelog"; then - msg_info "Stopping Service" - systemctl stop lubelogger - msg_ok "Stopped Service" - - msg_info "Backing up data" - mkdir -p /tmp/lubeloggerData/data - cp /opt/lubelogger/appsettings.json /tmp/lubeloggerData/appsettings.json - cp -r /opt/lubelogger/data/ /tmp/lubeloggerData/ - - # Lubelogger has moved multiples folders to the 'data' folder, and we need to move them before the update to keep the user data - # Github Discussion: https://github.com/hargata/lubelog/discussions/787 - [[ -e /opt/lubelogger/config ]] && cp -r /opt/lubelogger/config /tmp/lubeloggerData/data/ - [[ -e /opt/lubelogger/wwwroot/translations ]] && cp -r /opt/lubelogger/wwwroot/translations /tmp/lubeloggerData/data/ - [[ -e /opt/lubelogger/wwwroot/documents ]] && cp -r /opt/lubelogger/wwwroot/documents /tmp/lubeloggerData/data/ - [[ -e /opt/lubelogger/wwwroot/images ]] && cp -r /opt/lubelogger/wwwroot/images /tmp/lubeloggerData/data/ - [[ -e /opt/lubelogger/wwwroot/temp ]] && cp -r /opt/lubelogger/wwwroot/temp /tmp/lubeloggerData/data/ - [[ -e /opt/lubelogger/log ]] && cp -r /opt/lubelogger/log /tmp/lubeloggerData/ - rm -rf /opt/lubelogger - msg_ok "Backed up data" - - fetch_and_deploy_gh_release "lubelogger" "hargata/lubelog" "prebuild" "latest" "/opt/lubelogger" "LubeLogger*linux_x64.zip" - - msg_info "Configuring LubeLogger" - chmod 700 /opt/lubelogger/CarCareTracker - cp -rf /tmp/lubeloggerData/* /opt/lubelogger/ - rm -rf /tmp/lubeloggerData - msg_ok "Configured LubeLogger" - - msg_info "Starting Service" - systemctl start lubelogger - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}" diff --git a/ct/arm/pihole.sh b/ct/arm/pihole.sh deleted file mode 100644 index b16aba5c..00000000 --- a/ct/arm/pihole.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://pi-hole.net/ - -APP="Pihole" -var_tags="${var_tags:-adblock}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /etc/pihole ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating PiHole" - set +e - $STD apt update - $STD apt upgrade -y - /usr/local/bin/pihole -up - msg_ok "Updated PiHole" - 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}/admin${CL}" diff --git a/ct/arm/rdtclient.sh b/ct/arm/rdtclient.sh deleted file mode 100644 index ad669a2b..00000000 --- a/ct/arm/rdtclient.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/rogerfar/rdt-client - -APP="RDTClient" -var_tags="${var_tags:-torrent}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/rdtc/ ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if check_for_gh_release "rdt-client" "rogerfar/rdt-client"; then - msg_info "Stopping Service" - systemctl stop rdtc - msg_ok "Stopped Service" - - msg_info "Creating backup" - mkdir -p /opt/rdtc-backup - cp -R /opt/rdtc/appsettings.json /opt/rdtc-backup/ - msg_ok "Backup created" - - fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip" - cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/ - if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then - $STD apt remove --purge -y dotnet-sdk-8.0 - ensure_dependencies aspnetcore-runtime-9.0 - fi - rm -rf /opt/rdtc-backup - - msg_info "Starting Service" - systemctl start rdtc - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6500${CL}" diff --git a/ct/arm/vaultwarden.sh b/ct/arm/vaultwarden.sh deleted file mode 100644 index ed03e84b..00000000 --- a/ct/arm/vaultwarden.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -APP="Vaultwarden" -var_tags="${var_tags:-password-manager}" -var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-6144}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/vaultwarden.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - VAULT=$(get_latest_github_release "dani-garcia/vaultwarden") - WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds") - - UPD=$(msg_menu "Vaultwarden Update Options" \ - "1" "Update VaultWarden + Web-Vault" \ - "2" "Set Admin Token") - - if [ "$UPD" == "1" ]; then - if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then - msg_info "Stopping Service" - systemctl stop vaultwarden - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" - - msg_info "Updating VaultWarden to $VAULT (Patience)" - cd /tmp/vaultwarden-src - VW_VERSION="$VAULT" - export VW_VERSION - $STD cargo build --features "sqlite,mysql,postgresql" --release - if [[ -f /usr/bin/vaultwarden ]]; then - cp target/release/vaultwarden /usr/bin/ - else - cp target/release/vaultwarden /opt/vaultwarden/bin/ - fi - cd ~ && rm -rf /tmp/vaultwarden-src - msg_ok "Updated VaultWarden to ${VAULT}" - - msg_info "Starting Service" - systemctl start vaultwarden - msg_ok "Started Service" - else - msg_ok "VaultWarden is already up-to-date" - fi - - if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then - msg_info "Stopping Service" - systemctl stop vaultwarden - msg_ok "Stopped Service" - - msg_info "Updating Web-Vault to $WVRELEASE" - rm -rf /opt/vaultwarden/web-vault - mkdir -p /opt/vaultwarden/web-vault - - fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" - - chown -R root:root /opt/vaultwarden/web-vault/ - msg_ok "Updated Web-Vault to ${WVRELEASE}" - - msg_info "Starting Service" - systemctl start vaultwarden - msg_ok "Started Service" - else - msg_ok "Web-Vault is already up-to-date" - fi - - msg_ok "Updated successfully!" - exit - fi - - if [ "$UPD" == "2" ]; then - if [[ "${PHS_SILENT:-0}" == "1" ]]; then - msg_warn "Set Admin Token requires interactive mode, skipping." - exit - fi - read -r -s -p "Set the ADMIN_TOKEN: " NEWTOKEN - echo "" - if [[ -n "$NEWTOKEN" ]]; then - ensure_dependencies argon2 - TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e) - sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env - if [[ -f /opt/vaultwarden/data/config.json ]]; then - sed -i "s|\"admin_token\":.*|\"admin_token\": \"${TOKEN}\"|" /opt/vaultwarden/data/config.json - fi - systemctl restart vaultwarden - msg_ok "Admin token updated" - fi - exit - 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}https://${IP}:8000${CL}" diff --git a/ct/baserow.sh b/ct/baserow.sh index 78ec15bb..b83509c2 100644 --- a/ct/baserow.sh +++ b/ct/baserow.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/bitfocus-companion.sh b/ct/bitfocus-companion.sh index 2a951cd5..32816275 100644 --- a/ct/bitfocus-companion.sh +++ b/ct/bitfocus-companion.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/blinko.sh b/ct/blinko.sh index 9e00b180..8b800b07 100644 --- a/ct/blinko.sh +++ b/ct/blinko.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/bunkerm.sh b/ct/bunkerm.sh index 97c3fadc..f31f4e9b 100644 --- a/ct/bunkerm.sh +++ b/ct/bunkerm.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/caddymanager.sh b/ct/caddymanager.sh index db1a225d..8c0e0c72 100644 --- a/ct/caddymanager.sh +++ b/ct/caddymanager.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/centos.sh b/ct/centos.sh index 6ce04dbf..572cc67b 100644 --- a/ct/centos.sh +++ b/ct/centos.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-centos}" var_version="${var_version:-9}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/certimate.sh b/ct/certimate.sh index cd430ca9..d3f92a2d 100644 --- a/ct/certimate.sh +++ b/ct/certimate.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-256}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/clickhouse.sh b/ct/clickhouse.sh index 4c6ede16..e6f9e4e0 100644 --- a/ct/clickhouse.sh +++ b/ct/clickhouse.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/cliproxyapi.sh b/ct/cliproxyapi.sh index b23bd31e..67976332 100644 --- a/ct/cliproxyapi.sh +++ b/ct/cliproxyapi.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/colanode.sh b/ct/colanode.sh index 41f0f7bd..1d23bacb 100644 --- a/ct/colanode.sh +++ b/ct/colanode.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/cyberchef.sh b/ct/cyberchef.sh index 6abc0758..4b39f909 100644 --- a/ct/cyberchef.sh +++ b/ct/cyberchef.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/ddns-updater.sh b/ct/ddns-updater.sh index 506d3cf9..612e19cf 100644 --- a/ct/ddns-updater.sh +++ b/ct/ddns-updater.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/debian.sh b/ct/debian.sh index fb7b4785..31fd0db8 100644 --- a/ct/debian.sh +++ b/ct/debian.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" #var_fuse="${var_fuse:-no}" diff --git a/ct/deferred/arm.sh b/ct/deferred/arm.sh index 0270a829..142f2413 100644 --- a/ct/deferred/arm.sh +++ b/ct/deferred/arm.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-0}" header_info "$APP" diff --git a/ct/deferred/docspell.sh b/ct/deferred/docspell.sh index b78d5373..ecd27d20 100644 --- a/ct/deferred/docspell.sh +++ b/ct/deferred/docspell.sh @@ -13,6 +13,7 @@ var_cpu="${var_cpu:-4}" var_ram="${var_ram:-2048}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/jumpserver.sh b/ct/deferred/jumpserver.sh index dcc3e208..c91ceded 100644 --- a/ct/deferred/jumpserver.sh +++ b/ct/deferred/jumpserver.sh @@ -13,6 +13,7 @@ var_ram="8192" var_disk="60" var_os="debian" var_version="12" +var_arm64="${var_arm64:-no}" var_unprivileged="1" header_info "$APP" diff --git a/ct/deferred/maxun.sh b/ct/deferred/maxun.sh index 226c8dec..b404c4bf 100644 --- a/ct/deferred/maxun.sh +++ b/ct/deferred/maxun.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/ocis.sh b/ct/deferred/ocis.sh index ed67ef4a..6f9fb152 100644 --- a/ct/deferred/ocis.sh +++ b/ct/deferred/ocis.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/piler.sh b/ct/deferred/piler.sh index a6dfcf65..72bf39c0 100644 --- a/ct/deferred/piler.sh +++ b/ct/deferred/piler.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/polaris.sh b/ct/deferred/polaris.sh index e0394e05..1ec31952 100644 --- a/ct/deferred/polaris.sh +++ b/ct/deferred/polaris.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-7}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/roundcubemail.sh b/ct/deferred/roundcubemail.sh index 0c74f702..58214b32 100644 --- a/ct/deferred/roundcubemail.sh +++ b/ct/deferred/roundcubemail.sh @@ -13,6 +13,7 @@ var_cpu="${var_cpu:-1}" var_ram="${var_ram:-1024}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/rybbit.sh b/ct/deferred/rybbit.sh index aceaf970..9f1109fb 100644 --- a/ct/deferred/rybbit.sh +++ b/ct/deferred/rybbit.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/deferred/transmission-openvpn.sh b/ct/deferred/transmission-openvpn.sh index 763c7836..e38f5717 100644 --- a/ct/deferred/transmission-openvpn.sh +++ b/ct/deferred/transmission-openvpn.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_tun="${var_tun:-yes}" diff --git a/ct/devuan.sh b/ct/devuan.sh index 5d88e41d..a66e491c 100644 --- a/ct/devuan.sh +++ b/ct/devuan.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-devuan}" var_version="${var_version:-5.0}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/discourse.sh b/ct/discourse.sh index 2ddb8c10..d3c9fd10 100644 --- a/ct/discourse.sh +++ b/ct/discourse.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/dynacat.sh b/ct/dynacat.sh index ea3b65ac..63969ff8 100644 --- a/ct/dynacat.sh +++ b/ct/dynacat.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/edit-mind.sh b/ct/edit-mind.sh index 8132844a..c0bc1ec0 100644 --- a/ct/edit-mind.sh +++ b/ct/edit-mind.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-32}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/ente.sh b/ct/ente.sh index 97a46f4a..8398dce2 100644 --- a/ct/ente.sh +++ b/ct/ente.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/etherpad.sh b/ct/etherpad.sh index f69eb9a2..d8e6c7fd 100755 --- a/ct/etherpad.sh +++ b/ct/etherpad.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/excalidash.sh b/ct/excalidash.sh index d2a0a942..1720da9a 100644 --- a/ct/excalidash.sh +++ b/ct/excalidash.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/ezbookkeeping.sh b/ct/ezbookkeeping.sh new file mode 100644 index 00000000..48a40787 --- /dev/null +++ b/ct/ezbookkeeping.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Slaviša Arežina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/mayswind/ezbookkeeping + +APP="ezBookkeeping" +var_tags="${var_tags:-}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-1024}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +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/ezbookkeeping ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "ezbookkeeping" "mayswind/ezbookkeeping"; then + msg_info "Stopping Service" + systemctl stop ezbookkeeping + msg_ok "Stopped Service" + + msg_info "Backing up configuration" + mkdir -p /opt/ezbookkeeping-backup + cp /opt/ezbookkeeping/conf/ezbookkeeping.ini /opt/ezbookkeeping-backup/ + cp -r /opt/ezbookkeeping/data /opt/ezbookkeeping-backup/data/ + cp -r /opt/ezbookkeeping/storage /opt/ezbookkeeping-backup/storage/ + msg_ok "Backed up configuration" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ezbookkeeping" "mayswind/ezbookkeeping" "prebuild" "latest" "/opt/ezbookkeeping" "ezbookkeeping-*-linux-amd64.tar.gz" + + msg_info "Restoring configuration" + mv -f /opt/ezbookkeeping-backup/ezbookkeeping.ini /opt/ezbookkeeping/conf/ + mv -f /opt/ezbookkeeping-backup/data /opt/ezbookkeeping/data/ + mv -f /opt/ezbookkeeping-backup/storage /opt/ezbookkeeping/storage/ + rm -rf /opt/ezbookkeeping-backup + msg_ok "Restored configuration" + + msg_info "Starting Service" + systemctl start ezbookkeeping + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + cleanup_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}" diff --git a/ct/fedora.sh b/ct/fedora.sh index e011ec38..36435690 100644 --- a/ct/fedora.sh +++ b/ct/fedora.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-fedora}" var_version="${var_version:-43}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/flame.sh b/ct/flame.sh index ba2b2227..10ed3ec7 100644 --- a/ct/flame.sh +++ b/ct/flame.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/flaresolverr.sh b/ct/flaresolverr.sh index de4e5fbd..7bfa80ac 100644 --- a/ct/flaresolverr.sh +++ b/ct/flaresolverr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/fleet.sh b/ct/fleet.sh index 89564429..8cd68f7c 100644 --- a/ct/fleet.sh +++ b/ct/fleet.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index f50c169a..dd7132e2 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-1}" diff --git a/ct/garmin-grafana.sh b/ct/garmin-grafana.sh index e02047d8..5824b0d4 100644 --- a/ct/garmin-grafana.sh +++ b/ct/garmin-grafana.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gentoo.sh b/ct/gentoo.sh index cf6e88e9..43137cb8 100644 --- a/ct/gentoo.sh +++ b/ct/gentoo.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-gentoo}" var_version="${var_version:-current}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gluetun.sh b/ct/gluetun.sh index 361e48b3..39052bd0 100644 --- a/ct/gluetun.sh +++ b/ct/gluetun.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_tun="${var_tun:-yes}" diff --git a/ct/godoxy.sh b/ct/godoxy.sh index e4fa530a..83f795d3 100644 --- a/ct/godoxy.sh +++ b/ct/godoxy.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/headers/ezbookkeeping b/ct/headers/ezbookkeeping new file mode 100644 index 00000000..9f4d66a5 --- /dev/null +++ b/ct/headers/ezbookkeeping @@ -0,0 +1,6 @@ + ____ __ __ _ + ___ ____ / __ )____ ____ / /__/ /_____ ___ ____ (_)___ ____ _ + / _ \/_ / / __ / __ \/ __ \/ //_/ //_/ _ \/ _ \/ __ \/ / __ \/ __ `/ +/ __/ / /_/ /_/ / /_/ / /_/ / ,< / ,< / __/ __/ /_/ / / / / / /_/ / +\___/ /___/_____/\____/\____/_/|_/_/|_|\___/\___/ .___/_/_/ /_/\__, / + /_/ /____/ diff --git a/ct/headers/musicseerr b/ct/headers/musicseerr new file mode 100644 index 00000000..a7ceb86e --- /dev/null +++ b/ct/headers/musicseerr @@ -0,0 +1,6 @@ + __ ___ _ _____ + / |/ /_ _______(_)____/ ___/___ ___ __________ + / /|_/ / / / / ___/ / ___/\__ \/ _ \/ _ \/ ___/ ___/ + / / / / /_/ (__ ) / /__ ___/ / __/ __/ / / / +/_/ /_/\__,_/____/_/\___//____/\___/\___/_/ /_/ + diff --git a/ct/hermesagent.sh b/ct/hermesagent.sh index a2382a34..85121b4b 100644 --- a/ct/hermesagent.sh +++ b/ct/hermesagent.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -66,7 +67,7 @@ description msg_ok "Completed successfully!\n" echo -e "${CREATING}${GN}Hermes Agent setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Configure your model provider and gateway server inside the container:${CL}" -echo -e "${TAB}${BGN}su - hermes${CL}" -echo -e "${TAB}${BGN}hermes setup${CL}" -echo -e "${INFO}${YW}Key for Hermes API Server stored in:${CL}" +echo -e "${TAB}${BGN}hermes-setup${CL}" +echo -e "${INFO} When prompted to install the gateway service, choose 'user service'.${CL}" +echo -e "${INFO}${YW} Key for Hermes API Server stored in:${CL}" echo -e "${TAB}${BGN}/home/hermes/.hermes/.env${CL}" diff --git a/ct/invidious.sh b/ct/invidious.sh index 35da1a48..7c56db52 100644 --- a/ct/invidious.sh +++ b/ct/invidious.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/invoiceshelf.sh b/ct/invoiceshelf.sh index ad6338db..6f3012f0 100644 --- a/ct/invoiceshelf.sh +++ b/ct/invoiceshelf.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kan.sh b/ct/kan.sh index 2fad8f64..d96dc350 100644 --- a/ct/kan.sh +++ b/ct/kan.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/lidarr.sh b/ct/lidarr.sh index 0ae5996e..b8eb3eeb 100644 --- a/ct/lidarr.sh +++ b/ct/lidarr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/localagi.sh b/ct/localagi.sh index d6bd7a54..4d3ce7f0 100644 --- a/ct/localagi.sh +++ b/ct/localagi.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-no}" diff --git a/ct/matterjs-server.sh b/ct/matterjs-server.sh index f98488ef..b0118683 100644 --- a/ct/matterjs-server.sh +++ b/ct/matterjs-server.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/musicseerr.sh b/ct/musicseerr.sh new file mode 100644 index 00000000..49c09597 --- /dev/null +++ b/ct/musicseerr.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: michelroegl-brunner +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://musicseerr.com/ | Github: https://github.com/HabiRabbu/Musicseerr + +APP="MusicSeerr" +var_tags="${var_tags:-arr;media}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +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/musicseerr ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "musicseerr" "HabiRabbu/Musicseerr"; then + msg_info "Stopping Service" + systemctl stop musicseerr + msg_ok "Stopped Service" + + msg_info "Backing up Data" + cp -a /opt/musicseerr/backend/config /opt/musicseerr_config_backup + cp -a /opt/musicseerr/backend/cache /opt/musicseerr_cache_backup + msg_ok "Backed up Data" + + PYTHON_VERSION="3.13" setup_uv + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "musicseerr" "HabiRabbu/Musicseerr" "tarball" + NODE_VERSION="22" NODE_MODULE="pnpm@10.33.0" setup_nodejs + + msg_info "Building Frontend" + cd /opt/musicseerr/frontend + export NODE_OPTIONS="--max-old-space-size=3072" + rm -rf node_modules build + $STD pnpm install --frozen-lockfile + $STD pnpm run build + msg_ok "Built Frontend" + + msg_info "Updating Application" + mkdir -p /opt/musicseerr/backend/config /opt/musicseerr/backend/cache + $STD uv venv --clear /opt/musicseerr/venv + $STD uv pip install -r /opt/musicseerr/backend/requirements.txt --python=/opt/musicseerr/venv/bin/python + rm -rf /opt/musicseerr/backend/static + cp -r /opt/musicseerr/frontend/build /opt/musicseerr/backend/static + msg_ok "Updated Application" + + msg_info "Restoring Data" + rm -rf /opt/musicseerr/backend/config /opt/musicseerr/backend/cache + cp -a /opt/musicseerr_config_backup/. /opt/musicseerr/backend/config/ + cp -a /opt/musicseerr_cache_backup/. /opt/musicseerr/backend/cache/ + rm -rf /opt/musicseerr_config_backup /opt/musicseerr_cache_backup + msg_ok "Restored Data" + + msg_info "Starting Service" + systemctl start musicseerr + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8688${CL}" diff --git a/ct/nezha.sh b/ct/nezha.sh index 6acdf924..438bc392 100644 --- a/ct/nezha.sh +++ b/ct/nezha.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/openeuler.sh b/ct/openeuler.sh index eabe482e..dc3e287b 100644 --- a/ct/openeuler.sh +++ b/ct/openeuler.sh @@ -19,6 +19,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-openeuler}" var_version="${var_version:-25.03}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/opensuse.sh b/ct/opensuse.sh index 3d282472..ebec752c 100644 --- a/ct/opensuse.sh +++ b/ct/opensuse.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-opensuse}" var_version="${var_version:-16.0}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/oxicloud.sh b/ct/oxicloud.sh index 62f5f196..56cd4a03 100644 --- a/ct/oxicloud.sh +++ b/ct/oxicloud.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-3072}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/paperclip.sh b/ct/paperclip.sh index 4bae19d8..c48dbca0 100644 --- a/ct/paperclip.sh +++ b/ct/paperclip.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -29,7 +30,7 @@ function update_script() { exit fi - if check_for_gh_release "paperclip" "paperclipai/paperclip"; then + if check_for_gh_release "paperclip-ai" "paperclipai/paperclip"; then msg_info "Stopping Service" systemctl stop paperclip msg_ok "Stopped Service" @@ -38,7 +39,7 @@ function update_script() { cp /opt/paperclip/.env /opt/paperclip.env.bak msg_ok "Backed up Configuration" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperclip" "paperclipai/paperclip" "tarball" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball" msg_info "Restoring Configuration" mv /opt/paperclip.env.bak /opt/paperclip/.env diff --git a/ct/papermark.sh b/ct/papermark.sh index 89014718..3d80a443 100644 --- a/ct/papermark.sh +++ b/ct/papermark.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pixelfed.sh b/ct/pixelfed.sh index 9f14ab21..b0d210b2 100644 --- a/ct/pixelfed.sh +++ b/ct/pixelfed.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/plane.sh b/ct/plane.sh index 556805e5..b17e8741 100644 --- a/ct/plane.sh +++ b/ct/plane.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/postiz.sh b/ct/postiz.sh index bddd6c6a..56ba0327 100644 --- a/ct/postiz.sh +++ b/ct/postiz.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh index 249a3356..020e4f10 100644 --- a/ct/prowlarr.sh +++ b/ct/prowlarr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/puter.sh b/ct/puter.sh index 7c7967e4..830cf183 100644 --- a/ct/puter.sh +++ b/ct/puter.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index 63245083..417a7658 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/radarr.sh b/ct/radarr.sh index dc575038..5dc8325a 100644 --- a/ct/radarr.sh +++ b/ct/radarr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/rdtclient.sh b/ct/rdtclient.sh index fed85ae3..52f1a012 100644 --- a/ct/rdtclient.sh +++ b/ct/rdtclient.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/rockylinux.sh b/ct/rockylinux.sh index 4dc9024d..d823cb13 100644 --- a/ct/rockylinux.sh +++ b/ct/rockylinux.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-rockylinux}" var_version="${var_version:-10}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/rss-bridge.sh b/ct/rss-bridge.sh index 8f4aa1f5..2057cf90 100644 --- a/ct/rss-bridge.sh +++ b/ct/rss-bridge.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh index db510c0b..b7e92b75 100644 --- a/ct/sabnzbd.sh +++ b/ct/sabnzbd.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/seerr.sh b/ct/seerr.sh index 6c7b2abc..d15e3538 100644 --- a/ct/seerr.sh +++ b/ct/seerr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/shiori.sh b/ct/shiori.sh index 6e8e526b..2649fcd4 100644 --- a/ct/shiori.sh +++ b/ct/shiori.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/shlink.sh b/ct/shlink.sh index 8cfdc7ed..76e99fd4 100644 --- a/ct/shlink.sh +++ b/ct/shlink.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/simplelogin.sh b/ct/simplelogin.sh index bfbf148a..29113be8 100644 --- a/ct/simplelogin.sh +++ b/ct/simplelogin.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/skylite-ux.sh b/ct/skylite-ux.sh index e84df958..3156ae64 100644 --- a/ct/skylite-ux.sh +++ b/ct/skylite-ux.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/slink.sh b/ct/slink.sh index dc57d972..e297381a 100644 --- a/ct/slink.sh +++ b/ct/slink.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/slskd.sh b/ct/slskd.sh index 1b1b983a..8d8290de 100644 --- a/ct/slskd.sh +++ b/ct/slskd.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sonarr.sh b/ct/sonarr.sh index 0688e504..ad2f374a 100644 --- a/ct/sonarr.sh +++ b/ct/sonarr.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/spliit.sh b/ct/spliit.sh index 7a0b9ce7..d3654da6 100755 --- a/ct/spliit.sh +++ b/ct/spliit.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/squid.sh b/ct/squid.sh index f48fe95c..6260cc17 100644 --- a/ct/squid.sh +++ b/ct/squid.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) # Copyright (c) 2021-2026 community-scripts ORG # Author: 007hacky007 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -12,6 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/stoatchat.sh b/ct/stoatchat.sh index 432fcfff..b6b9937e 100644 --- a/ct/stoatchat.sh +++ b/ct/stoatchat.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-30}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/surrealdb.sh b/ct/surrealdb.sh index 70a35d31..bbccd5b6 100644 --- a/ct/surrealdb.sh +++ b/ct/surrealdb.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tolgee.sh b/ct/tolgee.sh index fe8be6ed..8cdc96f6 100644 --- a/ct/tolgee.sh +++ b/ct/tolgee.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tor-snowflake.sh b/ct/tor-snowflake.sh index 20397e45..92cd8637 100644 --- a/ct/tor-snowflake.sh +++ b/ct/tor-snowflake.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-0}" diff --git a/ct/twenty.sh b/ct/twenty.sh index e75af120..715c1e3a 100644 --- a/ct/twenty.sh +++ b/ct/twenty.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh index bd0e8dd0..83ef79af 100644 --- a/ct/ubuntu.sh +++ b/ct/ubuntu.sh @@ -14,6 +14,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-0}" header_info "$APP" diff --git a/ct/web-check.sh b/ct/web-check.sh index 0764b522..51a95ba7 100644 --- a/ct/web-check.sh +++ b/ct/web-check.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/xyops.sh b/ct/xyops.sh index 43861b3a..a63ba696 100644 --- a/ct/xyops.sh +++ b/ct/xyops.sh @@ -12,6 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/zitadel.sh b/ct/zitadel.sh index 881e683b..90e4e2b4 100644 --- a/ct/zitadel.sh +++ b/ct/zitadel.sh @@ -13,6 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/docs/contribution/GUIDE.md b/docs/contribution/GUIDE.md index 52c4d950..52907b40 100644 --- a/docs/contribution/GUIDE.md +++ b/docs/contribution/GUIDE.md @@ -274,6 +274,7 @@ var_ram="2048" # Min RAM needed (MB) var_disk="10" # Min disk (GB) var_os="debian" # OS type var_version="12" # OS version +var_arm64="${var_arm64:-no}" # arm64 support (no unless verified) var_unprivileged="1" # Security (1=unprivileged) header_info "$APP" diff --git a/docs/contribution/templates_ct/AppName.md b/docs/contribution/templates_ct/AppName.md index 8507c7c2..504ac9ab 100644 --- a/docs/contribution/templates_ct/AppName.md +++ b/docs/contribution/templates_ct/AppName.md @@ -101,6 +101,7 @@ Example: >| `var_disk` | Disk capacity | In GB | >| `var_os` | Operating system | alpine, debian, ubuntu | >| `var_version` | OS version | e.g., 3.20, 11, 12, 20.04 | +>| `var_arm64` | arm64 support | `no` unless arm64 support is verified | >| `var_unprivileged` | Container type | 1 = Unprivileged, 0 = Privileged | Example: @@ -113,6 +114,7 @@ var_ram="2048" var_disk="4" var_os="debian" var_version="12" +var_arm64="${var_arm64:-no}" var_unprivileged="1" ``` diff --git a/docs/contribution/templates_ct/AppName.sh b/docs/contribution/templates_ct/AppName.sh index cf9333c4..8155ab30 100644 --- a/docs/contribution/templates_ct/AppName.sh +++ b/docs/contribution/templates_ct/AppName.sh @@ -20,6 +20,8 @@ var_os="[OS]" # Default OS (e.g. debian, ubuntu, alpine) var_version="[VERSION]" # Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine) +var_arm64="${var_arm64:-no}" +# arm64 support status; default to no unless verified var_unprivileged="[UNPRIVILEGED]" # 1 = unprivileged container, 0 = privileged container diff --git a/install/alpine-cinny-install.sh b/install/alpine-cinny-install.sh index 56f88870..9536c2ae 100644 --- a/install/alpine-cinny-install.sh +++ b/install/alpine-cinny-install.sh @@ -18,10 +18,9 @@ $STD apk add --no-cache \ nginx msg_ok "Installed Dependencies" -msg_info "Installing Cinny" - fetch_and_deploy_gh_release "cinny" "cinnyapp/cinny" "prebuild" "latest" "/opt/cinny" "cinny-*.tar.gz" +msg_info "Configuring Cinny" cat <<'EOF' >/etc/nginx/http.d/default.conf server { listen 8080; @@ -45,7 +44,7 @@ server { EOF $STD rc-update add nginx default $STD rc-service nginx start -msg_ok "Installed Cinny" +msg_ok "Configured Cinny" motd_ssh customize diff --git a/install/arm/adguard-install.sh b/install/arm/adguard-install.sh deleted file mode 100644 index a2e9ee8d..00000000 --- a/install/arm/adguard-install.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://adguard.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_arm64.tar.gz" - -msg_info "Creating Service" -cat </etc/systemd/system/AdGuardHome.service -[Unit] -Description=AdGuard Home: Network-level blocker -ConditionFileIsExecutable=/opt/AdGuardHome/AdGuardHome -After=syslog.target network-online.target - -[Service] -StartLimitInterval=5 -StartLimitBurst=10 -ExecStart=/opt/AdGuardHome/AdGuardHome "-s" "run" -WorkingDirectory=/opt/AdGuardHome -StandardOutput=file:/var/log/AdGuardHome.out -StandardError=file:/var/log/AdGuardHome.err -Restart=always -RestartSec=10 -EnvironmentFile=-/etc/sysconfig/AdGuardHome - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now AdGuardHome -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/arm-test.sh b/install/arm/arm-test.sh deleted file mode 100644 index 8b137891..00000000 --- a/install/arm/arm-test.sh +++ /dev/null @@ -1 +0,0 @@ - diff --git a/install/arm/bazarr-install.sh b/install/arm/bazarr-install.sh deleted file mode 100644 index 879bcf59..00000000 --- a/install/arm/bazarr-install.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://www.bazarr.media/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y libicu76 -msg_ok "Installed Dependencies" - -PYTHON_VERSION="3.12" setup_uv -fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip" - -msg_info "Installing Bazarr" -mkdir -p /var/lib/bazarr/ -chmod 775 /opt/bazarr /var/lib/bazarr/ -sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt -$STD uv venv --clear /opt/bazarr/venv --python 3.12 -$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3 -msg_ok "Installed Bazarr" - -msg_info "Creating Service" -cat </etc/systemd/system/bazarr.service -[Unit] -Description=Bazarr Daemon -After=syslog.target network.target - -[Service] -WorkingDirectory=/opt/bazarr/ -UMask=0002 -Restart=on-failure -RestartSec=5 -Type=simple -ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py -KillSignal=SIGINT -TimeoutStopSec=20 -SyslogIdentifier=bazarr - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now bazarr -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/bentopdf-install.sh b/install/arm/bentopdf-install.sh deleted file mode 100644 index 39545544..00000000 --- a/install/arm/bentopdf-install.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/alam00000/bentopdf - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -NODE_VERSION="24" setup_nodejs -fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf" - -msg_info "Setup BentoPDF" -cd /opt/bentopdf -$STD npm ci --no-audit --no-fund -export SIMPLE_MODE=true -$STD npm run build -- --mode production -msg_ok "Setup BentoPDF" - -msg_info "Creating Service" -cat </etc/systemd/system/bentopdf.service -[Unit] -Description=BentoPDF Service -After=network.target - -[Service] -Type=simple -WorkingDirectory=/opt/bentopdf -ExecStart=/usr/bin/npx serve dist -p 8080 -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target -EOF - -systemctl enable -q --now bentopdf -msg_ok "Created & started service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/homeassistant-install.sh b/install/arm/homeassistant-install.sh deleted file mode 100644 index 369ef03c..00000000 --- a/install/arm/homeassistant-install.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://www.home-assistant.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Setup Python3" -$STD apt install -y \ - python3 \ - python3-dev \ - python3-pip \ - python3-venv -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Setup Python3" - -msg_info "Installing runlike" -$STD pip install runlike -msg_ok "Installed runlike" - -get_latest_release() { - curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 -} - -DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") -CORE_LATEST_VERSION=$(get_latest_release "home-assistant/core") -PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") - -msg_info "Installing Docker $DOCKER_LATEST_VERSION" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -fsSL https://get.docker.com) -msg_ok "Installed Docker $DOCKER_LATEST_VERSION" - -msg_info "Pulling Portainer $PORTAINER_LATEST_VERSION Image" -$STD docker pull portainer/portainer-ce:latest -msg_ok "Pulled Portainer $PORTAINER_LATEST_VERSION Image" - -msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" -$STD docker volume create portainer_data -$STD docker run -d \ - -p 8000:8000 \ - -p 9443:9443 \ - --name=portainer \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v portainer_data:/data \ - portainer/portainer-ce:latest -msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" - -msg_info "Pulling Home Assistant $CORE_LATEST_VERSION Image" -$STD docker pull ghcr.io/home-assistant/home-assistant:stable -msg_ok "Pulled Home Assistant $CORE_LATEST_VERSION Image" - -msg_info "Installing Home Assistant $CORE_LATEST_VERSION" -$STD docker volume create hass_config -$STD docker run -d \ - --name homeassistant \ - --privileged \ - --restart unless-stopped \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /dev:/dev \ - -v hass_config:/config \ - -v /etc/localtime:/etc/localtime:ro \ - --net=host \ - ghcr.io/home-assistant/home-assistant:stable -mkdir /root/hass_config -msg_ok "Installed Home Assistant $CORE_LATEST_VERSION" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/jellyfin-install.sh b/install/arm/jellyfin-install.sh deleted file mode 100644 index 8a68c47d..00000000 --- a/install/arm/jellyfin-install.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://jellyfin.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_custom "ℹ️" "${GN}" "If NVIDIA GPU passthrough is detected, you'll be asked whether to install drivers in the container" -setup_hwaccel - -msg_info "Installing Jellyfin" -VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" -if ! dpkg -s libjemalloc2 >/dev/null 2>&1; then - $STD apt install -y libjemalloc2 -fi -if [[ ! -f /usr/lib/libjemalloc.so ]]; then - ln -sf /usr/lib/aarch64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so -fi -if [[ ! -d /etc/apt/keyrings ]]; then - mkdir -p /etc/apt/keyrings -fi -curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor --yes --output /etc/apt/keyrings/jellyfin.gpg -cat </etc/apt/sources.list.d/jellyfin.sources -Types: deb -URIs: https://repo.jellyfin.org/${PCT_OSTYPE} -Suites: ${VERSION} -Components: main -Architectures: arm64 -Signed-By: /etc/apt/keyrings/jellyfin.gpg -EOF - -$STD apt update -$STD apt install -y jellyfin -# Configure log rotation to prevent disk fill (keeps fail2ban compatibility) (PR: #1690 / Issue: #11224) -cat </etc/logrotate.d/jellyfin -/var/log/jellyfin/*.log { - daily - rotate 3 - maxsize 100M - missingok - notifempty - compress - delaycompress - copytruncate -} -EOF -chown -R jellyfin:adm /etc/jellyfin -sleep 10 -systemctl restart jellyfin -if [[ "$CTTYPE" == "0" ]]; then - sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,jellyfin/' -e 's/^render:x:108:root,jellyfin$/ssl-cert:x:108:/' /etc/group -else - sed -i -e 's/^ssl-cert:x:104:$/render:x:104:jellyfin/' -e 's/^render:x:108:jellyfin$/ssl-cert:x:108:/' /etc/group -fi -msg_ok "Installed Jellyfin" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/kima-hub-install.sh b/install/arm/kima-hub-install.sh deleted file mode 100644 index 71f1e9a4..00000000 --- a/install/arm/kima-hub-install.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://www.kimai.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - apt-transport-https \ - apache2 \ - git \ - expect -msg_ok "Installed Dependencies" - -setup_mariadb -PHP_VERSION="8.4" PHP_APACHE="YES" setup_php -setup_composer - -msg_info "Setting up database" -DB_NAME=kimai_db -DB_USER=kimai -DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') -$STD mariadb -e "CREATE DATABASE $DB_NAME;" -$STD mariadb -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" -$STD mariadb -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" -{ - echo "Kimai-Credentials" - echo "Kimai Database User: $DB_USER" - echo "Kimai Database Password: $DB_PASS" - echo "Kimai Database Name: $DB_NAME" -} >>~/kimai.creds -msg_ok "Set up database" - -fetch_and_deploy_gh_release "kimai" "kimai/kimai" "tarball" - -msg_info "Setup Kimai" -cd /opt/kimai -echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc -source ~/.bashrc -$STD composer install --no-dev --optimize-autoloader --no-interaction -cp .env.dist .env -sed -i "/^DATABASE_URL=/c\DATABASE_URL=mysql://$DB_USER:$DB_PASS@127.0.0.1:3306/$DB_NAME?charset=utf8mb4&serverVersion=mariadb-$MYSQL_VERSION" /opt/kimai/.env -$STD bin/console kimai:install -n -$STD expect </opt/kimai/config/packages/local.yaml -kimai: - timesheet: - rounding: - default: - begin: 15 - end: 15 - -EOF -msg_ok "Installed Kimai" - -msg_info "Creating Service" -cat </etc/apache2/sites-available/kimai.conf - - ServerAdmin webmaster@localhost - DocumentRoot /opt/kimai/public/ - - - Options FollowSymLinks - AllowOverride All - Require all granted - - - ErrorLog /var/log/apache2/error.log - CustomLog /var/log/apache2/access.log combined - - -EOF -$STD a2ensite kimai.conf -$STD a2dissite 000-default.conf -$STD systemctl reload apache2 -msg_ok "Created Service" - -msg_info "Setup Permissions" -chown -R :www-data /opt/* -chmod -R g+r /opt/* -chmod -R g+rw /opt/* -chown -R www-data:www-data /opt/* -chmod -R 777 /opt/* -msg_ok "Setup Permissions" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/lubelogger-install.sh b/install/arm/lubelogger-install.sh deleted file mode 100644 index 893e5c43..00000000 --- a/install/arm/lubelogger-install.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: kristocopani -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://lubelogger.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -fetch_and_deploy_gh_release "lubelogger" "hargata/lubelog" "prebuild" "latest" "/opt/lubelogger" "LubeLogger*linux_x64.zip" - -msg_info "Configuring LubeLogger" -cd /opt/lubelogger -chmod 700 /opt/lubelogger/CarCareTracker -cp /opt/lubelogger/appsettings.json /opt/lubelogger/appsettings_bak.json -jq '.Kestrel = {"Endpoints": {"Http": {"Url": "http://0.0.0.0:5000"}}}' /opt/lubelogger/appsettings_bak.json >/opt/lubelogger/appsettings.json -rm -rf /opt/lubelogger/appsettings_bak.json -msg_ok "Configured LubeLogger" - -msg_info "Creating Service" -cat </etc/systemd/system/lubelogger.service -[Unit] -Description=LubeLogger Daemon -After=network.target - -[Service] -User=root - -Type=simple -WorkingDirectory=/opt/lubelogger -ExecStart=/opt/lubelogger/CarCareTracker -TimeoutStopSec=20 -KillMode=process -Restart=on-failure - -[Install] -WantedBy=multi-user.target -EOF - -systemctl enable -q --now lubelogger -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/pihole-install.sh b/install/arm/pihole-install.sh deleted file mode 100644 index 24ef9d31..00000000 --- a/install/arm/pihole-install.sh +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://pi-hole.net/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://pi-hole.net/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://install.pi-hole.net" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi - -msg_info "Installing Dependencies" -$STD apt install -y ufw -msg_ok "Installed Dependencies" - -msg_info "Installing Pi-hole" -mkdir -p /etc/pihole -touch /etc/pihole/pihole.toml -$STD bash <(curl -fsSL https://install.pi-hole.net) --unattended -sed -i -E ' -/^\s*upstreams =/ s|=.*|= ["8.8.8.8", "8.8.4.4"]| -/^\s*interface =/ s|=.*|= "eth0"| -/^\s*queryLogging =/ s|=.*|= true| -/^\s*size =/ s|=.*|= 10000| -/^\s*active =/ s|=.*|= true| -/^\s*listeningMode =/ s|=.*|= "LOCAL"| -/^\s*port =/ s|=.*|= "80o,443os,[::]:80o,[::]:443os"| -/^\s*pwhash =/ s|=.*|= ""| - -# DHCP Disable -/^\s*\[dhcp\]/,/^\s*\[/{s/^\s*active = true/ active = false/} - -# NTP Disable -/^\s*\[ntp.ipv4\]/,/^\s*\[/{s/^\s*active = true/ active = false/} -/^\s*\[ntp.ipv6\]/,/^\s*\[/{s/^\s*active = true/ active = false/} -/^\s*\[ntp.sync\]/,/^\s*\[/{s/^\s*active = true/ active = false/} -/^\s*\[ntp.sync\]/,/^\s*\[/{s/^\s*interval = [0-9]+/ interval = 0/} -/^\s*\[ntp.sync.rtc\]/,/^\s*\[/{s/^\s*set = true/ set = false/} - -# set domainNeeded und expandHosts -/^\s*domainNeeded =/ s|=.*|= true| -/^\s*expandHosts =/ s|=.*|= true| -' /etc/pihole/pihole.toml - -cat </etc/dnsmasq.d/01-pihole.conf -server=8.8.8.8 -server=8.8.4.4 -EOF -$STD pihole-FTL --config ntp.sync.interval 0 -systemctl restart pihole-FTL.service -msg_ok "Installed Pi-hole" - -read -r -p "${TAB3}Would you like to add Unbound? " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? " prompt - msg_info "Installing Unbound" - mkdir -p /etc/unbound/unbound.conf.d - cat </etc/unbound/unbound.conf.d/pi-hole.conf -server: - verbosity: 0 - interface: 127.0.0.1 - port: 5335 - do-ip6: no - do-ip4: yes - do-udp: yes - do-tcp: yes - num-threads: 1 - hide-identity: yes - hide-version: yes - harden-glue: yes - harden-dnssec-stripped: yes - harden-referral-path: yes - use-caps-for-id: no - harden-algo-downgrade: no - qname-minimisation: yes - aggressive-nsec: yes - rrset-roundrobin: yes - cache-min-ttl: 300 - cache-max-ttl: 14400 - msg-cache-slabs: 8 - rrset-cache-slabs: 8 - infra-cache-slabs: 8 - key-cache-slabs: 8 - serve-expired: yes - serve-expired-ttl: 3600 - edns-buffer-size: 1232 - prefetch: yes - prefetch-key: yes - target-fetch-policy: "3 2 1 1 1" - unwanted-reply-threshold: 10000000 - rrset-cache-size: 256m - msg-cache-size: 128m - so-rcvbuf: 1m - private-address: 192.168.0.0/16 - private-address: 169.254.0.0/16 - private-address: 172.16.0.0/12 - private-address: 10.0.0.0/8 - private-address: fd00::/8 - private-address: fe80::/10 -EOF - mkdir -p /etc/dnsmasq.d/ - cat </etc/dnsmasq.d/99-edns.conf -edns-packet-max=1232 -EOF - - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - cat <>/etc/unbound/unbound.conf.d/pi-hole.conf - tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" -forward-zone: - name: "." - forward-tls-upstream: yes - forward-first: no - - forward-addr: 8.8.8.8@853#dns.google - forward-addr: 8.8.4.4@853#dns.google - forward-addr: 2001:4860:4860::8888@853#dns.google - forward-addr: 2001:4860:4860::8844@853#dns.google - - #forward-addr: 1.1.1.1@853#cloudflare-dns.com - #forward-addr: 1.0.0.1@853#cloudflare-dns.com - #forward-addr: 2606:4700:4700::1111@853#cloudflare-dns.com - #forward-addr: 2606:4700:4700::1001@853#cloudflare-dns.com - - #forward-addr: 9.9.9.9@853#dns.quad9.net - #forward-addr: 149.112.112.112@853#dns.quad9.net - #forward-addr: 2620:fe::fe@853#dns.quad9.net - #forward-addr: 2620:fe::9@853#dns.quad9.net -EOF - fi - $STD apt install -y unbound - cat </etc/dnsmasq.d/01-pihole.conf -server=127.0.0.1#5335 -server=8.8.8.8 -server=8.8.4.4 -EOF - - sed -i -E '/^\s*upstreams\s*=\s*\[/,/^\s*\]/c\ upstreams = [\n "127.0.0.1#5335",\n "8.8.4.4"\n ]' /etc/pihole/pihole.toml - systemctl restart unbound - systemctl restart pihole-FTL.service - msg_ok "Installed Unbound" -fi - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/rdtclient-install.sh b/install/arm/rdtclient-install.sh deleted file mode 100644 index 784107f3..00000000 --- a/install/arm/rdtclient-install.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/rogerfar/rdt-client - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt-get install -y unzip -msg_ok "Installed Dependencies" - -msg_info "Installing ASP.NET Core Runtime" -$STD apt-get install -y libc6 -$STD apt-get install -y libgcc1 -$STD apt-get install -y libgssapi-krb5-2 -$STD apt-get install -y libicu72 -$STD apt-get install -y liblttng-ust1 -$STD apt-get install -y libssl3 -$STD apt-get install -y libstdc++6 -$STD apt-get install -y zlib1g - -curl -SL -o dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/6f79d99b-dc38-4c44-a549-32329419bb9f/a411ec38fb374e3a4676647b236ba021/dotnet-sdk-9.0.100-linux-arm64.tar.gz -mkdir -p /usr/share/dotnet -$STD tar -zxf dotnet.tar.gz -C /usr/share/dotnet -$STD ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet -msg_ok "Installed ASP.NET Core Runtime" - -fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip" - -msg_info "Setting up rdtclient" -cd /opt/rdtc -mkdir -p data/{db,downloads} -sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json -msg_ok "Configured rdtclient" - -msg_info "Creating Service" -cat </etc/systemd/system/rdtc.service -[Unit] -Description=RdtClient Service - -[Service] -WorkingDirectory=/opt/rdtc -ExecStart=/usr/bin/dotnet RdtClient.Web.dll -SyslogIdentifier=RdtClient -User=root - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now rdtc -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/arm/vaultwarden-install.sh b/install/arm/vaultwarden-install.sh deleted file mode 100644 index a2c02db8..00000000 --- a/install/arm/vaultwarden-install.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - build-essential \ - pkgconf \ - libssl-dev \ - libmariadb-dev-compat \ - libpq-dev \ - argon2 \ - ssl-cert -msg_ok "Installed Dependencies" - -setup_rust -fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" - -msg_info "Building Vaultwarden (Patience)" -cd /tmp/vaultwarden-src -VW_VERSION=$(get_latest_github_release "dani-garcia/vaultwarden") -export VW_VERSION -$STD cargo build --features "sqlite,mysql,postgresql" --release -msg_ok "Built Vaultwarden" - -msg_info "Setting up Vaultwarden" -$STD addgroup --system vaultwarden -$STD adduser --system --home /opt/vaultwarden --shell /usr/sbin/nologin --no-create-home --gecos 'vaultwarden' --ingroup vaultwarden --disabled-login --disabled-password vaultwarden -mkdir -p /opt/vaultwarden/{bin,data,web-vault} -cp target/release/vaultwarden /opt/vaultwarden/bin/ -cd ~ && rm -rf /tmp/vaultwarden-src -msg_ok "Set up Vaultwarden" - -fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" - -msg_info "Configuring Vaultwarden" -cat </opt/vaultwarden/.env -ADMIN_TOKEN='' -ROCKET_ADDRESS=0.0.0.0 -ROCKET_TLS='{certs="/opt/vaultwarden/ssl-cert-snakeoil.pem",key="/opt/vaultwarden/ssl-cert-snakeoil.key"}' -DATA_FOLDER=/opt/vaultwarden/data -DATABASE_MAX_CONNS=10 -WEB_VAULT_FOLDER=/opt/vaultwarden/web-vault -WEB_VAULT_ENABLED=true -EOF -mv /etc/ssl/certs/ssl-cert-snakeoil.pem /opt/vaultwarden/ -mv /etc/ssl/private/ssl-cert-snakeoil.key /opt/vaultwarden/ - -chown -R vaultwarden:vaultwarden /opt/vaultwarden/ -chown root:root /opt/vaultwarden/bin/vaultwarden -chmod +x /opt/vaultwarden/bin/vaultwarden -chown -R root:root /opt/vaultwarden/web-vault/ -chmod +r /opt/vaultwarden/.env -msg_ok "Configured Vaultwarden" - -msg_info "Creating Service" -cat </etc/systemd/system/vaultwarden.service -[Unit] -Description=Bitwarden Server (Powered by Vaultwarden) -Documentation=https://github.com/dani-garcia/vaultwarden -After=network.target - -[Service] -User=vaultwarden -Group=vaultwarden -EnvironmentFile=-/opt/vaultwarden/.env -ExecStart=/opt/vaultwarden/bin/vaultwarden -LimitNOFILE=65535 -LimitNPROC=4096 -PrivateTmp=true -PrivateDevices=true -ProtectHome=true -ProtectSystem=strict -DevicePolicy=closed -ProtectControlGroups=yes -ProtectKernelModules=yes -ProtectKernelTunables=yes -RestrictNamespaces=yes -RestrictRealtime=yes -MemoryDenyWriteExecute=yes -LockPersonality=yes -WorkingDirectory=/opt/vaultwarden -ReadWriteDirectories=/opt/vaultwarden/data -AmbientCapabilities=CAP_NET_BIND_SERVICE - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now vaultwarden -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/ezbookkeeping-install.sh b/install/ezbookkeeping-install.sh new file mode 100644 index 00000000..fdc7e78d --- /dev/null +++ b/install/ezbookkeeping-install.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Slaviša Arežina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://ezbookkeeping.mayswind.net/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +fetch_and_deploy_gh_release "ezbookkeeping" "mayswind/ezbookkeeping" "prebuild" "latest" "/opt/ezbookkeeping" "ezbookkeeping-*-linux-amd64.tar.gz" +create_self_signed_cert + +msg_info "Configuring ezBookkeeping" +SECRET_KEY=$(openssl rand -base64 64 | tr -dc 'a-zA-Z0-9' | head -c50) +sed -i "s/enable_gzip = false/enable_gzip = true/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/protocol = http/protocol = https/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/http_port = 8080/http_port = 443/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/cert_file =/cert_file = \/etc\/ssl\/ezbookkeeping\/ezbookkeeping.crt/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/cert_key_file =/cert_key_file = \/etc\/ssl\/ezbookkeeping\/ezbookkeeping.key/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/domain = localhost/domain = ${LOCAL_IP}/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +sed -i "s/secret_key =/secret_key = ${SECRET_KEY}/" /opt/ezbookkeeping/conf/ezbookkeeping.ini +msg_ok "Configured ezBookkeeping" + +msg_info "Creating service" +cat </etc/systemd/system/ezbookkeeping.service +[Unit] +Description=ezBookkeeping Service +After=network.target + +[Service] +WorkingDirectory=/opt/ezbookkeeping +ExecStart=/opt/ezbookkeeping/ezbookkeeping server run +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ezbookkeeping +msg_ok "Created service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/hermesagent-install.sh b/install/hermesagent-install.sh index 28f6f85e..01c57b00 100644 --- a/install/hermesagent-install.sh +++ b/install/hermesagent-install.sh @@ -93,10 +93,27 @@ EOF systemctl enable -q --now hermes-dashboard msg_ok "Created Dashboard Service" +msg_info "Creating Setup Helper" +cat <<'SETUP' >/usr/bin/hermes-setup +#!/usr/bin/env bash +set -a; source /etc/default/hermes; set +a +/home/hermes/.local/bin/hermes setup +chown -R hermes:hermes /home/hermes +chmod 750 /home/hermes +chmod 700 /home/hermes/.hermes +if [[ -f /home/hermes/.config/systemd/user/hermes-gateway.service ]]; then + su - hermes -c 'systemctl --user enable --now hermes-gateway' +fi +echo "Hermes setup complete. File permissions restored." +SETUP +chmod +x /usr/bin/hermes-setup +msg_ok "Created Setup Helper" + msg_info "Configuring Login Hints" cat <<'HINT' >/etc/profile.d/hermes-hint.sh if [[ "$(id -u)" -eq 0 ]]; then - echo " Use 'su - hermes' to switch to the hermes user for running Hermes Agent." + echo " Run 'hermes-setup' to configure your model provider and gateway server." + echo " Use 'su - hermes' (with the dash) to switch to the hermes user." fi HINT msg_ok "Configured Login Hints" diff --git a/install/matterjs-server-install.sh b/install/matterjs-server-install.sh index c5ab7fad..4cd6c0a6 100644 --- a/install/matterjs-server-install.sh +++ b/install/matterjs-server-install.sh @@ -22,6 +22,16 @@ $STD npm install matter-server mkdir -p /var/lib/matterjs-server msg_ok "Installed MatterJS-Server" +msg_info "Configuring Network" +cat </etc/sysctl.d/60-ipv6-ra-rio.conf +net.ipv6.conf.default.accept_ra_rtr_pref=1 +net.ipv6.conf.default.accept_ra_rt_info_max_plen=128 +net.ipv6.conf.eth0.accept_ra_rtr_pref=1 +net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=128 +EOF +$STD sysctl -p /etc/sysctl.d/60-ipv6-ra-rio.conf +msg_ok "Configured Network" + msg_info "Creating Service" cat </etc/systemd/system/matterjs-server.service [Unit] diff --git a/install/musicseerr-install.sh b/install/musicseerr-install.sh new file mode 100644 index 00000000..14184486 --- /dev/null +++ b/install/musicseerr-install.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Michel Roegl-Brunner +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://musicseerr.com/ | Github: https://github.com/HabiRabbu/Musicseerr + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +PYTHON_VERSION="3.13" setup_uv +fetch_and_deploy_gh_release "musicseerr" "HabiRabbu/Musicseerr" "tarball" +NODE_VERSION="22" NODE_MODULE="pnpm@10.33.0" setup_nodejs + +msg_info "Building Frontend" +cd /opt/musicseerr/frontend +export NODE_OPTIONS="--max-old-space-size=3072" +$STD pnpm install --frozen-lockfile +$STD pnpm run build +msg_ok "Built Frontend" + +msg_info "Setting up Application" +mkdir -p /opt/musicseerr/backend/config /opt/musicseerr/backend/cache +$STD uv venv /opt/musicseerr/venv +$STD uv pip install -r /opt/musicseerr/backend/requirements.txt --python=/opt/musicseerr/venv/bin/python +rm -rf /opt/musicseerr/backend/static +cp -r /opt/musicseerr/frontend/build /opt/musicseerr/backend/static +msg_ok "Set up Application" + +msg_info "Creating Service" +cat </etc/systemd/system/musicseerr.service +[Unit] +Description=MusicSeerr Service +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/musicseerr/backend +Environment=ROOT_APP_DIR=/opt/musicseerr/backend +Environment=PORT=8688 +ExecStart=/opt/musicseerr/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8688 --loop uvloop --http httptools --workers 1 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now musicseerr +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/paperclip-install.sh b/install/paperclip-install.sh index d9086965..1b642648 100644 --- a/install/paperclip-install.sh +++ b/install/paperclip-install.sh @@ -25,7 +25,7 @@ NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs PG_VERSION="17" setup_postgresql PG_DB_NAME="paperclip" PG_DB_USER="paperclip" setup_postgresql_db -fetch_and_deploy_gh_release "paperclip" "paperclipai/paperclip" "tarball" +fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball" msg_info "Building Paperclip" cd /opt/paperclip diff --git a/json/affine.json b/json/affine.json index 27846003..2c3252f0 100644 --- a/json/affine.json +++ b/json/affine.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3010, "documentation": "https://affine.pro/docs", "website": "https://affine.pro/", diff --git a/json/airflow.json b/json/airflow.json index 4c4a9b75..501a5809 100644 --- a/json/airflow.json +++ b/json/airflow.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://airflow.apache.org/docs/", "website": "https://airflow.apache.org/", diff --git a/json/akaunting.json b/json/akaunting.json index ff3e612b..4cf25f6d 100644 --- a/json/akaunting.json +++ b/json/akaunting.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://akaunting.com/hc/docs", "website": "https://akaunting.com/", diff --git a/json/aliasvault.json b/json/aliasvault.json index 0de1f40f..fe0d2168 100644 --- a/json/aliasvault.json +++ b/json/aliasvault.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 443, "documentation": "https://docs.aliasvault.net/", "website": "https://aliasvault.net/", diff --git a/json/allstarlink.json b/json/allstarlink.json index bb888931..1317bb2c 100644 --- a/json/allstarlink.json +++ b/json/allstarlink.json @@ -8,6 +8,7 @@ "type": "vm", "updateable": false, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://allstarlink.github.io/", "website": "https://www.allstarlink.org/", diff --git a/json/almalinux-10-vm.json b/json/almalinux-10-vm.json index bd63826d..e86b210b 100644 --- a/json/almalinux-10-vm.json +++ b/json/almalinux-10-vm.json @@ -8,6 +8,7 @@ "type": "vm", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://wiki.almalinux.org/", "website": "https://almalinux.org/", diff --git a/json/alpine-cinny.json b/json/alpine-cinny.json index ca2c5279..70cb8670 100644 --- a/json/alpine-cinny.json +++ b/json/alpine-cinny.json @@ -9,6 +9,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://github.com/cinnyapp/cinny", "website": "https://cinny.in/", diff --git a/json/alpine-ntfy.json b/json/alpine-ntfy.json index 0168c3ba..8daef184 100644 --- a/json/alpine-ntfy.json +++ b/json/alpine-ntfy.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.ntfy.sh/", "website": "https://ntfy.sh/", diff --git a/json/archlinux.json b/json/archlinux.json index d34fe530..8d47730e 100644 --- a/json/archlinux.json +++ b/json/archlinux.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://wiki.archlinux.org/", "website": "https://archlinux.org/", diff --git a/json/arm.json b/json/arm.json index 2af2c644..dc5a353e 100644 --- a/json/arm.json +++ b/json/arm.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": true, + "has_arm": false, "interface_port": 8080, "documentation": "https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki", "website": "https://github.com/automatic-ripping-machine/automatic-ripping-machine", diff --git a/json/arr-stack.json b/json/arr-stack.json index fa4978d4..69ce0dd9 100644 --- a/json/arr-stack.json +++ b/json/arr-stack.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3010, "documentation": "community-scripts/ProxmoxVED/blob/main/tools/arr-stack.sh", "website": "https://community-scripts.org", diff --git a/json/authentik.json b/json/authentik.json index f949fa80..064a2531 100644 --- a/json/authentik.json +++ b/json/authentik.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 9000, "documentation": "https://docs.goauthentik.io/", "website": "https://goauthentik.io/", diff --git a/json/baserow.json b/json/baserow.json index 91a369e1..4808ce6b 100644 --- a/json/baserow.json +++ b/json/baserow.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://baserow.io/docs/index", "website": "https://baserow.io/", diff --git a/json/bitfocus-companion.json b/json/bitfocus-companion.json index ed7390ea..ec7c59f6 100644 --- a/json/bitfocus-companion.json +++ b/json/bitfocus-companion.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8000, "documentation": "https://user.bitfocus.io/docs", "website": "https://bitfocus.io/companion", diff --git a/json/blinko.json b/json/blinko.json index b7b3a570..ee640461 100644 --- a/json/blinko.json +++ b/json/blinko.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 1111, "documentation": "https://docs.blinko.space/", "website": "https://blinko.space/", diff --git a/json/bunkerm.json b/json/bunkerm.json index 399b948f..90671f1f 100644 --- a/json/bunkerm.json +++ b/json/bunkerm.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 2000, "documentation": "https://bunkerai.dev/docs", "website": "https://bunkerai.dev/", diff --git a/json/caddymanager.json b/json/caddymanager.json index 0cd87e29..43393bce 100644 --- a/json/caddymanager.json +++ b/json/caddymanager.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://caddymanager.online/#/docs", "website": "https://caddymanager.online", diff --git a/json/certimate.json b/json/certimate.json index 8d941424..43e44de8 100644 --- a/json/certimate.json +++ b/json/certimate.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8090, "documentation": "https://docs.certimate.me/", "website": "https://certimate.me/", diff --git a/json/clickhouse.json b/json/clickhouse.json index 99a4f82e..4f5ae610 100644 --- a/json/clickhouse.json +++ b/json/clickhouse.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8123, "documentation": "https://clickhouse.com/docs/", "website": "https://clickhouse.com/", diff --git a/json/cliproxyapi.json b/json/cliproxyapi.json index bae6de3f..c8ee3fc5 100644 --- a/json/cliproxyapi.json +++ b/json/cliproxyapi.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8317, "documentation": "https://help.router-for.me/", "website": "https://github.com/router-for-me/CLIProxyAPI", diff --git a/json/colanode.json b/json/colanode.json index 0bad1334..77582c37 100644 --- a/json/colanode.json +++ b/json/colanode.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 4000, "documentation": "https://github.com/colanode/colanode/blob/main/hosting/docker", "website": "https://colanode.com/", diff --git a/json/cyberchef.json b/json/cyberchef.json index ac6b0a2f..589a1384 100644 --- a/json/cyberchef.json +++ b/json/cyberchef.json @@ -9,6 +9,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://github.com/gchq/CyberChef", "website": "https://gchq.github.io/CyberChef", diff --git a/json/ddclient.json b/json/ddclient.json index f5a0e8d7..aef3b05e 100644 --- a/json/ddclient.json +++ b/json/ddclient.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://ddclient.net/", "website": "https://ddclient.net/", diff --git a/json/ddns-updater.json b/json/ddns-updater.json index 3471485a..e1011d22 100644 --- a/json/ddns-updater.json +++ b/json/ddns-updater.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8000, "documentation": "https://github.com/qdm12/ddns-updater/wiki", "website": "https://github.com/qdm12/ddns-updater", diff --git a/json/degoog.json b/json/degoog.json index e23cd9fb..81114189 100644 --- a/json/degoog.json +++ b/json/degoog.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 4444, "documentation": "https://fccview.github.io/degoog/", "website": "https://github.com/fccview/degoog", diff --git a/json/dependency-check.json b/json/dependency-check.json index e258eb8a..d977beef 100644 --- a/json/dependency-check.json +++ b/json/dependency-check.json @@ -8,6 +8,7 @@ "type": "pve", "updateable": false, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": null, "website": null, diff --git a/json/discourse.json b/json/discourse.json index d4302989..fcfa45ba 100644 --- a/json/discourse.json +++ b/json/discourse.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://www.discourse.org/", "website": "https://www.discourse.org/", diff --git a/json/docuseal.json b/json/docuseal.json index 33c5cf41..24c3dc90 100644 --- a/json/docuseal.json +++ b/json/docuseal.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://www.docuseal.com/docs", "website": "https://www.docuseal.com/", diff --git a/json/dynacat.json b/json/dynacat.json index 59736859..62791894 100644 --- a/json/dynacat.json +++ b/json/dynacat.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://dynacat.artur.zone/", "website": "https://github.com/Panonim/dynacat", diff --git a/json/edit-mind.json b/json/edit-mind.json index 94f20b4d..50a9f6f6 100644 --- a/json/edit-mind.json +++ b/json/edit-mind.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3745, "documentation": "https://github.com/IliasHad/edit-mind", "website": "https://github.com/IliasHad/edit-mind", diff --git a/json/ente.json b/json/ente.json index f0506e2d..18d8ce6b 100644 --- a/json/ente.json +++ b/json/ente.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": false, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/ente-io/ente", "website": "https://ente.io/", diff --git a/json/erpnext.json b/json/erpnext.json index d2612fb4..da09ad31 100644 --- a/json/erpnext.json +++ b/json/erpnext.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.erpnext.com/", "website": "https://erpnext.com/", diff --git a/json/espconnect.json b/json/espconnect.json index 48c7abef..73a2a4da 100644 --- a/json/espconnect.json +++ b/json/espconnect.json @@ -9,6 +9,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 443, "documentation": "https://github.com/thelastoutpostworkshop/ESPConnect", "website": "https://github.com/thelastoutpostworkshop/ESPConnect", diff --git a/json/etherpad.json b/json/etherpad.json index e3a73321..091cd561 100644 --- a/json/etherpad.json +++ b/json/etherpad.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 9001, "documentation": "https://etherpad.org/doc", "website": "https://etherpad.org", diff --git a/json/excalidash.json b/json/excalidash.json index b888cc19..1786a4e0 100644 --- a/json/excalidash.json +++ b/json/excalidash.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 6767, "documentation": "https://github.com/ZimengXiong/ExcaliDash/blob/main/README.md", "website": "https://github.com/ZimengXiong/ExcaliDash", diff --git a/json/ezbookkeeping.json b/json/ezbookkeeping.json new file mode 100644 index 00000000..cc149ac5 --- /dev/null +++ b/json/ezbookkeeping.json @@ -0,0 +1,36 @@ +{ + "name": "ezBookkeeping", + "slug": "ezbookkeeping", + "categories": [ + 23 + ], + "date_created": "2026-02-11", + "type": "ct", + "updateable": true, + "privileged": false, + "has_arm": false, + "interface_port": 443, + "documentation": "https://ezbookkeeping.mayswind.net/installation/", + "website": "https://ezbookkeeping.mayswind.net", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ezbookkeeping.webp", + "description": "ezBookkeeping is a lightweight, self-hosted personal finance app with a user-friendly interface and powerful bookkeeping features. It helps you record daily transactions, import data from various sources, and quickly search and filter your bills. You can analyze historical data using built-in charts or perform custom queries with your own chart dimensions to better understand spending patterns and financial trends.", + "install_methods": [ + { + "type": "default", + "script": "ct/ezbookkeeping.sh", + "config_path": "/opt/ezbookkeeping/conf/ezbookkeeping.ini", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} diff --git a/json/flame.json b/json/flame.json index d71c07c0..78e9435a 100644 --- a/json/flame.json +++ b/json/flame.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 5005, "documentation": "https://github.com/pawelmalak/flame/wiki", "website": "https://github.com/pawelmalak/flame", diff --git a/json/fleet.json b/json/fleet.json index 423cd14f..d60654d5 100644 --- a/json/fleet.json +++ b/json/fleet.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://fleetdm.com/docs", "website": "https://fleetdm.com/", diff --git a/json/forgejo-runner.json b/json/forgejo-runner.json index f713685b..331d17a4 100644 --- a/json/forgejo-runner.json +++ b/json/forgejo-runner.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://forgejo.org/docs/latest/admin/actions/runner-installation/", "website": "https://forgejo.org/docs/latest/admin/actions/runner-installation/", diff --git a/json/garmin-grafana.json b/json/garmin-grafana.json index 5e7e19af..385c90d5 100644 --- a/json/garmin-grafana.json +++ b/json/garmin-grafana.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/arpanghosh8453/garmin-grafana", "website": "https://github.com/arpanghosh8453/garmin-grafana", diff --git a/json/godoxy.json b/json/godoxy.json index 46d634be..7bbc57d0 100644 --- a/json/godoxy.json +++ b/json/godoxy.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://docs.godoxy.dev", "website": "https://github.com/yusing/godoxy", diff --git a/json/hermesagent.json b/json/hermesagent.json index 123151a7..3bb3cbec 100644 --- a/json/hermesagent.json +++ b/json/hermesagent.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://hermes-agent.nousresearch.com/docs", "website": "https://hermes-agent.nousresearch.com", @@ -41,7 +42,7 @@ "type": "warning" }, { - "text": "After container startup, login, switch to the hermes user (su - hermes) and run 'hermes setup' to configure your model provider and gateway server.", + "text": "After container startup, login as root and run 'hermes-setup' to configure your model provider and gateway server. When prompted to install the gateway service, install it as a user service (not a system service).", "type": "info" }, { diff --git a/json/invidious.json b/json/invidious.json index 17c914a3..72d0bb21 100644 --- a/json/invidious.json +++ b/json/invidious.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https:/docs.invidious.io", "website": "https://invidious.io", diff --git a/json/invoiceshelf.json b/json/invoiceshelf.json index c9cb022a..1a2d101b 100644 --- a/json/invoiceshelf.json +++ b/json/invoiceshelf.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.invoiceshelf.com/", "website": "https://invoiceshelf.com/", diff --git a/json/jitsi.json b/json/jitsi.json index 2987654f..03f03749 100644 --- a/json/jitsi.json +++ b/json/jitsi.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 443, "documentation": "https://jitsi.github.io/handbook/", "website": "https://jitsi.org/", diff --git a/json/kan.json b/json/kan.json index 67543e1a..ea8e64a0 100644 --- a/json/kan.json +++ b/json/kan.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/kanbn/kan#readme", "website": "https://kan.bn/", diff --git a/json/labca.json b/json/labca.json index 819fe43b..57393ed9 100644 --- a/json/labca.json +++ b/json/labca.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/hakwerk/labca", "website": "https://github.com/hakwerk/labca", diff --git a/json/librechat.json b/json/librechat.json index 5b1c57b9..f2229271 100644 --- a/json/librechat.json +++ b/json/librechat.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3080, "documentation": "https://www.librechat.ai/docs", "website": "https://www.librechat.ai/", diff --git a/json/lobehub.json b/json/lobehub.json index e6bb81b2..16ad5ca8 100644 --- a/json/lobehub.json +++ b/json/lobehub.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3210, "documentation": "https://lobehub.com/docs", "website": "https://lobehub.com/", diff --git a/json/localagi.json b/json/localagi.json index a31cebbc..eda9c253 100644 --- a/json/localagi.json +++ b/json/localagi.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/mudler/LocalAGI#installation-options", "website": "https://github.com/mudler/LocalAGI", diff --git a/json/lychee.json b/json/lychee.json index 540bc497..3011be70 100644 --- a/json/lychee.json +++ b/json/lychee.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://lycheeorg.dev/docs", "website": "https://lycheeorg.github.io/", diff --git a/json/matomo.json b/json/matomo.json index 715c0944..34b5612f 100644 --- a/json/matomo.json +++ b/json/matomo.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://matomo.org/docs/", "website": "https://matomo.org/", diff --git a/json/matterjs-server.json b/json/matterjs-server.json index 3f770918..2dea603f 100644 --- a/json/matterjs-server.json +++ b/json/matterjs-server.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 5580, "documentation": "https://github.com/matter-js/matterjs-server", "website": "https://github.com/matter-js/matterjs-server", diff --git a/json/musicseerr.json b/json/musicseerr.json new file mode 100644 index 00000000..2c959653 --- /dev/null +++ b/json/musicseerr.json @@ -0,0 +1,47 @@ +{ + "name": "MusicSeerr", + "slug": "musicseerr", + "categories": [14], + "date_created": "2026-05-22", + "type": "ct", + "updateable": true, + "privileged": false, + "has_arm": false, + "interface_port": 8688, + "documentation": "https://musicseerr.com/", + "website": "https://github.com/HabiRabbu/Musicseerr", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/musicseerr.webp", + "description": "MusicSeerr is a self-hosted music request and discovery app for Lidarr. Search MusicBrainz, request albums, stream from Jellyfin, Navidrome, Plex, or local files, and scrobble to ListenBrainz and Last.fm.", + "install_methods": [ + { + "type": "default", + "script": "ct/musicseerr.sh", + "config_path": "/opt/musicseerr/backend/config/config.json", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Requires a running Lidarr instance. Configure Lidarr and other integrations in the web UI after installation.", + "type": "info" + }, + { + "text": "Initial install includes a frontend build and may take several minutes.", + "type": "warning" + }, + { + "text": "For local file playback, mount your music library into the container and set the path in Settings > Local Files.", + "type": "info" + } + ] +} diff --git a/json/nagios.json b/json/nagios.json index 771f7491..4993d2bb 100644 --- a/json/nagios.json +++ b/json/nagios.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/quickstart.html", "website": "https://www.nagios.org/projects/nagios-core/", diff --git a/json/neko.json b/json/neko.json index b251dd86..f0a5f686 100644 --- a/json/neko.json +++ b/json/neko.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://neko.m1k1o.net/docs/v3/configuration", "website": "https://neko.m1k1o.net/", diff --git a/json/netbird-server.json b/json/netbird-server.json index 8f117832..41b9a07b 100644 --- a/json/netbird-server.json +++ b/json/netbird-server.json @@ -8,6 +8,7 @@ "type": "vm", "updateable": false, "privileged": false, + "has_arm": false, "interface_port": 443, "documentation": "https://docs.netbird.io/selfhosted/selfhosted-quickstart", "website": "https://netbird.io/", diff --git a/json/netbird.json b/json/netbird.json index b511e623..9909c278 100644 --- a/json/netbird.json +++ b/json/netbird.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": true, + "has_arm": false, "interface_port": null, "documentation": "https://docs.netbird.io/", "website": "https://netbird.io/", diff --git a/json/nezha.json b/json/nezha.json index 48d4c84b..dfbe358d 100644 --- a/json/nezha.json +++ b/json/nezha.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8008, "documentation": "https://nezha.wiki/en_US/guide/dashboard.html", "website": "https://nezha.wiki/en_US/", diff --git a/json/oxicloud.json b/json/oxicloud.json index 1f718b19..75815dd8 100644 --- a/json/oxicloud.json +++ b/json/oxicloud.json @@ -9,6 +9,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8086, "documentation": "https://github.com/DioCrafts/OxiCloud/tree/main/doc", "website": "https://github.com/DioCrafts/OxiCloud", diff --git a/json/paperclip.json b/json/paperclip.json index b60c621d..49ca3a7c 100644 --- a/json/paperclip.json +++ b/json/paperclip.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3100, "documentation": "https://docs.paperclip.ing/", "website": "https://paperclip.ing/", diff --git a/json/papermark.json b/json/papermark.json index d215aebe..fa05cfe3 100644 --- a/json/papermark.json +++ b/json/papermark.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://www.papermark.com/docs", "website": "https://www.papermark.com/", diff --git a/json/pixelfed.json b/json/pixelfed.json index 46341388..86e7c21f 100644 --- a/json/pixelfed.json +++ b/json/pixelfed.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.pixelfed.org/", "website": "https://pixelfed.org/", diff --git a/json/plane.json b/json/plane.json index f4578d24..a775c47c 100644 --- a/json/plane.json +++ b/json/plane.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://developers.plane.so/self-hosting/overview", "website": "https://plane.so", diff --git a/json/postiz.json b/json/postiz.json index 95bb842c..b4552acd 100644 --- a/json/postiz.json +++ b/json/postiz.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.postiz.com/", "website": "https://postiz.com/", diff --git a/json/puter.json b/json/puter.json index 9028c933..c1424669 100644 --- a/json/puter.json +++ b/json/puter.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 4100, "documentation": "https://docs.puter.com/", "website": "https://puter.com/", diff --git a/json/rss-bridge.json b/json/rss-bridge.json index c8a78b90..b463ca27 100644 --- a/json/rss-bridge.json +++ b/json/rss-bridge.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://rss-bridge.github.io/rss-bridge/", "website": "https://rss-bridge.org/", diff --git a/json/shiori.json b/json/shiori.json index b571945a..1b94114b 100644 --- a/json/shiori.json +++ b/json/shiori.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://github.com/go-shiori/shiori/tree/master/docs", "website": "https://github.com/go-shiori/shiori", diff --git a/json/shlink.json b/json/shlink.json index 6c9384d3..1506ca04 100644 --- a/json/shlink.json +++ b/json/shlink.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://shlink.io/documentation/", "website": "https://shlink.io/", diff --git a/json/simplelogin.json b/json/simplelogin.json index aad8d5fe..47fe8db0 100644 --- a/json/simplelogin.json +++ b/json/simplelogin.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://github.com/simple-login/app/blob/master/docs/", "website": "https://simplelogin.io/", diff --git a/json/skylite-ux.json b/json/skylite-ux.json index 1768ef83..d8b9d0c6 100644 --- a/json/skylite-ux.json +++ b/json/skylite-ux.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/Wetzel402/Skylite-UX", "website": "https://github.com/Wetzel402/Skylite-UX", diff --git a/json/slink.json b/json/slink.json index 337012a9..d3387630 100644 --- a/json/slink.json +++ b/json/slink.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://slink.pages.dev", "website": "https://github.com/andrii-kryvoviaz/slink", diff --git a/json/solidtime.json b/json/solidtime.json index fa09ee82..36bd075f 100644 --- a/json/solidtime.json +++ b/json/solidtime.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://docs.solidtime.io/", "website": "https://www.solidtime.io/", diff --git a/json/soulsync.json b/json/soulsync.json index 077505ba..46faa7d7 100644 --- a/json/soulsync.json +++ b/json/soulsync.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8008, "documentation": "https://github.com/Nezreka/SoulSync#readme", "website": "https://github.com/Nezreka/SoulSync", diff --git a/json/spliit.json b/json/spliit.json index 62500854..b0ab483a 100644 --- a/json/spliit.json +++ b/json/spliit.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://github.com/spliit-app/spliit#readme", "website": "https://spliit.app/", diff --git a/json/squid.json b/json/squid.json index 88a3aa82..5805b5ba 100644 --- a/json/squid.json +++ b/json/squid.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3128, "documentation": "https://wiki.squid-cache.org/SquidFaq", "website": "https://www.squid-cache.org/", diff --git a/json/stoatchat.json b/json/stoatchat.json index 412117e8..4fc2e9c9 100644 --- a/json/stoatchat.json +++ b/json/stoatchat.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://github.com/stoatchat/self-hosted", "website": "https://stoat.chat", diff --git a/json/storyteller.json b/json/storyteller.json index a5ad9fe7..351b9a37 100644 --- a/json/storyteller.json +++ b/json/storyteller.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8001, "documentation": "https://storyteller-platform.dev/docs/welcome", "website": "https://storyteller-platform.dev/", diff --git a/json/surrealdb.json b/json/surrealdb.json index 349234c9..9ba9a1a6 100644 --- a/json/surrealdb.json +++ b/json/surrealdb.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8000, "documentation": "https://surrealdb.com/docs", "website": "https://surrealdb.com/", diff --git a/json/teable.json b/json/teable.json index 1045c0e7..d878672d 100644 --- a/json/teable.json +++ b/json/teable.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://help.teable.io/", "website": "https://teable.io/", diff --git a/json/tolgee.json b/json/tolgee.json index 8f29d86a..1c8d6b67 100644 --- a/json/tolgee.json +++ b/json/tolgee.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://docs.tolgee.io/platform/self_hosting", "website": "https://tolgee.io/", diff --git a/json/tor-snowflake.json b/json/tor-snowflake.json index 680f31a0..da68fe7e 100644 --- a/json/tor-snowflake.json +++ b/json/tor-snowflake.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://community.torproject.org/relay/setup/snowflake/standalone/", "website": "https://snowflake.torproject.org/", diff --git a/json/tubearchivist.json b/json/tubearchivist.json index a23c6c08..944a745a 100644 --- a/json/tubearchivist.json +++ b/json/tubearchivist.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8000, "documentation": "https://docs.tubearchivist.com/", "website": "https://github.com/tubearchivist/tubearchivist", diff --git a/json/twenty.json b/json/twenty.json index be019bdd..085309e0 100644 --- a/json/twenty.json +++ b/json/twenty.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 3000, "documentation": "https://docs.twenty.com/", "website": "https://twenty.com/", diff --git a/json/unifi-os-server-vm.json b/json/unifi-os-server-vm.json index 8b4b1953..ab9a328c 100644 --- a/json/unifi-os-server-vm.json +++ b/json/unifi-os-server-vm.json @@ -8,6 +8,7 @@ "type": "vm", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": "https://help.ui.com/hc/en-us", "website": "https://www.ui.com/", diff --git a/json/update-apps.json b/json/update-apps.json index 0c559ce3..1e9ba365 100644 --- a/json/update-apps.json +++ b/json/update-apps.json @@ -8,6 +8,7 @@ "type": "pve", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": null, "documentation": null, "website": null, diff --git a/json/webtrees.json b/json/webtrees.json index f77d15a5..f50ea8e6 100644 --- a/json/webtrees.json +++ b/json/webtrees.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://webtrees.net/install/", "website": "https://webtrees.net/", diff --git a/json/xyops.json b/json/xyops.json index afc6d490..5bce92dd 100644 --- a/json/xyops.json +++ b/json/xyops.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 5522, "documentation": "https://github.com/pixlcore/xyops/tree/main/docs", "website": "https://github.com/pixlcore/xyops", diff --git a/json/yourls.json b/json/yourls.json index ee9db90d..96bcec69 100644 --- a/json/yourls.json +++ b/json/yourls.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 80, "documentation": "https://yourls.org/", "website": "https://yourls.org/", diff --git a/json/zitadel.json b/json/zitadel.json index b54fe479..67204e53 100644 --- a/json/zitadel.json +++ b/json/zitadel.json @@ -8,6 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, + "has_arm": false, "interface_port": 8080, "documentation": "https://zitadel.com/docs/guides/overview", "website": "https://zitadel.com",