如何升級 EoL 的 Ubuntu 版本

最近有從 Ubuntu 18.10 升級的需求,但因為 18.10 早就在 2019/07/18 EoL 了,因此沒辦法直接使用 do-release-upgrade 升級,這個時候該怎麼辦呢?

TL;DR

  • 如果還在 Lifespan 的版本:直接 do-release-upgrade [-d]
  • 如果已經 EoL 的版本:
    • 選擇下一個版本
      • LTS:最近的 LTS (16.04 xenial -> 18.04 bionic
      • 非 LTS:最近的版本 (18.10 cosmic -> 19.04 disco
    #!/bin/bash
    set -euo pipefail
    
    NEXT_CODE='disco' # 下一個版本的 codename
    
    # 把 apt 源切到 `http://old-releases.ubuntu.com/ubuntu/`
    sudo sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
    sudo apt update
    sudo apt upgrade
    
    pushd `mktemp -d`
    curl http://old-releases.ubuntu.com/ubuntu/dists/${NEXT_CODE}-updates/main/dist-upgrader-all/current/${NEXT_CODE}.tar.gz | tar -zxf -
    sudo python3 ./dist-upgrade.py
    

可以使用 do-release-upgrade 的場景

Ubuntu 提供 do-release-upgrade[1] 方便使用者更新到最新的發行版本,但其更新路線是有限制的。
一般來說 LTS 可以從上一個 LTS 或普通版本更新,而普通版本只能從上一個版本更新,例如 20.04 可以從 18.0419.10 更新上去,但 19.04 只能從 18.10 更新,更多資訊可以參考 Ubuntu wiki 的版本升級說明[2]

do-release-upgrade 決定下一個版本的方式可以從 /etc/update-manager/release-upgrades 修改,可以指定到最新普通版本還是最新 LTS 版本。
如果目前使用的版本可以直接更新到最新的版本的話那就直接用 do-release-upgrade [-d] 升級就可以了。

無法使用 do-release-upgrade 的場景

如果目前的版本已經不適用 do-release-upgrade 升級到最新版本或不打算使用的話,可以考慮從下一個版本的軟體源中下載升級工具:(把 ${NEXT_CODE} 換成下一個版本的 codename)

# 還在 Lifespan 的版本
http://archive.ubuntu.com/ubuntu/dists/${NEXT_CODE}-updates/main/dist-upgrader-all/current/${NEXT_CODE}.tar.gz
# 已經 EoL 的版本
http://old-releases.ubuntu.com/ubuntu/dists/${NEXT_CODE}-updates/main/dist-upgrader-all/current/${NEXT_CODE}.tar.gz

下載回來之後可以用 tar -zxf 解壓縮,然後執行 sudo python3 ./dist-upgrade.py 就可以進行更新。

EoL 版本無法 apt update 的解法

對於已經 EoL 的版本,Ubuntu 會將其軟體源移動到 http://old-releases.ubuntu.com/ubuntu[3] 來保存,大家可以直接把源切到這邊繼續使用,但因為已經 EoL 了的關係,還是建議趕快升級發行版吧 XDDD


  1. 大部分情況下會預載,或是可以 apt install update-manager-core 取得 ↩︎

  2. 19.04 Disco 可以從 18.10 升級;而 20.04 focal 則可以從 19.10/18.04 LTS 升級 ↩︎

  3. Old Ubuntu Releases ↩︎