|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
' n6 a2 i2 Y* q如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。1 p* l( D8 B. s
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
! N% ?" W; S D2 }微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
2 y- p, @4 {; a4 r! k本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。
3 r' v' u. |, A- M
: a6 D- ]7 ?. @" C下面以 Rocky Linux 8 作为示例,介绍具体制作过程。2 _6 }1 p. Z" c1 c3 Z K- C9 J
1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
4 _. q6 Y) F) s$ Ghttps://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2! x+ K+ k* P! }
其他常见发行版的 qcow2 文件下载地址(节选). s+ D+ Y, l/ C
CentOS 7.9
+ ~5 x+ w; K! v$ \4 lCentOS 8.44 }, ?# ?7 T$ W% y
AlmaLinux 8. V" l- l/ H0 r. j/ ^
Fedora 36
! M/ D- r4 f- m7 P. e ADebian 10
* g& d( W/ F* e/ p+ tDebian 11/ u( d$ x$ ^* _
Ubuntu 18.04( s0 h' w m/ e3 z9 p: `3 Y
Ubuntu 20.040 W1 O* u3 {) `
Amazon Linux 2
2 `4 r4 g! d# B+ {2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。9 `" }% o3 L, f5 H/ Y% r8 v6 j4 C
转换 qcow2 文件到 raw 文件& I3 u s5 t7 t" V$ O7 ~
- <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>
复制代码
) s1 Z* m3 H" c4 M, O; k) p1 o2 h" h) I& Q, w; }
使用 losetup 将 raw 文件虚拟成块设备- |& P4 Q1 h/ X/ L! @
- <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>
复制代码
% p% \ v$ u( P) T% w
1 v2 R/ Z" o1 j p" n! {使用 kpartx 挂载虚拟文件系统( |8 A" K$ ?0 T, l: a: I) `
- <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>
复制代码
: J3 R0 s" }: k
/ z8 R# |, R3 e' v* L. i使用 fdisk 查看挂载的分区情况
! h- \3 q7 q, ~1 \5 b- <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>
复制代码 * b7 i$ G2 ~: b; b( \1 F: Q8 I
Y0 `' f; a, h8 }返回如下信息+ y: s9 ~9 N0 {2 a) b
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
- i/ ?: { ^+ g, U0 W - Units: sectors of 1 * 512 = 512 bytes
' Z, r; v# _* ?4 o; X( \ - Sector size (logical/physical): 512 bytes / 512 bytes
6 g* C* X% _' a9 Z0 R$ e - I/O size (minimum/optimal): 512 bytes / 512 bytes8 k e2 ?. Z5 Z, Q* U$ P( B$ y. e
- Disklabel type: dos5 G0 @3 a* T1 ]+ j/ d4 k
- Disk identifier: 0x2cc9c27e G7 F: n0 O5 w$ K2 r% x q
- # m% l- ^0 t: T& N
- Device Boot Start End Sectors Size Id Type
$ I, c! Z" Z( L. N9 `+ c, i - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码 - U6 L' ?! Z R- F
% ]4 D: `) o: }# w
' x& K" I7 o* x- H9 y此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。- [; I4 |. K( k4 ]- j
挂载块设备到本机路径
7 n6 L: a% M9 Y" C1 G) b8 Z/ f- I; A- mount /dev/mapper/loop1p1 /mnt
复制代码 $ q& t1 n5 A! L; I& E& k& I
; T+ O6 l: f' T. R( J
; b# w* m9 @. o! z; }) _
进入挂载点 /mnt,查看文件- s+ t5 M a( b! \, t! H: s
+ A' g6 ?, X" G# W- U
- cd /mnt
/ M8 P H% ~/ @* p2 M+ l. D2 n - ls -la
复制代码 7 b% @6 J- B4 O0 f: l4 `6 C
: q/ z- w% g3 m+ e" P- M返回如下信息- total 169 Z( L" |6 ^. i8 z% ~! e
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
! ^: @& y3 b4 v - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 .., u' G( ]: [/ \! J
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
1 H( V) w/ n) g! `3 a( g, E - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
" d( x: ^9 U" q$ C3 X3 l - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
8 _+ R$ S" `& h+ k( Y [% v - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc6 k4 J+ `" U" Z7 x& q# W
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home$ W) T& ?5 g. o. h) n9 Z+ E. j- v
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
8 e! f! |3 ^2 H5 s& n5 j R [ - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64- j# \/ i4 R+ p4 ]! n0 W
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media2 ?& N: w0 @% i8 n- x
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt& c e. ?" t8 ` Z* d+ M% U
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
# D6 z" z- y, b: [9 \ - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc$ X* Y4 ~3 o" M. w$ B
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root- U$ A% s9 i2 Q) N v# S) ^
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
; S4 O, r' Y7 q" @6 V2 p - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
( x$ J* i, L2 a( E+ n - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv0 v# K: Q' x# I3 D1 U' Y6 |* k
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
# P! D2 Z4 i. g# D$ R& I; K - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
; h# K7 K" H1 n) |( z5 { - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr1 ^8 d' Y. T( x+ R& ?+ A" d R
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
! M1 h/ U- `: O* v! ]- tar zcf /root/rootfs.tar.gz *
复制代码
8 `1 u6 F: q; h- U2 n查看打包后的文件,确认文件存在,大小一般是在几百 MB ) m2 R7 _# I" _( s! {; K
- ll -h /root/rootfs.tar.gz
复制代码
' Q, T) e$ O8 [6 g2 A4 E: W至此,Rocky Linux 8 的文件系统基本上就制作完成了。6 y- T& O4 X! y2 z
! I W3 r& C; O/ `4 P
8 k. A- l4 A, l3 F w( p3. 后续卸载挂载点
8 R0 d, A4 |; `" M- cd ~
' m1 F9 D5 h$ z- d- N - umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
; X2 X0 O4 |5 n5 N6 x k/ G# l9 _- z W/ f' D% t
使用 losetup 卸载虚拟块设备
3 M0 G& |4 J+ N' N7 i% P& b! @
7 `6 U: T- W _) r4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
$ H% c6 H t- Q) h项目地址:https://github.com/yuk7/wsldl
: s! v' U6 k2 o1 Q \下载最新版 Release 的 icons.zip 文件
6 ^ U& y- G W% q解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
5 ]( r" n; f7 H2 j; h* ^
4 J1 h# F1 c+ V+ D$ N& m! @1 x找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
6 B1 w: w, [! S: ^( w- d, K # n. {/ f) |# Z
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》8 P( d; b/ A7 F8 V
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。 ]) K& ]& C% H4 L9 _. E
7 i9 Z1 b( {" Z% Q7 q8 ?5. 已制作好的 Linux 发行版下载链接如下:* S' _% }' \# \4 N
CentOS 7.9
& E. z- Y2 [* a' kCentOS 8.4* h/ O; n( J2 g1 `0 H0 b. u
Fedora 35
$ z3 n6 V8 o4 {& Y4 UFedora 36( W" F0 T, D: y0 e* _6 x- p5 z
AlmaLinux 8
8 @$ M/ {/ S) }# h& E/ e- x% b. @AlmaLinux 9
5 c. @. e3 ] |0 a$ VRocky Linux 8.5. ?8 \( B7 [$ y- E* j# B* d
Alpine 3.15
1 u' u* q$ P. kUbuntu 18.04" o" F% p8 m1 E$ G7 H% a- m
Ubuntu 20.04; W& ?: R& [; D
Ubuntu 22.04# t, z7 t- |( @1 @7 b+ j4 O
Debian 109 N0 o v3 g* v$ i% r# t/ }
Debian 11" F* n8 w( z3 g
Amazon Linux 2. S) @) j+ Q9 s
5 Y/ ^. e% h7 J; p
|
|