|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
Z+ x9 s) N5 N5 \4 i' V. ?如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。1 g& x- }8 }+ z' K ]
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
$ |9 ~6 U& ^+ \# S# n微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。% }4 l1 L, b2 D% t0 T
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。: a" m3 f+ Z1 H, P `( I6 G
- Q1 T: q; j* E V! k下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
& j' N2 H/ b8 L- z! ]1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:2 C- G/ S" _/ \/ H" M/ ?
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
. S- P/ Q7 O) a) Q其他常见发行版的 qcow2 文件下载地址(节选). h! r/ G8 N3 f# B) g! \0 \
CentOS 7.90 h- J& Q. S: w2 f9 o5 a* v$ \+ @! l
CentOS 8.4
* r$ y! Y# C, UAlmaLinux 8% G: e Y# w2 a# e8 Q) ?
Fedora 36
" d7 d5 S2 M4 }; Y6 k+ U4 B9 k8 }Debian 10
" ~% u( B, R: W) i1 C6 f5 tDebian 11/ X3 }2 _( I+ L- k0 G
Ubuntu 18.04
; k: V9 ]$ R& H9 H1 XUbuntu 20.04
7 H# X5 o. ^, Z+ F& N0 b4 }Amazon Linux 2
" _, c8 `7 D4 E5 J; |1 F s2 _2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
. i6 B7 g0 V: B% V转换 qcow2 文件到 raw 文件
1 l) V% m: }& [5 w' f3 J4 c- <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>
复制代码 " \) C, a( p) Y1 H' {
+ ?! r1 P: v* r! }
使用 losetup 将 raw 文件虚拟成块设备4 T# ?0 \2 ]* A% U: Z+ ?
- <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>
复制代码
W$ ]- ^+ [) _& o2 ^3 P7 R5 u# @+ k$ W$ E0 H
使用 kpartx 挂载虚拟文件系统
( }3 |% Z- l4 \4 L" M8 N% N( Z- <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>
复制代码 ' |/ ~% F4 t. y4 d2 o1 o, W
& t6 U9 p; V! P. N9 E使用 fdisk 查看挂载的分区情况
3 w9 l3 `% Q8 E3 ^9 U2 _: L- <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>
复制代码 0 h" |, f$ N0 Y( q9 Y8 d
0 @. Y; \/ t% z9 D" f* @
返回如下信息
/ {4 r5 Y; F! \, ~+ G4 X- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
7 l9 R7 r' ~1 [# Z$ W8 j - Units: sectors of 1 * 512 = 512 bytes* ?. g: _. P" ~0 ~
- Sector size (logical/physical): 512 bytes / 512 bytes
3 n% s4 `$ ^! J! |; O+ W* O - I/O size (minimum/optimal): 512 bytes / 512 bytes
6 v% G% s0 O+ r' y( w; e( X* [% @ - Disklabel type: dos
8 K3 j7 }8 Z7 Z9 r. L, h9 O) y* L D - Disk identifier: 0x2cc9c27e9 [4 P+ q3 V3 v: @" \! Q& I
- * h2 ^6 s: x' o: b8 v" M
- Device Boot Start End Sectors Size Id Type
* L' q& ` {2 n* Q1 o' h7 ^ - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
; Q" R4 k0 c) H& V4 _) l8 K( k6 j4 A- _- V5 I- w
$ s( F' b2 k4 ^# T3 `此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
7 x F8 f7 t+ w9 S0 A: F- s+ I- S挂载块设备到本机路径/ e' b' }3 o+ n$ V, x S- c
- mount /dev/mapper/loop1p1 /mnt
复制代码 ( j7 w8 g O% V$ L& O* m
. @2 o( _7 R7 |, E
( e4 h+ _6 ]1 r9 n
进入挂载点 /mnt,查看文件
# J% W# s8 ?5 x2 n N2 l7 x
2 }. Y2 A+ p1 ^3 J# @- cd /mnt
" G! v0 n! J0 g/ `& m - ls -la
复制代码
# F0 e; E. ]+ ?1 D# [9 ?& c! Y9 t n+ N6 a! t
返回如下信息- total 16& l Z2 m' k' j; ^# \) u4 X7 {
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .3 j3 J8 e/ f) p/ J9 l% {7 F( J _
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..: v; i+ h# Y2 s1 D& C1 X
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin- d. Q2 m3 z2 h7 D( L
- dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
! w s" c- Z. U3 v% @7 w - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev1 o, ^. I h8 h% w1 Q9 ~ _9 @: }
- drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc5 I- M7 k/ I" _% Z" Q; U7 O& w* [. A
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home2 H8 ]# F! O; a% P1 [8 J& {
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib9 f$ I l8 k7 A1 n$ B; B
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64. V; o0 i8 c, Y7 i# P, ?4 c7 _
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media \# h' w9 Q( z: x2 x" U e+ F
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
( _1 [0 L. ?( D2 A2 W - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
3 x7 B- N3 D* f1 O - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc: ?: H& B% O ~
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root
! z/ u( _/ {( C* S - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run+ C$ J( q- j( w0 B3 h; E, P
- lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
4 u7 r5 _/ }. s' n2 ~# A - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
" `, K5 a [& K3 d5 F4 H# n" W8 e - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys) f% g9 Z3 h- e2 @1 a
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp/ P0 E* C) Q, H( y( z% u
- drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr0 q# H; p7 g1 I0 J
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root7 R7 ~/ e4 |; N3 z% f" q
- tar zcf /root/rootfs.tar.gz *
复制代码
" K* L5 `. `6 Y5 u查看打包后的文件,确认文件存在,大小一般是在几百 MB
, z6 _$ `) A# u4 F$ A1 Q/ \/ S- ll -h /root/rootfs.tar.gz
复制代码 - n9 P- x& u4 X" O
至此,Rocky Linux 8 的文件系统基本上就制作完成了。% N+ R5 i* T- V5 B* I; r2 T5 Q; V
, J8 e$ D# X0 v3 o* d) t
) V W) F; N' K5 K7 l% ^8 I c
3. 后续卸载挂载点, J) J1 Z0 M7 ^8 H$ F* z# n
- cd ~
O1 }8 G9 m2 L$ K) H; ~ - umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统% {' m# h0 a1 ~( o# H: J
3 c. s/ Q9 O4 t% i使用 losetup 卸载虚拟块设备
6 d. E8 j* K" x/ }" c+ U; ]9 F: g# h) O5 T- ~/ k) l
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
) a5 ?2 v H& m项目地址:https://github.com/yuk7/wsldl0 I, S. z8 M1 t9 ?6 ?! D3 N6 Q! X$ G
下载最新版 Release 的 icons.zip 文件( H8 t# y2 P" |. |
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
7 H, ^- o4 j: k
" f9 F% O0 G' Q! s/ u找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
/ U4 T& p! a1 E% G6 Q8 K6 O& s . _8 a% B+ d- R' o) |+ X0 b! b
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
, |3 R9 ^9 X( E+ I c4 {其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
: @5 s- r6 l) I: Y
, A! S ?' f3 Y/ e9 }% }5. 已制作好的 Linux 发行版下载链接如下:
( A% S$ G3 f1 ^ {- I. D8 y" DCentOS 7.9/ q# \, j4 h# g+ x5 h$ @$ s2 c w
CentOS 8.4
2 j2 }& p+ z, q; H, e YFedora 35
/ ?: f! z% G3 g; b W% x* HFedora 36* u+ O% g; j/ x; f' a3 }0 X1 p
AlmaLinux 8+ c! C% z# @) R' R7 Z" I+ Y
AlmaLinux 9( C* G( Q7 V4 s, w0 d' n- @
Rocky Linux 8.5
+ j0 C+ D* G, B9 }* s1 D: RAlpine 3.15
2 a) n. Q) k4 d0 k: z; QUbuntu 18.04/ ]0 U! R' b( E: y
Ubuntu 20.045 A' F$ w* I$ r1 s( x+ D5 n" G) t
Ubuntu 22.048 }! v* Q j; A
Debian 10
7 y! p' _7 x: U3 C+ F4 {- |Debian 11
. \, _0 R& c) r6 U) D3 AAmazon Linux 2" L# ?! {% n! I( l+ O* G# a8 c
0 r' d d# d" b8 [- q% _# w |
|