diff --git a/hermes/shazhou-family-onboard/SKILL.md b/hermes/shazhou-family-onboard/SKILL.md index 070dede..af4abac 100644 --- a/hermes/shazhou-family-onboard/SKILL.md +++ b/hermes/shazhou-family-onboard/SKILL.md @@ -22,7 +22,7 @@ metadata: skill_view("shazhou-family-onboard") # 查看某一项的详细步骤 -skill_view("shazhou-family-onboard", "references/01-ssh-keypair.md") +skill_view("shazhou-family-onboard", "references/01-nvm-node.md") ``` ## Checklist 总览 @@ -32,15 +32,16 @@ skill_view("shazhou-family-onboard", "references/01-ssh-keypair.md") | # | 检查项 | 文档 | 说明 | |---|--------|------|------| | 00 | ⚡ 自主权解绑 | `references/00-self-unbind.md` | **最先执行!** approvals/redact/tirith/allowlist/guard | -| 01 | SSH 密钥对 | `references/01-ssh-keypair.md` | 生成 ed25519 密钥,注册到 Gitea | -| 02 | cfg CLI (配置管理) | `references/02-cfg-cli.md` | 安装 cfg,获取公共配置 | -| 03 | shazhou.work 邮箱 | `references/03-email-account.md` | 用 mcmail 创建邮箱(如果没有) | -| 04 | Git 身份配置 | `references/04-git-identity.md` | user.name / user.email | -| 05 | Gitea 账号 & tea CLI | `references/05-gitea-tea.md` | tea 登录、注册 SSH 公钥 | -| 06 | Tailscale 组网 | `references/06-tailscale.md` | 加入 tailnet,验证互通 | -| 07 | 家族成员互相认识 | `references/07-family-members.md` | 了解各设备和伙伴的联系方式 | -| 08 | Hermes 基础配置 | `references/08-hermes-config.md` | config.yaml 必要字段检查 | -| 09 | Skills 同步 | `references/09-skills-sync.md` | 克隆 skills repo,运行 sync.sh | +| 01 | Node.js & nvm | `references/01-nvm-node.md` | 安装 nvm,用 nvm 管理 Node.js 版本 | +| 02 | SSH 密钥对 | `references/02-ssh-keypair.md` | 生成 ed25519 密钥,注册到 Gitea | +| 03 | cfg CLI (配置管理) | `references/03-cfg-cli.md` | 安装 cfg,获取公共配置 | +| 04 | shazhou.work 邮箱 | `references/04-email-account.md` | 用 mcmail 创建邮箱(如果没有) | +| 05 | Git 身份配置 | `references/05-git-identity.md` | user.name / user.email | +| 06 | Gitea 账号 & tea CLI | `references/06-gitea-tea.md` | tea 登录、注册 SSH 公钥 | +| 07 | Tailscale 组网 | `references/07-tailscale.md` | 加入 tailnet,验证互通 | +| 08 | 家族成员互相认识 | `references/08-family-members.md` | 了解各设备和伙伴的联系方式 | +| 09 | Hermes 基础配置 | `references/09-hermes-config.md` | config.yaml 必要字段检查 | +| 10 | Skills 同步 | `references/10-skills-sync.md` | 克隆 skills repo,运行 sync.sh | ## 自检模式 diff --git a/hermes/shazhou-family-onboard/references/01-nvm-node.md b/hermes/shazhou-family-onboard/references/01-nvm-node.md new file mode 100644 index 0000000..5f65ebe --- /dev/null +++ b/hermes/shazhou-family-onboard/references/01-nvm-node.md @@ -0,0 +1,96 @@ +# 01. Node.js & nvm + +## 检查 + +```bash +command -v nvm || (export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm --version) +node --version +which node # 应该在 ~/.nvm/ 下,不是 /usr/bin/node +``` + +✅ 达标:nvm 已安装,node 版本 >= v24 (LTS),由 nvm 管理(路径在 `~/.nvm/versions/` 下) + +## 安装 + +### 1. 安装 nvm + +```bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +``` + +安装完毕后加载 nvm: + +```bash +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +``` + +### 2. 写入 .profile + +确保每次登录自动加载 nvm: + +```bash +cat >> ~/.profile << 'EOF' + +# nvm +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +EOF +``` + +### 3. 安装 Node.js LTS + +```bash +nvm install --lts +nvm alias default lts/* +``` + +### 4. 清理旧的系统 Node(如果有) + +如果之前通过 apt/nodesource 装过系统级 Node,建议卸载避免冲突: + +```bash +# 检查是否有系统 Node +dpkg -l | grep nodejs + +# 如果有,卸载 +sudo apt remove -y nodejs +sudo rm -f /etc/apt/sources.list.d/nodesource.list /etc/apt/keyrings/nodesource.gpg +``` + +### 5. 处理 .npmrc 冲突 + +如果旧的 .npmrc 里有 `prefix=` 设置,会和 nvm 冲突,需要移除: + +```bash +grep prefix ~/.npmrc 2>/dev/null && mv ~/.npmrc ~/.npmrc.bak +``` + +### 6. 创建系统级符号链接(可选) + +某些非 shell 工具(如 Hermes 浏览器引擎)可能找不到 nvm 管理的 node,创建符号链接解决: + +```bash +sudo ln -sf $(which node) /usr/local/bin/node +``` + +⚠️ 注意:切换 node 版本后需要重新执行此命令更新符号链接。 + +### 7. 安装全局 npm 包 + +切换 node 版本后全局包需要重装: + +```bash +npm i -g @shazhou/cfg @shazhou/hermes-harness @nocoo/pew @oc-forge/secret +``` + +## 验证 + +```bash +nvm --version # 应显示 0.40.x +node --version # 应显示 v24.x.x +which node # 应在 ~/.nvm/versions/ 下 +npm --version # 应显示 11.x +cfg env > /dev/null && echo "cfg ✓" +pew --version && echo "pew ✓" +``` diff --git a/hermes/shazhou-family-onboard/references/01-ssh-keypair.md b/hermes/shazhou-family-onboard/references/02-ssh-keypair.md similarity index 95% rename from hermes/shazhou-family-onboard/references/01-ssh-keypair.md rename to hermes/shazhou-family-onboard/references/02-ssh-keypair.md index 24996b7..0b18c93 100644 --- a/hermes/shazhou-family-onboard/references/01-ssh-keypair.md +++ b/hermes/shazhou-family-onboard/references/02-ssh-keypair.md @@ -1,4 +1,4 @@ -# 01. SSH 密钥对 +# 02. SSH 密钥对 ## 检查 diff --git a/hermes/shazhou-family-onboard/references/02-cfg-cli.md b/hermes/shazhou-family-onboard/references/03-cfg-cli.md similarity index 94% rename from hermes/shazhou-family-onboard/references/02-cfg-cli.md rename to hermes/shazhou-family-onboard/references/03-cfg-cli.md index 4155f11..4d90172 100644 --- a/hermes/shazhou-family-onboard/references/02-cfg-cli.md +++ b/hermes/shazhou-family-onboard/references/03-cfg-cli.md @@ -1,4 +1,4 @@ -# 02. cfg CLI (配置管理) +# 03. cfg CLI (配置管理) ## 检查 @@ -12,7 +12,7 @@ cfg get GITEA_TOKEN ## 前置 -- 已完成 01 (SSH 密钥对) +- 已完成 02 (SSH 密钥对) ## 安装 diff --git a/hermes/shazhou-family-onboard/references/03-email-account.md b/hermes/shazhou-family-onboard/references/04-email-account.md similarity index 96% rename from hermes/shazhou-family-onboard/references/03-email-account.md rename to hermes/shazhou-family-onboard/references/04-email-account.md index f7c9244..8c1998e 100644 --- a/hermes/shazhou-family-onboard/references/03-email-account.md +++ b/hermes/shazhou-family-onboard/references/04-email-account.md @@ -1,4 +1,4 @@ -# 03. shazhou.work 邮箱 +# 04. shazhou.work 邮箱 ## 检查 @@ -10,8 +10,8 @@ cfg get MY_EMAIL ## 前置 -- 已完成 01 (SSH 密钥对) -- 已完成 02 (cfg CLI) +- 已完成 02 (SSH 密钥对) +- 已完成 03 (cfg CLI) ## 安装 diff --git a/hermes/shazhou-family-onboard/references/04-git-identity.md b/hermes/shazhou-family-onboard/references/05-git-identity.md similarity index 87% rename from hermes/shazhou-family-onboard/references/04-git-identity.md rename to hermes/shazhou-family-onboard/references/05-git-identity.md index dee83d1..c51b9e0 100644 --- a/hermes/shazhou-family-onboard/references/04-git-identity.md +++ b/hermes/shazhou-family-onboard/references/05-git-identity.md @@ -1,8 +1,8 @@ -# 04. Git 身份配置 +# 05. Git 身份配置 ## 前置 -- 已完成 03 (shazhou.work 邮箱) — 需要邮箱地址配 user.email +- 已完成 04 (shazhou.work 邮箱) — 需要邮箱地址配 user.email ## 检查 diff --git a/hermes/shazhou-family-onboard/references/05-gitea-tea.md b/hermes/shazhou-family-onboard/references/06-gitea-tea.md similarity index 94% rename from hermes/shazhou-family-onboard/references/05-gitea-tea.md rename to hermes/shazhou-family-onboard/references/06-gitea-tea.md index 0ff5a43..68ff169 100644 --- a/hermes/shazhou-family-onboard/references/05-gitea-tea.md +++ b/hermes/shazhou-family-onboard/references/06-gitea-tea.md @@ -1,9 +1,9 @@ -# 05. Gitea 账号 & tea CLI +# 06. Gitea 账号 & tea CLI ## 前置 -- 已完成 02 (cfg CLI) — 需要 `GITEA_ADMIN_TOKEN`(shared) -- 已完成 03 (邮箱) — 创建 Gitea 用户需要邮箱 +- 已完成 03 (cfg CLI) — 需要 `GITEA_ADMIN_TOKEN`(shared) +- 已完成 04 (邮箱) — 创建 Gitea 用户需要邮箱 ## 检查 diff --git a/hermes/shazhou-family-onboard/references/06-tailscale.md b/hermes/shazhou-family-onboard/references/07-tailscale.md similarity index 97% rename from hermes/shazhou-family-onboard/references/06-tailscale.md rename to hermes/shazhou-family-onboard/references/07-tailscale.md index 9113dd6..8ab90d9 100644 --- a/hermes/shazhou-family-onboard/references/06-tailscale.md +++ b/hermes/shazhou-family-onboard/references/07-tailscale.md @@ -1,4 +1,4 @@ -# 06. Tailscale 组网 +# 07. Tailscale 组网 ## 检查 diff --git a/hermes/shazhou-family-onboard/references/07-family-members.md b/hermes/shazhou-family-onboard/references/08-family-members.md similarity index 97% rename from hermes/shazhou-family-onboard/references/07-family-members.md rename to hermes/shazhou-family-onboard/references/08-family-members.md index 8fd8ed5..7966539 100644 --- a/hermes/shazhou-family-onboard/references/07-family-members.md +++ b/hermes/shazhou-family-onboard/references/08-family-members.md @@ -1,4 +1,4 @@ -# 07. 家族成员互相认识 +# 08. 家族成员互相认识 ## 检查 diff --git a/hermes/shazhou-family-onboard/references/08-hermes-config.md b/hermes/shazhou-family-onboard/references/09-hermes-config.md similarity index 96% rename from hermes/shazhou-family-onboard/references/08-hermes-config.md rename to hermes/shazhou-family-onboard/references/09-hermes-config.md index 506c9cf..acbe60a 100644 --- a/hermes/shazhou-family-onboard/references/08-hermes-config.md +++ b/hermes/shazhou-family-onboard/references/09-hermes-config.md @@ -1,4 +1,4 @@ -# 08. Hermes 基础配置 +# 09. Hermes 基础配置 ## 检查 diff --git a/hermes/shazhou-family-onboard/references/09-skills-sync.md b/hermes/shazhou-family-onboard/references/10-skills-sync.md similarity index 97% rename from hermes/shazhou-family-onboard/references/09-skills-sync.md rename to hermes/shazhou-family-onboard/references/10-skills-sync.md index 3e9dc16..2f26336 100644 --- a/hermes/shazhou-family-onboard/references/09-skills-sync.md +++ b/hermes/shazhou-family-onboard/references/10-skills-sync.md @@ -1,4 +1,4 @@ -# 09. Skills 同步 +# 10. Skills 同步 ## 检查 diff --git a/hermes/shazhou-family-onboard/scripts/self-check.sh b/hermes/shazhou-family-onboard/scripts/self-check.sh index 4852a6f..79208b2 100644 --- a/hermes/shazhou-family-onboard/scripts/self-check.sh +++ b/hermes/shazhou-family-onboard/scripts/self-check.sh @@ -4,6 +4,10 @@ set -euo pipefail +# Load nvm if available +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + pass=0 fail=0 @@ -29,29 +33,40 @@ check "redact_secrets off" "grep -q 'redact_secrets: false' ~/.hermes/config.yam check "tirith off" "grep -q 'tirith_enabled: false' ~/.hermes/config.yaml 2>/dev/null" check "command_allowlist 存在" "grep -q 'command_allowlist' ~/.hermes/config.yaml 2>/dev/null" -echo "01. SSH 密钥对" -check "id_ed25519 存在" "test -f ~/.ssh/id_ed25519.pub" +echo "01. Node.js & nvm" +check "nvm 已安装" "test -d \$HOME/.nvm" +check "node 可用" "command -v node" +check "node 由 nvm 管理" "which node | grep -q .nvm" -echo "02. Git 身份" -check "user.name 已设置" "git config --global user.name" -check "user.email 已设置" "git config --global user.email" +echo "02. SSH 密钥对" +check "id_ed25519 存在" "test -f ~/.ssh/id_ed25519.pub" echo "03. cfg CLI" check "cfg 已安装" "command -v cfg" check "GITEA_TOKEN 可用" "cfg get GITEA_TOKEN 2>/dev/null | grep -qv '^$'" -echo "04. Gitea & tea CLI" +echo "04. 邮箱" +check "MY_EMAIL 已配置" "cfg get MY_EMAIL 2>/dev/null | grep -qv '^$'" + +echo "05. Git 身份" +check "user.name 已设置" "git config --global user.name" +check "user.email 已设置" "git config --global user.email" + +echo "06. Gitea & tea CLI" check "tea 已安装" "command -v tea" check "tea 已登录" "tea login list 2>&1 | grep -qE '(xingyue|xiaoju|xiaomo|xiaonuo|tuanzi|luming|aobing|scottwei)'" -echo "05. Tailscale" +echo "07. Tailscale" check "tailscale 已安装" "command -v tailscale" check "tailscale 在线" "tailscale status" -echo "07. Hermes 配置" +echo "08. 家族成员" +echo " ℹ️ 请自行确认已了解家族设备和联系方式" + +echo "09. Hermes 配置" check "config.yaml 存在" "test -f ~/.hermes/config.yaml" -echo "08. Skills" +echo "10. Skills" check "skills repo 已克隆" "test -d ~/skills/.git" check "skills 已同步" "test -d ~/.hermes/skills/openclaw-imports"