本卡屬 FR-167(母卡 CM-3241),卡 P4-3,階段 P4 Agent 跟進、批 7。只改 evidence-agent。依賴:P4-2、P4-5。
Agent 這邊:心跳收到「該升級」就下載、驗雜湊、寫一張單,主機 systemd 看到單就跑 install.sh upgrade,結果隨下次心跳回報。Agent 不連外網、不連更新站。
Agent 不連外網、不多常駐程式,跟主系統同一套形狀
extend:observer 照 vulndb_sync.py 形狀新檔(下載、續傳、驗 sha 都 reuse 它的做法);enroll.py 掛一行;systemd 單元由 P4-5 的 install-lib 裝
repo:~/Projects/Billows/Audit-Manager/evidence-agent
改既有:core/enroll.py 364(一行)
改既有:agent/install-lib/upgrade_runner.sh(裝 path 單元)
新開:core/update_sync.py
新開:agent/install-lib/systemd/guidant-agent-upgrade-order.{path,service}
細節在 design.md §5 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/design.md,開 design.html 看導覽);本段只列本卡要做到的點:
core/update_sync.py 照 vulndb_sync.py:心跳回應有 update → 下載 /agents/update/bundle(續傳、驗 sha、不對即刪回報)→ 寫 <agent資料目錄>/agent-upgrade-order.json;core/enroll.py 364 掛一行 observer(本卡是 owner)。agent/install-lib/systemd/guidant-agent-upgrade-order.{path,service}:path 觸發 install.sh upgrade <包>;由 P4-5 的 install-lib/upgrade_runner.sh 安裝(本卡在那支加裝單元的幾行)。upgrade_result=succeeded+新 agent_version;失敗自動退回回報 failed。主系統 paused(無 update)時不動。Agent pytest:假心跳帶 update → 下載到暫存、sha 對、寫 agent-upgrade-order.json;sha 不對 → 刪檔回報;主系統 paused(無 update)時不動;observer 掛點一行;systemd 單元檔 systemd-analyze verify 綠(docker ubuntu)
測試期(不是你做):這張卡在 190 的真實情境是「lab 機:心跳帶 update → 下載、驗 sha、寫單、path 單元觸發 install.sh upgrade,成功後心跳 agent_version 變新;失敗自動退回回報 failed」,由首腦在測試期操作、決策者看畫面。你只要確保上面的本機驗收全過、程式對這個情境沒有寫死假設。
對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/prototype/index.html(上方「跟著走」)。