制作适用于 WSL 的任意 Linux 镜像

技术 秋水逸冰 9691 次围观 2 次吐槽

WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。

下面以 Rocky Linux 8 作为示例,介绍具体制作过程。

1. 下载官方提供的 qcow2 文件

Rocky Linux 提供最新版的 qcow2 文件下载地址:
https://download.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-GenericCloud-Base.latest.x86_64.qcow2

2. 制作 rootfs.tar.gz

以下所有的操作依赖的命令有:kpartxqemu-imglosetupfdiskmountumount,如果命令不存在,请自行安装之。
转换 qcow2 文件到 raw 文件

qemu-img convert -f qcow2 -O raw Rocky-8-GenericCloud-Base.latest.x86_64.qcow2 Rocky8.raw

使用 losetup 将 raw 文件虚拟成块设备

losetup /dev/loop1 Rocky8.raw

使用 kpartx 挂载虚拟文件系统

kpartx -a /dev/loop1

使用 fdisk 查看挂载的分区情况

fdisk -l /dev/loop1

返回如下信息

Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2cc9c27e

Device       Boot Start      End  Sectors  Size Id Type
/dev/loop1p1 *     2048 16386047 16384000  7.8G 83 Linux

此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
挂载块设备到本机路径

mount /dev/mapper/loop1p1 /mnt

进入挂载点 /mnt,查看文件

cd /mnt
ls -la

返回如下信息

total 16
dr-xr-xr-x. 17 root root  224 Nov 15 03:17 .
dr-xr-xr-x. 18 root root  256 Nov 17 09:09 ..
lrwxrwxrwx.  1 root root    7 Oct 11 08:48 bin -> usr/bin
dr-xr-xr-x.  6 root root 4096 Nov 15 03:24 boot
drwxr-xr-x.  2 root root    6 Nov 15 02:50 dev
drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
drwxr-xr-x.  2 root root    6 Oct 11 08:48 home
lrwxrwxrwx.  1 root root    7 Oct 11 08:48 lib -> usr/lib
lrwxrwxrwx.  1 root root    9 Oct 11 08:48 lib64 -> usr/lib64
drwxr-xr-x.  2 root root    6 Oct 11 08:48 media
drwxr-xr-x.  2 root root    6 Oct 11 08:48 mnt
drwxr-xr-x.  2 root root    6 Oct 11 08:48 opt
drwxr-xr-x.  2 root root    6 Nov 15 02:50 proc
dr-xr-x---.  2 root root  114 Nov 15 03:47 root
drwxr-xr-x.  2 root root    6 Nov 15 02:50 run
lrwxrwxrwx.  1 root root    8 Oct 11 08:48 sbin -> usr/sbin
drwxr-xr-x.  2 root root    6 Oct 11 08:48 srv
drwxr-xr-x.  2 root root    6 Nov 15 02:50 sys
drwxrwxrwt.  2 root root   84 Nov 15 03:47 tmp
drwxr-xr-x. 13 root root  158 Nov 15 03:01 usr
drwxr-xr-x. 20 root root  262 Nov 15 03:00 var

打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root

tar zcf /root/rootfs.tar.gz *

查看打包后的文件,确认文件存在,大小一般是在几百 MB

ll -h /root/rootfs.tar.gz

至此,Rocky Linux 8 的文件系统基本上就制作完成了。

3. 后续

卸载挂载点

cd ~
umount /mnt

使用 kpartx 卸载虚拟文件系统

kpartx -d /dev/loop1

使用 losetup 卸载虚拟块设备

losetup -d /dev/loop1

4. 搭配 wsldl 使用

wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
项目地址:https://github.com/yuk7/wsldl
下载最新版 Release 的 icons.zip 文件
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:

找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。

双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。

5. 已制作好的 Linux 发行版

下载链接如下:
CentOS 7.9
CentOS 8.4
Fedora 35
Fedora 36
Fedora 37
AlmaLinux 8
AlmaLinux 9
Rocky Linux 8.5
Rocky Linux 9.0
Alpine 3.15
Ubuntu 18.04
Ubuntu 20.04
Ubuntu 22.04
Debian 10
Debian 11
Amazon Linux 2
浏览目录:
https://dl.lamp.sh/wsl

写在最后

请关注我的 Telegram 频道:https://t.me/qiushuiyibing
我会在此不定期发布一些杂七杂八的作品。
同时也欢迎加入交流群:https://t.me/qiushui2018

转载请注明:秋水逸冰 » 制作适用于 WSL 的任意 Linux 镜像

发表我的评论
取消评论

请输入正确答案后提交评论 *

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 用docker导更简单
    zcluo11个月前 (2022-01-11)回复
  2. 666
    my246811个月前 (2022-01-09)回复