|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
% Y0 n7 _4 j! A* \2 B如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。" L4 m; Y) [2 M$ q# }* ?
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。% Y% u! g0 E2 `* e) d
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。5 n# m4 s+ K) k& r4 @, s
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。: n+ t i2 |9 d5 P6 U$ z
3 e j' Y, C. d- u" I& g
下面以 Rocky Linux 8 作为示例,介绍具体制作过程。$ F# X( ]5 ^( {& F1 Q/ H& U, |6 f- A$ h
1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
) S6 X# I B) R9 uhttps://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
& W) d6 f; `2 k# M其他常见发行版的 qcow2 文件下载地址(节选)
. k/ o# e7 @, }* c+ R7 nCentOS 7.9
% G# h0 h, j! ^8 e, ]( l8 f# _( C' f {CentOS 8.4" c0 l; `' |- w
AlmaLinux 8
$ e% H" s; V" M+ z0 VFedora 36 e, Y5 r5 q; v1 w, E" [$ [" P9 d) ^
Debian 10$ n0 e, b8 L9 e. l) Z+ H
Debian 113 h0 z9 l3 Q0 @% Q4 ^3 N0 d2 Y
Ubuntu 18.049 j6 a2 A- @) ?4 w' A% X
Ubuntu 20.04" U5 L/ v- Z& ]" E) ^( Y' d% w- W
Amazon Linux 2/ o9 a R% z- ]) q. M3 t @ J, i
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。/ T/ r! S! }, ^% L5 j1 q. C
转换 qcow2 文件到 raw 文件6 w7 Y, e& @# i, y9 p4 D
- <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>
复制代码 / m" q/ `) O, d& {
" [' Y% Y( y4 `6 K使用 losetup 将 raw 文件虚拟成块设备
+ {' E8 ?- {- p8 ]' j4 \- <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>
复制代码 7 k# W& ^* Q- ^/ l
" u! X$ x' p. a& L" \& [$ ]( ~使用 kpartx 挂载虚拟文件系统, S9 x2 g. c* H/ n6 G r }
- <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>
复制代码
2 L# i% \1 x n: ?8 x5 m3 {$ i ?5 `/ f# I6 z" W. m5 [
使用 fdisk 查看挂载的分区情况. o0 j( f2 V5 @9 Z: x
- <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>
复制代码 R6 L2 \2 P# v, Z+ Q% C
) z( A6 e- l6 M+ `7 Q返回如下信息1 d0 D- l. }4 S% T; _0 h# O8 ]
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
6 v t' Y6 O" c+ r8 H" b - Units: sectors of 1 * 512 = 512 bytes8 B) n5 @( x, }
- Sector size (logical/physical): 512 bytes / 512 bytes9 E; H, `4 d' G6 S
- I/O size (minimum/optimal): 512 bytes / 512 bytes$ i8 f3 t+ c: Y9 e3 ~" C
- Disklabel type: dos$ z/ p4 B6 a+ @; k; Y; t
- Disk identifier: 0x2cc9c27e* t) q- G) s- h; x7 U
+ D8 ~' I; Z. S' p) A- Device Boot Start End Sectors Size Id Type
7 N4 q7 F' Z) v6 W, e- T0 R - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
6 \$ t% R* e8 b5 d3 W; [0 j$ F2 g. s) O8 D' a3 }
5 J* X2 Y3 |$ a' o+ [
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
, F" o( D; w$ q4 ]6 ?挂载块设备到本机路径
$ e: y. B" N4 H( c3 _7 K- mount /dev/mapper/loop1p1 /mnt
复制代码
% a; a2 i7 c1 n7 M& R1 U0 r' a6 F4 ^ r2 O3 g! ]! H
2 L( y) D k! d进入挂载点 /mnt,查看文件
8 q/ s0 s- [* p* y1 m( o+ b. H5 ~7 ?# a. @0 t' \9 J$ o
- cd /mnt) Z8 \6 [0 T% Z, ]. D$ l' u
- ls -la
复制代码
6 c$ ^+ q; w& ^. c, J2 S6 [; R1 b" u9 ^/ r2 a9 N
返回如下信息- total 16% Z* t( ]; L5 u
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 . e+ C& r% }$ p" Z F5 I
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
, R8 D" M8 n. H( h: l( U - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
7 Q3 b5 ?1 C2 S5 b# ^7 m - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot# I4 j, ?2 \* Q
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
) g# h$ f4 h1 V" a - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
4 E9 l2 S( p, |9 a7 m - drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
" P- \! ^3 t& ]/ ` - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib* t( x- O) F( Z5 W" T1 O4 U, w2 v
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
$ | ^: H1 ~+ C9 Q - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media+ ^4 V3 b2 [7 Y/ u+ [. x2 k
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt0 v5 v/ p4 j2 }* a6 C
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
+ f+ p e) u2 y, G - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
) k8 d8 ~$ o: W, [" ]2 M - dr-xr-x---. 2 root root 114 Nov 15 03:47 root
: o- Z* B0 q ~/ d - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
" G; p' k- A& B$ P - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
! a" W0 q) ?5 `" F0 Q/ i - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv. i9 E( O9 T1 y
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys3 w- X% M* Q2 [5 {" d
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
3 P$ l2 u* H. n* d8 @ - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr
+ Q! C8 ?+ Y7 Y* @5 Y - drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root" w, Q6 J" o; b" ?) X. N2 B5 X4 h' j
- tar zcf /root/rootfs.tar.gz *
复制代码 8 E( ~( ]) y% P# ~, w/ `- \+ a4 ~$ A6 C
查看打包后的文件,确认文件存在,大小一般是在几百 MB ( @$ b& t9 Z; u+ ?) Z" O
- ll -h /root/rootfs.tar.gz
复制代码
3 [0 X# d% O( {至此,Rocky Linux 8 的文件系统基本上就制作完成了。) J* ?$ c$ c' c% V7 I1 q$ y
- e( J3 q/ l7 h1 t0 f4 |
, j2 e4 I& ?! u3. 后续卸载挂载点* j5 O) A5 H: I+ [9 d; G
- cd ~) {. g5 S( ?1 W0 M V9 a
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
* P1 ?6 Y* u% T' o. H# m
R0 z( w+ R# z* Y9 b( u使用 losetup 卸载虚拟块设备5 r X2 R+ k. V+ |5 a
. N' A5 s& V& z% B' @, L% s/ I
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
+ N0 H& N4 \) V" O+ j5 T+ D项目地址:https://github.com/yuk7/wsldl
; X2 o; Z) T$ |3 R& s下载最新版 Release 的 icons.zip 文件: k% p; ^& b1 n, ^
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:0 i$ E' D/ V# d: W

. w) U I2 d% D4 K4 q# m找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
& T1 N# d7 a: D* I4 p& F; P 9 h, Z) }) s% O6 X6 L7 W" b
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
3 J7 B" a' c6 E其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
! p7 I1 J7 ~: o3 n% S( W. a8 d, U$ k, d. X' i0 I b) _, J3 I \
5. 已制作好的 Linux 发行版下载链接如下:& H2 W) q$ A5 q" R4 J W$ @1 j! l
CentOS 7.9
+ Z% ~6 v9 A1 [& Q2 mCentOS 8.4
, A# A3 n) e/ i D# K, n; E) WFedora 35* i: Y+ D% p% K# R
Fedora 36
4 F0 M/ s' O$ k& z7 BAlmaLinux 8
8 T( z" [9 n" j! x+ G& JAlmaLinux 9
; e8 R$ f2 n# g# i- g; I0 n/ R) fRocky Linux 8.5 e# y0 F+ F; Z) ~2 J& e
Alpine 3.15. Z5 o# ^5 I) Z3 d, j! N, [1 `# g# h
Ubuntu 18.04
* B$ Z3 g) v/ W- g) |' GUbuntu 20.040 u, r. e* r9 |$ i* ?
Ubuntu 22.04
+ x6 S6 [5 u! z; a. F+ ?Debian 10. K# K$ f0 B+ o, j
Debian 11
6 t. Z4 a% u2 S) g+ u" NAmazon Linux 28 [ K, h! Z) P3 E7 J" q" n
" m: N" A. K* {, K+ |8 r |
|