From e1cdbe7390beb6f44a9be69dbaf2200a717eb89f Mon Sep 17 00:00:00 2001 From: vhsdream Date: Thu, 11 Dec 2025 10:59:33 -0500 Subject: [PATCH 01/34] OpenCloud: adjust service files --- install/opencloud-install.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index ddc3ccee7..8dd0a44d7 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -45,6 +45,12 @@ EOF $STD apt-get update $STD apt-get install -y coolwsd code-brand systemctl stop coolwsd +mkdir -p /etc/systemd/system/coolwsd.service.d +cat </etc/systemd/system/coolwsd.service.d/override.conf +[Unit] +Before=opencloud-wopi.service +EOF +systemctl daemon-reload COOLPASS="$(openssl rand -base64 36)" $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPASS" echo "$COOLPASS" >~/.coolpass @@ -59,8 +65,8 @@ CONFIG_DIR="/etc/opencloud" ENV_FILE="${CONFIG_DIR}/opencloud.env" mkdir -p "$DATA_DIR" "$CONFIG_DIR"/assets/apps -curl -fsSL https://raw.githubusercontent.com/opencloud-eu/opencloud/refs/heads/main/devtools/deployments/opencloud_full/config/opencloud/csp.yaml -o "$CONFIG_DIR"/csp.yaml -curl -fsSL https://raw.githubusercontent.com/opencloud-eu/opencloud/refs/heads/main/devtools/deployments/opencloud_full/config/opencloud/proxy.yaml -o "$CONFIG_DIR"/proxy.yaml.bak +curl -fsSL https://raw.githubusercontent.com/opencloud-eu/opencloud-compose/refs/heads/main/config/opencloud/csp.yaml -o "$CONFIG_DIR"/csp.yaml +curl -fsSL https://raw.githubusercontent.com/opencloud-eu/opencloud-compose/refs/heads/main/config/opencloud/proxy.yaml -o "$CONFIG_DIR"/proxy.yaml.bak cat <"$ENV_FILE" OC_URL=https://${OC_HOST} @@ -153,8 +159,8 @@ EOF cat </etc/systemd/system/opencloud-wopi.service [Unit] Description=OpenCloud WOPI Server -Requires=coolwsd.service -After=network.target opencloud.service coolwsd.service +Wants=coolwsd.service +After=opencloud.service coolwsd.service [Service] Type=simple From fbb47d39b17056efd4b8b1c9dda6a2ded1b09403 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Thu, 11 Dec 2025 11:20:22 -0500 Subject: [PATCH 02/34] OpenCloud: edits to opencloud.env --- install/opencloud-install.sh | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index 8dd0a44d7..b4340d8db 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -75,12 +75,13 @@ IDM_CREATE_DEMO_USERS=false OC_LOG_LEVEL=warning OC_CONFIG_DIR=${CONFIG_DIR} OC_BASE_DATA_PATH=${DATA_DIR} +STORAGE_SYSTEM_OC_ROOT=${DATA_DIR}/storage/metadata -# Proxy +## Proxy PROXY_TLS=false PROXY_CSP_CONFIG_FILE_LOCATION=${CONFIG_DIR}/csp.yaml -# Collaboration - requires VALID TLS +## Collaboration - requires VALID TLS COLLABORA_DOMAIN=${COLLABORA_HOST} COLLABORATION_APP_NAME="CollaboraOnline" COLLABORATION_APP_PRODUCT="Collabora" @@ -90,53 +91,52 @@ COLLABORATION_HTTP_ADDR=0.0.0.0:9300 COLLABORATION_WOPI_SRC=https://${WOPI_HOST} COLLABORATION_JWT_SECRET= -# Applications +## Applications WEB_ASSET_APPS_PATH=${CONFIG_DIR}/assets/apps -# Notifications - Email settings +## Notifications - Email settings # NOTIFICATIONS_SMTP_HOST= # NOTIFICATIONS_SMTP_PORT= # NOTIFICATIONS_SMTP_SENDER= # NOTIFICATIONS_SMTP_USERNAME= # NOTIFICATIONS_SMTP_PASSWORD= # NOTIFICATIONS_SMTP_AUTHENTICATION=login -# Encryption method. Possible values are 'starttls', 'ssltls' and 'none' +## Encryption method. Possible values are 'starttls', 'ssltls' and 'none' # NOTIFICATIONS_SMTP_ENCRYPTION=starttls -# Allow insecure connections. Defaults to false. +## Allow insecure connections. Defaults to false. # NOTIFICATIONS_SMTP_INSECURE=false -# Start additional services at runtime -# Examples: notifications, antivirus etc. -# Do not uncomment unless configured above. +## Start additional services at runtime +## Examples: notifications, antivirus etc. +## Do not uncomment unless configured above. # OC_ADD_RUN_SERVICES="notifications" -# OpenID - via web browser -# -# uncomment for OpenID in general - works for Authelia +## OpenID - via web browser +## uncomment for OpenID in general # OC_EXCLUDE_RUN_SERVICES=idp # OC_OIDC_ISSUER= # PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHOD=none # PROXY_OIDC_REWRITE_WELLKNOWN=true # PROXY_USER_OIDC_CLAIM=preferred_username # PROXY_USER_CS3_CLAIM=username -# automatically create accounts +## automatically create accounts # PROXY_AUTOPROVISION_ACCOUNTS=true # WEB_OIDC_SCOPE=openid profile email groups # GRAPH_ASSIGN_DEFAULT_USER_ROLE=false # -# uncomment below if using PocketID +## uncomment below if using PocketID # WEB_OIDC_CLIENT_ID= # WEB_OIDC_METADATA_URL=/.well-known/openid-configuration -# Full Text Search - Apache Tika -# Requires a separate install of Tika - see https://community-scripts.github.io/ProxmoxVE/scripts?id=apache-tika +## Full Text Search - Apache Tika +## Requires a separate install of Tika - see https://community-scripts.github.io/ProxmoxVE/scripts?id=apache-tika # SEARCH_EXTRACTOR_TYPE=tika # FRONTEND_FULL_TEXT_SEARCH_ENABLED=true # SEARCH_EXTRACTOR_TIKA_TIKA_URL= -# External storage test - currently not working +## External storage test - Only NFS v4.2+ is supported +## User files # STORAGE_USERS_POSIX_ROOT= -# STORAGE_USERS_ID_CACHE_STORE=nats-js-kv EOF cat </etc/systemd/system/opencloud.service From bccd56414e5f2f56799003aa2bc649ea7c09593a Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 11 Dec 2025 20:12:26 +0100 Subject: [PATCH 03/34] test fork --- ct/homarr.sh | 2 +- install/homarr-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 77b176331..e45879d2a 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - if check_for_gh_release "homarr" "homarr-labs/homarr"; then + if check_for_gh_release "homarr" "Meierschlumpf/homarr"; then msg_info "Stopping Services (Patience)" systemctl stop homarr systemctl stop redis-server diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 06159c7aa..a7d5a80f3 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" +fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" msg_info "Installing Homarr (Patience)" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From e7d5d9c0ae014cde101ddbd42f437a78033af3b9 Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 11 Dec 2025 20:20:03 +0100 Subject: [PATCH 04/34] fix --- ct/homarr.sh | 4 ++-- install/homarr-install.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index e45879d2a..5977a5260 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="homarr" var_tags="${var_tags:-arr;dashboard}" -var_cpu="${var_cpu:-3}" -var_ram="${var_ram:-6144}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" diff --git a/install/homarr-install.sh b/install/homarr-install.sh index a7d5a80f3..4936acc0c 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -46,6 +46,7 @@ EOF msg_ok "Installed Homarr" msg_info "Copying config files" +mkdir -p /appdata/redis chown -R redis:redis /appdata/redis chmod 755 /appdata/redis cp /opt/homarr/redis.conf /etc/redis/redis.conf From 0ab37461eca151f17df86fecf9ef6e444d4e3e4d Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 11 Dec 2025 20:38:34 +0100 Subject: [PATCH 05/34] fix fetch_and_deploy --- ct/homarr.sh | 2 +- install/homarr-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 5977a5260..c661e6400 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" + fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 4936acc0c..007483475 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" +fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar" msg_info "Installing Homarr (Patience)" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From 7b7631ce67bff449b2e5c86de59040e719ac1125 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 12:16:37 -0500 Subject: [PATCH 06/34] Add nextExplorer --- ct/nextexplorer.sh | 71 +++++++++++++ frontend/public/json/nextexplorer.json | 37 +++++++ install/nextexplorer_install.sh | 139 +++++++++++++++++++++++++ 3 files changed, 247 insertions(+) create mode 100644 ct/nextexplorer.sh create mode 100644 frontend/public/json/nextexplorer.json create mode 100644 install/nextexplorer_install.sh diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh new file mode 100644 index 000000000..015d17aaa --- /dev/null +++ b/ct/nextexplorer.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/vikramsoni2/nextExplorer + +APP="nextExplorer" +var_tags="${var_tags:-files;documents}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-3072}" +var_disk="${var_disk:-8}" +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/nextExplorer ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "nextExplorer" "vikramsoni2/nextExplorer"; then + msg_info "Stopping nextExplorer" + $STD systemctl stop nextexplorer + msg_ok "Stopped nextExplorer" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nextExplorer" "vikramsoni2/nextExplorer" "tarball" "latest" "/opt/nextExplorer" + + msg_info "Updating nextExplorer" + APP_DIR="/opt/nextExplorer/app" + mkdir -p "$APP_DIR" + cd /opt/nextExplorer/backend + export NODE_ENV=production + $STD npm ci + cd /opt/nextExplorer/frontend + unset NODE_ENV + export NODE_ENV=development + $STD npm ci + $STD npm run build -- --sourcemap false + unset NODE_ENV + cd /opt/nextExplorer/ + mv backend/{node_modules,src,package.json} "$APP_DIR" + mv frontend/dist/ "$APP_DIR"/public + msg_ok "Updated nextExplorer" + + msg_info "Starting nextExplorer" + $STD systemctl start nextexplorer + msg_ok "Started nextExplorer" + 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}${CL}" diff --git a/frontend/public/json/nextexplorer.json b/frontend/public/json/nextexplorer.json new file mode 100644 index 000000000..caa88b336 --- /dev/null +++ b/frontend/public/json/nextexplorer.json @@ -0,0 +1,37 @@ +{ + "name": "nextExplorer", + "slug": "nextexplorer", + "categories": [ + 11, + 12 + ], + "date_created": "2025-12-11", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://explorer.nxz.ai", + "website": "https://github.com/vikramsoni2/nextExplorer", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nextexplorer.webp", + "config_path": "/etc/nextExplorer/.env", + "description": "", + "install_methods": [ + { + "type": "default", + "script": "ct/nextexplorer.sh", + "resources": { + "cpu": 2, + "ram": 3072, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "notes": [ + { + "text": "Bind mount your volume(s) in the `/mnt` directory", + "type": "info" + } + ] +} diff --git a/install/nextexplorer_install.sh b/install/nextexplorer_install.sh new file mode 100644 index 000000000..dc8d16e72 --- /dev/null +++ b/install/nextexplorer_install.sh @@ -0,0 +1,139 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/vikramsoni2/nextExplorer + +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 \ + ripgrep \ + imagemagick \ + ffmpeg +msg_ok "Installed Dependencies" + +NODE_VERSION="24" setup_nodejs + +fetch_and_deploy_gh_release "nextExplorer" "vikramsoni2/nextExplorer" "tarball" "latest" "/opt/nextExplorer" + +msg_info "Building nextExplorer" +APP_DIR="/opt/nextExplorer/app" +LOCAL_IP="$(hostname -I | awk '{print $1}')" +mkdir -p "$APP_DIR" +mkdir -p /etc/nextExplorer +cd /opt/nextExplorer/backend +export NODE_ENV=production +$STD npm ci +unset NODE_ENV + +cd /opt/nextExplorer/frontend +export NODE_ENV=development +$STD npm ci +$STD npm run build -- --sourcemap false +unset NODE_ENV + +cd /opt/nextExplorer +mv backend/{node_modules,src,package.json} "$APP_DIR" +mv frontend/dist/ "$APP_DIR"/public +msg_ok "Built nextExplorer" + +msg_info "Configuring nextExplorer" +SECRET=$(openssl rand -hex 32) +cat </etc/nextExplorer/.env +NODE_ENV=production +PORT=3000 + +VOLUME_ROOT=/mnt +CONFIG_DIR=/etc/nextExplorer +CACHE_DIR=/etc/nextExplorer/cache +# USER_ROOT= + +PUBLIC_URL=${LOCAL_IP}:3000 +# TRUST_PROXY= +# CORS_ORIGINS= + +LOG_LEVEL=info +DEBUG=false +ENABLE_HTTP_LOGGING=false + +AUTH_ENABLED=true +AUTH_MODE=both +SESSION_SECRET="${SECRET}" +# AUTH_MAX_FAILED= +# AUTH_LOCK_MINUTES= + +# OIDC_ENABLED= +# OIDC_ISSUER= +# OIDC_AUTHORIZATION_URL= +# OIDC_TOKEN_URL= +# OIDC_USERINFO_URL= +# OIDC_CLIENT_ID= +# OIDC_CLIENT_SECRET= +# OIDC_CALLBACK_URL= +# OIDC_SCOPES= + +# SEARCH_DEEP= +# SEARCH_RIPGREP= +# SEARCH_MAX_FILESIZE= + +# ONLYOFFICE_URL= +# ONLYOFFICE_SECRET= +# ONLYOFFICE_LANG= +# ONLYOFFICE_FORCE_SAVE= +# ONLYOFFICE_FILE_EXTENSIONS= + +SHOW_VOLUME_USAGE=true +# USER_DIR_ENABLED= +# SKIP_HOME= + +# EDITOR_EXTENSIONS= + +# FFMPEG_PATH= +# FFPROBE_PATH= + +FAVORITES_DEFAULT_ICON=outline.StarIcon + +SHARES_ENABLED=true +# SHARES_TOKEN_LENGTH=10 +# SHARES_MAX_PER_USER=100 +# SHARES_DEFAULT_EXPIRY_DAYS=30 +# SHARES_GUEST_SESSION_HOURS=24 +# SHARES_ALLOW_PASSWORD=true +# SHARES_ALLOW_ANONYMOUS=true +EOF +chmod 600 /etc/nextExplorer/.env +msg_ok "Configured nextExplorer" + +msg_info "Creating nextExplorer Service" +cat </etc/systemd/system/nextExplorer.service +[Unit] +Description=nextExplorer Service +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/nextExplorer/app +EnvironmentFile=/etc/nextExplorer/.env +ExecStart=/usr/bin/node ./src/app.js +Restart=always +RestartSec=5 +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target +EOF +$STD systemctl enable -q --now nextExplorer +msg_ok "Created nextExplorer Service" + +motd_ssh +customize +cleanup_lxc From 4f0063709b27b6fdd05b8d21bda80d0dba65c407 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 12:22:59 -0500 Subject: [PATCH 07/34] rename --- install/{nextexplorer_install.sh => nextexplorer-install.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename install/{nextexplorer_install.sh => nextexplorer-install.sh} (100%) diff --git a/install/nextexplorer_install.sh b/install/nextexplorer-install.sh similarity index 100% rename from install/nextexplorer_install.sh rename to install/nextexplorer-install.sh From 45e836f41c53d5dd4130c51359ef58c6350a8a74 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 12:28:58 -0500 Subject: [PATCH 08/34] add port --- ct/nextexplorer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh index 015d17aaa..9bd966966 100644 --- a/ct/nextexplorer.sh +++ b/ct/nextexplorer.sh @@ -68,4 +68,4 @@ 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}${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" From 7e42c4d955036fedf1093ac9c5333af6956cac42 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 12:35:02 -0500 Subject: [PATCH 09/34] fix service case; move frontend files --- ct/nextexplorer.sh | 2 +- install/nextexplorer-install.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh index 9bd966966..7085221a2 100644 --- a/ct/nextexplorer.sh +++ b/ct/nextexplorer.sh @@ -50,7 +50,7 @@ function update_script() { unset NODE_ENV cd /opt/nextExplorer/ mv backend/{node_modules,src,package.json} "$APP_DIR" - mv frontend/dist/ "$APP_DIR"/public + mv frontend/dist/ "$APP_DIR"/src/public msg_ok "Updated nextExplorer" msg_info "Starting nextExplorer" diff --git a/install/nextexplorer-install.sh b/install/nextexplorer-install.sh index dc8d16e72..ae34ad1b5 100644 --- a/install/nextexplorer-install.sh +++ b/install/nextexplorer-install.sh @@ -42,7 +42,7 @@ unset NODE_ENV cd /opt/nextExplorer mv backend/{node_modules,src,package.json} "$APP_DIR" -mv frontend/dist/ "$APP_DIR"/public +mv frontend/dist/ "$APP_DIR"/src/public msg_ok "Built nextExplorer" msg_info "Configuring nextExplorer" @@ -113,7 +113,7 @@ chmod 600 /etc/nextExplorer/.env msg_ok "Configured nextExplorer" msg_info "Creating nextExplorer Service" -cat </etc/systemd/system/nextExplorer.service +cat </etc/systemd/system/nextexplorer.service [Unit] Description=nextExplorer Service After=network.target @@ -131,7 +131,7 @@ StandardError=journal [Install] WantedBy=multi-user.target EOF -$STD systemctl enable -q --now nextExplorer +$STD systemctl enable -q --now nextexplorer msg_ok "Created nextExplorer Service" motd_ssh From 9b4b0013ab53549d1a4286ab37a6da42cdd73d15 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 13:19:20 -0500 Subject: [PATCH 10/34] create lowpriv user --- ct/nextexplorer.sh | 1 + install/nextexplorer-install.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh index 7085221a2..f673a7cfc 100644 --- a/ct/nextexplorer.sh +++ b/ct/nextexplorer.sh @@ -51,6 +51,7 @@ function update_script() { cd /opt/nextExplorer/ mv backend/{node_modules,src,package.json} "$APP_DIR" mv frontend/dist/ "$APP_DIR"/src/public + chown -R explorer:explorer "$APP_DIR" /etc/nextExplorer msg_ok "Updated nextExplorer" msg_info "Starting nextExplorer" diff --git a/install/nextexplorer-install.sh b/install/nextexplorer-install.sh index ae34ad1b5..a1f15a7d7 100644 --- a/install/nextexplorer-install.sh +++ b/install/nextexplorer-install.sh @@ -110,6 +110,8 @@ SHARES_ENABLED=true # SHARES_ALLOW_ANONYMOUS=true EOF chmod 600 /etc/nextExplorer/.env +$STD useradd -U -s /bin/bash -m -d /home/explorer explorer +chown -R explorer:explorer "$APP_DIR" /etc/nextExplorer msg_ok "Configured nextExplorer" msg_info "Creating nextExplorer Service" From f2ea0a0d106964509711d644777126f5d4e237bb Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 13:37:30 -0500 Subject: [PATCH 11/34] OpenCloud: add sleep --- install/opencloud-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index b4340d8db..d4cd18165 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -167,6 +167,7 @@ Type=simple User=opencloud Group=opencloud EnvironmentFile=${ENV_FILE} +ExecStartPre=/bin/sleep 10 ExecStart=/usr/bin/opencloud collaboration server Restart=always KillSignal=SIGKILL From 5571eb29733a6ed7e414bc88a2e8220c9627eeb4 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 14:07:59 -0500 Subject: [PATCH 12/34] OpenCloud: add IDP_DOMAIN to opencloud.env --- install/opencloud-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index d4cd18165..92b4e55c8 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -115,6 +115,7 @@ WEB_ASSET_APPS_PATH=${CONFIG_DIR}/assets/apps ## uncomment for OpenID in general # OC_EXCLUDE_RUN_SERVICES=idp # OC_OIDC_ISSUER= +# IDP_DOMAIN= # PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHOD=none # PROXY_OIDC_REWRITE_WELLKNOWN=true # PROXY_USER_OIDC_CLAIM=preferred_username From d0fce392cbd5db344b433f40e7c24ce7d12d035a Mon Sep 17 00:00:00 2001 From: vhsdream Date: Fri, 12 Dec 2025 14:22:04 -0500 Subject: [PATCH 13/34] OpenCloud: fix release parsing in update --- ct/opencloud.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/opencloud.sh b/ct/opencloud.sh index 1a47f5293..78aadba47 100644 --- a/ct/opencloud.sh +++ b/ct/opencloud.sh @@ -40,7 +40,7 @@ function update_script() { $STD apt-get dist-upgrade msg_ok "Updated packages" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-.*linux-amd64" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64" msg_info "Starting services" systemctl start opencloud opencloud-wopi From 9c7e1e2c1e803023ae649d3e2248593cf8262ece Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 12 Dec 2025 20:01:28 +0000 Subject: [PATCH 14/34] Delete invoiceninja (ct) after migration to ProxmoxVE (#1207) Co-authored-by: github-actions[bot] --- ct/invoiceninja.sh | 79 ------------ frontend/public/json/invoiceninja.json | 48 ------- install/invoiceninja-install.sh | 168 ------------------------- 3 files changed, 295 deletions(-) delete mode 100644 ct/invoiceninja.sh delete mode 100644 frontend/public/json/invoiceninja.json delete mode 100644 install/invoiceninja-install.sh diff --git a/ct/invoiceninja.sh b/ct/invoiceninja.sh deleted file mode 100644 index b043df78a..000000000 --- a/ct/invoiceninja.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://invoiceninja.com/ - -APP="InvoiceNinja" -var_tags="${var_tags:-invoicing;business}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -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/invoiceninja ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "invoiceninja" "invoiceninja/invoiceninja"; then - msg_info "Stopping Services" - systemctl stop supervisor nginx php8.4-fpm - msg_ok "Stopped Services" - - msg_info "Creating Backup" - mkdir -p /tmp/invoiceninja_backup - cp /opt/invoiceninja/.env /tmp/invoiceninja_backup/ - cp -r /opt/invoiceninja/storage /tmp/invoiceninja_backup/ 2>/dev/null || true - cp -r /opt/invoiceninja/public/storage /tmp/invoiceninja_backup/public_storage 2>/dev/null || true - msg_ok "Created Backup" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz" - - msg_info "Restoring Data" - cp /tmp/invoiceninja_backup/.env /opt/invoiceninja/ - cp -r /tmp/invoiceninja_backup/storage/* /opt/invoiceninja/storage/ 2>/dev/null || true - cp -r /tmp/invoiceninja_backup/public_storage/* /opt/invoiceninja/public/storage/ 2>/dev/null || true - rm -rf /tmp/invoiceninja_backup - msg_ok "Restored Data" - - msg_info "Running Migrations" - cd /opt/invoiceninja - $STD php artisan migrate --force - $STD php artisan config:clear - $STD php artisan cache:clear - $STD php artisan optimize - chown -R www-data:www-data /opt/invoiceninja - chmod -R 755 /opt/invoiceninja/storage - msg_ok "Ran Migrations" - - msg_info "Starting Services" - systemctl start php8.4-fpm nginx supervisor - 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}:8080/setup${CL}" diff --git a/frontend/public/json/invoiceninja.json b/frontend/public/json/invoiceninja.json deleted file mode 100644 index 10c178e93..000000000 --- a/frontend/public/json/invoiceninja.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "InvoiceNinja", - "slug": "invoiceninja", - "categories": [ - 3 - ], - "date_created": "2025-12-09", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8080, - "documentation": "https://invoiceninja.github.io/selfhost.html", - "config_path": "/opt/invoiceninja/.env", - "website": "https://invoiceninja.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/invoice-ninja.webp", - "description": "Invoice Ninja is a free, open-source invoicing, quotes, expenses and time-tracking application for freelancers and businesses. Features include recurring invoices, online payments, client portal, and multi-company support.", - "install_methods": [ - { - "type": "default", - "script": "ct/invoiceninja.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 8, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "First visit http://IP:8080/setup to complete the initial configuration", - "type": "info" - }, - { - "text": "Database credentials are stored in ~/invoiceninja.creds", - "type": "info" - }, - { - "text": "Configure SMTP settings in /opt/invoiceninja/.env for email functionality", - "type": "warning" - } - ] -} diff --git a/install/invoiceninja-install.sh b/install/invoiceninja-install.sh deleted file mode 100644 index 38ac180d4..000000000 --- a/install/invoiceninja-install.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://invoiceninja.com/ - -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 \ - nginx \ - supervisor -msg_ok "Installed Dependencies" - -setup_mariadb -MARIADB_DB_NAME="invoiceninja" MARIADB_DB_USER="invoiceninja" setup_mariadb_db -PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,gmp,imagick,intl,mbstring,mysql,soap,xml,zip" setup_php -import_local_ip -fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz" - -msg_info "Configuring InvoiceNinja" -cd /opt/invoiceninja -APP_KEY=$(php artisan key:generate --show) -cat </opt/invoiceninja/.env -APP_NAME="Invoice Ninja" -APP_ENV=production -APP_KEY=${APP_KEY} -APP_DEBUG=false -APP_URL=http://${LOCAL_IP}:8080 - -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=${MARIADB_DB_NAME} -DB_USERNAME=${MARIADB_DB_USER} -DB_PASSWORD=${MARIADB_DB_PASS} - -MULTI_DB_ENABLED=false -DEMO_MODE=false - -BROADCAST_DRIVER=log -LOG_CHANNEL=stack -CACHE_DRIVER=file -QUEUE_CONNECTION=database -SESSION_DRIVER=file -SESSION_LIFETIME=120 - -MAIL_MAILER=log -MAIL_HOST=null -MAIL_PORT=null -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS="noreply@localhost" -MAIL_FROM_NAME="Invoice Ninja" - -REQUIRE_HTTPS=false -NINJA_ENVIRONMENT=selfhost -PDF_GENERATOR=snappdf - -TRUSTED_PROXIES=* -INTERNAL_QUEUE_ENABLED=false -EOF - -mkdir -p /opt/invoiceninja/bootstrap/cache -mkdir -p /opt/invoiceninja/storage/{app/public,framework/{cache/data,sessions,views},logs} -chown -R www-data:www-data /opt/invoiceninja -chmod -R 775 /opt/invoiceninja/storage /opt/invoiceninja/bootstrap/cache -msg_ok "Configured InvoiceNinja" - -msg_info "Setting up Database" -cd /opt/invoiceninja -$STD php artisan config:clear -$STD php artisan cache:clear -$STD php artisan route:clear -$STD php artisan view:clear -$STD php artisan migrate --force -$STD php artisan db:seed --force -$STD php artisan optimize -msg_ok "Set up Database" - -msg_info "Configuring Nginx" -cat <<'EOF' >/etc/nginx/sites-available/invoiceninja -server { - listen 8080; - server_name _; - root /opt/invoiceninja/public; - index index.php; - - client_max_body_size 50M; - charset utf-8; - - gzip on; - gzip_types application/javascript application/x-javascript text/javascript text/plain application/xml application/json; - gzip_proxied no-cache no-store private expired auth; - gzip_min_length 1000; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location = /index.php { - fastcgi_pass unix:/run/php/php8.4-fpm.sock; - fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_read_timeout 300; - } - - location ~ \.php$ { - return 403; - } - - location ~ /\.ht { - deny all; - } - - error_log /var/log/nginx/invoiceninja_error.log; - access_log /var/log/nginx/invoiceninja_access.log; -} -EOF - -ln -sf /etc/nginx/sites-available/invoiceninja /etc/nginx/sites-enabled/ -rm -f /etc/nginx/sites-enabled/default -$STD systemctl reload nginx -msg_ok "Configured Nginx" - -msg_info "Setting up Queue Worker" -cat <<'EOF' >/etc/supervisor/conf.d/invoiceninja-worker.conf -[program:invoiceninja-worker] -process_name=%(program_name)s_%(process_num)02d -command=php /opt/invoiceninja/artisan queue:work --sleep=3 --tries=3 --max-time=3600 -autostart=true -autorestart=true -stopasgroup=true -killasgroup=true -user=www-data -numprocs=2 -redirect_stderr=true -stdout_logfile=/var/log/invoiceninja-worker.log -stopwaitsecs=3600 -EOF - -touch /var/log/invoiceninja-worker.log -chown www-data:www-data /var/log/invoiceninja-worker.log -$STD supervisorctl reread -$STD supervisorctl update -msg_ok "Set up Queue Worker" - -msg_info "Setting up Cron" -cat <<'EOF' >/etc/cron.d/invoiceninja -* * * * * www-data cd /opt/invoiceninja && php artisan schedule:run >> /dev/null 2>&1 -EOF -msg_ok "Set up Cron" - -msg_info "Enabling Services" -systemctl enable -q --now php8.4-fpm nginx supervisor -msg_ok "Enabled Services" - -motd_ssh -customize -cleanup_lxc From 16c0565e6ba3894b249c4fc4fe8224832bb9a3c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 12 Dec 2025 20:02:05 +0000 Subject: [PATCH 15/34] Delete wallabag (ct) after migration to ProxmoxVE (#1208) Co-authored-by: github-actions[bot] --- ct/headers/wallabag | 6 -- ct/wallabag.sh | 72 -------------- frontend/public/json/wallabag.json | 40 -------- install/wallabag-install.sh | 150 ----------------------------- 4 files changed, 268 deletions(-) delete mode 100644 ct/headers/wallabag delete mode 100644 ct/wallabag.sh delete mode 100644 frontend/public/json/wallabag.json delete mode 100644 install/wallabag-install.sh diff --git a/ct/headers/wallabag b/ct/headers/wallabag deleted file mode 100644 index dab1ff5cc..000000000 --- a/ct/headers/wallabag +++ /dev/null @@ -1,6 +0,0 @@ - _ __ ____ __ -| | / /___ _/ / /___ _/ /_ ____ _____ _ -| | /| / / __ `/ / / __ `/ __ \/ __ `/ __ `/ -| |/ |/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / -|__/|__/\__,_/_/_/\__,_/_.___/\__,_/\__, / - /____/ diff --git a/ct/wallabag.sh b/ct/wallabag.sh deleted file mode 100644 index 2fc8b6a3f..000000000 --- a/ct/wallabag.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://wallabag.org/ - -APP="Wallabag" -var_tags="${var_tags:-productivity;read-it-later}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-6}" -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/wallabag ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "wallabag" "wallabag/wallabag"; then - msg_info "Stopping Services" - systemctl stop nginx php8.3-fpm - msg_ok "Stopped Services" - - msg_info "Creating Backup" - cp /opt/wallabag/app/config/parameters.yml /tmp/wallabag_parameters.yml.bak - msg_ok "Created Backup" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz" - - msg_info "Restoring Configuration" - cp /tmp/wallabag_parameters.yml.bak /opt/wallabag/app/config/parameters.yml - rm -f /tmp/wallabag_parameters.yml.bak - msg_ok "Restored Configuration" - - msg_info "Running Migrations" - cd /opt/wallabag - $STD php bin/console cache:clear --env=prod - $STD php bin/console doctrine:migrations:migrate --env=prod --no-interaction - chown -R www-data:www-data /opt/wallabag - chmod -R 755 /opt/wallabag/var - chmod -R 755 /opt/wallabag/web/assets - msg_ok "Ran Migrations" - - msg_info "Starting Services" - systemctl start php8.3-fpm nginx - 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}:8000${CL}" diff --git a/frontend/public/json/wallabag.json b/frontend/public/json/wallabag.json deleted file mode 100644 index c7ead0b69..000000000 --- a/frontend/public/json/wallabag.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Wallabag", - "slug": "wallabag", - "categories": [ - 12 - ], - "date_created": "2025-12-09", - "type": "ct", - "updateable": true, - "privileged": false, - "config_path": "/opt/wallabag/app/config/parameters.yml", - "interface_port": 8000, - "documentation": "https://doc.wallabag.org/", - "website": "https://wallabag.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/wallabag.webp", - "description": "Wallabag is a self-hosted read-it-later application. Save web articles to read them later, offline, in a clean and distraction-free interface. Features tagging, full-text search, and browser/mobile app integrations.", - "install_methods": [ - { - "type": "default", - "script": "ct/wallabag.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 6, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Database credentials are stored in ~/wallabag.creds", - "type": "info" - } - ] -} diff --git a/install/wallabag-install.sh b/install/wallabag-install.sh deleted file mode 100644 index f9723df97..000000000 --- a/install/wallabag-install.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://wallabag.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 \ - nginx \ - redis-server \ - imagemagick -msg_ok "Installed Dependencies" - -import_local_ip -setup_mariadb -MARIADB_DB_NAME="wallabag" MARIADB_DB_USER="wallabag" setup_mariadb_db -PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="bcmath,bz2,curl,gd,imagick,intl,mbstring,mysql,redis,tidy,xml,zip" setup_php -setup_composer -NODE_VERSION="22" setup_nodejs - -fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz" - -msg_info "Configuring Wallabag" -cd /opt/wallabag -SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)" -cat </opt/wallabag/app/config/parameters.yml -parameters: - database_driver: pdo_mysql - database_host: 127.0.0.1 - database_port: 3306 - database_name: ${MARIADB_DB_NAME} - database_user: ${MARIADB_DB_USER} - database_password: ${MARIADB_DB_PASS} - database_path: null - database_table_prefix: wallabag_ - database_socket: null - database_charset: utf8mb4 - - domain_name: http://${LOCAL_IP}:8000 - server_name: Wallabag - - mailer_dsn: null - - locale: en - - secret: ${SECRET_KEY} - - twofactor_auth: false - twofactor_sender: no-reply@wallabag.org - - fosuser_registration: true - fosuser_confirmation: false - - fos_oauth_server_access_token_lifetime: 3600 - fos_oauth_server_refresh_token_lifetime: 1209600 - - from_email: no-reply@wallabag.org - - rss_limit: 50 - - rabbitmq_host: localhost - rabbitmq_port: 5672 - rabbitmq_user: guest - rabbitmq_password: guest - rabbitmq_prefetch_count: 10 - - redis_scheme: tcp - redis_host: localhost - redis_port: 6379 - redis_path: null - redis_password: null - - sentry_dsn: null -EOF -chown -R www-data:www-data /opt/wallabag -msg_ok "Configured Wallabag" - -msg_info "Installing Wallabag (Patience)" -export COMPOSER_ALLOW_SUPERUSER=1 -export SYMFONY_ENV=prod -cd /opt/wallabag -$STD php bin/console wallabag:install --env=prod --no-interaction -$STD php bin/console cache:clear --env=prod -chown -R www-data:www-data /opt/wallabag -chmod -R 755 /opt/wallabag/var -chmod -R 755 /opt/wallabag/web/assets -msg_ok "Installed Wallabag" - -msg_info "Configuring Nginx" -cat <<'EOF' >/etc/nginx/sites-available/wallabag -server { - listen 8000; - server_name _; - root /opt/wallabag/web; - - add_header X-Frame-Options "SAMEORIGIN"; - add_header X-Content-Type-Options "nosniff"; - - index app.php; - charset utf-8; - - location / { - try_files $uri /app.php$is_args$args; - } - - location ~ ^/app\.php(/|$) { - fastcgi_pass unix:/run/php/php8.3-fpm.sock; - fastcgi_split_path_info ^(.+\.php)(/.*)$; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; - fastcgi_param DOCUMENT_ROOT $realpath_root; - internal; - } - - location ~ \.php$ { - return 404; - } - - location ~ /\.(?!well-known).* { - deny all; - } - - error_log /var/log/nginx/wallabag_error.log; - access_log /var/log/nginx/wallabag_access.log; -} -EOF - -ln -sf /etc/nginx/sites-available/wallabag /etc/nginx/sites-enabled/ -rm -f /etc/nginx/sites-enabled/default -$STD systemctl reload nginx -msg_ok "Configured Nginx" - -msg_info "Enabling Services" -systemctl enable -q --now redis-server -systemctl enable -q --now php8.3-fpm -systemctl enable -q --now nginx -msg_ok "Enabled Services" - -motd_ssh -customize -cleanup_lxc From 3acadeb1b00ddcb95c66cefa8e5841a673bc63e5 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 13:12:43 +0100 Subject: [PATCH 16/34] rename asset --- ct/homarr.sh | 4 ++-- install/homarr-install.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index c661e6400..e8c2eadd7 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar" + fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf @@ -75,7 +75,7 @@ EOF cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr chmod +x /usr/bin/homarr - msg_ok "Updated ${APP}" + msg_ok "Updated Homarr to v${RELEASE}" msg_info "Starting Services" chmod +x /opt/homarr/run.sh diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 007483475..c394a6c6d 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar" +fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" msg_info "Installing Homarr (Patience)" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From 69171cb736b1d28a3824d169d1b4fefc586467fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Dec 2025 12:35:43 +0000 Subject: [PATCH 17/34] Delete adguardhome-sync (addon) after migration to ProxmoxVE (#1209) Co-authored-by: github-actions[bot] --- frontend/public/json/adguardhome-sync.json | 59 ---- tools/addon/adguardhome-sync.sh | 342 --------------------- 2 files changed, 401 deletions(-) delete mode 100644 frontend/public/json/adguardhome-sync.json delete mode 100644 tools/addon/adguardhome-sync.sh diff --git a/frontend/public/json/adguardhome-sync.json b/frontend/public/json/adguardhome-sync.json deleted file mode 100644 index 155bdf884..000000000 --- a/frontend/public/json/adguardhome-sync.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "AdGuardHome-Sync", - "slug": "adguardhome-sync", - "categories": [ - 9 - ], - "date_created": "2025-12-08", - "type": "addon", - "updateable": true, - "privileged": false, - "interface_port": 8080, - "documentation": "https://github.com/bakito/adguardhome-sync", - "website": "https://github.com/bakito/adguardhome-sync", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adguard-home.webp", - "config_path": "/opt/adguardhome-sync/adguardhome-sync.yaml", - "description": "Synchronize AdGuardHome config to one or multiple replica instances. Syncs General Settings, Filters, Rewrites, Services, Clients, DNS Config, DHCP Config and Theme.", - "install_methods": [ - { - "type": "default", - "script": "tools/addon/adguardhome-sync.sh", - "resources": { - "cpu": null, - "ram": null, - "hdd": null, - "os": null, - "version": null - } - }, - { - "type": "alpine", - "script": "tools/addon/adguardhome-sync.sh", - "resources": { - "cpu": null, - "ram": null, - "hdd": null, - "os": null, - "version": null - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Edit /opt/adguardhome-sync/adguardhome-sync.yaml to configure your AdGuardHome instances", - "type": "info" - }, - { - "text": "Origin = Primary instance, Replicas = Instances to sync to", - "type": "info" - }, - { - "text": "Update with: update_adguardhome-sync", - "type": "info" - } - ] -} diff --git a/tools/addon/adguardhome-sync.sh b/tools/addon/adguardhome-sync.sh deleted file mode 100644 index f724303db..000000000 --- a/tools/addon/adguardhome-sync.sh +++ /dev/null @@ -1,342 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/bakito/adguardhome-sync - -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/core.func) -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func) -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/error_handler.func) - -# Enable error handling -set -Eeuo pipefail -trap 'error_handler' ERR - -# ============================================================================== -# CONFIGURATION -# ============================================================================== -APP="AdGuardHome-Sync" -APP_TYPE="addon" -INSTALL_PATH="/opt/adguardhome-sync" -CONFIG_PATH="/opt/adguardhome-sync/adguardhome-sync.yaml" -DEFAULT_PORT=8080 - -# Initialize all core functions (colors, formatting, icons, STD mode) -load_functions - -# ============================================================================== -# HEADER -# ============================================================================== -function header_info { - clear - cat <<"EOF" - ___ __ ____ __ _____ - / | ____/ /___ ___ ______ __________/ / / / /___ ____ ___ ___ / ___/__ ______ _____ - / /| |/ __ / __ `/ / / / __ `/ ___/ __ / /_/ / __ \/ __ `__ \/ _ \ \__ \/ / / / __ \/ ___/ - / ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / __ / /_/ / / / / / / __/ ___/ / /_/ / / / / /__ -/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/_/ /_/\____/_/ /_/ /_/\___/ /____/\__, /_/ /_/\___/ - /____/ /____/ -EOF -} - -# ============================================================================== -# HELPER FUNCTIONS -# ============================================================================== -get_ip() { - hostname -I 2>/dev/null | awk '{print $1}' || echo "127.0.0.1" -} - -# ============================================================================== -# OS DETECTION -# ============================================================================== -if [[ -f "/etc/alpine-release" ]]; then - OS="Alpine" - SERVICE_PATH="/etc/init.d/adguardhome-sync" -elif [[ -f "/etc/debian_version" ]]; then - OS="Debian" - SERVICE_PATH="/etc/systemd/system/adguardhome-sync.service" -else - msg_error "Unsupported OS detected. Exiting." - exit 1 -fi - -# ============================================================================== -# UNINSTALL -# ============================================================================== -function uninstall() { - msg_info "Uninstalling ${APP}" - if [[ "$OS" == "Alpine" ]]; then - rc-service adguardhome-sync stop &>/dev/null || true - rc-update del adguardhome-sync &>/dev/null || true - rm -f "$SERVICE_PATH" - else - systemctl disable --now adguardhome-sync.service &>/dev/null || true - rm -f "$SERVICE_PATH" - fi - rm -rf "$INSTALL_PATH" - rm -f "/usr/local/bin/update_adguardhome-sync" - rm -f "$HOME/.adguardhome-sync" - msg_ok "${APP} has been uninstalled" -} - -# ============================================================================== -# UPDATE -# ============================================================================== -function update() { - if check_for_gh_release "adguardhome-sync" "bakito/adguardhome-sync"; then - msg_info "Stopping service" - if [[ "$OS" == "Alpine" ]]; then - rc-service adguardhome-sync stop &>/dev/null || true - else - systemctl stop adguardhome-sync.service &>/dev/null || true - fi - msg_ok "Stopped service" - - msg_info "Backing up configuration" - cp "$CONFIG_PATH" /tmp/adguardhome-sync.yaml.bak 2>/dev/null || true - msg_ok "Backed up configuration" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz" - - msg_info "Restoring configuration" - cp /tmp/adguardhome-sync.yaml.bak "$CONFIG_PATH" 2>/dev/null || true - rm -f /tmp/adguardhome-sync.yaml.bak - msg_ok "Restored configuration" - - msg_info "Starting service" - if [[ "$OS" == "Alpine" ]]; then - rc-service adguardhome-sync start - else - systemctl start adguardhome-sync.service - fi - msg_ok "Started service" - msg_ok "Updated successfully" - exit - fi -} - -# ============================================================================== -# INSTALL -# ============================================================================== -function install() { - local ip - ip=$(get_ip) - - fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz" - - # Gather configuration from user - echo "" - echo -e "${TAB}Enter details for your AdGuard Home instances." - echo -e "${TAB}The Origin is your primary instance, Replica will sync from it." - echo "" - - # Origin instance - echo -e "${YW}── Origin (Primary) Instance ──${CL}" - local origin_url origin_user origin_pass - read -rp " Origin URL (e.g., http://192.168.1.1): " origin_url - origin_url="${origin_url:-http://192.168.1.1}" - # Add http:// if no protocol specified - [[ ! "$origin_url" =~ ^https?:// ]] && origin_url="http://${origin_url}" - read -rp " Origin Username [admin]: " origin_user - origin_user="${origin_user:-admin}" - read -rsp " Origin Password: " origin_pass - echo "" - origin_pass="${origin_pass:-changeme}" - - # Replica instance - echo "" - echo -e "${YW}── Replica Instance ──${CL}" - local replica_url replica_user replica_pass - read -rp " Replica URL (e.g., http://192.168.1.2): " replica_url - replica_url="${replica_url:-http://192.168.1.2}" - # Add http:// if no protocol specified - [[ ! "$replica_url" =~ ^https?:// ]] && replica_url="http://${replica_url}" - read -rp " Replica Username [admin]: " replica_user - replica_user="${replica_user:-admin}" - read -rsp " Replica Password: " replica_pass - echo "" - replica_pass="${replica_pass:-changeme}" - echo "" - - msg_info "Creating configuration" - cat <"$CONFIG_PATH" -# AdGuardHome-Sync Configuration -# Documentation: https://github.com/bakito/adguardhome-sync - -# Cron expression for sync interval (e.g., every 2 hours: "0 */2 * * *") -cron: "0 */2 * * *" - -# Run sync on startup -runOnStart: true - -# Continue sync on errors -continueOnError: false - -# Origin AdGuardHome instance (primary) -origin: - url: "${origin_url}" - username: "${origin_user}" - password: "${origin_pass}" - insecureSkipVerify: false - -# Replica instances (one or more) -replicas: - - url: "${replica_url}" - username: "${replica_user}" - password: "${replica_pass}" - insecureSkipVerify: false - # Add more replicas as needed: - # - url: "http://192.168.1.3" - # username: "admin" - # password: "changeme" - -# API settings (web UI) -api: - port: ${DEFAULT_PORT} - darkMode: true - metrics: - enabled: false - -# Sync features (all enabled by default) -features: - dns: - accessLists: true - serverConfig: true - rewrites: true - dhcp: - serverConfig: true - staticLeases: true - generalSettings: true - queryLogConfig: true - statsConfig: true - clientSettings: true - services: true - filters: true - theme: true -EOF - chmod 600 "$CONFIG_PATH" - msg_ok "Created configuration" - - msg_info "Creating service" - if [[ "$OS" == "Alpine" ]]; then - cat <"$SERVICE_PATH" -#!/sbin/openrc-run - -name="adguardhome-sync" -description="AdGuardHome Sync" -command="${INSTALL_PATH}/adguardhome-sync" -command_args="run --config ${CONFIG_PATH}" -command_background=true -pidfile="/run/\${RC_SVCNAME}.pid" -output_log="/var/log/adguardhome-sync.log" -error_log="/var/log/adguardhome-sync.log" - -depend() { - need net - after firewall -} -EOF - chmod +x "$SERVICE_PATH" - rc-update add adguardhome-sync default - rc-service adguardhome-sync start - else - cat <"$SERVICE_PATH" -[Unit] -Description=AdGuardHome Sync -After=network.target - -[Service] -Type=simple -ExecStart=${INSTALL_PATH}/adguardhome-sync run --config ${CONFIG_PATH} -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target -EOF - systemctl daemon-reload - systemctl enable --now adguardhome-sync &>/dev/null - fi - msg_ok "Created and started service" - - # Create update script - msg_info "Creating update script" - cat <<'UPDATEEOF' >/usr/local/bin/update_adguardhome-sync -#!/usr/bin/env bash -# AdGuardHome-Sync Update Script -type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/tools/addon/adguardhome-sync.sh)" -UPDATEEOF - chmod +x /usr/local/bin/update_adguardhome-sync - msg_ok "Created update script (/usr/local/bin/update_adguardhome-sync)" - - echo "" - msg_ok "${APP} installed successfully" - msg_ok "Web UI: ${BL}http://${ip}:${DEFAULT_PORT}${CL}" - msg_ok "Config: ${BL}${CONFIG_PATH}${CL}" - echo "" - msg_warn "Edit the config file to add your AdGuardHome instances!" - msg_warn " Origin: Your primary AdGuardHome instance" - msg_warn " Replicas: One or more replica instances to sync to" -} - -# ============================================================================== -# MAIN -# ============================================================================== - -# Handle type=update (called from update script) -if [[ "${type:-}" == "update" ]]; then - header_info - if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then - update - else - msg_error "${APP} is not installed. Nothing to update." - exit 1 - fi - exit 0 -fi - -header_info - -IP=$(get_ip) - -# Check if already installed -if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then - msg_warn "${APP} is already installed." - echo "" - - echo -n "${TAB}Uninstall ${APP}? (y/N): " - read -r uninstall_prompt - if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then - uninstall - exit 0 - fi - - echo -n "${TAB}Update ${APP}? (y/N): " - read -r update_prompt - if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then - update - exit 0 - fi - - msg_warn "No action selected. Exiting." - exit 0 -fi - -# Fresh installation -msg_warn "${APP} is not installed." -echo "" -echo -e "${TAB}${INFO} This will install:" -echo -e "${TAB} - AdGuardHome-Sync (Go binary)" -echo -e "${TAB} - Systemd/OpenRC service" -echo -e "${TAB} - Web UI on port ${DEFAULT_PORT}" -echo "" - -echo -n "${TAB}Install ${APP}? (y/N): " -read -r install_prompt -if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then - install -else - msg_warn "Installation cancelled. Exiting." - exit 0 -fi From 5e873698c2b60d496edfb1b7f9e5ac8174137485 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 13:54:36 +0100 Subject: [PATCH 18/34] fix asset --- ct/homarr.sh | 2 +- install/homarr-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index e8c2eadd7..ca741350e 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" + fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/install/homarr-install.sh b/install/homarr-install.sh index c394a6c6d..78f701a6b 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" +fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" msg_info "Installing Homarr (Patience)" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From b5978d28d16c5664b743d6d370487e1317ccf174 Mon Sep 17 00:00:00 2001 From: vhsdream Date: Sat, 13 Dec 2025 10:36:06 -0500 Subject: [PATCH 19/34] nextExplorer: ensure Node installed during update --- ct/nextexplorer.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh index f673a7cfc..323867052 100644 --- a/ct/nextexplorer.sh +++ b/ct/nextexplorer.sh @@ -29,6 +29,8 @@ function update_script() { exit fi + NODE_VERSION="24" setup_nodejs + if check_for_gh_release "nextExplorer" "vikramsoni2/nextExplorer"; then msg_info "Stopping nextExplorer" $STD systemctl stop nextexplorer From 5884ba3379264987fa2e669cb76fb5b38ab6679f Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 20:02:54 +0100 Subject: [PATCH 20/34] fixes --- ct/homarr.sh | 2 +- install/homarr-install.sh | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index ca741350e..243be3e80 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" + fetch_and_deploy_gh_release "homarr" "Homarr/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 78f701a6b..8641c21ab 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,11 +24,10 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "Meierschlumpf/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" +fetch_and_deploy_gh_release "homarr" "Homarr/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" -msg_info "Installing Homarr (Patience)" +msg_info "Installing Homarr" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 -cd /opt mkdir -p /opt/homarr_db touch /opt/homarr_db/db.sqlite SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)" From 5163877dfa7345db12fd1cf19a9c410f3416fb1d Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 20:16:43 +0100 Subject: [PATCH 21/34] fixes --- ct/homarr.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 243be3e80..8de0dd9b9 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -36,11 +36,11 @@ function update_script() { msg_ok "Services Stopped" - if ! grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env; then + if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then msg_info "Fixing old structure" $STD apt install -y musl-dev ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 - echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr/.env + echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service chown -R redis:redis /appdata/redis From eb6b95ddcf09bc9ceddd3a5c3e8e32d8a38b0be9 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 21:35:08 +0100 Subject: [PATCH 22/34] fix check --- ct/homarr.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 8de0dd9b9..3a0b22df1 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - if check_for_gh_release "homarr" "Meierschlumpf/homarr"; then + if check_for_gh_release "homarr" "Homarr/homarr"; then msg_info "Stopping Services (Patience)" systemctl stop homarr systemctl stop redis-server From b509440a0c6c017907934d0e89d901a68782951d Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 21:49:50 +0100 Subject: [PATCH 23/34] fix --- ct/homarr.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 3a0b22df1..427030bd5 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - if check_for_gh_release "homarr" "Homarr/homarr"; then + if check_for_gh_release "Homarr" "Homarr/homarr"; then msg_info "Stopping Services (Patience)" systemctl stop homarr systemctl stop redis-server From 7e71fc5d9ec8c35cd83f713bc05c68e696636896 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 13 Dec 2025 22:04:26 +0100 Subject: [PATCH 24/34] fix url --- ct/homarr.sh | 4 ++-- install/homarr-install.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 427030bd5..362b74b0d 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - if check_for_gh_release "Homarr" "Homarr/homarr"; then + if check_for_gh_release "homarr" "homarr-labs/homarr"; then msg_info "Stopping Services (Patience)" systemctl stop homarr systemctl stop redis-server @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "Homarr/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" + fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 8641c21ab..a1faffa2b 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "Homarr/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" +fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" msg_info "Installing Homarr" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From f19df4150e79b6a95b60ecbf8fb0842e826cbaee Mon Sep 17 00:00:00 2001 From: tremor021 Date: Sat, 13 Dec 2025 22:39:48 +0100 Subject: [PATCH 25/34] Umami test --- ct/umami.sh | 59 ++++++++++++++++++++++++++++++++++++++++ install/umami-install.sh | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 ct/umami.sh create mode 100644 install/umami-install.sh diff --git a/ct/umami.sh b/ct/umami.sh new file mode 100644 index 000000000..522807970 --- /dev/null +++ b/ct/umami.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2025 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://umami.is/ + +APP="Umami" +var_tags="${var_tags:-analytics}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-12}" +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/umami ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "umami" "umami-software/umami"; then + msg_info "Stopping Service" + systemctl stop umami + msg_ok "Stopped Service" + + fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball" + + msg_info "Updating Umami" + cd /opt/umami + $STD pnpm install + $STD pnpm run build + msg_ok "Updated Umami" + + msg_info "Starting Service" + systemctl start umami + 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}:3000${CL}" diff --git a/install/umami-install.sh b/install/umami-install.sh new file mode 100644 index 000000000..5a83e5336 --- /dev/null +++ b/install/umami-install.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://umami.is/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs +PG_VERSION="17" setup_postgresql +PG_DB_NAME="umamidb" PG_DB_USER="umami" setup_postgresql_db +fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball" + +msg_info "Configuring Umami" +cd /opt/umami +$STD pnpm install +echo -e "DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" >>/opt/umami/.env +$STD pnpm run build +msg_ok "Configured Umami" + +msg_info "Creating Service" +cat </etc/systemd/system/umami.service +[Unit] +Description=umami + +[Service] +Type=simple +Restart=always +User=root +WorkingDirectory=/opt/umami +ExecStart=/usr/bin/pnpm run start + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now umami +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 822ead12e7f5fbe38ba91ed2bfe5dc5ac14af260 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sun, 14 Dec 2025 14:22:15 +0100 Subject: [PATCH 26/34] asset --- ct/homarr.sh | 2 +- install/homarr-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 362b74b0d..4598faa5b 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,7 +66,7 @@ EOF setup_nodejs rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" + fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" msg_info "Updating Homarr to v${RELEASE}" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/install/homarr-install.sh b/install/homarr-install.sh index a1faffa2b..e103494b6 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "source-amd64.tar.gz" +fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" msg_info "Installing Homarr" ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 From 2e2300865e0199d6c429270fc2bb1ed4c275e0b5 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sun, 14 Dec 2025 15:49:44 +0100 Subject: [PATCH 27/34] fix redis --- ct/homarr.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index 4598faa5b..5b69526a0 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -40,6 +40,7 @@ function update_script() { msg_info "Fixing old structure" $STD apt install -y musl-dev ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1 + cp /opt/homarr/.env /opt/homarr.env echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service @@ -52,7 +53,6 @@ ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis - EOF # TODO: change in json systemctl daemon-reload - cp /opt/homarr/.env /opt/homarr.env rm /opt/run_homarr.sh msg_ok "Fixed old structure" fi @@ -64,18 +64,14 @@ EOF NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" - rm -rf /opt/homarr - fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz" - - msg_info "Updating Homarr to v${RELEASE}" + msg_info "Updating Homarr" cp /opt/homarr/redis.conf /etc/redis/redis.conf rm /etc/nginx/nginx.conf mkdir -p /etc/nginx/templates cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf - echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr - chmod +x /usr/bin/homarr - msg_ok "Updated Homarr to v${RELEASE}" + msg_ok "Updated Homarr" msg_info "Starting Services" chmod +x /opt/homarr/run.sh From abaa4a4e177257f05558d5ec364ce6208abd72b9 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Sun, 14 Dec 2025 16:00:33 +0100 Subject: [PATCH 28/34] Delete Umami --- ct/umami.sh | 59 ---------------------------------------- install/umami-install.sh | 48 -------------------------------- 2 files changed, 107 deletions(-) delete mode 100644 ct/umami.sh delete mode 100644 install/umami-install.sh diff --git a/ct/umami.sh b/ct/umami.sh deleted file mode 100644 index 522807970..000000000 --- a/ct/umami.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://umami.is/ - -APP="Umami" -var_tags="${var_tags:-analytics}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-12}" -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/umami ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "umami" "umami-software/umami"; then - msg_info "Stopping Service" - systemctl stop umami - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball" - - msg_info "Updating Umami" - cd /opt/umami - $STD pnpm install - $STD pnpm run build - msg_ok "Updated Umami" - - msg_info "Starting Service" - systemctl start umami - 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}:3000${CL}" diff --git a/install/umami-install.sh b/install/umami-install.sh deleted file mode 100644 index 5a83e5336..000000000 --- a/install/umami-install.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://umami.is/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs -PG_VERSION="17" setup_postgresql -PG_DB_NAME="umamidb" PG_DB_USER="umami" setup_postgresql_db -fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball" - -msg_info "Configuring Umami" -cd /opt/umami -$STD pnpm install -echo -e "DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" >>/opt/umami/.env -$STD pnpm run build -msg_ok "Configured Umami" - -msg_info "Creating Service" -cat </etc/systemd/system/umami.service -[Unit] -Description=umami - -[Service] -Type=simple -Restart=always -User=root -WorkingDirectory=/opt/umami -ExecStart=/usr/bin/pnpm run start - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now umami -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc From 02a9716ba25172381fe33a7f4033da08a4fc4f56 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Sun, 14 Dec 2025 17:09:34 +0100 Subject: [PATCH 29/34] Update redis directory permissions to 744 Changed permissions of the redis directory from 755 to 744. --- install/homarr-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/homarr-install.sh b/install/homarr-install.sh index e103494b6..990b8be94 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -47,7 +47,7 @@ msg_ok "Installed Homarr" msg_info "Copying config files" mkdir -p /appdata/redis chown -R redis:redis /appdata/redis -chmod 755 /appdata/redis +chmod 744 /appdata/redis cp /opt/homarr/redis.conf /etc/redis/redis.conf rm /etc/nginx/nginx.conf mkdir -p /etc/nginx/templates From 1f82b1dfc6b44d5f9ca7cf41aee98ba42c67289f Mon Sep 17 00:00:00 2001 From: tremor021 Date: Mon, 15 Dec 2025 00:01:40 +0100 Subject: [PATCH 30/34] Heimdall test --- ct/heimdall-dashboard.sh | 80 +++++++++++++++++++++++++++ install/heimdall-dashboard-install.sh | 60 ++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 ct/heimdall-dashboard.sh create mode 100644 install/heimdall-dashboard-install.sh diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh new file mode 100644 index 000000000..e27f06427 --- /dev/null +++ b/ct/heimdall-dashboard.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2025 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://heimdall.site/ + +APP="Heimdall-Dashboard" +var_tags="${var_tags:-dashboard}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-2}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/Heimdall ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') + if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + msg_info "Stopping Service" + systemctl stop heimdall + sleep 1 + msg_ok "Stopped Service" + msg_info "Backing up Data" + cp -R /opt/Heimdall/database database-backup + cp -R /opt/Heimdall/public public-backup + sleep 1 + msg_ok "Backed up Data" + msg_info "Updating Heimdall Dashboard to ${RELEASE}" + curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz") + tar xzf "${RELEASE}".tar.gz + VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + cp -R Heimdall-"${VER}"/* /opt/Heimdall + cd /opt/Heimdall + $STD apt-get install -y composer + export COMPOSER_ALLOW_SUPERUSER=1 + $STD composer dump-autoload + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated Heimdall Dashboard to ${RELEASE}" + msg_info "Restoring Data" + cd ~ + cp -R database-backup/* /opt/Heimdall/database + cp -R public-backup/* /opt/Heimdall/public + sleep 1 + msg_ok "Restored Data" + msg_info "Cleanup" + rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall} + sleep 1 + msg_ok "Cleaned" + msg_info "Starting Service" + systemctl start heimdall.service + sleep 2 + msg_ok "Started Service" + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}." + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7990${CL}" diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh new file mode 100644 index 000000000..a2e0ed1fe --- /dev/null +++ b/install/heimdall-dashboard-install.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://heimdall.site/ + +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 apt-transport-https +$STD apt-get install -y composer +$STD apt-get install -y php8.2-{bz2,curl,sqlite3,zip,xml} +msg_ok "Installed Dependencies" + +RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') +echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt +msg_info "Installing Heimdall Dashboard ${RELEASE}" +curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o "${RELEASE}".tar.gz +tar xzf "${RELEASE}".tar.gz +VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +rm -rf "${RELEASE}".tar.gz +mv Heimdall-"${VER}" /opt/Heimdall +cd /opt/Heimdall +cp .env.example .env +$STD php artisan key:generate +msg_ok "Installed Heimdall Dashboard ${RELEASE}" + +msg_info "Creating Service" +service_path="/etc/systemd/system/heimdall.service" +echo "[Unit] +Description=Heimdall +After=network.target + +[Service] +Restart=always +RestartSec=5 +Type=simple +User=root +WorkingDirectory=/opt/Heimdall +ExecStart="/usr/bin/php" artisan serve --port 7990 --host 0.0.0.0 +TimeoutStopSec=30 + +[Install] +WantedBy=multi-user.target" >$service_path +systemctl enable -q --now heimdall +cd /opt/Heimdall +COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null +systemctl restart heimdall.service +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 638982a1603405e653f4563bea166a1577034272 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Mon, 15 Dec 2025 00:18:38 +0100 Subject: [PATCH 31/34] Heimdall test --- ct/heimdall-dashboard.sh | 32 +++++++++++++-------------- install/heimdall-dashboard-install.sh | 26 +++++++++------------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh index e27f06427..0a01b757c 100644 --- a/ct/heimdall-dashboard.sh +++ b/ct/heimdall-dashboard.sh @@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}" var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" -var_version="${var_version:-12}" +var_version="${var_version:-13}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -27,45 +27,45 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + + if check_for_gh_release "linuxserver/Heimdall"; then msg_info "Stopping Service" systemctl stop heimdall sleep 1 msg_ok "Stopped Service" + msg_info "Backing up Data" cp -R /opt/Heimdall/database database-backup cp -R /opt/Heimdall/public public-backup sleep 1 msg_ok "Backed up Data" - msg_info "Updating Heimdall Dashboard to ${RELEASE}" - curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz") - tar xzf "${RELEASE}".tar.gz - VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - cp -R Heimdall-"${VER}"/* /opt/Heimdall + + setup_composer + fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball" + + msg_info "Updating Heimdall-Dashboard" cd /opt/Heimdall - $STD apt-get install -y composer export COMPOSER_ALLOW_SUPERUSER=1 $STD composer dump-autoload - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated Heimdall Dashboard to ${RELEASE}" + msg_ok "Updated Heimdall-Dashboard" + msg_info "Restoring Data" cd ~ cp -R database-backup/* /opt/Heimdall/database cp -R public-backup/* /opt/Heimdall/public sleep 1 msg_ok "Restored Data" - msg_info "Cleanup" - rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall} + + msg_info "Cleaning Up" + rm -rf {public-backup,database-backup} sleep 1 - msg_ok "Cleaned" + msg_ok "Cleaned Up" + msg_info "Starting Service" systemctl start heimdall.service sleep 2 msg_ok "Started Service" msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}." fi exit } diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index a2e0ed1fe..057bbe798 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -14,27 +14,22 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y apt-transport-https -$STD apt-get install -y composer -$STD apt-get install -y php8.2-{bz2,curl,sqlite3,zip,xml} +$STD apt install -y apt-transport-https msg_ok "Installed Dependencies" -RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') -echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt -msg_info "Installing Heimdall Dashboard ${RELEASE}" -curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o "${RELEASE}".tar.gz -tar xzf "${RELEASE}".tar.gz -VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -rm -rf "${RELEASE}".tar.gz -mv Heimdall-"${VER}" /opt/Heimdall +PHP_VERSION="8.4" PHP_MODULE="bz2,sqlite3" PHP_FPM="YES" setup_php +setup_composer +fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball" + +msg_info "Setting up Heimdall-Dashboard" cd /opt/Heimdall cp .env.example .env $STD php artisan key:generate msg_ok "Installed Heimdall Dashboard ${RELEASE}" msg_info "Creating Service" -service_path="/etc/systemd/system/heimdall.service" -echo "[Unit] +cat </etc/systemd/system/heimdall.service +[Unit] Description=Heimdall After=network.target @@ -44,11 +39,12 @@ RestartSec=5 Type=simple User=root WorkingDirectory=/opt/Heimdall -ExecStart="/usr/bin/php" artisan serve --port 7990 --host 0.0.0.0 +ExecStart=/usr/bin/php artisan serve --port 7990 --host 0.0.0.0 TimeoutStopSec=30 [Install] -WantedBy=multi-user.target" >$service_path +WantedBy=multi-user.target" +EOF systemctl enable -q --now heimdall cd /opt/Heimdall COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null From dab7a31c16766d534e25f83779222159c343269b Mon Sep 17 00:00:00 2001 From: tremor021 Date: Mon, 15 Dec 2025 00:24:16 +0100 Subject: [PATCH 32/34] Heimdall test --- install/heimdall-dashboard-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index 057bbe798..01cd5c601 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -25,7 +25,7 @@ msg_info "Setting up Heimdall-Dashboard" cd /opt/Heimdall cp .env.example .env $STD php artisan key:generate -msg_ok "Installed Heimdall Dashboard ${RELEASE}" +msg_ok "Setup Heimdall-Dashboard" msg_info "Creating Service" cat </etc/systemd/system/heimdall.service From 3be34c50a455781b469ebcaa1fcd0f5595ff4797 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Mon, 15 Dec 2025 00:32:51 +0100 Subject: [PATCH 33/34] heimdall update fix --- ct/heimdall-dashboard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh index 0a01b757c..c4fc9349a 100644 --- a/ct/heimdall-dashboard.sh +++ b/ct/heimdall-dashboard.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - if check_for_gh_release "linuxserver/Heimdall"; then + if check_for_gh_release "Heimdall" "linuxserver/Heimdall"; then msg_info "Stopping Service" systemctl stop heimdall sleep 1 From 4af2c412040e19fd9113cd9b06625836367e5baf Mon Sep 17 00:00:00 2001 From: tremor021 Date: Mon, 15 Dec 2025 00:34:37 +0100 Subject: [PATCH 34/34] heimdall works now --- install/heimdall-dashboard-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index 01cd5c601..9346ea4fd 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -47,7 +47,8 @@ WantedBy=multi-user.target" EOF systemctl enable -q --now heimdall cd /opt/Heimdall -COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null +export COMPOSER_ALLOW_SUPERUSER=1 +$STD composer dump-autoload systemctl restart heimdall.service msg_ok "Created Service"