如何将wsl中的ubuntu 18.04升级到20.04?

2020-07-14

ubuntu wsl

目前ubuntu的wsl最新镜像是20.04,之前安装的18.04已经有点过时了,比如php就只有7.2,很多新的软件和框架都需要7.3以上的版本。那么,能不能把wsl的ubuntu升级到20.04呢?答案是可以的。

升级ubuntu的大版本,过程跟非wsl的版本是差不多的,首先是把当前的系统更新到最新,然后重启系统后运行do-release-upgrade命令即可。大致的命令清单如下:

<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ sudo apt update
$ sudo apt upgrade 
$ reboot      # wsl无法重启,参加下面的截图进行操作

.... 重启之后 ....

# 将lts修改成normal,这是因为目前20.04还没有更新到20.04.1,对于lts的升级策略,只有升级到第一个小版本时才能进行大版本的升级
$ sudo vim /etc/update-manager/release-upgrades    
$ sudo do-release-upgrade

#接下来就是长时间的升级过程

升级过程中,唯一比较麻烦的是wsl不能执行reboot命令,会报告下面的错误:

<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">wsl System has not been booted with systemd as init system (PID 1). Can't operate.

我们可以重启windows的LxssManager服务,如下图所示。重启后,ubuntu的终端会终止。

![](https://www.zicode.com/wp-content/uploads/2020/07/image-2.png)
如果是18.04升级到20.04,可能会需要升级两次,先升级到19.10,然后是20.04。每次升级完都需要重启,当然,wsl需要重启LxssManager进程。最后,我们来看一下系统的版本是否正确:
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
 
阅读