在WSL2中安装任意Linux发行版
为什么
因为我要准备EDK2
的开发环境,但是我不想污染自己之前在用的 WSL 发行版
我在安装Docker
之后发现 WSL 多出了两个发行版本docker-desktop
和docker-desktop-data
。这个我是知道为什么的,因为 Windows 上的 Docker 其实只是套壳,本质上还是用 Linux 版本的 Docker 进行工作的。不过重点不是这个,重要的是这个说明 WSL 可以安装多个 Linux distro
我第一反应是去 MSDN 看一下,搜multi distro
,果然有对应的文档:Import any Linux distribution to use with WSL | Microsoft Docs
接下来围绕文档进行说明和操作
从本地导入 Linux distro tar 镜像
文档中提到,你可以通过导入tar
包的方式安装任何 Linux 发行版,方法是使用如下命令:
1 | wsl --import <Distro name> <InstallLocation> <FileName> |
那么这个 tar 包要从哪里来呢?包括但不限于以下来源:
- 从某些发行版的官网下载针对 WSL2 优化的容器镜像
- 将某个发行版的 Docker 容器导出作为镜像
- 将目前运行的 WSL 实例导出后再次导入
从发行版官网下载镜像
你可以在cloud-images.ubuntu.com
的镜像库中找到任意版本的 Ubuntu 服务器 WSL 专用镜像,其他发行版的服务器版本应该也会提供
比如你可以在Ubuntu 21.04
版本的目录中找到ubuntu-21.04-server-cloudimg-amd64-wsl.rootfs.tar.gz
,作为要使用的镜像
下载完成后,执行相关操作:
1 | PS D:\> mkdir ubuntu_instance |
可以看到,ext4.vhdx
就是要提供给Hyper-V
用的虚拟硬盘文件了,现在它已经被注册到 WSL2 中,你可以随时启动它
1 | PS D:\ubuntu_instance> wsl -l |
Docker ubuntu 容器仓库
现成的容器镜像,感谢开源社区的馈赠
22.04 的容器竟然只有不到 30MB..
自行导出 Docker 容器作为镜像
呃呃。。不想自己试了。如果确实有需求请查阅文章开头给出的 MSDN 文档,或者寻找其他博主的文章
将现有 WSL 实例导出作为镜像
使用wsl --export <Distro name> <Output path>
,即可得到你原来发行版的克隆镜像
镜像安装后续设置
安装 sudo 并新建个人用户
这个教程针对那些用作 Docker 容器的镜像
一般来说,容器镜像是只有root
用户的,并且只有运行操作系统必要的软件包,甚至连vi
都没有
先建立一个用户
1 | NEW_USER=<YOUR_USERNAME_HERE> |
下面安装一下vim
和sudo
,然后使用visudo
快速打开配置文件
1 | apt install vim |
在最下面追加内容,保存即可
1 | <USERNAME_HERE> ALL=(ALL:ALL) NOPASSWD: ALL |
设置用户为 WSL 默认启动用户
向/etc/wsl.conf
写入如下内容
1 | [user] |
也可以使用tee
写入
1 | tee /etc/wsl.conf <<_EOF |
更改在 Windows Terminal 的标签名
在Windows Terminal
中,Ubuntu 实例的 Tab 名格式是user@machine:path
,如果实例比较多的话根本分不清楚
好在你有办法避免这种情况,你可以根据这篇文档进行操作:Windows Terminal Tab Title Setup | Microsoft Docs
简单说,向.bashrc
写入如下内容:
1 | export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
在WSL2中安装任意Linux发行版