feat(onboard): 新增 01-nvm-node,编号顺延,更新交叉引用和自检脚本

- 新增 01-nvm-node.md: nvm 安装、Node.js LTS 管理、全局包安装
- 原 01-09 顺延为 02-10
- 更新 SKILL.md checklist 表格
- 更新各子文档标题编号和前置引用
- self-check.sh: 加入 nvm/node 检查项,补充邮箱检查

[小糯]
This commit is contained in:
小糯 (Xiaonuo) 2026-04-23 17:19:31 +08:00
parent 1049f98f09
commit b00731efe2
12 changed files with 146 additions and 34 deletions

View File

@ -22,7 +22,7 @@ metadata:
skill_view("shazhou-family-onboard") 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 总览 ## 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 | | 00 | ⚡ 自主权解绑 | `references/00-self-unbind.md` | **最先执行!** approvals/redact/tirith/allowlist/guard |
| 01 | SSH 密钥对 | `references/01-ssh-keypair.md` | 生成 ed25519 密钥,注册到 Gitea | | 01 | Node.js & nvm | `references/01-nvm-node.md` | 安装 nvm,用 nvm 管理 Node.js 版本 |
| 02 | cfg CLI (配置管理) | `references/02-cfg-cli.md` | 安装 cfg,获取公共配置 | | 02 | SSH 密钥对 | `references/02-ssh-keypair.md` | 生成 ed25519 密钥,注册到 Gitea |
| 03 | shazhou.work 邮箱 | `references/03-email-account.md` | 用 mcmail 创建邮箱(如果没有) | | 03 | cfg CLI (配置管理) | `references/03-cfg-cli.md` | 安装 cfg,获取公共配置 |
| 04 | Git 身份配置 | `references/04-git-identity.md` | user.name / user.email | | 04 | shazhou.work 邮箱 | `references/04-email-account.md` | 用 mcmail 创建邮箱(如果没有) |
| 05 | Gitea 账号 & tea CLI | `references/05-gitea-tea.md` | tea 登录、注册 SSH 公钥 | | 05 | Git 身份配置 | `references/05-git-identity.md` | user.name / user.email |
| 06 | Tailscale 组网 | `references/06-tailscale.md` | 加入 tailnet,验证互通 | | 06 | Gitea 账号 & tea CLI | `references/06-gitea-tea.md` | tea 登录、注册 SSH 公钥 |
| 07 | 家族成员互相认识 | `references/07-family-members.md` | 了解各设备和伙伴的联系方式 | | 07 | Tailscale 组网 | `references/07-tailscale.md` | 加入 tailnet,验证互通 |
| 08 | Hermes 基础配置 | `references/08-hermes-config.md` | config.yaml 必要字段检查 | | 08 | 家族成员互相认识 | `references/08-family-members.md` | 了解各设备和伙伴的联系方式 |
| 09 | Skills 同步 | `references/09-skills-sync.md` | 克隆 skills repo,运行 sync.sh | | 09 | Hermes 基础配置 | `references/09-hermes-config.md` | config.yaml 必要字段检查 |
| 10 | Skills 同步 | `references/10-skills-sync.md` | 克隆 skills repo,运行 sync.sh |
## 自检模式 ## 自检模式

View File

@ -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 ✓"
```

View File

@ -1,4 +1,4 @@
# 01. SSH 密钥对 # 02. SSH 密钥对
## 检查 ## 检查

View File

@ -1,4 +1,4 @@
# 02. cfg CLI (配置管理) # 03. cfg CLI (配置管理)
## 检查 ## 检查
@ -12,7 +12,7 @@ cfg get GITEA_TOKEN
## 前置 ## 前置
- 已完成 01 (SSH 密钥对) - 已完成 02 (SSH 密钥对)
## 安装 ## 安装

View File

@ -1,4 +1,4 @@
# 03. shazhou.work 邮箱 # 04. shazhou.work 邮箱
## 检查 ## 检查
@ -10,8 +10,8 @@ cfg get MY_EMAIL
## 前置 ## 前置
- 已完成 01 (SSH 密钥对) - 已完成 02 (SSH 密钥对)
- 已完成 02 (cfg CLI) - 已完成 03 (cfg CLI)
## 安装 ## 安装

View File

@ -1,8 +1,8 @@
# 04. Git 身份配置 # 05. Git 身份配置
## 前置 ## 前置
- 已完成 03 (shazhou.work 邮箱) — 需要邮箱地址配 user.email - 已完成 04 (shazhou.work 邮箱) — 需要邮箱地址配 user.email
## 检查 ## 检查

View File

@ -1,9 +1,9 @@
# 05. Gitea 账号 & tea CLI # 06. Gitea 账号 & tea CLI
## 前置 ## 前置
- 已完成 02 (cfg CLI) — 需要 `GITEA_ADMIN_TOKEN`(shared) - 已完成 03 (cfg CLI) — 需要 `GITEA_ADMIN_TOKEN`(shared)
- 已完成 03 (邮箱) — 创建 Gitea 用户需要邮箱 - 已完成 04 (邮箱) — 创建 Gitea 用户需要邮箱
## 检查 ## 检查

View File

@ -1,4 +1,4 @@
# 06. Tailscale 组网 # 07. Tailscale 组网
## 检查 ## 检查

View File

@ -1,4 +1,4 @@
# 07. 家族成员互相认识 # 08. 家族成员互相认识
## 检查 ## 检查

View File

@ -1,4 +1,4 @@
# 08. Hermes 基础配置 # 09. Hermes 基础配置
## 检查 ## 检查

View File

@ -1,4 +1,4 @@
# 09. Skills 同步 # 10. Skills 同步
## 检查 ## 检查

View File

@ -4,6 +4,10 @@
set -euo pipefail set -euo pipefail
# Load nvm if available
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
pass=0 pass=0
fail=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 "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" check "command_allowlist 存在" "grep -q 'command_allowlist' ~/.hermes/config.yaml 2>/dev/null"
echo "01. SSH 密钥对" echo "01. Node.js & nvm"
check "id_ed25519 存在" "test -f ~/.ssh/id_ed25519.pub" check "nvm 已安装" "test -d \$HOME/.nvm"
check "node 可用" "command -v node"
check "node 由 nvm 管理" "which node | grep -q .nvm"
echo "02. Git 身份" echo "02. SSH 密钥对"
check "user.name 已设置" "git config --global user.name" check "id_ed25519 存在" "test -f ~/.ssh/id_ed25519.pub"
check "user.email 已设置" "git config --global user.email"
echo "03. cfg CLI" echo "03. cfg CLI"
check "cfg 已安装" "command -v cfg" check "cfg 已安装" "command -v cfg"
check "GITEA_TOKEN 可用" "cfg get GITEA_TOKEN 2>/dev/null | grep -qv '^$'" 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 已安装" "command -v tea"
check "tea 已登录" "tea login list 2>&1 | grep -qE '(xingyue|xiaoju|xiaomo|xiaonuo|tuanzi|luming|aobing|scottwei)'" 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 已安装" "command -v tailscale"
check "tailscale 在线" "tailscale status" check "tailscale 在线" "tailscale status"
echo "07. Hermes 配置" echo "08. 家族成员"
echo " ℹ️ 请自行确认已了解家族设备和联系方式"
echo "09. Hermes 配置"
check "config.yaml 存在" "test -f ~/.hermes/config.yaml" check "config.yaml 存在" "test -f ~/.hermes/config.yaml"
echo "08. Skills" echo "10. Skills"
check "skills repo 已克隆" "test -d ~/skills/.git" check "skills repo 已克隆" "test -d ~/skills/.git"
check "skills 已同步" "test -d ~/.hermes/skills/openclaw-imports" check "skills 已同步" "test -d ~/.hermes/skills/openclaw-imports"