|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。; B- u U( c' k, h
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
1 A+ z7 f; g! \# MMicrosoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
8 B9 T5 D |8 Q) x" y+ }9 W' ]微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
7 q, a% W! B* _! L1 V. a) G$ g0 e( T本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。6 T- L! o" z6 P& g/ t
I* W/ [ u2 T- _下面以 Rocky Linux 8 作为示例,介绍具体制作过程。- Y% p+ s4 z; x7 Z+ i5 w) x3 F
1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:% I# j$ H0 ]4 j \
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow25 G5 o8 q0 D/ d+ o
其他常见发行版的 qcow2 文件下载地址(节选)
& {5 v* ^6 D e# r8 \5 sCentOS 7.9
3 U6 k. G* L4 MCentOS 8.4
9 {8 m: G/ b# ]: M9 V) V! dAlmaLinux 8
( J( w; L8 w7 _2 `" l+ Y7 T0 q* _+ zFedora 362 \- k. P+ g5 R: \$ m
Debian 10
7 H/ G3 s4 J" \6 H: z( QDebian 11
% M6 |# r- g, o! ?Ubuntu 18.044 ^2 w/ k6 S8 q' e- W0 U. y( {
Ubuntu 20.04
) T" V8 l! Q! d9 k4 a$ I' j! A8 HAmazon Linux 2) n* k! e N; C3 S& S8 N2 |
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
- u5 e5 Y; [; T d5 I$ K2 P转换 qcow2 文件到 raw 文件
w# e. d8 B& g$ L ^& \4 w- <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>
复制代码 $ R. f* n- ]* C! U6 E
8 y2 N" b4 M/ I使用 losetup 将 raw 文件虚拟成块设备
/ p# t% d* ~- j6 m9 \+ G% n! u; h3 [- <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>
复制代码
+ v1 X( p9 r( _
: k, {& G/ Y$ W, }% ^+ p6 T! a使用 kpartx 挂载虚拟文件系统3 m; V1 Q, T' I5 ~* s/ ]. `* G6 O8 [
- <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>
复制代码 0 @4 n/ Y; Y9 X e8 Q/ s
& y$ [7 ~* b* ?& @: x4 X
使用 fdisk 查看挂载的分区情况2 e$ a, P* a6 l, @% N4 l) i
- <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>
复制代码 9 F4 G2 O) O- c7 m9 P' q+ Q
0 @% H" ~5 r" p# V1 s) a
返回如下信息+ Q g5 A1 a7 j2 W0 y; g; Y: |
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
& I( f( _6 `* S n2 E# c) J5 s - Units: sectors of 1 * 512 = 512 bytes) k8 X3 u! O6 \( C( p
- Sector size (logical/physical): 512 bytes / 512 bytes
0 T2 ~$ k% a/ Q6 W/ s% m - I/O size (minimum/optimal): 512 bytes / 512 bytes9 u- ~/ A! @$ I; Z5 l' f9 s8 v
- Disklabel type: dos
& |$ I7 k3 c3 d' r5 }& i - Disk identifier: 0x2cc9c27e
9 i* Z5 g8 }* F: g$ C% Q
, z1 Y1 E4 u4 E% M- Device Boot Start End Sectors Size Id Type
5 K+ J- o/ ?0 H& m( y2 q3 S - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码 4 V& D0 b5 D, O# X0 ?# ^$ \* c
" ^# E& Q/ G! q; S" i: s6 m
2 S: C( x! Y; l8 [* n/ K1 Y
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
1 K7 h% J A$ W/ Q8 V挂载块设备到本机路径) t( f& q+ B5 q4 C# z
- mount /dev/mapper/loop1p1 /mnt
复制代码
6 i6 v& Y' x f/ b7 q
( K+ o* ?% w [
' n; _, U7 Q$ k# |! k+ R# e进入挂载点 /mnt,查看文件
% J [# T/ h. A9 r* e8 I& U. @+ N* |: t6 L9 g
- cd /mnt
8 P2 N8 ^, d+ z$ F - ls -la
复制代码
+ [0 W% D6 l! k k% h% M+ {9 j! l. ?0 h/ I7 Q8 L
返回如下信息- total 16% a. [ M+ g! V
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
8 n/ L: h& q) P/ j( Z - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
: w; b+ D y( p. y m2 {; f; u, K - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin+ ]+ Z$ U) b- z( U2 J
- dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
- P3 x2 b3 K. W* P. T7 m - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
$ I7 h' Q0 G1 d' U! p - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc. i! e+ n8 J9 L+ @0 }% i0 `4 z/ q7 s! h
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home+ p( I l5 Z3 l+ V$ M5 J9 \/ m$ T% C
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
, v2 w' h4 ~2 E" S- v4 c p( R - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
. C1 I/ i# _+ o0 K! ^# d8 z% ? - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
! w9 K# t3 a, I: P3 P - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
# h0 A+ _& R$ l9 h1 U. z - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt! T: {/ t- n0 U8 A
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc! \* j( l" w3 c5 E6 ?8 j+ n! e
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root3 d: B7 u- a% T# l4 Z/ M; N
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
, W# r# n6 f) a) ?0 z) _6 Q - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin+ W3 T$ H$ I% a7 M, I6 G
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
# A7 u2 k6 {8 K* j M/ ^% h/ Y5 r - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
4 C8 J5 U- S5 i9 X6 b# F' N1 O - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
_4 M, _' E) `6 H7 C - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr' c5 {/ I& `* h% U
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
. J# Q" i) `2 }7 A& W- tar zcf /root/rootfs.tar.gz *
复制代码 ) I' \4 I: ?" k6 e& S: t3 ~
查看打包后的文件,确认文件存在,大小一般是在几百 MB
' D9 @5 x0 @- G T# Z* D; Y: e- ll -h /root/rootfs.tar.gz
复制代码
3 V& y0 G* Z. j3 B7 t6 g至此,Rocky Linux 8 的文件系统基本上就制作完成了。
# ]3 v: E% s% [% r; p* i) [- w7 ?, C
& ~% N. M* U7 l' U3 d& }' S
2 z5 [8 c- q9 p0 [: W1 J2 Y3. 后续卸载挂载点
% C: B. ^3 _( y/ i+ S3 i( p! u- cd ~0 q2 E' b. i7 s3 h" |
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
" O3 j2 p q4 @ X( ]% ~! e6 A
, O; [5 C; j3 T5 [* ]; H1 v+ i使用 losetup 卸载虚拟块设备1 H. o$ i. |; {& t0 _9 c2 X* ~ ~2 i( R
6 I# l& }' G( \& d
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
- I B) a v6 o( j9 Z项目地址:https://github.com/yuk7/wsldl4 C& g! Q5 E) ?1 ~
下载最新版 Release 的 icons.zip 文件0 k9 w, T# g9 Z7 V4 s4 `$ r
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:: x' l s6 I6 `. P1 a
$ v3 t7 A5 P$ `3 _: D3 V7 H( ]
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
6 j) h* g: l1 D0 ^. L& t, q
" j4 _. k6 u8 R双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》" E) @- x6 ~7 m, w
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。7 ~1 V# R5 I, Z$ ]& @
: ~+ a% U, p" f5. 已制作好的 Linux 发行版下载链接如下:
% `( u$ a2 f* gCentOS 7.92 A+ K4 a1 w6 z
CentOS 8.4
1 \6 ^' L7 Z" o7 x7 o. {Fedora 35
! H9 h& s: K2 F, ?3 O1 Y* p% LFedora 36! \! i' ^" s5 n I6 Y
AlmaLinux 8
8 I3 S& }4 E" |' l* |: l/ KAlmaLinux 9: ^1 ?, l* w. d, j* [: o0 |$ T9 J
Rocky Linux 8.5
- E3 c7 e/ F) l; e: j# K4 F) V% oAlpine 3.15
5 ?/ a& ~8 q* {( l9 g+ OUbuntu 18.04# y8 x. ~- M' D! D
Ubuntu 20.04
3 \ T8 z2 l1 B0 P# |7 ?Ubuntu 22.04. b8 v- J4 m+ E& p
Debian 103 k+ {4 D; }* J8 W$ O _
Debian 11
3 G6 O( u: N) o {# |4 }Amazon Linux 25 C7 v b- `' f: i' W9 g% O
5 w, t. `5 e5 O4 o9 V% y |
|