前两天 Debian 10 发布了,我把家里几台硬件都升级成了 Debian 10,感觉十分清爽,那么作为每天重度使用的 WSL 怎么能还停留在 9 上呢?WSL 里面编译个程序拷贝到 Debian 10 的机器上都会发生动态库依赖问题,所以花时间把 WSL 升级到了 Debian 10,步骤如下:
(注:2019/9/27,商店里的 Debian 已经是 Buster 了,下文留作今后需要时的参考吧)
由于 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 了,最后做一些收尾工作,清除无用的包:
恭喜你,你现在再 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 的主要包的版本变化:
上面随便几条都有足够让我升级的理由了。