2026年6月19日 星期五

OpenClaw 學習筆記 : 在 Pi 4B 安裝 OpenClaw (一)

今天在樹莓派 Pi 4B 上安裝 OpenClaw, 由於只有 8GB DRAM, 且樹莓派 GPU 無法用來跑本地模型, 用 CPU 跑的話吐 token 的速度會很慢, 需使用雲端模型, 本篇測試先安裝 nvm 工具, 然後用 nvm 安裝 Node.js 24, 最後用 Node.js 的 npm 安裝 OpenClaw. 


1. 安裝 nvm 版本管理工具 :   

不要用 apt install nodejs 來安裝 Node.js, 因為 Debian 官方套件庫的版本通常太舊, 建議用 nvm 工具來安裝符合 OpenClaw 要求版本的 Node.js, 最低版本為 Node 22.16+, 但官方強烈推薦安裝 Node 24. 

nvm 安裝指令如下, 使用管線串接的兩個指令, 前者先用 curl 指令下載 nvm 安裝指令稿 install.sh, 並且用 -o- 參數指定下載後不存成檔案, 而是直接把檔案的原始碼內容顯示在螢幕上, 並透過管線丟給 bash shell 執行. 不存檔的好處是免去賦予它執行權限與執行完要刪除的麻煩 :

pi@pi4b:~ $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash  
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16555  100 16555    0     0  11793      0  0:00:01  0:00:01 --:--:-- 11799
=> Downloading nvm from git to '/home/pi/.config/nvm'
=> 正複製到 '/home/pi/.config/nvm'...
remote: Enumerating objects: 436, done.
remote: Counting objects: 100% (436/436), done.
remote: Compressing objects: 100% (363/363), done.
remote: Total 436 (delta 61), reused 196 (delta 45), pack-reused 0 (from 0)
接收物件中: 100% (436/436), 427.36 KiB | 12.00 KiB/s, 完成.
處理 delta 中: 100% (61/61), 完成.
* (開頭指標分離於 FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /home/pi/.bashrc
=> Appending bash_completion source string to /home/pi/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

nvm 的安裝腳本 install.sh 會把 nvm 的主程式下載到家目錄 ~/.nvm/ 下, 然後在系統設定檔 ~/.bashrc (這是每次開啟新終端機時會自動讀取的檔案) 的最後面悄悄寫入了幾行 nvm 的環境變數路徑. 但是目前正在使用的這個終端機視窗是在安裝 nvm 之前就打開的, 它並不知道設定檔已經被修改了, 所以如果馬上輸入 nvm 指令會找不到 :

pi@pi4b:~ $ nvm --version   
bash: nvm:指令找不到

只要用 source 重新讀取系統設定檔 ~/.bashrc 強制目前的終端機視窗立刻載入 nvm 的環境變數, 這樣就可以找到 nvm 指令了 : 

pi@pi4b:~ $ source ~/.bashrc  
pi@pi4b:~ $ nvm --version   
0.39.7


2. 安裝 Node.js :

有了 nvm 後就可用它來安裝 Node.js, 如前所述, OpenClaw 要求最低 Node 版本為 v22, 建議安裝 Node 24 :

pi@pi4b:~ $ nvm install 24   
Downloading and installing node v24.17.0...
Downloading https://nodejs.org/dist/v24.17.0/node-v24.17.0-linux-arm64.tar.xz...
#############################################                              62.8%curl: (56) Recv failure: 連線被對方重設

Binary download from https://nodejs.org/dist/v24.17.0/node-v24.17.0-linux-arm64.tar.xz failed, trying source.
grep: /home/pi/.config/nvm/.cache/bin/node-v24.17.0-linux-arm64/node-v24.17.0-linux-arm64.tar.xz: 沒有此一檔案或目錄
Provided file to checksum does not exist.
Binary download failed, trying source.
Detected that you have 4 CPU core(s)
Running with 3 threads to speed up the build
Downloading https://nodejs.org/dist/v24.17.0/node-v24.17.0.tar.xz...

但這指令執行了很久 (超過半小時), 我把上面訊息貼給 Gemini 分析, 它要我立刻按 Ctrl + C 終止執行, 因為台灣連到 Node.js 官方伺服器的網路有時候不太穩定, 下載到 62.8% 時斷線了, 觸發致命的原始碼編譯 (trying source), 因為二進位預編譯檔下載失敗, 所以 nvm 絕望之下決定下載 .tar.xz 原始碼來編譯 (正開啟 3 個執行緒準備進行編譯), 這會讓 CPU 100% 狂飆而且需要耗時 2 到 4 個小時, 甚至可能因為記憶體不足而當機, 所以要我趕快結束程序. 

Gemini 建議我用 nvm 從亞洲的鏡像站 (Mirror) 去抓已經打包好的二進位檔 (淘寶/華為鏡像站), 速度會快上百倍, 而且絕對不會觸發原始碼編譯, 指令如下 : 

pi@pi4b:~ $ NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node nvm install 24
Downloading and installing node v24.17.0...
Downloading https://npmmirror.com/mirrors/node/v24.17.0/node-v24.17.0-linux-arm64.tar.xz...
######################################################################### 100.0%######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v24.17.0 (npm v11.13.0)
Creating default alias: default -> 24 (-> v24.17.0)

果然不到 10 分鐘就完成了, 檢查 Node.js 版本 :

pi@pi4b:~ $ node --version   
v24.17.0
pi@pi4b:~ $ npm --version    
11.13.0

這樣便完成 Node.js 的安裝了. 為了以後更新或安裝其他 Node.js 版本時不再卡住, Gemini 建議我把這個鏡像站網址永久加進 .bashrc 中 : 

pi@pi4b:~ $ echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.bashrc  

此指令會將鏡像站網址寫入系統設定檔, 用 source 重新載入設定檔 :

pi@pi4b:~ $ source ~/.bashrc  


3. 安裝 OpenClaw :

有了 Node.js 後本來想依照阿亮老師書裡面介紹的方式用下列指令安裝 :

npm install -g openclaw@latest

但那是在 Windows 的 Power Shell 底下, 環境不同, 所以我先跟 Gemini 討論在樹莓派底下是否可以照做, 回答是可以, 但不建議, 理由是 -g 參數會進行全域安裝, 使 OpenClaw 被塞進 nvm 的深層隱藏目錄中, 這會讓我們很難找到它的 .env 檔案在哪裡, 增加配置的難度, 特別是當要設定大模型的 API Key 時, 會被迫在終端機用很長的環境變數來啟動 OpenClaw. 

其次, 有很多新功能以及 Playwright 瀏覽器自動化依賴的初始化腳本在全域安裝模式下容易因為路徑問題噴錯. OpenClaw 在近期的版本更新中更傾向於讓使用者以 git clone 建立獨立專案目錄的方式來運行. Gemini 建議的安裝程序如下 :


(1). 安裝 Linux 編譯基礎套件 (Build Tools) : 

用 npm install 安裝 OpenClaw 時, 有些底層的套件 (例如處理加密, 網路或硬體效能的最佳化模組) 會需要在樹莓派上進行 C/C++ 編譯, 先用下列兩個指令把編譯工具補齊 :

sudo apt update
sudo apt install build-essential python3 libssl-dev -y

pi@pi4b:~ $ sudo apt update   
已有:1 http://deb.debian.org/debian bookworm InRelease
下載:2 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
下載:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]   
下載:4 http://archive.raspberrypi.com/debian bookworm InRelease [55.0 kB]      
下載:5 http://archive.raspberrypi.com/debian bookworm/main arm64 Packages [575 kB]
下載:6 http://archive.raspberrypi.com/debian bookworm/main armhf Packages [575 kB]
取得 1,309 kB 用了 12s (108 kB/s)                                              
正在讀取套件清單... 完成
正在重建相依關係... 完成
正在讀取狀態資料... 完成  
189 packages can be upgraded. Run 'apt list --upgradable' to see them.

pi@pi4b:~ $ sudo apt install build-essential python3 libssl-dev -y   
正在讀取套件清單... 完成
正在重建相依關係... 完成  
正在讀取狀態資料... 完成  
build-essential is already the newest version (12.9).
python3 is already the newest version (3.11.2-1+b1).
python3 被設定為手動安裝。
建議套件:
  libssl-doc
下列【新】套件將會被安裝:
  libssl-dev
下列套件將會被升級:
  libssl3 openssl
升級 2 個,新安裝 1 個,移除 0 個,有 187 個未被升級。
需要下載 7,342 kB 的套件檔。
此操作完成之後,會多佔用 13.0 MB 的磁碟空間。
下載:1 http://archive.raspberrypi.com/debian bookworm/main arm64 libssl3 arm64 3.0.20-1~deb12u2+rpt1 [2,384 kB]
下載:2 http://archive.raspberrypi.com/debian bookworm/main arm64 libssl-dev arm64 3.0.20-1~deb12u2+rpt1 [3,452 kB]
下載:3 http://archive.raspberrypi.com/debian bookworm/main arm64 openssl arm64 3.0.20-1~deb12u2+rpt1 [1,506 kB]
取得 7,342 kB 用了 1min 26s (85.7 kB/s)                                        
apt-listchanges: 讀取改變紀錄(changelogs)...
(讀取資料庫 ... 目前共安裝了 131003 個檔案和目錄。)
正在準備解包 .../libssl3_3.0.20-1~deb12u2+rpt1_arm64.deb……
Unpacking libssl3:arm64 (3.0.20-1~deb12u2+rpt1) over (3.0.18-1~deb12u1+rpt1) ...
選取了原先未選的套件 libssl-dev:arm64。
正在準備解包 .../libssl-dev_3.0.20-1~deb12u2+rpt1_arm64.deb……
Unpacking libssl-dev:arm64 (3.0.20-1~deb12u2+rpt1) ...
正在準備解包 .../openssl_3.0.20-1~deb12u2+rpt1_arm64.deb……
Unpacking openssl (3.0.20-1~deb12u2+rpt1) over (3.0.18-1~deb12u1+rpt1) ...
設定 libssl3:arm64 (3.0.20-1~deb12u2+rpt1) ...
設定 libssl-dev:arm64 (3.0.20-1~deb12u2+rpt1) ...
設定 openssl (3.0.20-1~deb12u2+rpt1) ...
執行 man-db (2.11.2-2) 的觸發程式……
執行 libc-bin (2.36-9+rpt2+deb12u13) 的觸發程式……


(2). 下載並安裝 OpenClaw : 

下面指令會略過 GitHub 驗證, 從雲端 (GitHub) 上的 OpenClaw 開源專案完整地複製一份複本到樹莓派使用者目錄下的 openclaw 子目錄, 執行後首先會建立一個 ~/openclaw 資料夾來存放 OpenClaw 專案 (主程式, 設定範例檔, 與開發者寫好的各種自動化腳本等) : 

pi@pi4b:~ $ git clone https://github.com/openclaw/openclaw.git  
正複製到 'openclaw'...
remote: Enumerating objects: 880235, done.
remote: Counting objects: 100% (724/724), done.
remote: Compressing objects: 100% (300/300), done.
remote: Total 880235 (delta 544), reused 426 (delta 424), pack-reused 879511 (from 3)
接收物件中: 100% (880235/880235), 1.48 GiB | 707.00 KiB/s, 完成.
處理 delta 中: 100% (636087/636087), 完成.
正在更新檔案: 100% (20260/20260), 完成.

完成後切換到 ~/openclaw 資料夾下 : 

pi@pi4b:~ $ cd openclaw   

瀏覽專案內容 :

pi@pi4b:~/openclaw $ ls -ls  
總用量 4288
  36 -rw-r--r--   1 pi pi   36751  6月 18 21:26 AGENTS.md
  48 -rw-r--r--   1 pi pi   48650  6月 18 21:26 appcast.xml
   4 drwxr-xr-x   8 pi pi    4096  6月 18 21:26 apps
2528 -rw-r--r--   1 pi pi 2587998  6月 18 21:26 CHANGELOG.md
   0 lrwxrwxrwx   1 pi pi       9  6月 18 21:26 CLAUDE.md -> AGENTS.md
   4 drwxr-xr-x   3 pi pi    4096  6月 18 21:26 config
  16 -rw-r--r--   1 pi pi   15055  6月 18 21:26 CONTRIBUTING.md
   4 drwxr-xr-x   2 pi pi    4096  6月 18 21:26 deploy
   8 -rw-r--r--   1 pi pi    5580  6月 18 21:26 docker-compose.yml
  20 -rw-r--r--   1 pi pi   19322  6月 18 21:26 Dockerfile
   4 drwxr-xr-x  30 pi pi    4096  6月 18 21:26 docs
   4 drwxr-xr-x 140 pi pi    4096  6月 18 21:26 extensions
   4 -rw-r--r--   1 pi pi     773  6月 18 21:26 fly.toml
   4 drwxr-xr-x   2 pi pi    4096  6月 18 21:26 git-hooks
   4 -rw-r--r--   1 pi pi    1170  6月 18 21:26 LICENSE
 128 -rw-r--r--   1 pi pi  130569  6月 18 21:26 npm-shrinkwrap.json
  24 -rwxr-xr-x   1 pi pi   20489  6月 18 21:26 openclaw.mjs
 112 -rw-r--r--   1 pi pi  110947  6月 18 21:26 package.json
   4 drwxr-xr-x  23 pi pi    4096  6月 18 21:26 packages
   4 drwxr-xr-x   2 pi pi    4096  6月 18 21:26 patches
 452 -rw-r--r--   1 pi pi  461179  6月 18 21:26 pnpm-lock.yaml
   4 -rw-r--r--   1 pi pi    3898  6月 18 21:26 pnpm-workspace.yaml
   4 drwxr-xr-x   4 pi pi    4096  6月 18 21:26 qa
  88 -rw-r--r--   1 pi pi   86929  6月 18 21:26 README.md
   4 -rw-r--r--   1 pi pi     449  6月 18 21:26 render.yaml
  20 drwxr-xr-x  19 pi pi   20480  6月 18 21:26 scripts
   4 drwxr-xr-x   3 pi pi    4096  6月 18 21:26 security
  36 -rw-r--r--   1 pi pi   35289  6月 18 21:26 SECURITY.md
   4 drwxr-xr-x  59 pi pi    4096  6月 18 21:26 skills
   4 drwxr-xr-x  70 pi pi    4096  6月 18 21:26 src
 616 -rw-r--r--   1 pi pi  627926  6月 18 21:26 taxonomy.yaml
   4 drwxr-xr-x  10 pi pi    4096  6月 18 21:26 test
   4 -rw-r--r--   1 pi pi    1575  6月 18 21:26 THIRD_PARTY_NOTICES.md
   4 -rw-r--r--   1 pi pi     339  6月 18 21:26 tsconfig.core.json
   4 -rw-r--r--   1 pi pi     139  6月 18 21:26 tsconfig.core.projects.json
   4 -rw-r--r--   1 pi pi     511  6月 18 21:26 tsconfig.extensions.json
   4 -rw-r--r--   1 pi pi     151  6月 18 21:26 tsconfig.extensions.projects.json
  12 -rw-r--r--   1 pi pi   12257  6月 18 21:26 tsconfig.json
   4 -rw-r--r--   1 pi pi     965  6月 18 21:26 tsconfig.plugin-sdk.dts.json
   4 -rw-r--r--   1 pi pi     144  6月 18 21:26 tsconfig.projects.json
  32 -rw-r--r--   1 pi pi   31151  6月 18 21:26 tsdown.config.ts
   4 drwxr-xr-x   6 pi pi    4096  6月 18 21:26 ui
   8 -rw-r--r--   1 pi pi    5984  6月 18 21:26 VISION.md
   4 -rw-r--r--   1 pi pi     241  6月 18 21:26 vitest.config.ts

然後用 npm install 指令安裝 OpenClaw :

pi@pi4b:~/openclaw $ npm install  

> openclaw@2026.6.8 preinstall
> node scripts/preinstall-package-manager-warning.mjs

[openclaw] warning: detected npm for install lifecycle.
[openclaw] this repo works best with pnpm; npm-compatible installs are slower and much larger here.
[openclaw] prefer: corepack pnpm install

> openclaw@2026.6.8 postinstall
> node scripts/postinstall-bundled-plugins.mjs


> openclaw@2026.6.8 prepare
> node scripts/prepare-git-hooks.mjs


added 728 packages, and audited 729 packages in 6m

217 packages are looking for funding
  run `npm fund` for details

2 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
npm notice
npm notice New minor version of npm available! 11.13.0 -> 11.17.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.17.0
npm notice To update run: npm install -g npm@11.17.0
npm notice

看到 "added 728 packages, and audited 729 packages in 6m" (在 6 分鐘內成功加入了 728 個套件) 就表示所有的程式碼依賴項目都已經完整下載並安裝到樹莓派上了. 過程中出現一個可以忽略的 warning (有比 npm 速度更快的 pnpm 可用), 以及 2 個中度安全漏洞, 對於沒有要上線當作大型商業網站使用的專案來說可以忽略它. 

以上便完成 OpenClaw 安裝了, 先關機用 Win32DiskImager 製作映像檔備份系統, 再進行接下來的OpenClaw 設定作業. 

沒有留言 :