科技新知
雲系統的持續更新,大家的選擇是什麼?
在開始之前,筆者先解釋一下自己對Linux發佈策略的理解。筆者之前以為自己都尚算了解,但到了兩難問題時,才開始反思。所以都不禁懷疑自己的基本觀念有沒有問題,如果大家覺得筆者多少有些理解上的錯誤,請留言糾正。
普通軟件的發佈
主要分為穩定(Stable / GA), 測試(Edge / Alpha / Beta),特定版本。穩定、測試版本也可能有多個不同的分支,但它們主要是指不同環境下的選擇。通常安裝時,都會安裝最後的穩定、測試,除非最後版本有明顯Bug,我們需要回覆到再去的一個穩定版本。
當我們每次都更新到最後的穩定版本,我們稱之為rolling release.
以docker 官方建議的方式,我們在ubuntu底下,可以看到它的有很多結果回傳。
apt list --all-versions docker-ce
Listing... Done
docker-ce/noble,now 5:29.1.4-1~ubuntu.24.04~noble amd64 [installed]
docker-ce/noble 5:29.1.3-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.1.2-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.1.1-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.1.0-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.0.4-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.0.3-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.0.2-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.0.1-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:29.0.0-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:28.5.2-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:28.5.1-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:28.5.0-1~ubuntu.24.04~noble amd64
docker-ce/noble 5:28.4.0-1~ubuntu.24.04~noble amd64
...
我們可以選擇過去某個版本,但通常無腦update,就會去到最後一個版本。
Ubuntu的發佈策略
我們換個package看看,如果只看重要軟件的話,例如kernel,我們沒有什麼可以選擇
apt list --all-versions linux-image-generic
Listing... Done
linux-image-generic/noble-updates,noble-security,now 6.8.0-90.91 amd64 [installed]
linux-image-generic/noble 6.8.0-31.31 amd64
apt list --all-versions linux-image-virtual
Listing... Done
linux-image-virtual/noble-updates,noble-security,now 6.8.0-90.91 amd64 [installed,automatic]
linux-image-virtual/noble 6.8.0-31.31 amd64
除了可選擇數量外,另一個最大的不同是,kernel的自身版本其實固定在 6.8.0,就算更新,都是同一個版本的ubuntu補丁版,並不是官方kernel的bug fix版。筆者認為,這應該就是所謂的point release的策略。
(如果大家安裝物理機的話,kernel可能會是6.14,筆者大部份都是VM,還是比較舊的版本。筆者保證,6.8.0-90.91與 6.8.0-31.31之間,曾經是有多個不同版本的。但現在沒法下載回來,除非之前大家有安裝過。)
但相同情況,我們找另一個package看看,由 ubuntu 自己打包的docker 版本,雖然可以選擇的數量是有限的,但它們的版本是不斷更新的,而且不是hotfix版,還有大版本更新。
apt list --all-versions docker.io
Listing... Done
docker.io/noble-updates,now 28.2.2-0ubuntu1~24.04.1 amd64 [installed]
docker.io/noble-security 27.5.1-0ubuntu3~24.04.2 amd64
docker.io/noble 24.0.7-0ubuntu4 amd64
雖然版本是跟著官方docker最新版本,但也有持續跳級更新。如果真的要分類,筆者應該會把它歸類為 rolling release。
Rolling release vs Point release
花了一些時間看例子之後,終於開始討論我們自己的更新策略了。rolling release,最主要的原因是,舊版本無人再免費維護了,有什麼bug,都在最新版本中修復,但也因此有機會出現不相容的情況。point release,最主要的原因是為了維持極強的穩定和兼容版本,這亦代表,除官方專家出手,否則很難有舊版本的bug fix。
那麼我們有什麼選擇?
- 有point release,當然跟point release,因為程式不可能天天做調整。除非大家想要新功能再升級版本。
- 沒有point release,就手動自己選擇hotfix版或小版本升級。在升級大版本前,一定要做整合測試。若追求極致的穩定,升級大版本時就不要原機升級,要另起爐灶,似兩個相對獨立的環境並行過渡。如果有container版本,就用container隔離,一般java等都可以這樣建獨立環境。
- 沒有point release,也沒有可隔離的並行環境:其實 docker 接近這類。對它應的OS層的存取,雖然可以用VM隔離,但通常都不實際。因為重新安裝OS, 設定外部環境,成本很高。docker 在中 lab 並行升級是可以,但投産環境並行真的不實際。沒有辦法之下,筆者還是原機升級。頂多是lab中實現更多的整合測試。

