|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
- f7 }3 p' q" V- f/ z如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
1 J y$ f1 H: H3 h4 |# SMicrosoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
" b+ A8 M! _" q6 ]微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。# a5 u2 O: g) l& ~9 z* [ a
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。. B7 G8 {8 L! `7 s# j
8 M h7 F- D/ |- j9 B% B
下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
& @, ~9 }) E4 ^3 c) r6 P' ^7 E1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
8 y. t- ~9 W8 b6 F* Rhttps://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
8 H7 H4 j) ~ ~3 X$ O7 U. m( u7 M其他常见发行版的 qcow2 文件下载地址(节选)
3 A: k, n$ M5 wCentOS 7.9
1 |( W2 z; h% H& N: _4 tCentOS 8.4
% R9 R e8 H: S6 vAlmaLinux 8
+ ]# T1 z" R/ S) ~0 V3 i6 B5 hFedora 36, f X- r7 K t3 x0 F
Debian 10
4 y2 Q7 ?$ ~! Y) @Debian 11
: F. c( M4 q& N0 t/ v( u' d; KUbuntu 18.046 h1 f) \/ b/ N! F+ ], K+ J: e" l, A. `' T
Ubuntu 20.04
# b! J4 D' x" n: f0 JAmazon Linux 2
9 G+ ]4 h- o( A* Z* l2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
1 R2 I/ r! `* j* i; s转换 qcow2 文件到 raw 文件
" _* L: X; W& G, O0 b; } l a- <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>
复制代码
! V. H# @9 v1 a+ i9 }6 m4 C) \' D5 ]% q/ z; j9 R) _- f+ ?/ k
使用 losetup 将 raw 文件虚拟成块设备- K8 \4 `( r. d/ _
- <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# j+ F+ p- y& x" C# n/ r ~& d
使用 kpartx 挂载虚拟文件系统7 b4 V" `# l) m6 [- @1 ^, p
- <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>
复制代码 8 k) J+ a4 K! F5 C
% ~! V% O* y8 E* |使用 fdisk 查看挂载的分区情况
- J( H& d5 x$ A% |, [- <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 @- l2 V& T( z
" ^! M9 C6 Z& E0 ~# U: j
返回如下信息 w2 i4 |4 f3 Q8 C7 \0 W
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors* s' l/ m# w- t& L8 P
- Units: sectors of 1 * 512 = 512 bytes) S$ J7 g* r: T4 O' ] n6 u" f, x
- Sector size (logical/physical): 512 bytes / 512 bytes
2 C' h7 A! L+ D7 K% ?9 ^ - I/O size (minimum/optimal): 512 bytes / 512 bytes
( u* @1 I- y. I% Q0 d7 G2 ^* V - Disklabel type: dos
5 |) k: c/ @7 J - Disk identifier: 0x2cc9c27e" c4 U- `* q0 x
, M2 _% j2 j: R* h- Device Boot Start End Sectors Size Id Type
; M2 @) x" l# T0 y - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码 . }: r) \+ S& p7 B
" \8 M* b1 d" `* ~& g1 t( e" K
/ f* U6 l e( w8 J
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。4 U( w6 N& [( t, g) o! r/ M% H; }% \9 B
挂载块设备到本机路径
/ V5 z/ Q8 C$ x7 Z1 G& l N- mount /dev/mapper/loop1p1 /mnt
复制代码
7 t [# P+ c8 V d/ ^
$ l4 |. `% d: b2 j
/ b1 ^0 B2 @& O' A; ^% I$ `/ R2 K进入挂载点 /mnt,查看文件) c- f+ B( ?: ]) M3 A3 l
2 c9 v' d! t- y M- cd /mnt
; @1 o. k6 R0 {* l8 k; I1 ? - ls -la
复制代码
6 _, I7 P# N6 A/ r) f: R# G) l+ K o& B9 \1 k6 q9 ?
返回如下信息- total 16* e5 O. f2 W# P8 D6 ^$ f
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .( v/ e1 P+ ] N6 p4 I" b
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
, L8 g2 I4 ~* S$ ]6 Q - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin" A9 W1 F% j0 V# Z' m
- dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
% H. s9 F, b( D% A - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
9 Y& g0 S! R8 E0 Q - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
. W# u, s2 Y& {* {$ b - drwxr-xr-x. 2 root root 6 Oct 11 08:48 home. K! Y. L" @. t2 b' H- a Q- s
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib4 P2 P+ h* L: E* ~8 t! e8 h
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
. O- j! j1 q* \* O1 a% I1 N - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media% b: K! H; \9 q( p5 {7 g1 T0 l
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
$ k9 n& _/ I+ j6 H. E" A+ K1 w% c - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
; D% G2 |2 j n4 O - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
2 I( |: ^4 [! {! i# S - dr-xr-x---. 2 root root 114 Nov 15 03:47 root) {/ ^0 N' J5 d2 v
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
; B. g, I& e9 ]' s0 G1 R - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin, U( d7 E( v8 Y. @$ N
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
, O, _: y2 y, L8 f0 l - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys. a) }& ?" {4 q& N, y
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
8 M: W9 G% @9 m) J% ?/ F' t0 _ - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr
1 P8 @8 |# p7 G7 O# J - drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
7 [# m$ a3 @ m& x- tar zcf /root/rootfs.tar.gz *
复制代码 0 U, n" a; v u! W) S3 H1 o B
查看打包后的文件,确认文件存在,大小一般是在几百 MB
& j1 Q, L3 M# z7 |, e a6 V& B- ll -h /root/rootfs.tar.gz
复制代码 9 R8 s; ~) t& U/ W/ G
至此,Rocky Linux 8 的文件系统基本上就制作完成了。1 Y1 P5 c+ O( m! w5 A
[$ n+ ~7 _4 l7 S" n0 m
- f# d2 p( ?9 y/ x5 n# `" w3. 后续卸载挂载点: T! J" B" T" ^
- cd ~. ~$ ~+ ` j2 A% h( \& w
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统7 m& [3 B4 P& X& e9 P
$ ]: o- W4 @+ \8 s9 ^2 o6 I使用 losetup 卸载虚拟块设备
+ @6 Q: o5 z: X" O( N' D B/ j
7 E, w9 O: X. M V4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
& [6 `% e4 ^0 x% W, [. M. K项目地址:https://github.com/yuk7/wsldl
( l4 t+ u s% h下载最新版 Release 的 icons.zip 文件
1 `# O$ B( R- l) P/ c8 h解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:6 v5 B: C% Q( K2 g7 m" N

) N* o k y) B: b M% g找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
4 _' p. T7 d9 G9 E: D& \' H
1 H+ e8 K* v% o双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
! |$ u1 @% U5 ?9 j# i* N其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。0 S0 I# ?* C5 @+ G" u0 w7 v
9 a: F4 J! l; B. [' [& n
5. 已制作好的 Linux 发行版下载链接如下:. i, L" Q7 J. J4 i9 }
CentOS 7.9
# F4 W" p7 ]9 e4 Q5 B. i fCentOS 8.4% X5 ]9 W9 ?. p2 m+ Z/ s
Fedora 357 A$ h' [# d4 Q* b" |6 u3 w
Fedora 36
, j& Q7 w7 n& Q& YAlmaLinux 8
& Z7 h) m L+ n6 wAlmaLinux 93 W4 Z# K U3 P( u: m
Rocky Linux 8.5
/ i. F1 k. k! [Alpine 3.15
0 o9 B& {( |3 K) U3 o1 {* f2 M8 R3 zUbuntu 18.04
6 U/ Y# K6 k- ~% _7 i! x' OUbuntu 20.04
, B2 k0 i1 z8 n% ^/ r0 f j; r7 sUbuntu 22.04* @1 f6 k' Y$ B0 L4 j8 |! E2 X
Debian 103 `: q' L4 r+ I# L L( I; |
Debian 11" x8 P$ c$ w+ U
Amazon Linux 24 n! y2 I% s+ A9 A" F$ R7 n# n
! v: Z4 F' D! k4 b) x |
|