我手邊有不少系統是用 Ubuntu 22.04,22.04 LTS 版的主流支援到 2027 年 4 月,安全更新會到 2032故不用急著升到 24.04,畢竟 22.04 經過三年的全球實戰驗證,已是成熟穩重的大人,理論上穩定性與可靠度更好,也較不用擔心應用程式支援性。

說老實話,我現在跑伺服器幾乎都用 Docker,OS 只要能安裝 Docker,OS 是什麼版本不重要。實務上因 OS 版本卡關,比較常發生在開發工具上。

最近連續遇到兩個案例,因為 apt install 安裝的 Go 跟 Node.js 版本太舊導致程式無法編譯,寫篇筆記記錄備忘。

Ubuntu 22.04 安裝好後,用 apt install golangapt install nodejs 便能安裝 Go 及 Node.js,但 Ubuntu 22.04 官方 apt Repository 附的版本太舊,Go 是 1.18、Node.js 是 12.12:

2025 年 5 月,Go 最新 Stable 版本是 1.24、Node.js 最新的 LTS 是 22.15,差距有點大。

研究了一下,依官方文件,要在 22.04 安裝新版 Go,有兩種建議做法:

  1. PPA (Personal Package Archive,個人套件庫)
    註:PPA 為使用者上傳發佈的非官方套件庫,更新速度快,但安全與穩定性需自行評估
    sudo add-apt-repository ppa:longsleep/golang-backports
    sudo apt update
    sudo apt install golang-go
    
  2. Snap 安裝
    註:Snap 是 Canonical (Ubuntu 的母公司) 推出的現代化軟體打包格式及套件管理系統,每個套件庫自帶相依套件,各自獨立,可多版本並存並避免共用相依程式庫發生依賴地獄,但缺點為體積較大。詳細比較
    sudo snap install --classic go
    

至於 Node.js,一樣可以透過 PPASnap,但有鑑於 Node.js 有時需動態切換版本,我決定裝 NVM(Node Version Manager):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm use --lts

搞定收工。

Ubuntu 22.04 users facing outdated Go and Node.js versions can use PPA or Snap for updates. For Node.js, NVM is recommended for easy version management.


Comments

# by Ming

要注意的是Linux kernel版本,之前發生過要升級redmine (包在docker)到當時最新版本卻發生啟動失敗,研究後發現該版本仰賴kernel某功能,只好退到沒使用該kernel功能的最後一個版本

# by Allen

Nvm 會因為登入帳號不同而產生差異,遠端用ssh 執行conmand 也會 原因在於 .bashrc

# by Allen

Nvm 會因為登入帳號不同而產生差異,遠端用ssh 執行conmand 也會 原因在於 .bashrc

# by Nesquate

遇到兩個以上的程式語言開發環境要管的狀況,我反而會選asdf或mise,管理起來比較統一 snap/ppa/apt等安裝到系統的方式並不推薦,因為這樣用久了很容易依賴衝突 -> 整個系統亂掉

# by Nesquate

修正一下,snap不會造成依賴衝突,但是他的沙箱環境可能要注意一下,有些打包者沒包好,沙箱環境用預設值,結果程式在預設狀況下抓不到外面的檔案,囧

# by Mason

golang 我是採用 https://go.dev/doc/install 上的說法,清理 /usr/local/go 後直接拉最新版 go1.xx.x.linux-amd64.tar.gz 的檔案進去, 然後在 ~/.profile 增加 export PATH=$PATH:/usr/local/go/bin 這樣我在shell裡就有go 可以用了,想要升版降版都可以調整。 我會這麼做是我從 go 1.12 一路升到 go 1.22 中間遇到bug , go mod 某些情況忽略了 replace 關鍵字處理但又讓所有程式碼編譯成功,超詭異。 https://issuetracker.google.com/issues/265982115?pli=1

Post a comment