脚本清理:移除交叉编译,统一板卡原生编译流程 + 数据脚本支持 pCanBridge

- 移除交叉编译脚本 build-arm64.sh / build-arm64-image.sh 及本地
  bin/arm64、build-arm64 产物目录(QEMU 模拟编译过慢)。
  板卡产物统一由 ./scripts/build-board.sh 原生编译产出。
- deploy.sh 简化为 mission + 5 个 systemd 服务安装(不再推送
  二进制),头注明确二进制来源为 build-board.sh。
- fetch-data.sh:新增 pCanBridge_data.db(+wal/shm) 下载,补齐
  遗漏的 pccu_data.db-wal/-shm,--journal 导出列表加入 pCanBridge。
- clean-data.sh:同步清理 pCanBridge 数据库三件套;修复停服命令
  漏掉 pCCU 的老问题(边写边清会产生脏数据),现按
  pCanBridge→apps→moosdb 顺序全停;--start 启动列表补齐。
- .gitignore:新增全局规则 *.db / *.db-shm / *.db-wal /
  *.db-journal / *.log,所有数据库与日志一律不入库;清理散落
  的重复条目与失效的 bin/arm64 条目。

验证:各脚本 bash -n 通过,help 输出正常,git check-ignore 命中
新规则且不影响 .moos 等配置文件。
This commit is contained in:
zjk
2026-08-31 19:42:20 +08:00
parent b547772709
commit e9a85c21fc
6 changed files with 66 additions and 177 deletions
+14 -18
View File
@@ -241,18 +241,17 @@ CTestTestfile.cmake
_deps
# PowerManager specific log files
bin/pPowerManger.log
# PowerManager specific files
bin/ccuState.txt
*.db
# pPowerMangerHost 反馈落盘数据库
feedback_data.db
# PowerManager compiled binaries (built into bin/ by CMake)
bin/pPowerManger
bin/SQLiteTest
bin/pPMtest
bin/pPowerMangerHost
bin/pCCU
bin/pccuTest
bin/pCanBridge
# CI test reports
reports/
@@ -262,29 +261,26 @@ bin/PowerMangerTests
bin/udpFeeder
bin/fullFeeder
# SQLite runtime artifacts
# ============================================================
# 数据库与日志文件(全局忽略,一律不入库)
# *.db / *.db-* SQLite 数据库及 WAL/SHM/journal 伴生文件
# (power_data / pccu_data / pCanBridge_data /
# feedback_data / 测试库等)
# *.log 运行日志(pCCU.log / pPowerManger.log 等)
# ============================================================
*.db
*.db-shm
*.db-wal
*.db-journal
*.log
# Cross-compiled aarch64 artifacts (scripts/cross-build-local.sh)
bin/arm64/
# Board-native build dirs (build-arm64.sh / direct on-board builds)
# Board-native build dirs (build-board.sh) / 历史本机构建目录
build-arm64/
build-nosa-test/
# CMake-generated web asset table (pPowerMangerHost)
src/pPowerMangerHost/webassets_gen.h
# ============================================================
# 本机编译产物(避免误提交二进制)
# ============================================================
bin/pCCU
bin/pccuTest
bin/pCanBridge
pCanBridge_data.db
# ============================================================
# MS Office 临时锁文件 / 编辑器、备份残留
# ============================================================
-60
View File
@@ -1,60 +0,0 @@
#!/bin/bash
#=======================================================================
# FILE: scripts/build-arm64-image.sh
# DESC: 一次性构建 arm64 CI 镜像(MOOS-IvP + jsoncpp + GTest)。
# 构建产物缓存后,日常交叉编译只需 ./scripts/build-arm64.sh。
#
# 用法:
# CI_TOKEN=xxx ./scripts/build-arm64-image.sh # 构建(已存在则跳过)
# CI_TOKEN=xxx ./scripts/build-arm64-image.sh --force # 强制重新构建
#
# 环境变量:
# CI_TOKEN 内网 Gitea token(拉取 moos-ivp / googletest 镜像,兼容 GITEA_TOKEN)
#=======================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
IMAGE="h100-power-manager-ci:arm64"
GITEA_TOKEN="${CI_TOKEN:-${GITEA_TOKEN:-}}"
FORCE=0
[ "${1:-}" = "--force" ] && FORCE=1
if [ -z "${GITEA_TOKEN}" ]; then
echo "错误: 缺少内网 Gitea token。" >&2
echo " 请设置: CI_TOKEN=xxx ./scripts/build-arm64-image.sh" >&2
exit 1
fi
if ! command -v docker >/dev/null 2>&1; then
echo "错误: 未找到 docker" >&2
exit 1
fi
if ! docker info >/dev/null 2>&1; then
echo "错误: 无法连接 docker daemon(是否需要用 sudo?)" >&2
exit 1
fi
if ! docker buildx version >/dev/null 2>&1; then
echo "错误: 未找到 buildx。请安装: sudo apt-get install -y docker-buildx" >&2
exit 1
fi
if [ "${FORCE}" = "0" ] && docker image inspect "${IMAGE}" >/dev/null 2>&1; then
echo ">>> 已存在镜像 ${IMAGE},跳过构建(如需重建: ${0} --force)"
exit 0
fi
if [ "${FORCE}" = "1" ]; then
echo ">>> --force: 重新构建镜像 ${IMAGE}"
fi
CI_TOKEN="${GITEA_TOKEN}" docker buildx build \
--platform linux/arm64 \
--load \
--secret id=gitea_token,env=CI_TOKEN \
-t "${IMAGE}" -f "${PROJECT_ROOT}/ci/Dockerfile" "${PROJECT_ROOT}"
echo ">>> 镜像构建完成: ${IMAGE}"
-42
View File
@@ -1,42 +0,0 @@
#!/bin/bash
#=======================================================================
# FILE: scripts/build-arm64.sh
# DESC: 交叉编译为 RK3588 (aarch64) / Ubuntu 22.04 二进制,用法同 build.sh。
# 在 arm64 镜像(h100-power-manager-ci:arm64)内跑 cmake + make,
# 产物输出到 bin/arm64/,与本地 x86_64 的 bin/、build/ 互不影响。
#
# 用法:
# ./scripts/build-arm64.sh
#
# 前置(一次性,构建 arm64 镜像):
# CI_TOKEN=xxx ./scripts/build-arm64-image.sh
#=======================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
IMAGE="h100-power-manager-ci:arm64"
JOBS="${JOBS:-$(nproc)}"
if ! docker image inspect "${IMAGE}" >/dev/null 2>&1; then
echo "错误: 本地不存在镜像 ${IMAGE}" >&2
echo " 请先执行: CI_TOKEN=xxx ./scripts/build-arm64-image.sh" >&2
exit 1
fi
mkdir -p "${PROJECT_ROOT}/build-arm64" "${PROJECT_ROOT}/bin/arm64"
docker run --rm --platform linux/arm64 \
-u "$(id -u):$(id -g)" \
-v "${PROJECT_ROOT}":/src \
-w /src/build-arm64 \
"${IMAGE}" \
/bin/sh -c "cmake -DCMAKE_BUILD_TYPE=Release \
-DEXECUTABLE_OUTPUT_PATH=/src/bin/arm64 \
-DRUNTIME_OUTPUT_DIRECTORY=/src/bin/arm64 .. && make -j${JOBS}"
echo ""
echo ">>> 完成。产物:"
file "${PROJECT_ROOT}/bin/arm64/pPowerManger"
+21 -12
View File
@@ -3,14 +3,16 @@
# FILE: scripts/clean-data.sh
# DESC: 清理目标板卡 (RK3588 / Ubuntu 22.04) 上的数据库与日志文件。
# 默认清理板卡运行目录 /root/work/h100/data/ 下的:
# power_data.db (+ -wal/-shm) 主机功率数据库
# feedback_data.db 反馈落盘数据库
# pPowerManger.log 主机运行日志
# 默认先停止 4 个服务再清理(避免 SQLite WAL 仍在写入)。
# power_data.db (+ -wal/-shm) 主机功率数据库
# feedback_data.db 反馈落盘数据库
# pccu_data.db (+ -wal/-shm) pCCU 帧日志数据库
# pCanBridge_data.db (+ -wal/-shm) pCanBridge CAN 帧数据库
# pPowerManger.log / pCCU.log 运行日志
# 默认先停止各服务再清理(避免 SQLite WAL 仍在写入)。
#
# 用法:
# ./scripts/clean-data.sh # 停服务 -> 清理 data 目录(不重启)
# ./scripts/clean-data.sh --start # 清理后重新启动 4 个服务
# ./scripts/clean-data.sh --start # 清理后重新启动各服务
# ./scripts/clean-data.sh --no-stop # 不停服务直接清理(慎用)
# ./scripts/clean-data.sh --stale # 额外清理 bin/ 与 src/bin/ 下的旧 db/log
#
@@ -38,10 +40,16 @@ DO_START=0
DO_STOP=1
DO_STALE=0
SERVICES=(moosdb pPowerManger pPowerMangerHost pCCU)
SERVICES=(moosdb pPowerManger pPowerMangerHost pCCU pCanBridge)
# 板卡 data 目录下需要清理的文件(含 SQLite WAL/SHM)
DATA_FILES=(power_data.db power_data.db-wal power_data.db-shm feedback_data.db pPowerManger.log pccu_data.db pCCU.log)
DATA_FILES=(
power_data.db power_data.db-wal power_data.db-shm
feedback_data.db
pccu_data.db pccu_data.db-wal pccu_data.db-shm
pCanBridge_data.db pCanBridge_data.db-wal pCanBridge_data.db-shm
pPowerManger.log pCCU.log
)
# 历史遗留目录(旧部署位置),仅当 --stale 时清理
STALE_DIRS=("${BOARD_DIR}/bin" "${BOARD_DIR}/src/bin")
@@ -52,7 +60,7 @@ warn() { printf '\033[1;33m[clean-data]\033[0m %s\n' "$*"; }
err() { printf '\033[1;31m[clean-data]\033[0m %s\n' "$*"; }
usage() {
sed -n '2,29p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
sed -n '2,31p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
exit 0
}
@@ -92,7 +100,8 @@ ok "SSH 连接正常: ${SSH_TARGET}"
#-------------------------------------------------------------------
if [ "${DO_STOP}" = "1" ]; then
info "停止服务 ${SERVICES[*]} ..."
${SSH} "${SSH_TARGET}" "systemctl stop pPowerMangerHost pPowerManger moosdb 2>/dev/null; true"
# 先停应用,最后停 moosdb
${SSH} "${SSH_TARGET}" "systemctl stop pCanBridge pPowerMangerHost pPowerManger pCCU moosdb 2>/dev/null; true"
ok "服务已停止"
else
warn "--no-stop:不停服务直接清理,可能产生脏数据(SQLite 仍在写入)"
@@ -123,15 +132,15 @@ fi
# 5. 可选: 重启服务
#-------------------------------------------------------------------
if [ "${DO_START}" = "1" ]; then
info "启动服务 (moosdb -> pPowerManger / pPowerMangerHost / pCCU) ..."
info "启动服务 (moosdb -> pPowerManger / pPowerMangerHost / pCCU / pCanBridge) ..."
${SSH} "${SSH_TARGET}" "systemctl start moosdb && sleep 1 && \
systemctl start pPowerManger pPowerMangerHost pCCU" \
systemctl start pPowerManger pPowerMangerHost pCCU pCanBridge" \
|| { err "启动失败"; exit 1; }
ok "服务已启动"
else
echo ""
info "清理完成,服务未启动。需要重启请加 --start 或手动:"
echo " systemctl start moosdb pPowerManger pPowerMangerHost pCCU"
echo " systemctl start moosdb pPowerManger pPowerMangerHost pCCU pCanBridge"
fi
echo ""
+15 -37
View File
@@ -1,18 +1,20 @@
#!/bin/bash
#=======================================================================
# FILE: scripts/deploy.sh
# DESC: 部署 pPowerManger / pPowerMangerHost / pCCU / pCanBridge(aarch64 二进制 +
# mission)到目标板卡 (RK3588 / Ubuntu 22.04),并用五个独立
# systemd 服务(moosdb / pPowerManger / pPowerMangerHost / pCCU /
# pCanBridge)管理。只安装服务 + daemon-reload,默认不启动、不自启。
# DESC: 部署 mission + 5 个 systemd 服务(moosdb / pPowerManger /
# pPowerMangerHost / pCCU / pCanBridge)到目标板卡 (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 + 装 4 个
# ./scripts/deploy.sh 默认:推送 mission + 装 5 个
# systemd 服务 + daemon-reload(不启动)
# ./scripts/deploy.sh --start 部署后按依赖顺序启动服务
# ./scripts/deploy.sh status 板卡 4 个服务状态
# ./scripts/deploy.sh stop 停止 4 个服务
# ./scripts/deploy.sh status 板卡各服务状态
# ./scripts/deploy.sh stop 停止各服务
# ./scripts/deploy.sh help 显示帮助
#
# 参数:
@@ -24,7 +26,7 @@
# --ccu-port <n> 覆盖 mission 中 pPowerManger 的 CCU 端口 (ccuport)
#
# 板卡布局:
# /root/work/h100/bin/ aarch64 二进制
# /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 /
@@ -51,7 +53,7 @@ warn() { printf '\033[1;33m[deploy]\033[0m %s\n' "$*"; }
err() { printf '\033[1;31m[deploy]\033[0m %s\n' "$*"; }
usage() {
sed -n '2,31p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
sed -n '2,35p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
exit 0
}
@@ -100,22 +102,6 @@ cmd_setup_ssh() {
#-------------------------------------------------------------------
# 前置检查
#-------------------------------------------------------------------
check_local() {
local missing=0
for b in pPowerManger pPowerMangerHost pCCU pCanBridge; do
if [ ! -f "${PROJECT_ROOT}/bin/arm64/${b}" ]; then
err "缺少本地 aarch64 二进制: bin/arm64/${b}(先运行 ./scripts/build-arm64.sh)"; missing=1
elif ! file "${PROJECT_ROOT}/bin/arm64/${b}" | grep -q "aarch64"; then
err "bin/arm64/${b} 不是 aarch64 二进制"; missing=1
fi
done
if [ ! -f "${PROJECT_ROOT}/missions/h100.moos" ]; then
err "缺少板卡 mission: missions/h100.moos"; missing=1
fi
[ "${missing}" -eq 0 ] || return 1
ok "本地产物校验通过 (aarch64 + mission)"
}
check_ssh() {
if ! ${SSH} "${SSH_TARGET}" 'true' 2>/dev/null; then
err "无法免密 SSH 到 ${SSH_TARGET}"
@@ -194,20 +180,13 @@ upsert_moos_param() {
# 命令: deploy
#-------------------------------------------------------------------
cmd_deploy() {
check_local || return 1
check_ssh || return 1
check_ssh || return 1
[ -f "${PROJECT_ROOT}/missions/h100.moos" ] || { err "缺少板卡 mission: missions/h100.moos"; return 1; }
# 1. 推送二进制 + mission
# 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 "推送 aarch64 二进制 ..."
${SCP} -q "${PROJECT_ROOT}/bin/arm64/pPowerManger" \
"${PROJECT_ROOT}/bin/arm64/pPowerMangerHost" \
"${PROJECT_ROOT}/bin/arm64/pCCU" \
"${PROJECT_ROOT}/bin/arm64/pCanBridge" \
"${SSH_TARGET}:${BOARD_DIR}/bin/" || { err "推送二进制失败"; return 1; }
info "推送 mission h100.moos ..."
local mission_src="${PROJECT_ROOT}/missions/h100.moos"
local mission_push="${mission_src}" tmp_moos=""
@@ -223,8 +202,7 @@ cmd_deploy() {
"${SSH_TARGET}:${BOARD_DIR}/missions/" || { err "推送 mission 失败"; [ -n "${tmp_moos}" ] && rm -f "${tmp_moos}"; return 1; }
[ -n "${tmp_moos}" ] && rm -f "${tmp_moos}"
${SSH} "${SSH_TARGET}" "chmod +x ${BOARD_DIR}/bin/pPowerManger ${BOARD_DIR}/bin/pPowerMangerHost ${BOARD_DIR}/bin/pCCU ${BOARD_DIR}/bin/pCanBridge"
ok "二进制与 mission 已推送"
ok "mission 已推送(二进制由 build-board.sh 在板卡编译部署)"
# 2. 生成并安装 4 个 systemd unit
local unit
+16 -8
View File
@@ -3,10 +3,12 @@
# FILE: scripts/fetch-data.sh
# DESC: 从目标板卡 (RK3588 / Ubuntu 22.04) 下载数据库与日志到本地。
# 默认抓取板卡运行目录 /root/work/h100/data/ 下的:
# power_data.db (+ -wal/-shm) 主机功率数据库
# feedback_data.db 反馈落盘数据库
# pPowerManger.log 主机运行日志
# 可选 --journal 一并导出四个 systemd 服务的 journal 日志。
# power_data.db (+ -wal/-shm) 主机功率数据库
# feedback_data.db 反馈落盘数据库
# pccu_data.db (+ -wal/-shm) pCCU 帧日志数据库
# pCanBridge_data.db (+ -wal/-shm) pCanBridge CAN 帧数据库
# pPowerManger.log / pCCU.log 运行日志
# 可选 --journal 一并导出各 systemd 服务的 journal 日志。
#
# 用法:
# ./scripts/fetch-data.sh # 下载 db + 日志到本地 data/board-<时间>/
@@ -18,7 +20,7 @@
# --user <user> 登录用户(默认 root)
# --board-dir <dir> 板卡部署根目录(默认 /root/work/h100)
# --out-dir <dir> 本地保存目录(默认 data/board-<时间>)
# --journal 额外导出 4 个服务的 systemd journal 日志
# --journal 额外导出各服务的 systemd journal 日志
# -h, --help 显示帮助
#
# 前置: 板卡已配免密 SSH(见 scripts/deploy.sh setup-ssh)。
@@ -35,10 +37,16 @@ BOARD_DIR="/root/work/h100"
OUT_DIR=""
DO_JOURNAL=0
SERVICES=(moosdb pPowerManger pPowerMangerHost pCCU)
SERVICES=(moosdb pPowerManger pPowerMangerHost pCCU pCanBridge)
# 板卡 data 目录下需要下载的文件(含 SQLite WAL/SHM 以保证数据完整)
DATA_FILES=(power_data.db power_data.db-wal power_data.db-shm feedback_data.db pPowerManger.log pccu_data.db pCCU.log)
DATA_FILES=(
power_data.db power_data.db-wal power_data.db-shm
feedback_data.db
pccu_data.db pccu_data.db-wal pccu_data.db-shm
pCanBridge_data.db pCanBridge_data.db-wal pCanBridge_data.db-shm
pPowerManger.log pCCU.log
)
info() { printf '\033[1;36m[fetch-data]\033[0m %s\n' "$*"; }
ok() { printf '\033[1;32m[fetch-data]\033[0m %s\n' "$*"; }
@@ -46,7 +54,7 @@ warn() { printf '\033[1;33m[fetch-data]\033[0m %s\n' "$*"; }
err() { printf '\033[1;31m[fetch-data]\033[0m %s\n' "$*"; }
usage() {
sed -n '2,26p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
sed -n '2,28p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
exit 0
}