diff --git a/ct/openthread-br.sh b/ct/openthread-br.sh new file mode 100644 index 000000000..310318cff --- /dev/null +++ b/ct/openthread-br.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://openthread.io/guides/border-router + +APP="OpenThread-BR" +var_tags="${var_tags:-thread;iot;border-router;matter}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-0}" +var_tun="${var_tun:-yes}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/ot-br-posix ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + cd /opt/ot-br-posix + LOCAL_COMMIT=$(git rev-parse HEAD) + $STD git fetch --depth 1 origin main + REMOTE_COMMIT=$(git rev-parse origin/main) + + if [[ "${LOCAL_COMMIT}" == "${REMOTE_COMMIT}" ]]; then + msg_ok "Already up to date (${LOCAL_COMMIT:0:7})" + exit + fi + + msg_info "Stopping Services" + systemctl stop otbr-web + systemctl stop otbr-agent + msg_ok "Stopped Services" + + msg_info "Updating Source" + $STD git reset --hard origin/main + $STD git submodule update --depth 1 --init --recursive + msg_ok "Updated Source" + + msg_info "Rebuilding OpenThread Border Router (Patience)" + cd /opt/ot-br-posix/build + $STD cmake -GNinja \ + -DBUILD_TESTING=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DOTBR_DBUS=ON \ + -DOTBR_MDNS=openthread \ + -DOTBR_REST=ON \ + -DOTBR_WEB=ON \ + -DOTBR_BORDER_ROUTING=ON \ + -DOTBR_BACKBONE_ROUTER=ON \ + -DOT_FIREWALL=ON \ + -DOT_POSIX_NAT64_CIDR="192.168.255.0/24" \ + .. + $STD ninja + $STD ninja install + msg_ok "Rebuilt OpenThread Border Router" + + msg_info "Starting Services" + systemctl start otbr-agent + systemctl start otbr-web + 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}${CL}" diff --git a/install/openthread-br-install.sh b/install/openthread-br-install.sh new file mode 100644 index 000000000..82c3fea45 --- /dev/null +++ b/install/openthread-br-install.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://openthread.io/guides/border-router + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + build-essential \ + cmake \ + ninja-build \ + pkg-config \ + git \ + iproute2 \ + libreadline-dev \ + libncurses-dev \ + rsyslog \ + dbus \ + libdbus-1-dev \ + libjsoncpp-dev \ + iptables \ + ipset \ + bind9 \ + libnetfilter-queue1 \ + libnetfilter-queue-dev \ + libprotobuf-dev \ + protobuf-compiler \ + socat +msg_ok "Installed Dependencies" + +setup_nodejs + +msg_info "Cloning OpenThread Border Router" +# git clone is needed to fetch submodules, fetch_and_deploy_gh_release doesn't support this. We use --depth 1 to minimize the amount of data cloned, but it still may take a while. +$STD git clone --depth 1 https://github.com/openthread/ot-br-posix /opt/ot-br-posix +cd /opt/ot-br-posix +$STD git submodule update --depth 1 --init --recursive +msg_ok "Cloned OpenThread Border Router" + +msg_info "Building OpenThread Border Router (Patience)" +mkdir -p build && cd build +$STD cmake -GNinja \ + -DBUILD_TESTING=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DOTBR_DBUS=ON \ + -DOTBR_MDNS=openthread \ + -DOTBR_REST=ON \ + -DOTBR_WEB=ON \ + -DOTBR_BORDER_ROUTING=ON \ + -DOTBR_BACKBONE_ROUTER=ON \ + -DOT_FIREWALL=ON \ + -DOT_POSIX_NAT64_CIDR="192.168.255.0/24" \ + .. +$STD ninja +$STD ninja install +msg_ok "Built OpenThread Border Router" + +msg_info "Configuring Network" +cat </etc/sysctl.d/99-otbr.conf +net.ipv6.conf.all.forwarding=1 +net.ipv4.ip_forward=1 +EOF +$STD sysctl -p /etc/sysctl.d/99-otbr.conf +msg_ok "Configured Network" + +msg_info "Configuring Services" +cat <<'EOF' >/etc/default/otbr-agent +# USB example: +# OTBR_AGENT_OPTS="-I wpan0 -B eth0 --vendor-name OpenThread --model-name BorderRouter --rest-listen-address 0.0.0.0 --rest-listen-port 8081 spinel+hdlc+uart:///dev/ttyACM0" +# TCP via socat (for network-attached RCP like SLZB-06/SLZB-MR3): + +# OTBR_AGENT_OPTS="-I wpan0 -B eth0 --vendor-name OpenThread --model-name BorderRouter --rest-listen-address 0.0.0.0 --rest-listen-port 8081 spinel+hdlc+forkpty:///usr/bin/socat?forkpty-arg=-,rawer&forkpty-arg=tcp:IP:PORT trel://eth0" +OTBR_AGENT_OPTS="-I wpan0 -B eth0 --vendor-name OpenThread --model-name BorderRouter --rest-listen-address 0.0.0.0 --rest-listen-port 8081 spinel+hdlc+uart:///dev/ttyACM0" +EOF +cat <<'EOF' >/etc/default/otbr-web +OTBR_WEB_OPTS="-I wpan0 -a 0.0.0.0 -p 80" +EOF +systemctl enable -q dbus rsyslog otbr-agent otbr-web +systemctl enable -q bind9 2>/dev/null || systemctl enable -q named 2>/dev/null || true +systemctl start -q dbus rsyslog bind9 +msg_ok "Configured Services" + +motd_ssh +customize +cleanup_lxc