公司的server用的是 ubuntu 18.04,而它的 glibc 是 2.27 的,這剛好卡在 nodejs 20 最低要求的 2.28。而最近為了使用 AI vibe coding 測試,要使用 opencode 跟 openspec。
而 openspec 就是nodejs 的程式,逼的我不得不研究怎麼硬跑 glibc 2.28。chatgpt 還一直在旁邊潑冷水,說很難,問題很多。最後還不是被我弄出來了,人類終於還是勝過了機器。
本文就是記錄如何在 ubuntu 18.04 下跑 opencode 和 openspec,並自己編譯 glibc-2.28 讓 nodejs 20 可以運行。由於公司的環境是不能上網的,所以要先在外部用 vm 架同樣的環境,確定ok後再搬進去。
安裝系統
- 安裝 Ubuntu 18.04
- 安裝 openssh-server, 方便用 teraterm 登入: sudo apt-get install openssh-server
- 安裝更多套件
|
1 2 3 4 |
# 不曉得為何 apt-get update 不行,把 appstream 停用就行了 sudo mv /etc/apt/apt.conf.d/50appstream /etc/apt/apt.conf.d/50appstream.disabled sudo apt-get update sudo apt install -y curl git unzip ca-certificates build-essential build-essential gawk bison python3 texinfo wget patchelf |
新增用戶
如果你也是要搬到自己內網的話,最好是另外新增一個同名的用戶來接續後面的操作,這樣可能比較沒問題。我是這樣做的,所以不確定用不同名是否有問題。
|
1 |
sudo adduser testuser |
編譯 glibc-2.28
|
1 2 3 4 5 6 7 8 9 |
mkdir -p ~/src && cd ~/src wget http://ftp.gnu.org/gnu/libc/glibc-2.28.tar.xz tar -xf glibc-2.28.tar.xz cd glibc-2.28 mkdir k cd k ../configure --prefix=/$HOME/opt/glibc-2.28 --disable-werror make -j `nproc` make install |
安裝 Opencode
到 Opencode 的 Github 的 release 內抓最新的 Linux x86_64 版本。
|
1 2 3 4 |
wget https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-linux-x64.tar.gz mkdir ~/bin tar zvfx opencode-linux-x64.tar.gz mv opencode bin |
建立 Ollama 設定檔
由於我是要用自己的 Ollama server 來跑 Coder LLM 的,所以要在 ~/.config/opencode/opencode.json 先建立設定檔。設定檔範例如下
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "$schema": "https://opencode.ai/config.json", "provider": { "ollama": { "npm": "@ai-sdk/openai-compatible", "name": "Ollama (intranet)", "options": { "baseURL": "http://192.168.1.1:11434/v1" }, "models": { "qwen3-coder:30b-256k": { "name": "qwen3-coder:30b-256k (Ollama)" } } } }, "model": "ollama/qwen3-coder:30b-256k", "autoupdate": false } |
然後跑一次 ~/bin/opencode,讓 opencode 先跑一次,它會從網路上抓一些更新,順便測一下自己的 ollama 能不能用。
下載 Nodejs 20
|
1 2 3 4 |
wget https://nodejs.org/download/release/latest-v20.x/node-v20.20.0-linux-x64.tar.xz tar Jvxf node-v20.20.0-linux-x64.tar.xz mkdir ~/usr mv node-v20.20.0-linux-x64 usr/ |
建立 Busybox 的 applets
因為系統很多基本工具都會依賴舊的 glibc 2.27, 會導致Library切換時跑錯版本,會有問題。用busybox static link 的就沒這些顧率。
|
1 2 3 |
mkdir ~/bin cd ~/bin busybox --install -s . |
修改 nodejs 的 linker 和 rpath
|
1 2 3 4 |
cd ~/usr/node-v20.20.0-linux-x64/bin mv node node2 patchelf --set-interpreter $HOME/opt/glibc-2.28/lib/ld-2.28.so node2 patchelf --set-rpath $HOME/opt/glibc-2.28/lib node2 |
造一個 node wrapper
編輯 $HOME/usr/node-v20.20.0-linux-x64/bin/node 如下,並記得將其 +x 可執行。
|
1 2 3 4 |
#!/bin/bash export LD_LIBRARY_PATH=$HOME/opt/glibc-2.28/lib:$LD_LIBRARY_PATH:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/ export PATH=$HOME/bin/:$PATH $HOME/usr/node-v20.20.0-linux-x64/bin/node2 $* |
修改路徑
將 nodejs 路徑加到開機檔內 ~/.bashrc
|
1 |
export PATH=$PATH:$HOME/usr/node-v20.20.0-linux-x64/bin:$HOME/bin |
然後再跑一次 bash, 然 PATH 生效。
安裝 OpenSpec
|
1 |
npm install -g @fission-ai/openspec@latest --ignore-scripts |
因為我們是用 hack 的方式硬讓 nodejs 跑起來,在跑安裝套件最後的 scripts 時會有 segement fault。openspec 這邊不跑也沒關係,其它套件就不確定了。
打包還原
將相關檔案都打包,讓另一台機器解開就可以用
|
1 |
tar -c -z -f opencode_all.tar.gz bin .cache .config opt/ usr/ |
把這包拿到舊的機器上解開
|
1 |
tar zvfx opencode_all.tar.gz |
.bashrc 路徑
由於我們沒打包 .bashrc,路徑的部份還是要自己再加進去。因為舊機上的 .bashrc 可能已經有改過,原則上就不用覆蓋的方式。
|
1 |
export PATH=$PATH:$HOME/usr/node-v20.20.0-linux-x64/bin:$HOME/bin |



