本卡屬 FR-193(母卡 FR-193 母案(同清單上一張)),卡 A1,階段 P1,批 2。只改 evidence-agent。依賴:A0。
install.sh 多一層「主機準備」:檢查 cgroup v2/systemd/核心版本;Docker 四段式(沒有就從包裝官方組、官方夠新就補 rootless 附加套件、官方太舊停下、發行版自帶 docker.io 沒人用就換掉有人用就停下);建 guidant 帳號配子 uid(撞名就沿用並檢查三項);開 linger;寫 ping sysctl;寫 cgroup 委派檔;以 guidant 身分啟用 rootless Docker 並設開機自起。全部冪等,重跑無害。做完客戶照常 sudo ./install.sh,不用手動做任何主機設定。
new:現有 install.sh 完全沒有這層,獨立一支 lib 由 install.sh source;Docker 三段式判斷放這裡
repo:/Users/chouraymond/Projects/Billows/Audit-Manager/evidence-agent
改既有:deploy/install.sh(check_environment/write_config 段)
新開:scripts/install/lib/rootless_host.sh
scripts/install/lib/rootless_host.sh,提供 rootless_host_check(給 check_environment 用,只印不改)與 rootless_host_prepare(實做,冪等)。install.sh 在 check_environment() Docker 段之前 source 它。先查再寫:lib/tpm.sh 的 tpm_install_gate 與離線裝法是同形狀的先例,照它的函式切法。rootless_host_check:stat -fc %T /sys/fs/cgroup=cgroup2fs、systemctl --version、uname -r ≥ 5.11,任一不符 check_fail。dpkg -s docker-ce/rpm -q docker-ce=官方,dpkg -s docker.io/podman-docker=發行版自帶。沒有→從 debs/docker/<目標>/ 裝(deb:dpkg -i *.deb || apt-get -f install -y;el-9:目錄當本機 repo 給 dnf,照 tpm.sh 的 rpm 路徑);官方且 Server.Version 主版 ≥ MIN_DOCKER_MAJOR→只補四支附加;官方太舊→fail 印請自行升級;發行版自帶→docker ps -aq 與 docker volume ls -q 都空就 apt-get remove -y docker.io docker-compose docker-doc(el:podman-docker)後走「沒有」那條,任一非空就 fail 印清單。終態一律官方 docker-ce。裝完 systemctl disable --now docker.service docker.socket。GUIDANT_RUN_USER 預設 guidant(install.conf 可改)。不存在→useradd --system --create-home --home-dir /home/$u --shell $(command -v nologin) $u。存在→grep -q "^$u:" /etc/subuid 無則 usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $u(起點要避開既有區段,掃 /etc/subuid 取最大結尾+1);shell 非 nologin→warn 不改;id -nG $u 含 sudo/wheel→fail。loginctl enable-linger $u;寫 /etc/sysctl.d/90-guidant-rootless.conf(net.ipv4.ping_group_range = 0 2147483647)後 sysctl --system;寫 /etc/systemd/system/[email protected]/delegate.conf([Service]\nDelegate=cpu cpuset io memory pids)後 systemctl daemon-reload,若 loginctl show-user $u -p State 顯示在跑就 loginctl terminate-user $u。command -v machinectl || apt-get install -y systemd-container(el:同名套件);machinectl shell $u@ /bin/bash -c 'export XDG_RUNTIME_DIR=/run/user/$(id -u); dockerd-rootless-setuptool.sh install && systemctl --user enable docker'。已裝過(~$u/.config/systemd/user/docker.service 存在)就跳過只 systemctl --user start。sudo -u $u DOCKER_HOST=unix:///run/user/$(id -u $u)/docker.sock docker info --format '{{.SecurityOptions}} {{.CgroupDriver}}' 要含 rootless 與 systemd,否則 fail 並印 troubleshooting 三行(手冊第 5 節常見失敗)。--check-only 模式只跑 rootless_host_check 並列六項目前狀態(有/無),不改。uninstall 的還原是 A6,本卡不碰。乾淨機 sudo ./install.sh --check-only 列出六項主機設定狀態;實裝後 guidant 帳號、subuid、Linger=yes、ping_group_range、delegate.conf、docker info 顯示 rootless 全部符合;已有新版官方 Docker 的主機不被動到;太舊停下印訊息;裝了 docker.io 且無容器無 volume 的主機自動換成官方組(D8);docker.io 底下有容器的主機停下並印清單
docs/features/FR-193-2611-docker-rootless/design-v1.2.md(現行定稿)§1 決策 D1~D8、§2.2 接入點盤點、§3 詳細設計本卡那節、§4 主機六項、§6 拆卡表本卡那列;design.md/design-v1.1.md 已凍結只當沿革