From f7d2b98dc191d3f7a870400364f240800427c680 Mon Sep 17 00:00:00 2001 From: zjk <1553836110@qq.com> Date: Wed, 9 Sep 2026 20:52:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=9C=AC/mission=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=B7=B2=E5=BA=9F=E5=BC=83=E7=9A=84=20deploy.sh=EF=BC=9Aclean-?= =?UTF-8?q?data/fetch-data/sync-board-time=20=E5=B8=AE=E5=8A=A9=E4=B8=8E?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E6=96=87=E6=A1=88=E6=94=B9=E7=94=A8=20ssh-co?= =?UTF-8?q?py-id=20=E6=8C=87=E5=BC=95=EF=BC=8Cmission=20=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=94=B9=E4=B8=BA=20build-board.sh=20?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=EF=BC=8C=E9=81=BF=E5=85=8D=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=B7=B2=E5=88=A0=E9=99=A4=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- missions/h100.moos | 6 +- scripts/clean-data.sh | 4 +- scripts/deploy.sh | 271 ------------------------------------- scripts/fetch-data.sh | 4 +- scripts/sync-board-time.sh | 4 +- 5 files changed, 9 insertions(+), 280 deletions(-) delete mode 100755 scripts/deploy.sh diff --git a/missions/h100.moos b/missions/h100.moos index ecf3f72..4949e55 100644 --- a/missions/h100.moos +++ b/missions/h100.moos @@ -2,7 +2,7 @@ // 板卡 (RK3588 / Ubuntu 20.04) 专用 mission 配置 // 七个 systemd 服务(moosdb / pPowerManger / pPowerMangerHost / pCCU / // pCanBridge / pMotor / pELoad)共用本文件。 -// 由 scripts/deploy.sh 推送到板卡 /root/work/h100/missions/h100.moos +// 由 scripts/build-board.sh 同步到板卡 /root/work/h100/missions/h100.moos ServerHost = localhost ServerPort = 9000 @@ -13,9 +13,9 @@ ProcessConfig = pPowerManger AppTick = 4 CommsTick = 4 log_level = INFO - // 日志文件路径(目录需已存在,由 deploy.sh 创建) + // 日志文件路径(目录需已存在,由 build-board.sh 部署时创建) logpath = /root/work/h100/data/pPowerManger.log - // 数据库存储路径(目录需已存在,由 deploy.sh 创建) + // 数据库存储路径(目录需已存在,由 build-board.sh 部署时创建) dbpath = /root/work/h100/data/power_data.db // CCU 地址(pPowerManger -> pCCU 的 UDP 链路);不配置则默认 127.0.0.1:7000 ccuhost = 127.0.0.1 diff --git a/scripts/clean-data.sh b/scripts/clean-data.sh index d3c8243..f4cd0e3 100755 --- a/scripts/clean-data.sh +++ b/scripts/clean-data.sh @@ -25,7 +25,7 @@ # --stale 额外清理历史遗留的 bin/、src/bin/ 下旧数据库与日志 # -h, --help 显示帮助 # -# 前置: 板卡已配免密 SSH(见 scripts/deploy.sh setup-ssh)。 +# 前置: 板卡已配免密 SSH(ssh-copy-id root@)。 #======================================================================= set -uo pipefail @@ -90,7 +90,7 @@ SSH="ssh -o BatchMode=yes -o ConnectTimeout=5" #------------------------------------------------------------------- if ! ${SSH} "${SSH_TARGET}" 'true' 2>/dev/null; then err "无法免密 SSH 到 ${SSH_TARGET}" - err "请先执行: ./scripts/deploy.sh setup-ssh" + err "请先配置免密登录: ssh-copy-id ${SSH_TARGET}" exit 1 fi ok "SSH 连接正常: ${SSH_TARGET}" diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index 69173fb..0000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,271 +0,0 @@ -#!/bin/bash -#======================================================================= -# FILE: scripts/deploy.sh -# DESC: 部署 mission + 7 个 systemd 服务(moosdb / pPowerManger / -# pPowerMangerHost / pCCU / pCanBridge / pMotor / pELoad)到目标 -# 板卡 (RK3588 / Ubuntu 22.04)。只安装服务 + daemon-reload, -# 默认不启动、不自启。 -# -# 注意:二进制由 ./scripts/build-board.sh 在板卡原生编译并部署到 -# /root/work/h100/bin/(交叉编译已移除),本脚本不再推送二进制。 -# -# 用法: -# ./scripts/deploy.sh setup-ssh 一次性:生成 ed25519 key + ssh-copy-id -# ./scripts/deploy.sh 默认:推送 mission + 装 7 个 -# systemd 服务 + daemon-reload(不启动) -# ./scripts/deploy.sh --start 部署后按依赖顺序启动服务 -# ./scripts/deploy.sh status 板卡各服务状态 -# ./scripts/deploy.sh stop 停止各服务 -# ./scripts/deploy.sh help 显示帮助 -# -# 参数: -# --host 目标主机(默认 192.168.0.223) -# --user 登录用户(默认 root) -# --board-dir 板卡部署根目录(默认 /root/work/h100) -# --start 部署后立即启动服务 -# --ccu-host 覆盖 mission 中 pPowerManger 的 CCU 地址 (ccuhost) -# --ccu-port 覆盖 mission 中 pPowerManger 的 CCU 端口 (ccuport) -# -# 板卡布局: -# /root/work/h100/bin/ 二进制(由 build-board.sh 板卡编译产出) -# /root/work/h100/missions/ 板卡 mission h100.moos -# /root/work/h100/data/ 数据库存储目录 (power_data.db 等) -# /etc/systemd/system/ moosdb.service / pPowerManger.service / -# pPowerMangerHost.service / pCCU.service / -# pCanBridge.service / pMotor.service / -# pELoad.service -#======================================================================= -set -uo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")" - -HOST="192.168.0.223" -USER="root" -BOARD_DIR="/root/work/h100" -DO_START=0 -CCU_HOST="" -CCU_PORT="" - -SERVICES=(moosdb pPowerManger pPowerMangerHost pCCU pCanBridge pMotor pELoad) - -info() { printf '\033[1;36m[deploy]\033[0m %s\n' "$*"; } -ok() { printf '\033[1;32m[deploy]\033[0m %s\n' "$*"; } -warn() { printf '\033[1;33m[deploy]\033[0m %s\n' "$*"; } -err() { printf '\033[1;31m[deploy]\033[0m %s\n' "$*"; } - -usage() { - sed -n '2,35p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//' - exit 0 -} - -#------------------------------------------------------------------- -# 参数解析 -#------------------------------------------------------------------- -ACTION="" -while [ $# -gt 0 ]; do - case "$1" in - --host) [ $# -ge 2 ] || { err "--host 需要参数"; exit 1; }; HOST="$2"; shift 2 ;; - --user) [ $# -ge 2 ] || { err "--user 需要参数"; exit 1; }; USER="$2"; shift 2 ;; - --board-dir)[ $# -ge 2 ] || { err "--board-dir 需要参数"; exit 1; }; BOARD_DIR="$2"; shift 2 ;; - --start) DO_START=1; shift ;; - --ccu-host) [ $# -ge 2 ] || { err "--ccu-host 需要参数"; exit 1; }; CCU_HOST="$2"; shift 2 ;; - --ccu-port) [ $# -ge 2 ] || { err "--ccu-port 需要参数"; exit 1; }; CCU_PORT="$2"; shift 2 ;; - setup-ssh|status|stop|help|-h|--help) ACTION="$1"; shift ;; - "") shift ;; - *) err "未知参数: $1(见 help)"; exit 1 ;; - esac -done -[ -n "${ACTION}" ] || ACTION="deploy" - -case "${CCU_PORT}" in - ""|*[!0-9]*) [ -z "${CCU_PORT}" ] || { err "--ccu-port 必须是数字端口: ${CCU_PORT}"; exit 1; } ;; -esac - -SSH_TARGET="${USER}@${HOST}" -SSH="ssh -o BatchMode=yes -o ConnectTimeout=5" -SCP="scp -o BatchMode=yes -o ConnectTimeout=5" - -#------------------------------------------------------------------- -# 命令: setup-ssh -#------------------------------------------------------------------- -cmd_setup_ssh() { - local key="$HOME/.ssh/id_ed25519" - if [ ! -f "${key}" ]; then - info "未发现 SSH key,生成 ed25519 key ..." - mkdir -p "$HOME/.ssh" && chmod 700 "$HOME/.ssh" - ssh-keygen -t ed25519 -N '' -f "${key}" - fi - info "上传公钥到 ${SSH_TARGET}(会提示输入密码,仅此一次)..." - ssh-copy-id -o ConnectTimeout=5 "${SSH_TARGET}" - ok "免密 SSH 已配置。验证: ssh ${SSH_TARGET}" -} - -#------------------------------------------------------------------- -# 前置检查 -#------------------------------------------------------------------- -check_ssh() { - if ! ${SSH} "${SSH_TARGET}" 'true' 2>/dev/null; then - err "无法免密 SSH 到 ${SSH_TARGET}" - err "请先执行: ./scripts/deploy.sh setup-ssh" - return 1 - fi - ok "SSH 连接正常: ${SSH_TARGET}" -} - -#------------------------------------------------------------------- -# 生成 systemd unit(含板卡绝对路径) -#------------------------------------------------------------------- -gen_moosdb_unit() { - # MOOSDB 路径在板卡探测;探测失败给出提示 - local moosdb_bin - moosdb_bin="$(${SSH} "${SSH_TARGET}" 'command -v MOOSDB || true' 2>/dev/null)" - if [ -z "${moosdb_bin}" ]; then - moosdb_bin="$(command -v MOOSDB || true)" - warn "板卡未在 PATH 找到 MOOSDB,回退本机路径 ${moosdb_bin:-"(未找到)"}" - [ -n "${moosdb_bin}" ] || { err "MOOSDB 路径未知,无法生成 moosdb.service"; return 1; } - fi - ok "MOOSDB 路径: ${moosdb_bin}" >&2 - - cat < "${f}.tmp" && mv "${f}.tmp" "${f}" - fi -} - -#------------------------------------------------------------------- -# 命令: deploy -#------------------------------------------------------------------- -cmd_deploy() { - check_ssh || return 1 - [ -f "${PROJECT_ROOT}/missions/h100.moos" ] || { err "缺少板卡 mission: missions/h100.moos"; return 1; } - - # 1. 创建板卡目录 + 推送 mission - info "创建板卡目录 ${BOARD_DIR}/{bin,missions,data} ..." - ${SSH} "${SSH_TARGET}" "mkdir -p ${BOARD_DIR}/bin ${BOARD_DIR}/missions ${BOARD_DIR}/data" || { err "创建目录失败"; return 1; } - - info "推送 mission h100.moos ..." - local mission_src="${PROJECT_ROOT}/missions/h100.moos" - local mission_push="${mission_src}" tmp_moos="" - if [ -n "${CCU_HOST}" ] || [ -n "${CCU_PORT}" ]; then - tmp_moos="$(mktemp)" - cp "${mission_src}" "${tmp_moos}" - [ -n "${CCU_HOST}" ] && upsert_moos_param "${tmp_moos}" ccuhost "${CCU_HOST}" - [ -n "${CCU_PORT}" ] && upsert_moos_param "${tmp_moos}" ccuport "${CCU_PORT}" - mission_push="${tmp_moos}" - info "CCU 地址覆盖: ccuhost=${CCU_HOST:-<保持原值>} ccuport=${CCU_PORT:-<保持原值>}" - fi - ${SCP} -q "${mission_push}" \ - "${SSH_TARGET}:${BOARD_DIR}/missions/" || { err "推送 mission 失败"; [ -n "${tmp_moos}" ] && rm -f "${tmp_moos}"; return 1; } - [ -n "${tmp_moos}" ] && rm -f "${tmp_moos}" - - ok "mission 已推送(二进制由 build-board.sh 在板卡编译部署)" - - # 2. 生成并安装 4 个 systemd unit - local unit - for s in "${SERVICES[@]}"; do - info "生成 ${s}.service ..." - if [ "${s}" = "moosdb" ]; then - unit="$(gen_moosdb_unit)" || return 1 - else - unit="$(gen_app_unit "${s}")" - fi - printf '%s\n' "${unit}" | ${SSH} "${SSH_TARGET}" "cat > /etc/systemd/system/${s}.service" - ok "${s}.service 已安装" - done - - # 3. daemon-reload(不 enable,不自启) - info "systemctl daemon-reload ..." - ${SSH} "${SSH_TARGET}" "systemctl daemon-reload && systemctl reset-failed ${SERVICES[*]} 2>/dev/null || true" - ok "服务已安装但未启用自启(systemctl is-enabled 应输出 disabled)" - - # 4. 可选启动 - if [ "${DO_START}" = "1" ]; then - cmd_start - else - echo "" - info "部署完成。手动启动(或加 --start):" - echo " systemctl start moosdb pPowerManger pPowerMangerHost pCCU pCanBridge pMotor pELoad" - echo " 浏览器: http://${HOST}:18080 (上位机模拟)" - echo " http://${HOST}:8090 (pPowerManger)" - echo " http://${HOST}:8080 (pCCU)" - echo " http://${HOST}:18082 (pELoad)" - fi -} - -#------------------------------------------------------------------- -# 命令: start / status / stop -#------------------------------------------------------------------- -cmd_start() { - info "启动服务 (moosdb -> pPowerManger / pPowerMangerHost / pCCU / pCanBridge / pMotor / pELoad) ..." - ${SSH} "${SSH_TARGET}" "systemctl start moosdb && sleep 1 && \ - systemctl start pPowerManger pPowerMangerHost pCCU pCanBridge pMotor pELoad" || { err "启动失败"; return 1; } - ok "服务已启动" - cmd_status -} - -cmd_status() { - ${SSH} "${SSH_TARGET}" "systemctl --no-pager status ${SERVICES[*]}" || true -} - -cmd_stop() { - ${SSH} "${SSH_TARGET}" "systemctl stop pELoad pMotor pCanBridge pPowerMangerHost pPowerManger pCCU moosdb" && \ - ok "服务已停止" || err "停止服务失败" -} - -#------------------------------------------------------------------- -# 命令入口 -#------------------------------------------------------------------- -case "${ACTION}" in - deploy) cmd_deploy ;; - setup-ssh) cmd_setup_ssh ;; - status) cmd_status ;; - stop) cmd_stop ;; - help|-h|--help) usage ;; - *) usage ;; -esac diff --git a/scripts/fetch-data.sh b/scripts/fetch-data.sh index dc9e554..bfcc390 100755 --- a/scripts/fetch-data.sh +++ b/scripts/fetch-data.sh @@ -23,7 +23,7 @@ # --journal 额外导出各服务的 systemd journal 日志 # -h, --help 显示帮助 # -# 前置: 板卡已配免密 SSH(见 scripts/deploy.sh setup-ssh)。 +# 前置: 板卡已配免密 SSH(ssh-copy-id root@)。 #======================================================================= set -uo pipefail @@ -82,7 +82,7 @@ SCP="scp -o BatchMode=yes -o ConnectTimeout=5" #------------------------------------------------------------------- if ! ${SSH} "${SSH_TARGET}" 'true' 2>/dev/null; then err "无法免密 SSH 到 ${SSH_TARGET}" - err "请先执行: ./scripts/deploy.sh setup-ssh" + err "请先配置免密登录: ssh-copy-id ${SSH_TARGET}" exit 1 fi ok "SSH 连接正常: ${SSH_TARGET}" diff --git a/scripts/sync-board-time.sh b/scripts/sync-board-time.sh index d9c91a5..2f2d6aa 100755 --- a/scripts/sync-board-time.sh +++ b/scripts/sync-board-time.sh @@ -20,7 +20,7 @@ # -h, --help 显示帮助 # # 说明: -# - 需要 root 登录与免密 SSH(deploy.sh setup-ssh)。 +# - 需要 root 登录与免密 SSH(ssh-copy-id root@)。 # - 对时经 SSH 往返时延 (RTT) 折半补偿,精度约 ±0.1s(受网络抖动影响)。 # - 板卡若无可用 RTC,hwclock 失败仅告警;重启后时间可能回跳。 # - 对时会调整系统时钟,运行中的服务日志时间戳会跳变,属正常现象。 @@ -75,7 +75,7 @@ read_board_time() { local t0 t1 out t0="$(date +%s.%N)" out="$(${SSH} "${SSH_TARGET}" 'date "+%s.%N|%F %T %Z"' 2>/dev/null)" || { - err "无法免密 SSH 到 ${SSH_TARGET}(先执行: ./scripts/deploy.sh setup-ssh)" >&2 + err "无法免密 SSH 到 ${SSH_TARGET}(先配置免密: ssh-copy-id ${SSH_TARGET})" >&2 return 1 } t1="$(date +%s.%N)"