From d0dec90c09dbdbe5a35ecfae396bff336ab4fd2d Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 25 May 2026 14:51:10 +0200 Subject: [PATCH 1/5] feat: add nexterm --- ct/nexterm.sh | 77 ++++++++++++++++++++++++++++++ install/nexterm-install.sh | 98 ++++++++++++++++++++++++++++++++++++++ json/nexterm.json | 36 ++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 ct/nexterm.sh create mode 100644 install/nexterm-install.sh create mode 100644 json/nexterm.json diff --git a/ct/nexterm.sh b/ct/nexterm.sh new file mode 100644 index 00000000..556f0c39 --- /dev/null +++ b/ct/nexterm.sh @@ -0,0 +1,77 @@ +#!/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: Mathias Wagner +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://nexterm.dev/ + +APP="Nexterm" +var_tags="${var_tags:-server-management}" +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_arm64="${var_arm64:-yes}" +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 /opt/nexterm/server/nexterm-server ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + case "$(dpkg --print-architecture)" in + amd64) NX_ARCH="x64" ;; + arm64) NX_ARCH="arm64" ;; + *) + msg_error "Unsupported architecture" + exit 1 + ;; + esac + + ENGINE_UPDATE=0 + SERVER_UPDATE=0 + check_for_gh_release "nexterm-engine" "gnmyt/Nexterm" && ENGINE_UPDATE=1 + check_for_gh_release "nexterm-server" "gnmyt/Nexterm" && SERVER_UPDATE=1 + + if [[ $ENGINE_UPDATE -eq 0 && $SERVER_UPDATE -eq 0 ]]; then + exit + fi + + msg_info "Stopping Services" + systemctl stop nexterm-engine nexterm-server + msg_ok "Stopped Services" + + if [[ $ENGINE_UPDATE -eq 1 ]]; then + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nexterm-engine" "gnmyt/Nexterm" "prebuild" "latest" "/opt/nexterm/engine" "nexterm-engine-linux-${NX_ARCH}.tar.gz" + fi + if [[ $SERVER_UPDATE -eq 1 ]]; then + fetch_and_deploy_gh_release "nexterm-server" "gnmyt/Nexterm" "singlefile" "latest" "/opt/nexterm/server" "nexterm-server-linux-${NX_ARCH}" + fi + + msg_info "Starting Services" + systemctl start nexterm-server + systemctl start nexterm-engine + msg_ok "Started Services" + 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}:6989${CL}" diff --git a/install/nexterm-install.sh b/install/nexterm-install.sh new file mode 100644 index 00000000..4dffe18f --- /dev/null +++ b/install/nexterm-install.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Mathias Wagner +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://nexterm.dev/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +case "$(dpkg --print-architecture)" in + amd64) NX_ARCH="x64" ;; + arm64) NX_ARCH="arm64" ;; + *) + msg_error "Unsupported architecture: $(dpkg --print-architecture)" + exit 1 + ;; +esac + +fetch_and_deploy_gh_release "nexterm-engine" "gnmyt/Nexterm" "prebuild" "latest" "/opt/nexterm/engine" "nexterm-engine-linux-${NX_ARCH}.tar.gz" +fetch_and_deploy_gh_release "nexterm-server" "gnmyt/Nexterm" "singlefile" "latest" "/opt/nexterm/server" "nexterm-server-linux-${NX_ARCH}" + +msg_info "Configuring Nexterm" +LOCAL_ENGINE_TOKEN=$(tr -d '-' /etc/nexterm-engine/config.yaml +server_host: "127.0.0.1" +server_port: 7800 +registration_token: "${LOCAL_ENGINE_TOKEN}" +tls: false +EOF + +cat </etc/nexterm-server/server.env +NODE_ENV=production +SERVER_PORT=6989 +LOCAL_ENGINE_TOKEN=${LOCAL_ENGINE_TOKEN} +ENCRYPTION_KEY=${ENCRYPTION_KEY} +EOF +chmod 0640 /etc/nexterm-engine/config.yaml /etc/nexterm-server/server.env +msg_ok "Configured Nexterm" + +msg_info "Creating Server Service" +cat </etc/systemd/system/nexterm-server.service +[Unit] +Description=Nexterm Server +Documentation=https://docs.nexterm.dev/ +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/nexterm/data +EnvironmentFile=/etc/nexterm-server/server.env +ExecStart=/opt/nexterm/server/nexterm-server +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now nexterm-server +msg_ok "Created Server Service" + +msg_info "Creating Engine Service" +cat </etc/systemd/system/nexterm-engine.service +[Unit] +Description=Nexterm Engine +Documentation=https://docs.nexterm.dev/ +After=network-online.target nexterm-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/etc/nexterm-engine +Environment=FREERDP_EXTENSION_PATH=/opt/nexterm/engine/lib/freerdp2 +Environment=LD_LIBRARY_PATH=/opt/nexterm/engine/lib +ExecStart=/opt/nexterm/engine/nexterm-engine +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now nexterm-engine +msg_ok "Created Engine Service" + +motd_ssh +customize +cleanup_lxc diff --git a/json/nexterm.json b/json/nexterm.json new file mode 100644 index 00000000..5334d7d9 --- /dev/null +++ b/json/nexterm.json @@ -0,0 +1,36 @@ +{ + "name": "Nexterm", + "slug": "nexterm", + "categories": [ + 10 + ], + "date_created": "2026-05-25", + "type": "ct", + "updateable": true, + "privileged": false, + "has_arm": true, + "interface_port": 6989, + "documentation": "https://docs.nexterm.dev/", + "website": "https://nexterm.dev/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nexterm.webp", + "description": "Nexterm is an open-source server management software for SSH, VNC & RDP. It bundles a web interface, file management, monitoring, and team collaboration with two-factor authentication, OIDC SSO, and encrypted credential storage.", + "install_methods": [ + { + "type": "default", + "script": "ct/nexterm.sh", + "config_path": "/etc/nexterm-server/server.env", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 6, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} From 31814786d83e062ee83de1fcd45a2133d4454e31 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 25 May 2026 17:21:48 +0200 Subject: [PATCH 2/5] fix: Update author in nexterm-install.sh and ct/nexterm.sh --- ct/nexterm.sh | 2 +- install/nexterm-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/nexterm.sh b/ct/nexterm.sh index 556f0c39..3320aa6d 100644 --- a/ct/nexterm.sh +++ b/ct/nexterm.sh @@ -1,7 +1,7 @@ #!/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: Mathias Wagner +# Author: Mathias Wagner (gnmyt) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://nexterm.dev/ diff --git a/install/nexterm-install.sh b/install/nexterm-install.sh index 4dffe18f..068a744f 100644 --- a/install/nexterm-install.sh +++ b/install/nexterm-install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021-2026 community-scripts ORG -# Author: Mathias Wagner +# Author: Mathias Wagner (gnmyt) # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://nexterm.dev/ From b50424046f00e3945956a86ca228134a4f090d10 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 25 May 2026 17:28:08 +0200 Subject: [PATCH 3/5] feat: Consolidate service start commands in nexterm.sh --- ct/nexterm.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ct/nexterm.sh b/ct/nexterm.sh index 3320aa6d..002f9631 100644 --- a/ct/nexterm.sh +++ b/ct/nexterm.sh @@ -60,8 +60,7 @@ function update_script() { fi msg_info "Starting Services" - systemctl start nexterm-server - systemctl start nexterm-engine + systemctl start nexterm-server nexterm-engine msg_ok "Started Services" msg_ok "Updated successfully!" exit From 97592cc91302c7435506e35ff69102975d435234 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 25 May 2026 17:29:51 +0200 Subject: [PATCH 4/5] fix: Set has_arm to false in nexterm.sh & nexterm.json (not tested) --- ct/nexterm.sh | 2 +- json/nexterm.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/nexterm.sh b/ct/nexterm.sh index 002f9631..fba93d2f 100644 --- a/ct/nexterm.sh +++ b/ct/nexterm.sh @@ -12,7 +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:-yes}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/json/nexterm.json b/json/nexterm.json index 5334d7d9..cda838de 100644 --- a/json/nexterm.json +++ b/json/nexterm.json @@ -8,7 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, - "has_arm": true, + "has_arm": false, "interface_port": 6989, "documentation": "https://docs.nexterm.dev/", "website": "https://nexterm.dev/", From 62c61de14396f47737481dafb8d698fe628e11ac Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 25 May 2026 17:38:01 +0200 Subject: [PATCH 5/5] feat: Move check_for_gh_release to dedicated if-block in nexterm.sh --- ct/nexterm.sh | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/ct/nexterm.sh b/ct/nexterm.sh index fba93d2f..3be8ae84 100644 --- a/ct/nexterm.sh +++ b/ct/nexterm.sh @@ -39,30 +39,29 @@ function update_script() { ;; esac - ENGINE_UPDATE=0 - SERVER_UPDATE=0 - check_for_gh_release "nexterm-engine" "gnmyt/Nexterm" && ENGINE_UPDATE=1 - check_for_gh_release "nexterm-server" "gnmyt/Nexterm" && SERVER_UPDATE=1 + if check_for_gh_release "nexterm-engine" "gnmyt/Nexterm"; then + msg_info "Stopping nexterm-engine" + systemctl stop nexterm-engine + msg_ok "Stopped nexterm-engine" - if [[ $ENGINE_UPDATE -eq 0 && $SERVER_UPDATE -eq 0 ]]; then - exit - fi - - msg_info "Stopping Services" - systemctl stop nexterm-engine nexterm-server - msg_ok "Stopped Services" - - if [[ $ENGINE_UPDATE -eq 1 ]]; then CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nexterm-engine" "gnmyt/Nexterm" "prebuild" "latest" "/opt/nexterm/engine" "nexterm-engine-linux-${NX_ARCH}.tar.gz" - fi - if [[ $SERVER_UPDATE -eq 1 ]]; then - fetch_and_deploy_gh_release "nexterm-server" "gnmyt/Nexterm" "singlefile" "latest" "/opt/nexterm/server" "nexterm-server-linux-${NX_ARCH}" + + msg_info "Starting nexterm-engine" + systemctl start nexterm-engine + msg_ok "Started nexterm-engine" fi - msg_info "Starting Services" - systemctl start nexterm-server nexterm-engine - msg_ok "Started Services" - msg_ok "Updated successfully!" + if check_for_gh_release "nexterm-server" "gnmyt/Nexterm"; then + msg_info "Stopping nexterm-server" + systemctl stop nexterm-server + msg_ok "Stopped nexterm-server" + + fetch_and_deploy_gh_release "nexterm-server" "gnmyt/Nexterm" "singlefile" "latest" "/opt/nexterm/server" "nexterm-server-linux-${NX_ARCH}" + + msg_info "Starting nexterm-server" + systemctl start nexterm-server + msg_ok "Started nexterm-server" + fi exit }