前两天 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 的主要包的版本变化:

上面随便几条都有足够让我升级的理由了。

推荐阅读:

相关文章