[toc]

如何在WSL2.0里面使用任意版本的Linux发行版

参考:https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro

之前提到了:

  • 如何使用wsl2.0安装ubuntu子系统并安装docker和设置开机启动
  • 如何使用wsl2.0安装centos子系统

今天带来了的是在WSL2.0里安装任意Linux发行版

一、基本的操作步骤如下

  • 1、docker run一个任意版本的Linux发行版
  • 2、docker export将容器导出为tar包
  • 3、wsl --import将tar包导入为一个linux子系统
  • 4、wsl -d xxx启动这个linux子系统,并安装ssh等工具连接
  • 5、wsl export可以再次将某个Linux子系统导出为tar包,导出到别的地方使用
  • 6、不想用了就使用wsl --unregister移除某个Linux子系统

二、使用alpine镜像作为Linux子系统

之前我写了一篇文章,在alpine镜像里面使用ssh,现在刚好派上了用场:Docker 之基于Alpine构建SSH服务

2.1、使用该镜像运行为一个容器

]$ docker run --rm -it alpine-ssh:3.13 sh

2.2、新开窗口,导出容器

[[email protected] ~]$ docker ps
CONTAINER ID   IMAGE             COMMAND   CREATED         STATUS         PORTS     NAMES
01bbf08446bb   alpine-ssh:3.13   "sh"      2 minutes ago   Up 2 minutes   22/tcp    practical_robinson
[[email protected] ~]$ docker export practical_robinson > /mnt/d/wsl2.0/alpine3.13/alpine3.13-ssh.tar
[[email protected] ~]$ ls -lh /mnt/d/wsl2.0/alpine3.13/alpine3.13-ssh.tar
-rwxrwxrwx 1 root root 16M May  7 21:31 /mnt/d/wsl2.0/alpine3.13/alpine3.13-ssh.tar

2.3、在windows下面导入这个tar包

PS D:\wsl2.0\alpine3.13> wsl --import alpine3.13 D:\wsl2.0\alpine3.13 .\alpine3.13-ssh.tar
PS D:\wsl2.0\alpine3.13> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
  alpine3.13      Stopped         2

2.5、启动这个alpine的Linux子系统

PS D:\wsl2.0\alpine3.13> wsl -d alpine3.13
DESKTOP-R8CAT9L:/mnt/d/wsl2.0/alpine3.13# cat /etc/alpine-release
3.13.5
#启动ssh
DESKTOP-R8CAT9L:/mnt/d/wsl2.0/alpine3.13# /usr/sbin/sshd -D &
#xshell连接
[[email protected] ~]$ ssh [email protected] -p2888 
The authenticity of host '[127.0.0.1]:2888 ([127.0.0.1]:2888)' can't be established.
ECDSA key fingerprint is SHA256:gEYqsdMFrFlC10CV5JMhE7p6dg1XaiF+6AqWm/wiybg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[127.0.0.1]:2888' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

DESKTOP-R8CAT9L:~# 

2.6、将当前这个子系统导出为tar包

首先先将这个子系统停止

#查看子系统状态
PS D:\wsl2.0\alpine3.13> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
  alpine3.13      Running         2
#停止alpine3.13这个子系统
PS D:\wsl2.0\alpine3.13> wsl -t alpine3.13
#再次查看子系统状态
PS D:\wsl2.0\alpine3.13> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
  alpine3.13      Stopped         2

导出子系统为tar包

PS D:\wsl2.0\alpine3.13> wsl --export alpine3.13 D:\wsl2.0\alpine3.13\alpine3.13-20210507.tar
PS D:\wsl2.0\alpine3.13> dir
    目录: D:\wsl2.0\alpine3.13
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2021/5/7     21:41       16250880 alpine3.13-20210507.tar
-a----          2021/5/7     21:31       16236032 alpine3.13-ssh.tar
-a----          2021/5/7     21:41       66060288 ext4.vhdx

2.7、不想用了删除这个子系统

#使用wsl --unregister命令移除
PS D:\wsl2.0\alpine3.13> wsl --unregister   alpine3.13
正在注销...
#再次查看
PS D:\wsl2.0\alpine3.13> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
#磁盘上的虚拟磁盘文件也已经不在了

三、使用fedora系统作为Linux子系统

3.1、运行容器

]$ docker run --rm -it fedora:35 bash

3.2、导出容器

[[email protected] ~]$ docker export busy_blackburn > /mnt/d/wsl2.0/fedora35/fedora-35.tar
[[email protected] ~]$ ls -lh /mnt/d/wsl2.0/fedora35/fedora-35.tar
-rwxrwxrwx 1 root root 183M May  7 21:49 /mnt/d/wsl2.0/fedora35/fedora-35.tar

3.3、wsl导入tar包

#导入
PS D:\wsl2.0\fedora35> wsl --import fedora35 D:\wsl2.0\fedora35 .\fedora-35.tar
#查看当前已有的linux子系统
PS D:\wsl2.0\fedora35> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
  fedora35        Stopped         2

3.4、启动fedora35

**nice ** 😙

PS D:\wsl2.0\fedora35> wsl -d fedora35
[root@DESKTOP-R8CAT9L fedora35]# cat /etc/fedora-release
Fedora release 35 (Rawhide)
[root@DESKTOP-R8CAT9L fedora35]# uname -a
Linux DESKTOP-R8CAT9L 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

3.5、移除

PS D:\wsl2.0\fedora35> wsl --unregister fedora35
正在注销...
PS D:\wsl2.0\fedora35> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2

四、debian

4.1、运行容器

]$ docker run --rm -it --name debian debian:10.9 bash

4.2、导出容器

[[email protected] ~]$ docker export debian > /mnt/d/wsl2.0/debian10.9/debian10.9.tar
[[email protected] ~]$ ls -lh /mnt/d/wsl2.0/debian10.9/debian10.9.tar
-rwxrwxrwx 1 root root 114M May  7 21:58 /mnt/d/wsl2.0/debian10.9/debian10.9.tar

4.3、wsl导入tar包

#导入
PS D:\wsl2.0\debian10.9> wsl --import debian10.9 D:\wsl2.0\debian10.9 .\debian10.9.tar
#查看当前已有的linux子系统
PS D:\wsl2.0\debian10.9> wsl --list -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  CentOS8         Stopped         2
  debian10.9      Stopped         2

4.4、启动debian10.9

**nice ** 😙

PS D:\wsl2.0\debian10.9> wsl -d debian10.9
root@DESKTOP-R8CAT9L:/mnt/d/wsl2.0/debian10.9# cat /etc/issue
Debian GNU/Linux 10 \n \l

4.5、移除

PS D:\wsl2.0\debian10.9> wsl --unregister debian10.9

五、长话短说

  • 目前我用的ubuntu20.04,听舒服的,里面可以装个docker套娃继续用
  • centos对docker不是很友好,有些错误我解决不了,不过跑跑脚本测试啥的还是不错的
  • 有个这个教程,基本上可以告别vmware了(对我而言)