前兩天 Debian 10 發布了,我把家裡幾臺硬體都升級成了 Debian 10,感覺十分清爽,那麼作為每天重度使用的 WSL 怎麼能還停留在 9 上呢?WSL 裡面編譯個程序拷貝到 Debian 10 的機器上都會發生動態庫依賴問題,所以花時間把 WSL 升級到了 Debian 10,步驟如下:

由於 Windows Store 裏沒有全新的 Debian 10 給你下載,所以採取手工升級,先在 CMD 窗口裡運行:

wsl --export Debian D:debian-9.tar

這步把當前 WSL 中的 Debian 發行版做了一個備份,出問題可以 wsl --import 回來。

然後進入 debian 9,停止所有後臺服務(如果有的話),並把包更新為最新的:

sudo apt-get update
sudo apt-get upgrade

接著修改你的 /etc/apt/sources.list 將裡面所有 stretch 全替換成 buster 並保存,接下來進行一階段更新:

sudo apt-get update
sudo apt-get upgrade

乘著更新,可以出去燒炷香,期待你更新成功,不過還好上面你已經有了備份,更新過程中根據你先前安裝的包的情況,可能會問你一些問題,比如是否重啟服務之類,一般選擇是就得了,成功以後可以開始二階段更新:

sudo apt-get dist-upgrade

這時候可以稍微休息一下,20分鐘左右的時間就成功了,這時關閉 Debian 窗口,再重新進入以後就已經是 Debian 10 了,最後做一些收尾工作,清除無用的包:

sudo apt-get autoremove

恭喜你,你現在再 WSL 下得到了一個乾淨純粹的 Debian 10:

所有包都是最新的了,Debian 9 下面老舊的 Python 3.5 也自動換成了 3.7。然而 openjdk-8-jdk 並沒有自動切換到 11,我看了一下因為在 buster 下面 8 任然存在,但是同時多了 11,因此並沒有被強制替換,這時候把 8 刪除重新安裝 11 就是了。

另外自己之前在 9 時自己編譯到 /usr/local/ 下面的新版本 zsh / fish-shell / tmux 由於依賴的動態庫被替換了,所以需要重新編譯,我檢查了一下,Debian 10 下面這幾個東西已經都是最新版了,我索性直接把 /usr/local 下面之前自編譯的很多工具直接刪了,用系統默認的。

接著經過一番檢查確認工作正常後,重啟自己之前的各種後臺服務:cron / sshd / supervisor,萬事大吉。

整個升級過程中最重要的是前面的 wsl --export 備份工作,Windows 1903 以後 wsl.exe 工具有了很多增強,比如 wsl --export / --import 還可以用指定用戶運行指定發行版的命令,比如 cmd 下面運行:

wsl -d debian -u root whoami

就可以在名字為 Debian 的發行版中以 root 用戶在當前目錄下運行後面的命令,這個很方便,可以配置在編輯器裡面自由的調用 wsl 下面的各種工具。

最後貼一張 Debian 10 的主要包的版本變化:

上面隨便幾條都有足夠讓我升級的理由了。

推薦閱讀:

相關文章