在 Ubuntu 22.04 上面常常會遇到跑 apt upgrade
時系統跟你說有些 package 不打算升級:
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
以往遇到這種情況,如果確定要裝就是開 dist-upgrade
下去,但會發現也還是不為所動:
$ sudo apt full-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
這個可能是遇到 PhasedUpdates,這個設計是在最後一關推出去的階段,一次不要更新 100% 的機器。
可以從 apt policy
看到現在的比率是 20%:(這是我已經升級上去的樣子)
$ apt policy python3-distupgrade
python3-distupgrade:
Installed: 1:22.04.18
Candidate: 1:22.04.18
Version table:
*** 1:22.04.18 500 (phased 20%)
500 http://tw.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://tw.archive.ubuntu.com/ubuntu jammy-updates/main i386 Packages
100 /var/lib/dpkg/status
1:22.04.10 500
500 http://tw.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
500 http://tw.archive.ubuntu.com/ubuntu jammy/main i386 Packages
而對於 LTS 的使用者,這個功能在 APT 的支援是從 Ubuntu 22.04 開始,以前只有桌面的 Update Manager 才有支援,所以不太會遇到:
Up to Focal (20.04), Update Manager is the only package manager that supports phased updates (reference). Any other update mechanism installs all updates regardless of the Phased-Update-Percentage.
(話說 wiki 頁上面可以看到有「User stories」這段,用 User story 的格式把這個功能的目的描述出來了)
所以一般人可以忽略掉,而對於有意願想要幫忙測試的人,也可以透過設定蓋過 Phased Updates 的比例設定...