Agent 主機 rootless Docker;真包首裝後的修正都已推上,等重出包重驗
只描述此刻。沿革看 fr193-LOG.md 與 git log。接手讀完本檔與指定讀序、答完自檢題、跑完唯讀盤點後停下,等決策者發令。
決策者 2026-11-10 裁示:Docker 要做 rootless,照 Docker 官方 Rootless mode 完整做,PM 不接受替代方案(userns-remap 已排除)。Agent 先出安裝包,主系統晚一點。背景是部署同仁要在台灣把 Agent 裝好帶去印尼,連回 GCP 上的主系統。
rootless 的意思:客戶主機上開容器的 Docker 引擎不再用 root 跑,改由一個不能登入、沒有 sudo 的普通帳號 guidant 跑。容器裡面 FR-180 已全數非 root,這案補的是引擎那一層。程式碼與 image 不動,改動全在安裝程式、維運指令與主機設定。
決策者沒有這類經驗,回報一律白話、講到「不做會怎樣」。當天多次點名:做太多不必要的事、驗收卡拆太細反覆裝機、解釋太細看不懂。接手後不要擴大範圍,不要為了驗一件事去補一堆測試。
必讀,依序:
fr193-LOG.md 最後一個 block../design-v1.4.md §1 決策表(D1~D11)、§3 詳細設計../evidence/agent-rootless-probe.md §3 壞掉清單、§7冷接自檢題(答得出來才算讀懂):
guidant?那「把主機目錄掛進容器」為什麼還是會壞?uninstall 在 wipe 之後原本為什麼沒還原主機設定?真包首裝後抓到的六個問題都已修、已推(Agent feature/FR-172,最後一個是 3ea579d)。接手後沒有未 commit 的程式改動要收。但這六個修正還沒有一起被打進同一顆包裡從頭驗過,這是下一步的第一件事。
| 卡 | 做什麼 | 狀態 |
|---|---|---|
| CM-3804 | 母卡(Agent 先行) | 進行中 |
| CM-3805 A0 | 乾淨機手動踩坑 | 驗收通過待確認 |
| CM-3806 A1 | 主機準備層 | 驗收通過待確認 |
| CM-3807 A2 | 出貨包帶 Docker | 驗收通過待確認 |
| CM-3808 A3 | Docker 指到 guidant、維運程式讀主機副本 | 驗收通過待確認 |
| CM-3809 A4 | 合併卡(原 A4+A5+A6) | 驗收通過待確認 |
| CM-3810、CM-3811 | 已併入 CM-3809 | 暫緩(不用做,等決策者按「這張不用做」) |
| CM-3812 A7 | deploy/README | 驗收通過待確認 |
| CM-3813 A8 | 資安報告 SR-09.5 | 驗收通過待確認 |
| CM-3814 A9 | 出貨包總驗 | In progress(小弟開工後回寫「等測試包」停下,沒改檔) |
| CM-3865 A10 | 部署/演練/健康檢查腳本跟上 rootless | 暫緩(首腦親手做完,commit 710467e;狀態沒改) |
| CM-3867 | 指令改名 guidant-agent-compose → guidant-agent | 待決策者裁三件事 |
| CM-3868 | console-login 壞掉(FR-180 留下) | 待修 |
| CM-3818 | 上線前就緒檢查(備份、告警、事故應變) | 另一個 session 接手,與本案無關 |
A1~A8 的「驗收通過」是在換檔進舊 1.7.4 包的條件下驗的。真包首裝之後又抓到六個問題(見 LOG),所以這些卡的結論要打折看。
| repo | branch | HEAD | 與遠端 | 工作區 |
|---|---|---|---|---|
| evidence-agent | feature/FR-172 | 3ea579d |
相同 | 只剩 M .claude/rules/workshop.md(不是本案的,不要碰) |
| compliance-manager-be | feature/FR-172 | c225c114d |
相同 | 本檔與 LOG 未 commit;其餘 M 都不是本案的 |
| compliance-manager-fe | feature/FR-172 | 1d393861 |
相同 | 沒有本案的改動 |
工作坊 branch ws-CM-3804 已於 20:19 合回 Agent 的 feature/FR-172(62c23c3)並推上遠端。
Ubuntu 24.04.2、TPM 2.0、ssh jedi@192.168.50.192、免密 sudo。
決策者依序跑過 wipe、uninstall、再一次 uninstall(修正後)。Agent 與 rootless 的主機設定都已清掉:沒有 guidant 帳號、沒有 dockerd 行程、兩個主機設定檔不在、升級單元與主機副本不在、系統層 docker.service/docker.socket/containerd.service 恢復 enabled(未啟動)。
跟「剛裝好的 OS」還差這些,所以要驗「全新主機安裝」請決策者還原 192:
docker-ce 等,設計上 uninstall 不移除)。直接重裝會走「已有官方 Docker、只補附加套件」那條,不會走「從包裡裝 Docker」。~/guidant-agent-compose-1.7.4/ 與 tar 檔在。其中 install.sh 是對應 3ea579d 的版本,但包內映像裡的 lib 仍是 753e4e2 的,不是一致的一組。/var/lib/guidant-agent 空目錄、systemctl --failed 留一筆 guidant-agent-upgrade-order.service not-found、ping_group_range 的執行中值仍是全開(重開機才回預設)。authorized_keys(原檔備份 authorized_keys.bak-20261110-134336),188 可直接 scp 到 192。192 一還原就消失,要再加。五個目錄都在 feature/FR-172、工作區乾淨:/opt/guidant-ai-agent 753e4e2(落後遠端 3 個:cd54c60、b0efcba、3ea579d)、/opt/guidant-ai-be c225c114d、/opt/guidant-ai-fe 1d393861、/opt/jedi-python-package 3408f5fa、/opt/update-center eb8352b。
/opt/guidant-ai-agent/.build/compose/ 的 guidant-agent-compose-1.7.4.tar.gz 是測試包(21:37 建,commit 753e4e2,--internal-test,不可出貨),不含 cd54c60、b0efcba、3ea579d。原本 v1.7.4 的正式包備份為同目錄 *.v1.7.4-release.bak-20261110-2021 三個檔。
我留下、可刪的:/home/jedi/fr193-verify/(445 MB,獨立測試環境與掃描報告)、/opt/guidant-ai-agent/.build/docker-debs.stale-2127/(舊的 Docker 套件快取,含 systemd 那組)。
/opt/compliance-manager-be(4 個未提交改動)與 /opt/jedi-iso-llm(擁有者不是 jedi)我沒動。
git pull 到 3ea579d,重新出測試包。安裝程式會進映像並被簽章,所以從打包簽章那步重跑,不必重編譯。做法見 LOG「怎麼不重編譯重出包」。出完開包確認 host-lib/ 與映像內的 lib 都是新版。wipe 後 uninstall 一次清乾淨、upgrade <同一顆包> 走到底。本案內、擋出貨
verify_agent.sh 用 188 /opt/guidant-ai-agent/.venv(3.11)本案內、不擋出貨
wipe 的說明寫「不會刪除設定檔」,實際清掉了設定檔的加密存放,之後 status 不能用。行為合理,文字要改/var/lib/guidant-agent 空目錄沒刪;systemctl --failed 留一筆升級單元的失敗紀錄(該 reset-failed);ping_group_range 執行中的值到重開機才回預設test/shell/manual_upgrade.bats 有 4 條在本案之前就紅(第 2、3、4、10 條)。bats 不在 CI 與 pytest 內,不擋發版RELEASE_NOTES.md 新版段(1.7.4 已發過);不要勾升級演練(190/188/189 同機有主系統,新版安裝程式會拒絕)另開的卡:CM-3867(改名)、CM-3868(console-login)
wipe、uninstall 設計上要人在終端機前打確認字串,不繞過;請決策者自己跑。git status。不帶路徑的 git stash 禁用(今天誤用過一次,已還原)。