|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。: k6 {) L: A+ L9 }7 \& U' g! w
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
$ }! X8 m: w2 @$ p% c `Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。 ^# Z/ r5 |3 P# O( X# d
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
5 }3 p0 Z, w @ F" C2 T本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。4 x* d n) W5 w' H+ ~ g
& c3 q, F0 S9 `( h6 `! S下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
9 h8 I/ T3 o+ a& H1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:/ g C& W2 @" l+ M2 S
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow20 [0 _3 u. G6 H/ X
其他常见发行版的 qcow2 文件下载地址(节选)8 J, E1 L, E# N% s3 d: t0 H
CentOS 7.9
% ? T- U; J; ^" a- N) H4 Y: ?CentOS 8.4
- q% P* x0 v5 o0 G) X0 t; [" Q1 xAlmaLinux 8 T' o% J' ^; D( ~1 D$ [- G1 S
Fedora 36( h- k. H+ g$ m) \" F
Debian 10( J( C$ \7 \* }3 m, }7 B
Debian 11
+ N. s/ ~- w% G( A6 U$ R- D$ ?' RUbuntu 18.04
9 w: S! U- ^0 i/ [4 N0 |- @Ubuntu 20.04& d- d9 e9 c6 s& ~* f3 c
Amazon Linux 2- b$ v6 @) \% ?7 C* ^4 A
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
. k) ?4 G s5 C I转换 qcow2 文件到 raw 文件3 H- Q z/ A6 i8 L0 K* J! s5 m2 x
- <pre class="prettyprint lang-bsh"><span class="pln">qemu</span><span class="pun">-</span><span class="pln">img convert </span><span class="pun">-</span><span class="pln">f qcow2 </span><span class="pun">-</span><span class="pln">O raw </span><span class="typ">Rocky</span><span class="pun">-</span><span class="lit">8</span><span class="pun">-</span><span class="typ">GenericCloud</span><span class="pun">.</span><span class="pln">latest</span><span class="pun">.</span><span class="pln">x86_64</span><span class="pun">.</span><span class="pln">qcow2 </span><span class="typ">Rocky8</span><span class="pun">.</span><span class="pln">raw</span></pre>
复制代码 ! z+ X, e) i; A* U
e; ?0 ~3 o3 |3 z使用 losetup 将 raw 文件虚拟成块设备
4 `9 c7 U1 N2 T8 k, k- <pre class="prettyprint lang-bsh"><span class="pln">losetup </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">loop1 </span><span class="typ">Rocky8</span><span class="pun">.</span><span class="pln">raw</span></pre>
复制代码
" ^3 Y, _: N) B7 E, L6 D- W; g0 Y
/ ~! z ^ I! U使用 kpartx 挂载虚拟文件系统3 m" Z$ }) F% x) ?+ x
- <pre class="prettyprint lang-bsh"><span class="pln">kpartx </span><span class="pun">-</span><span class="pln">a </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">loop1</span></pre>
复制代码
' o- y: P- q/ ?; r
) v: V# v( Z# `3 x" R使用 fdisk 查看挂载的分区情况& y% T& q0 ~7 P; |; u1 N
- <pre class="prettyprint lang-bsh"><span class="pln">fdisk </span><span class="pun">-</span><span class="pln">l </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">loop1</span></pre>
复制代码 & Z/ R' k8 T8 v
1 F: `& Z2 u1 x4 v* K; G返回如下信息
# e* |9 Q% c( D* _4 G/ `+ j- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
) l/ F% J% k0 e- T! |8 t; i - Units: sectors of 1 * 512 = 512 bytes
/ y9 _$ T- A! i1 O' O2 ^- D - Sector size (logical/physical): 512 bytes / 512 bytes
8 Q3 ]' A& N( p$ P - I/O size (minimum/optimal): 512 bytes / 512 bytes f3 G9 d( M5 q) |
- Disklabel type: dos
5 Z7 U# g$ H* P; e3 J - Disk identifier: 0x2cc9c27e
; i, V2 f ^7 r5 ~" G. u$ y4 X" |- H2 ^
9 [2 L( z S( S3 D- Device Boot Start End Sectors Size Id Type
$ @$ w4 Z1 X" j& k3 H0 T( y* I - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
3 G2 A! O+ x, n* R1 j2 ~$ `1 N! m9 L) s
6 e! @0 K& q7 R+ L- c& D, m S5 q) P此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。, W2 ^8 p/ `& g9 h1 ]5 C% Q5 C
挂载块设备到本机路径& L$ w- R; ?5 C7 F; I: I0 E# ?) F
- mount /dev/mapper/loop1p1 /mnt
复制代码
# w8 \# E' o- Z# i
- M0 X" e, i# {& m: r! F, k
" A4 B* r5 h& b! I8 R进入挂载点 /mnt,查看文件4 f; l. P* u' p4 s* Q
* \! e6 a# T/ t5 N" }
- cd /mnt
% ~1 O6 v# z& g, {; o6 X - ls -la
复制代码 2 B4 L3 q* K& n- L
# e# D. H, m2 _9 [2 ?* p
返回如下信息- total 162 n: }. ^5 j$ C W k' I
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .; @8 O- G/ \$ c3 F+ @* n9 Y
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
; g& Y' K$ {% I ` - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
2 \1 @! C# F/ P/ W7 q - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot- o+ h, W4 E* _1 [9 L/ B9 ~' ]0 E E
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
/ O( M2 p) S/ p: i) u( X) ]4 l - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc1 t: w. y0 h- |$ S+ Z- q
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
/ ~/ N0 p q. u+ Q* m$ h5 s - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
4 G+ _' x1 M5 Q* m' ^ K - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib648 X, f) Y: h6 X
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
3 g+ t% ]- A5 u: Y - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt2 h1 W$ }8 U! x2 H
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
# t4 s/ o. t( X3 {% [, H* K - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
8 ]0 N1 w1 C- g% s3 F) V - dr-xr-x---. 2 root root 114 Nov 15 03:47 root! A, o4 C& ~, [ a, j1 s3 W
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
" _' f- M% _7 l6 [1 p. n9 F3 F - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
' _! ? k; Z) ~2 O - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
4 y/ Q2 H% j7 \- H1 y - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
1 S. k! h% F: w2 h; S8 H - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
9 s$ J. u) P& @. Z$ f - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr
3 q+ |& h* N0 E) w, @5 Y& B - drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
- n; k6 R, {/ r( Y$ p! [- tar zcf /root/rootfs.tar.gz *
复制代码
* P) |2 Q+ A; d查看打包后的文件,确认文件存在,大小一般是在几百 MB
) c6 U" m5 j6 ^2 g- ll -h /root/rootfs.tar.gz
复制代码 ( }, u8 e' H: R B) R
至此,Rocky Linux 8 的文件系统基本上就制作完成了。3 i) L4 {; F1 ?" ]
& v l0 Z. ]1 |' V! d9 f& ^0 d' }
) q" b4 g, w% X ]/ z3. 后续卸载挂载点7 p J. I$ S( q7 Y& r! [
- cd ~
, s4 u3 g8 f( [! B" Z; ~$ R - umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统- E! T6 f7 c2 s5 w* ?! g' Q
6 y! v7 b) w# y# B5 P
使用 losetup 卸载虚拟块设备0 H c/ L4 J5 X, z8 X5 @
& K2 X( e1 w6 p: y3 G: X$ p0 Y1 ?# p
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。5 e' R) H# r' y
项目地址:https://github.com/yuk7/wsldl0 g$ f7 D, U5 L' ?3 L
下载最新版 Release 的 icons.zip 文件. R' Q2 X1 A ^1 n* X# v6 Q
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
7 U: n! |9 P3 p% p O$ A% d$ j7 W3 `) J: v- _$ j' }# F
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
: _9 Y; ^; I: C( ^) E) U* G- I# s( `, T% J3 p
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》' D+ V8 b/ z4 Q0 X+ @
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。- x/ h* m! ^. Q& J# U; z, ^
$ s! G6 v% T0 i% N& d6 e5. 已制作好的 Linux 发行版下载链接如下:% P7 C% p/ M+ s! j
CentOS 7.9
0 K( U4 J( B5 e* u0 |CentOS 8.4
5 P3 M& r( J; B3 g' mFedora 35. `* d3 f8 M6 B* Y& y
Fedora 366 p8 x* j! J& p8 B! H/ }
AlmaLinux 84 G: M3 M9 m1 @4 H
AlmaLinux 9 ]- R2 o4 P$ q5 a
Rocky Linux 8.50 m0 n: I7 R5 w3 _* F* O
Alpine 3.15
6 S1 B/ | A% u: P9 j$ {Ubuntu 18.04
; e$ `# r/ z t# E4 DUbuntu 20.04% _5 A0 t1 S! |( D
Ubuntu 22.04/ ]" i) `/ U& T* P9 }2 E8 c3 D& E
Debian 10
! U Y0 g5 @) [3 ?6 BDebian 11
& R- h0 r1 b% e. f7 r" I$ C3 KAmazon Linux 2
: K& d9 [6 w% W4 N/ T. |! R0 s2 U
- @$ Q m1 N5 L5 m9 i2 F$ Z |
|