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 設定作業. 

2026年6月18日 星期四

MSI 電競桌機維修 (五)

前一篇我已安裝好 Scoop 工具並用它來安裝系統全域 Python 執行環境, 管理虛擬環境與專案的 uv 工具, Git 與 nvm 以及 Node.js, 本篇要在此基礎上安裝  Claude Code 與 Gemini CLI. 

本系列之前的文章參考 :



1. 安裝 Claude Code : 

在 Windows 上可以安裝原生版 Claude Code 軟體並使用 Git 附帶的 git-bash 指令列作為介面, 參考 :


在前一篇測試中已用 Scoop 安裝了 git, 在安裝原生版 Claude Code 之前必須先把 git-bash 的程式位置設在特定的使用者環境變數 CLAUDE_CODE_GIT_BASH_PATH 中, Claude Code 會固定找尋此環境變數來取得 git-bash 程式位置. 

我照之前做法用 where.exe 查詢 git-bash 程式的位置 : 

PS C:\WINDOWS\System32> where.exe bash   
資訊: 找不到提供模式的檔案。

詢問 Gemini 原因, 原來是 Scoop 還沒幫 git-bash 生成墊片 (Shim), 因為 Scoop 預設只會幫該軟體的核心指令建立墊片, 而 git-bash.exe 或 bash.exe 這種附屬的小工具, Scoop 預設不會把它們放進全域的 shims 資料夾裡, where.exe 是一個很笨的工具, 它只會去 Windows 系統的 PATH 捷徑資料夾裡撈東西, 既然 Scoop 預設沒有幫 git-bash.exe 建立全域捷徑, where.exe 自然就回報找不到. 

其實用 scoop which git 指令就可以查到 git 的位置了 :

PS C:\WINDOWS\System32> scoop which git   
~\scoop\apps\git\current\cmd\git.exe

注意, 這位置開頭的波浪 ~ 雖然在 Power Shell 視窗可以被辨識 (代表我的使用者目錄 : C:\Users\tony1), 但 Claude Code 作為一個外部引擎去讀取環境變數時可能會看不懂, 必須置換為使用者路徑, 並且將 git.exe 改成 git-bash.exe, 完整的絕對位置如下 : 

C:\Users\tony1\scoop\apps\git\current\cmd\git-bash.exe  

接下來可以像之前的做法那樣, 手動到系統設定中新增一個使用者環境變數 CLAUDE_CODE_GIT_BASH_PATH 並設為此位置設定, 也可以用下列 PS 指令一鍵完成設定 : 

PS C:\WINDOWS\System32> [Environment]::SetEnvironmentVariable("CLAUDE_CODE_GIT_BASH_PATH", "C:\Users\tony1\scoop\apps\git\current\git-bash.exe", "User") 

設定好後關閉 PS 視窗重開新的, 用下列指令檢查環境變數是否正確 : 

PS C:\WINDOWS\System32> $env:CLAUDE_CODE_GIT_BASH_PATH   
C:\Users\tony1\scoop\apps\git\current\git-bash.exe

這樣便可以在新開的 PS 視窗安裝 Windows 原生版的 Claude Code 了 : 

PS C:\WINDOWS\System32> irm https://claude.ai/install.ps1 | iex  
Setting up Claude Code...

√ Claude Code successfully installed!

  Version: 2.1.179

  Location: C:\Users\tony1\.local\bin\claude.exe


  Next: Run claude --help to get started

Setup notes:
  ● Native installation exists but C:\Users\tony1\.local\bin is not in your PATH. Add it by opening: System Properties →
    Environment Variables → Edit User PATH → New → Add the path above. Then restart your terminal.


✅ Installation complete!

版本已經來到 v2.1.179 了. 請注意在 Setup notes 中有提醒要將 Claude Code 的執行檔目錄路徑加入使用者環境變數 Path 中, 這樣以後才能在任何路徑下執行 Claude Code. 

當然可以到系統設定中手動將 C:\Users\tony1\.local\bin 加到 使用者環境變數 Path 的最後面, 也可以用下面兩個 PS 指令設定 : 

PS C:\WINDOWS\System32> $oldPath = [Environment]::GetEnvironmentVariable("PATH", "User")

這指令是抓取目前登入使用者 (tony1) 現有的 User PATH 設定後儲存在 $oldPath 變數中. 

PS C:\WINDOWS\System32> [Environment]::SetEnvironmentVariable("PATH", "$oldPath;C:\Users\tony1\.local\bin", "User")   

第二個指令是把新路徑接到舊路徑後面 (用分號隔開) 並寫回 Windows 系統的使用者環境變數 Path 中. 

檢查環境變數異動須重開一個 PS 視窗, 輸入下列指令 :

PS C:\WINDOWS\System32> $env:PATH -split ";"   
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\
C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Users\tony1\scoop\apps\nvm\current
C:\Users\tony1\scoop\apps\nvm\current\nodejs\nodejs
C:\Users\tony1\scoop\apps\git\current\cmd
C:\Users\tony1\scoop\persist\uv\tools\shims
C:\Users\tony1\scoop\persist\uv\python\shims
C:\Users\tony1\scoop\apps\python\current\Scripts
C:\Users\tony1\scoop\apps\python\current
C:\Users\tony1\scoop\shims
C:\Users\tony1\AppData\Local\Microsoft\WindowsApps
C:\Users\tony1\.local\bin

最後一個便是 Claude Code 的執行檔目錄位置. 

輸入 claude 按 Enter 出現如下畫面 :




這樣便完成 Claude Code 的安裝了. 接下來安裝 Gemini CLI. 


2. 用 npm 安裝 Gemini CLI : 

我們在前一篇測試中已安裝好 Node.js, 接下來參考之前的作法, 在 PS 視窗輸入下列 npm 指令安裝 Gemini CLI :

PS C:\WINDOWS\System32> npm install -g @google/gemini-cli   

changed 7 packages in 2s
npm warn allow-scripts 2 packages have install scripts not yet covered by allowScripts:
npm warn allow-scripts   @github/keytar@7.10.6 (install: node script/install.js || npm run build)
npm warn allow-scripts   node-pty@1.1.0 (install: node scripts/prebuild.js || node-gyp rebuild; postinstall: node scripts/post-install.js)
npm warn allow-scripts
npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts <pkg>` to allow.

出現警告而未能安裝 Gemini CLI, 我將上面訊息貼給 Gemini, 原來 @google/gemini-cli 這個工具為了能在終端機裡呈現帥氣的互動介面需依賴兩個非常硬核的底層套件 : 
  • node-pty : 負責模擬 Linux/Unix 終端機介面.
  • @github/keytar : 負責安全地把 Google API Key 存進 Windows 的憑證保險箱. 
在安裝 @google/gemini-cli 時, 它會執行編譯腳本動作, 將此二套件的 C++ 程式碼編譯成 Windows 的二進位檔, 新版的 npm 為了防止惡意軟體偷偷在背後跑腳本, 預設會攔截這些行為跳出警告. 

要解除此攔截需先用下列指令修改 npm 的全域設定, 強迫允許執行腳本 : 

PS C:\WINDOWS\System32> npm config set ignore-scripts false --global   

然後用下列指令 --foreground-scripts 參數繞過權限管理員, 強迫 Windows 彈出編譯視窗, 直接在最前面把 node-pty 和 keytar 編譯出來後, 直接進行全域強制覆蓋安裝 : 

PS C:\WINDOWS\System32> npm install -g @google/gemini-cli --foreground-scripts  

> @github/keytar@7.10.6 install
> node script/install.js || npm run build


> node-pty@1.1.0 install
> node scripts/prebuild.js || node-gyp rebuild

> Checking prebuilds...

> node-pty@1.1.0 postinstall
> node scripts/post-install.js

> Cleaning release folder...
> Moving conpty.dll...
  Using os.arch(): x64
  Found version 1.23.251008001
  Copying C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\third_party\conpty\1.23.251008001\win10-x64\conpty.dll -> C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\build\Release\conpty\conpty.dll
  Copying C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\third_party\conpty\1.23.251008001\win10-x64\OpenConsole.exe -> C:\Users\tony1\scoop\persist\nvm\nodejs\v26.3.0\node_modules\@google\gemini-cli\node_modules\node-pty\build\Release\conpty\OpenConsole.exe

changed 7 packages in 2s
npm warn allow-scripts 2 packages have install scripts not yet covered by allowScripts:
npm warn allow-scripts   @github/keytar@7.10.6 (install: node script/install.js || npm run build)
npm warn allow-scripts   node-pty@1.1.0 (install: node scripts/prebuild.js || node-gyp rebuild; postinstall: node scripts/post-install.js)
npm warn allow-scripts
npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts <pkg>` to allow.

雖然新版 npm 仍然頑固地跳出 npm warn allow-scripts 警告, 但 Gemini CLI 已經安裝成功了 (黃底色部分顯示 node-pty 最核心的底層微軟虛擬終端組件 conpty.dll 和 OpenConsole.exe 已經成功複製, 編譯與就位了), 這樣便可將上面強迫允許執行腳本的 npm 全域設定復原了 : 

PS C:\WINDOWS\System32> npm config delete ignore-scripts --global   

關閉 PS 視窗重開一個, 輸入 gemini 按 Enter 出現如下畫面表示 Gemini CLI 已經安裝成功了 : 



2026年6月17日 星期三

MSI 電競桌機維修 (四)

今天的進度是要安裝 Windows 命令列軟體包管理工具 Scoop, 並利用它來安裝全域 Python 執行環境. 兩年前此主機到貨後, 我是直接到官網下載最新版 Python 來安裝, 但隨後要安裝 Stable Diffusion 時卻發現系統 Python 版本太新而卡關, 所幸後來找到自帶 Python 的一鍵安裝版才解決. 

這次我先跟 Gemini 討論要怎樣布置執行環境才好, 它建議先用 Scoop 安裝最新版的 Python 作為系統全域執行環境 (Thonny 解譯器可掛接到此執行環境); 然後再用 MiniConda 來安裝特定版本的 Python (例如跑 Stable Diffusion 要用的 Python 10.11).  

本系列之前的文章參考 :



1. 安裝 Scoop 工具 : 

Scoop 是一個類似 Mac 系統的 Homebrew 的 Windows 命令列軟體管理工具, 可以在系統中安裝並切換不同版本的 Python 執行環境, 但它是全系統切換的淺層隔離架構, 一次只能切換一個主控版本作為全域 Python 執行環境. 除了用來安裝與管理 Python 版本, 它還可以用來安裝 uv, nvm, git 等套件軟體, 架構如下圖所示 : 


 

開啟 Power Shell 視窗, 先用下列設定 PowerShell 視窗腳本執行原則 :

PS C:\WINDOWS\System32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser   

然後才能用下列指令安裝 Scoop :

PS C:\WINDOWS\System32> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression     
Initializing...
Downloading...
Extracting...
Creating shim...
Adding ~\scoop\shims to your path.
Scoop was installed successfully!
Type 'scoop help' for instructions.


2. 用 Scoop 安裝 Python : 

Scoop 管理 Python 版本的方式 是透過將 ~/scoop/shims 資料夾加入到系統 PATH 中, 並將 python 指令連結到此資料夾的一個 "捷徑" 以達成版本切換功能, 此 "捷徑" 實際上用是一個類似連結功能的墊片程式 ~/scoop/shims/python.exe 將 python 指令轉發給目標版本的 python.exe 程式. 

與 Python 相關的常用 scoop 指令如下表 :


 常用 Scoop 指令  說明
 scoop bucket add versions  訂閱 Scoop 的 versions 軟體庫 (執行一次即可)
 scoop search python  搜尋可安裝的 Python 版本
 scoop install python311  安裝指定版本的 Python (需先訂閱 versions 軟體庫)
 scoop install python  安裝 Scoop 目前 versions 軟體庫的最新穩定版 Python
 scoop list  顯示 Scoop 已安裝的 Python 版本
 scoop reset python3xx  切換到指定 Python 版本
 scoop update python  將 Python 升級到 versions 軟體庫最新版


注意, Scoop 軟體庫裡的最新版可能與 Python 官網有短暫時差. 其次, 用 scoop install python 安裝的 Python 版本, 未來用 scoop update python 指令更新時會追逐最新版, 例如從 v3.12 提升至 v3.13 (舊的 v3.12 就會被覆蓋或移除); 若用 scoop install python312 安裝, 則 scoop update python 只會升級 3.12 的小修補版本 (例如 3.12.1 升到 3.12.2), 不會跨代升級到 v3.13. 

另外, Scoop 在安裝好預設就已經訂閱了內建的 Main 軟體庫, 追逐最新版的 python 套件就放在 Main 裡面, 直接下 scoop install python 就可安裝. 特定舊版本則是放在 versions 軟體庫, 只有當要安裝非最新版的歷史版本或特定代號版時, 才需要先執行 scoop bucket add versions 訂閱 versions 軟體庫後再安裝. 

我想讓此主機的系統 Python 追逐最新版, 所以直接安裝 python 套件即可 : 

PS C:\WINDOWS\System32> scoop install python 
Installing 'dark' (3.14.1) [64bit] from 'main' bucket
dark-3.14.1.zip (5.0 MB) [====================================================================================] 100%
Checking hash of dark-3.14.1.zip ... ok.
Extracting dark-3.14.1.zip ... done.
Linking ~\scoop\apps\dark\current => ~\scoop\apps\dark\3.14.1
Creating shim for 'dark'.
'dark' (3.14.1) was installed successfully!
Installing 'python' (3.14.6) [64bit] from 'main' bucket
python-3.14.6-amd64.exe (29.3 MB) [===========================================================================] 100%
Checking hash of python-3.14.6-amd64.exe ... ok.
Running pre_install script...done.
Running installer script...done.
Linking ~\scoop\apps\python\current => ~\scoop\apps\python\3.14.6
Creating shim for 'python3'.
Creating shim for 'idle'.
Creating shim for 'idle3'.
Adding ~\scoop\apps\python\current\Scripts to your path.
Adding ~\scoop\apps\python\current to your path.
Persisting Scripts
Persisting Lib\site-packages
Running post_install script...
done.
'python' (3.14.6) was installed successfully!
Notes
-----
Allow applications and third-party installers to find python by running:
reg import "C:\Users\tony1\scoop\apps\python\current\install-pep-514.reg"

可見目前 Scoop 的 main 軟體庫最新的 Python 版本是 v3.14.6, 與 Python 官網的一致. 檢視版本 :

PS C:\WINDOWS\System32> python --version   
Python 3.14.6
PS C:\WINDOWS\System32> python
Python 3.14.6 (tags/v3.14.6:c63aec6, Jun 10 2026, 10:26:10) [MSC v.1944 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.


3. 用 Scoop 安裝 uv : 

uv 工具是 Python 虛擬環境管理工具, 負責 Python 專案的區域隔離, 並提供 uv init 指令可自動建立 Python 專案結構, 比傳統的 venv + pip 作法更簡單好用. 從架構上看,  uv 與 scoop 可說是上下層或內外層關係, scoop 主外 (上), 負責外層基礎設施 (相當於大門管理員), 而 uv 主內 (下), 負責內層專案沙盒 (相當於每戶的管家), 參考 :


用 Scoop 安裝 uv 指令如下 : 

PS C:\WINDOWS\System32> scoop install uv   
Installing 'uv' (0.11.21) [64bit] from 'main' bucket
uv-x86_64-pc-windows-msvc.zip (22.4 MB) [=====================================================================] 100%
Checking hash of uv-x86_64-pc-windows-msvc.zip ... ok.
Extracting uv-x86_64-pc-windows-msvc.zip ... done.
Running installer script...Adding ~\scoop\persist\uv\python\shims to your path.
Adding ~\scoop\persist\uv\tools\shims to your path.
done.
Linking ~\scoop\apps\uv\current => ~\scoop\apps\uv\0.11.21
Creating shim for 'uv'.
Creating shim for 'uvx'.
Creating shim for 'uvw'.
Making C:\Users\tony1\scoop\shims\uvw.exe a GUI binary.
'uv' (0.11.21) was installed successfully!
Notes
-----
Scoop persists data since version 0.11.16. You may need to move data by yourself.
Before: '$env:APPDATA\uv', '$env:LOCALAPPDATA\uv'
After : 'C:\Users\tony1\scoop\persist\uv'

檢視版本 : 

PS C:\WINDOWS\System32> uv --version  
uv 0.11.21 (5aa65dd7a 2026-06-11 x86_64-pc-windows-msvc)


4. 用 Scoop 安裝 git : 

Git 是主流的版控軟體, 此外, 它所附的 git-bash 也可用來在 Windows 中作為執行 Claude Code 的介面, 參考 :


用 Scoop 安裝 git 指令如下 : 

PS C:\WINDOWS\System32> scoop install git     
Installing '7zip' (26.01) [64bit] from 'main' bucket
7z2601-x64.msi (1.9 MB) [=====================================================================================] 100%
Checking hash of 7z2601-x64.msi ... ok.
Extracting 7z2601-x64.msi ... done.
Linking ~\scoop\apps\7zip\current => ~\scoop\apps\7zip\26.01
Creating shim for '7z'.
Creating shim for '7zG'.
Making C:\Users\tony1\scoop\shims\7zg.exe a GUI binary.
Creating shim for '7zFM'.
Making C:\Users\tony1\scoop\shims\7zfm.exe a GUI binary.
Creating shortcut for 7-Zip\7-Zip File Manager (7zFM.exe)
Creating shortcut for 7-Zip\7-Zip Help (7-zip.chm)
Persisting Codecs
Persisting Formats
Running post_install script...done.
'7zip' (26.01) was installed successfully!
Notes
-----
To register the context menu entry, please execute the following command:
reg import "C:\Users\tony1\scoop\apps\7zip\current\install-context.reg"

If an error occurs while attempting to delete files during uninstallation, run the following command and then retry:
Stop-Process -Name 'explorer'
Installing 'git' (2.54.0) [64bit] from 'main' bucket
PortableGit-2.54.0-64-bit.7z.exe (56.3 MB) [==================================================================] 100%
Checking hash of PortableGit-2.54.0-64-bit.7z.exe ... ok.
Extracting PortableGit-2.54.0-64-bit.7z.exe ... done.
Running pre_install script...done.
Linking ~\scoop\apps\git\current => ~\scoop\apps\git\2.54.0
Creating shim for 'sh'.
Creating shim for 'git'.
Creating shim for 'git-bash'.
Making C:\Users\tony1\scoop\shims\git-bash.exe a GUI binary.
Creating shim for 'gpg'.
Creating shim for 'gpg-agent'.
Creating shim for 'gpgconf'.
Creating shim for 'gpg-connect-agent'.
Creating shim for 'pinentry'.
Making C:\Users\tony1\scoop\shims\pinentry.exe a GUI binary.
Creating shortcut for Git\Git Bash (git-bash.exe)
Creating shortcut for Git\Git CMD (git-cmd.exe)
Creating shortcut for Git\Git GUI (git-gui.exe)
Adding ~\scoop\apps\git\current\cmd to your path.
Running post_install script...done.
'git' (2.54.0) was installed successfully!
Notes
-----
To register file associations, please execute the following command:
reg import "C:\Users\tony1\scoop\apps\git\current\install-associations.reg"

To register the context menu entry, please execute the following command:
reg import "C:\Users\tony1\scoop\apps\git\current\install-context.reg"

To set Git Credential Manager Core for portable Git, please execute the following command:
git config --system credential.helper manager

檢視版本 :

PS C:\WINDOWS\System32> git --version  
git version 2.54.0.windows.1


5. 用 Scoop 安裝 nvm 工具 : 

安裝 Gemini CLI 與全端開發框架 Next.js 都要用到 Node.js, 其版本的管理使用 nvm 工具, 可以用 Scoop 來安裝 nvm, 指令如下 : 

PS C:\WINDOWS\System32> scoop install nvm   
Installing 'nvm' (1.2.2) [64bit] from 'main' bucket
nvm-noinstall.zip (6.0 MB) [==================================================================================] 100%
Checking hash of nvm-noinstall.zip ... ok.
Extracting nvm-noinstall.zip ... done.
Running pre_install script...done.
Linking ~\scoop\apps\nvm\current => ~\scoop\apps\nvm\1.2.2
Adding ~\scoop\apps\nvm\current to your path.
Adding ~\scoop\apps\nvm\current\nodejs\nodejs to your path.
Persisting nodejs
Persisting elevate.cmd
Persisting elevate.vbs
Persisting settings.txt
'nvm' (1.2.2) was installed successfully!
Notes
-----
You'll need to restart powershell/cmd to have it reload Environment Variables so nvm will work correctly

檢視版本 :

PS C:\WINDOWS\System32> nvm --version
1.2.2

安裝完須關閉 Power Shell 視窗重啟, 才能用它來安裝 Node.js.


6. 用 nvm 安裝 Node.js : 

nvm 工具可在電腦中安裝多個不同版本的 Node.js, 然後用 nvm use 指令啟用指定的版本 : 

PS C:\WINDOWS\System32> nvm install node  
26.3.0
Downloading node.js version 26.3.0 (64-bit)...
Extracting node and npm...
Complete
Installation complete.
If you want to use this version, type:

nvm use 26.3.0

啟用版本可指定版本號或直接用 node 表示最新版 : 

PS C:\WINDOWS\System32> nvm use node
26.3.0
Now using node v26.3.0 (64-bit)

檢視版本 : 

PS C:\WINDOWS\System32> node --version   
v26.3.0

這樣就可以用 Node.js 的 npm 指令來安裝 Node 的套件了. 

2026年6月15日 星期一

MSI 電競桌機維修 (三)

今天繼續 MSI 主機的復原工作, 進度來到重頭戲 : 安裝 RTX3060 顯卡的驅動程式, 首先到 Google 搜尋 "nvidia 驅動程式下載", 找到顯卡驅動程式下載網址 :


在左方選單勾選顯卡型號 (RTX3060) 後按 "尋找" : 



有 Studio 與 Game Ready 兩種版本可安裝 : 
  • Studio :
    追求絕對穩定與老軟體相容性的專業工作室使用的版本, 是通過大型商業軟體例如 Adobe Premiere, Photoshop, AutoCAD, Maya 等進行成千上萬小時連續壓力測試的版本, 但更新頻率低
  • Game Ready :
    特色是追求極速與快速適應新技術, 更新頻率極高 (通常每個月 2~3 次), 只要市面上有一款熱門新遊戲或新的 AI 技術底層 (如新的 CUDA 優化功能) 推出, Game Ready 就會第一時間把優化程式碼寫進去. 




以前購買時店家出貨就已安裝 Game Ready 版驅動程式, 參考 :


按 Game Ready 版右邊的 "檢視" 鈕會顯示驅動程式細節, 按下載鈕 : 




執行下載之 610.47-desktop-win10-win11-64bit-international-dch-whql.exe 執行安裝, 用預設選項即可 : 







安裝完畢按關閉, 預設會自動執行 NVIDIA App 進行設定 :




點選第一個選項 "具遊戲功能的驅動程式" 後按下一步 :






不兌換按 "跳至應用程式" : 




這樣驅動程式就安裝完成, 按 x 關閉程式即可. 最好是重開機, 以便能讓系統把殘留的微軟通用驅動或記憶體中的舊暫存徹底清空, 由全新的 Game Ready 驅動完全接管 RTX 3060. 

重開機後在桌面空白處按滑鼠右鍵, 點選最底下的 "顯示其他選項" :




點選 "NVIDIA 控制面板" (或 NVIDIA App 亦可) :




按 "同意並繼續" :




按左下角的 "系統資訊" :




看到 RTX3060 顯卡與驅動程式版本號 610.47 表示微軟的通用驅動已經徹底退場, NVIDIA 官方驅動已全面掌控顯卡了. 

以上之前是店家幫我裝好了, 這次自己來也是一個學習的機會. 

2026 年第 23 周記事

周二下班趁著雨停了, 把上周突然故障無法開機的 MSI 桌機拿去建國路修, 查出問題點為 1TB 的 ADATA SSD 系統碟, 幸好不是貴森森的顯卡. SSD 請德源的工程師幫我換好後帶回來自己重灌 Win11, 目前只剩下顯卡驅動尚未安裝, 下周要把整個本地 AI 開發環境重建回來, Ollama 測試進度已停滯兩周了. 

本周爸開始周二與周四下午也去社區, 中午吃完午飯約 11:30 幸福巴士載到家, 下午 13:30~14:00 又會來接,下午約 15:30 回家. 我每天都透過監視器與手機提醒爸搭車事宜, 看到車子開出去才安心做事. 也許下個月可以調整為全周都整天, 因為爸的時間感漸失, 幾乎每天下午都會著裝準備搭車. 我只希望他退化的速度能變慢而已. 


2026年6月13日 星期六

Mapleboard MP510-50 測試 (四十四) : 設定 PPPoE 自動撥接上網

上周可能因為雷雨使市電瞬斷, 鄉下老家的 Mapleboard 主機應該有重開機, 它是用網路線直接連線光世代數據機, 以撥接方式連線上網, 印象中當時設定 pppoe 時有設開機自動連線, 不知為何這次失靈. 早上花了一點時間才重新設定好, 以下紀錄這次查修過程. 之前的設定參考 :


本系列全部文章參考 :


首先檢查網路連線狀態 : 

tony1966@LX2438:~$ ifconfig  
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::66c7:6bea:e03e:ef60  prefixlen 64  scopeid 0x20<link>
        ether 16:72:2e:da:e7:3c  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 1961 (1.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 192  bytes 19933 (19.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 14  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 356  bytes 27782 (27.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 356  bytes 27782 (27.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

沒有出現 ppp0, 表示並未撥接上網, 可能是因為非預期斷電導致 NetworkManager 服務毀損, 設定檔異常, 或是原本設定的 autoconnect (自動連線) 屬性跑掉, 先重啟 NetworkManager 服務 : 

tony1966@LX2438:~$ sudo systemctl restart NetworkManager   

檢查服務狀態, 確認 NetworkManager 顯示為 active (running) 狀態 :

tony1966@LX2438:~$ sudo systemctl status NetworkManager   
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2026-06-11 14:34:45 CST; 15s ago
       Docs: man:NetworkManager(8)
   Main PID: 33100 (NetworkManager)
      Tasks: 4 (limit: 4213)
     Memory: 3.4M
        CPU: 295ms
     CGroup: /system.slice/NetworkManager.service
             └─33100 /usr/sbin/NetworkManager --no-daemon

用 NetworkManager 的指令工具 nmcli 指令來檢視之前建立的 PPPoE 連線 : 

tony1966@LX2438:~$ nmcli connection show   
NAME             UUID                                  TYPE      DEVICE 
Ifupdown (eth0)  681b428f-beaf-8932-dce4-687ed5bae28e  ethernet  eth0   
EDIMAX-tony      ddebdded-8805-4631-aa85-f08c412404bf  wifi      --     
hinet            a857fb4d-b2c2-43e2-a43f-a30a30def74f  pppoe     --     
hinet            62250a6d-dc03-44b9-be71-7179ce1ec6c9  pppoe     --     
TonyNote8        37db6693-372b-4190-a4d0-c71aef40bc38  wifi      --     

其中 hinet 就是之前用來撥接上網的 PPPoE 連線, 這兩個連線的名稱雖然一樣, 但它們的 UUID (唯一識別碼) 完全不同, 這很有可能就是無法自動撥接上網的元兇, 因為當系統開機準備自動連線時, 它看到兩個都叫 hinet 的設定檔, NetworkManager 可能會不知道該用哪一個, 或者其中一個是壞掉的舊設定, 系統卻偏偏去讀到壞的那一個導致自動撥接失敗. 

由於不知哪個 UUID 才是可正常連線的設定, 所以最乾淨的做法是把這兩個同名為 hinet 的連線設定都刪除, 重新建立一個乾淨的連線設定 : 

ony1966@LX2438:~$ nmcli connection delete uuid a857fb4d-b2c2-43e2-a43f-a30a30def74f   
連線「hinet」 (a857fb4d-b2c2-43e2-a43f-a30a30def74f) 已成功刪除。

tony1966@LX2438:~$ nmcli connection show 
NAME             UUID                                  TYPE      DEVICE 
Ifupdown (eth0)  681b428f-beaf-8932-dce4-687ed5bae28e  ethernet  eth0   
EDIMAX-tony      ddebdded-8805-4631-aa85-f08c412404bf  wifi      --     
hinet            62250a6d-dc03-44b9-be71-7179ce1ec6c9  pppoe     --     
TonyNote8        37db6693-372b-4190-a4d0-c71aef40bc38  wifi      --     

刪除第二個 hinet 連線設定 : 

tony1966@LX2438:~$ nmcli connection delete uuid 62250a6d-dc03-44b9-be71-7179ce1ec6c9  
連線「hinet」 (62250a6d-dc03-44b9-be71-7179ce1ec6c9) 已成功刪除。

檢視連線清單已無 hinet 了 : 

tony1966@LX2438:~$ nmcli connection show  
NAME             UUID                                  TYPE      DEVICE 
Ifupdown (eth0)  681b428f-beaf-8932-dce4-687ed5bae28e  ethernet  eth0   
EDIMAX-tony      ddebdded-8805-4631-aa85-f08c412404bf  wifi      --     
TonyNote8        37db6693-372b-4190-a4d0-c71aef40bc38  wifi      --     

建立新的 PPPoE 撥接連線 :

tony1966@LX2438:~$ sudo nmcli connection add type pppoe con-name "hinet" ifname eth0 username "光世代帳號@ip.hinet.net" password "老家電話號碼"   
[sudo] tony1966 的密碼: 
連線「hinet」 (edf0fefa-d122-4d62-88bd-5a9cc085830a) 已成功新增。

檢視連線清單新的 hinet 連線已 :  

tony1966@LX2438:~$ nmcli connection show  
NAME             UUID                                  TYPE      DEVICE 
Ifupdown (eth0)  681b428f-beaf-8932-dce4-687ed5bae28e  ethernet  eth0   
EDIMAX-tony      ddebdded-8805-4631-aa85-f08c412404bf  wifi      --     
hinet            edf0fefa-d122-4d62-88bd-5a9cc085830a  pppoe     --     
TonyNote8        37db6693-372b-4190-a4d0-c71aef40bc38  wifi      --     

用下列指令設定開機自動用此連線設定撥接上網 : 

tony1966@LX2438:~$ nmcli connection modify id "hinet" connection.autoconnect yes

手動用 hinet 連線撥接上網 : 

tony1966@LX2438:~$ nmcli connection up id "hinet"   
連線已成功啟用(D-Bus 啟用路徑:/org/freedesktop/NetworkManager/ActiveConnection/4)
tony1966@LX2438:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 16:72:2e:da:e7:3c  txqueuelen 1000  (Ethernet)
        RX packets 95413  bytes 73056382 (73.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 490867  bytes 54678967 (54.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 14  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 262801  bytes 19744911 (19.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 262801  bytes 19744911 (19.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1492
        inet 220.133.1x.1yy  netmask 255.255.255.255  destination 168.95.98.254
        inet6 2001:b011:c002:44b:20dd:96c1:295d:93a9  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::4948:3225:47ee:c1ee  prefixlen 64  scopeid 0x20<link>
        inet6 2001:b011:c002:44b:ca70:4579:c7c2:10f9  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::2eab:a3ae:c3d2:2ad5  prefixlen 64  scopeid 0x20<link>
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 121  bytes 40452 (40.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 157  bytes 26014 (26.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

出現 ppp0 網路連線表示已連網成功, 開啟瀏覽器可正常瀏覽網頁, 重新啟動系統確定重開機會自動撥接上網, 終於讓主機與網站重新恢復運作. 

2026年6月12日 星期五

MSI 電競桌機維修 (二)

前天去建國路德源電腦檢修 MSI 主機, 更換了新的 ADATA 1TB 系統碟後, 昨天晚上重灌 Win11 作業系統. 雖然當初購買主機時店家有附一張 Win11 Home 原版光碟, 但這不僅要找一台外接光碟機, 重灌後還會回復到 2024 年初的 Win11, 這樣會有大量的 Windows Update 要做, 會花很多時間. 德源工程師說可以到微軟下載最新 Win11 燒到 USB 裡, 用 USB 重灌系統最省事. 因為兩年來, 微軟修正了許多 Win11 對於 Intel 第 12 代 CPU 以及 RTX 3060 顯卡的排程優化與 Bug, 直接安裝最新版, 系統運作會比兩年前的舊版本穩定非常多. 

在進行 Win11 重灌之前, 先打開機箱, 把資料碟 D 碟 (ACER 2TB) 電源與資料線暫時拔掉, 等 Win11 安裝完後再插回, 這樣可避免過程中選擇要重灌到哪一個 SSD 時不小心選錯目標為 D 碟那就糟了 .

以下是 Gemini 建議的 Win11 重灌程序 (但新版 Win11 在 3 與 4 步驟畫面已有所不同) :
  1. 隨身碟插上主機, 開機後狂按 F11 (會進入 Boot 選單)
  2. 選取 UEFI: [隨身碟名稱] 按 Enter (預設就只有這個 USB)
  3. 進入畫面後點「立即安裝」, 勾選「我沒有產品金鑰」, 勾選「Windows 11 家用版」
  4. 安裝類型請選第二個 「自訂 : 唯獨安裝 Windows (進階)」
  5. 這時候畫面上應該只會看到一個乾淨完全沒有分割過的硬碟 (寫著磁碟 0 未分配空間, 容量約 900 多 GB), 直接點它後按右下角的 「下一步」
  6. 電腦會開始跑百分比, 跑完後會自動重啟 (重啟時就可以把 USB 隨身碟拔掉了), 接著就會進入 Windows 11 新機開航的設定畫面 (設定語系, 網路, 微軟帳號)

1. 建立 Win11 安裝媒體 :

拿一顆 8GB 以上的 USB 隨身碟插到一台 Win11 電腦的 USB, 然後到微軟官網下載 MediaCreationTool 軟體 (Windows11InstallationAssistant.exe), 按立即下載鈕 :




執行 Windows11InstallationAssistant.exe, 接受授權 : 




按下一步 : 




勾選 USB 快閃磁碟機 : 




按下一步會將 Win11 寫入隨身碟 : 






完成後取下隨身碟, 插到 MSI 電競桌機 USB (最好是主機後面的 USB 槽). 


2. 安裝 Win11 :

MSI 桌機開機後狂按 F11 會進入 Boot 選單, 目前只有 USB 隨身碟 (UEFL) 一個可開機選項, 直接按 Enter : 




預設繁體中文, 按下一步 : 




鍵盤預設微軟注音, 按下一步 : 




選取安裝 Windows 11 : 




輸入 Win11 金鑰 : 




授權條款按接受 : 




安裝位置點選磁碟 0 (新的 ADATA 1TB SSD) :




兩個都勾選按安裝 :





安裝完成後出現國家 (台灣) 確認畫面, 按是 :




確認輸入法為微軟注音 :




第二鍵盤按跳過 : 




命名電腦為 MSI_RTX3060 : 




登入微軟帳號 :





設定主機登入密碼 (PIN=akf) : 





然後系統重開機後, 就用此 PIN 登入即可, Win11 會自動進行更新. 


3. 接回 D 碟 :

關機後拔掉主機後面電源線, 把 2TB ACER SSD 的電源線與 SATA 資料線接回去, 再接回主機電源線後開機, 開啟檔案總管預期會看到 D 碟才對, 但是卻沒有, 我關機換插另一排電源插頭, 重插 SATA 資料線後再開機終於順利看到 D 碟了, 裡面的資料都還在. 


4. 安裝主機板驅動程式 :

Win11 更新完後自動跳出 MSI Utility Installation 程式, 裡面列出建議安裝的工具程式與驅動程式, 但不要照單全收, 只勾選檔名有 drivers 的即可, 其餘全部不要安裝 (尤其是防毒軟體 Norton), 甚至微星自家的 MSI Center 軟體也不需要, 它是主機的控制台軟體, 提供風扇與散熱控制 (含 RGB 調光), 以及電腦狀態監控等, 但 540 MB 的體積很臃腫, 會占據部分主機資源. 

2026年6月11日 星期四

好書 : 實用的 Gemini API 開發點子書

昨天去河堤還書時順路去逛明儀, 找到這本好書 : 


回來查市圖與母校書館都沒進此書, 殘念~~

但用 HyRead 查詢發現市圖有買電子書, 馬上借閱樂讀中. 

MSI 電競桌機維修 (一)

我的 MSI 主機六月初當機後就無法開機, 經表弟協助拆掉顯卡後 VGA 燈仍亮影像無輸出, 原以為是主機板內顯有問題, 但查詢 AI 才知道這主機所搭載的 CPU i5-12400F 是沒有內顯的, 編號以 F 結尾的 CPU 無內顯, 廠商在設計主機板時會讓有無內顯的 CPU 均可用, 此主機板 (MSI H610M-E) 上的 HDMI 與 VGA 埠是為有內顯的 CPU 晶片而設. 對 i5-12400F CPU 而言是無作用的, 所以初步看來 RTX3060 顯卡出包的嫌疑最大. 

這幾天梅雨不斷無法送修, 昨天雨停了, 下班後將主機送到建國路 MSI 原廠維修中心檢修 :

# 807高雄市三民區港新里建國二路41號 (地點在順發斜對面)




此主機是 2024-03-28 於 momo 購買的, 主機板與顯卡都有三年保固, 參考 :





MSI 原廠維修中心的工程師看了一下機身, 說這台算是半 DIY 主機, 不是微星原廠套裝主機, 所以只能幫我檢修其中的 MSI 主板與 RTX3060 顯卡, 但因為不是套裝, 無法幫我拆機 (之前有過幫客戶拆機導致的糾紛), 推薦我去附近一家德源電腦請他們幫我檢測確認問題所在, 如果問題出在主板或顯卡, 請他們拆下後拿回來 MSI 送修, 這兩塊都在保固內. 

我想說順發比較近, 且之前有在那邊維修過老電腦, 就背過去看看, 結果那邊有一大堆電腦待修, 那個女工程師也沒有之前的男工程師態度好, 所以又走去加油站對面的德源電腦, 因 MSI 原廠工程師有先打電話詢問檢測費, 所以說明來意後便馬上幫我檢修, 工程師拆掉 RTX3060 換上其它顯卡, 開機還是黑屏亮 VGA 燈 (RTX3060 嫌疑退散~), 接著先後拔兩排記憶體 (16GB + 32GB) 也是一樣, 最後拔掉 ADATA 1TB 系統碟就可順利進 BIOS, VGA 燈也熄滅了, 確認是系統 SSD 出包. 工程師說 ADATA SSD 還在保固內, 叫我拿去原廠 (就在隔壁) 換新. 

ADATA 服務也不錯, 小姐問明情況登記姓名電話後馬上拿全新盒裝給我. 德源工程師換上後檢測 OK 叫我回家自己安裝 Win11. 呵呵, 主板機與顯卡都沒問題真是好佳在, 只花了 500 元檢修費就把主機就回來了, 真是感謝親切的德源工程師, 以後若有電腦方面需求就找德源 (老闆也非常隨和, 工程師一邊檢修, 老闆就一邊跟我瞎聊). 走回公司路經 MSI 原廠維修中心, 我進去跟工程師講一下檢修結果, 並謝謝他介紹我去德源, 馬上就搞定這問題.