|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
9 ~0 l5 l) H$ A9 p8 U# x如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。% K* \* F3 i3 I& m* w0 f1 f: u
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。8 W3 h1 q/ m9 h, u6 ^" F
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
1 m# Q: \# Y( G, L5 G% U2 v本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。4 m* i4 X% H1 p0 R _+ Q2 e( O0 S
2 I- { T! {: a" `; I! e
下面以 Rocky Linux 8 作为示例,介绍具体制作过程。+ g6 F0 B. H+ }* q0 p" [* o% ^
1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:2 E3 ~8 a4 b( v4 r
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
; Z2 {, M# ~; `0 s其他常见发行版的 qcow2 文件下载地址(节选)
1 `8 y5 H0 {- f: G6 B$ MCentOS 7.9
( I+ H2 ~, t1 X7 W0 t- l, o- S' u4 MCentOS 8.4) v' g# S+ u) y9 C9 I$ j. n
AlmaLinux 80 e1 ~" t6 @$ \% Z0 ?2 R
Fedora 36
% ` x' L+ c" U1 d- ]& N3 DDebian 10
& G0 e2 M) N* a1 i# j8 \) m+ wDebian 11: b" r+ D+ K% @; T
Ubuntu 18.04
h' K0 L6 I7 x7 d5 `1 T& ~/ e4 UUbuntu 20.04
9 k+ y; u& _) b; B' s. qAmazon Linux 2
S" T. Q) M6 _* {" e1 V2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
9 w1 i9 Y5 V. c8 K转换 qcow2 文件到 raw 文件
8 I+ b2 `0 H1 d& H4 Q% B- <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>
复制代码
) x& L- H; P; k U) y' Y
: z7 E [! _7 k3 B2 R5 `使用 losetup 将 raw 文件虚拟成块设备
8 v. w3 K! x E F" b; K$ g* g- <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>
复制代码
9 k9 U" P6 m7 `9 E/ m( V* X. n# c9 R* R( v1 r& S7 D
使用 kpartx 挂载虚拟文件系统# Z4 ?: C6 b$ H
- <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>
复制代码
; f$ s7 ]# H5 W! c* Q. Q* F6 L+ q/ D' R$ R' K9 ]
使用 fdisk 查看挂载的分区情况
$ M, y+ K9 M, z- <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 w0 E6 ^/ Q$ V9 H( {; |6 w5 \# F! c, S o0 P
返回如下信息+ R4 X/ E" c) ^. S2 f
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
' Q9 T$ w+ R# |# ` - Units: sectors of 1 * 512 = 512 bytes
) s1 k V y: V6 h' M - Sector size (logical/physical): 512 bytes / 512 bytes( L0 |" q* u5 [) H# D3 F
- I/O size (minimum/optimal): 512 bytes / 512 bytes
% T8 `% Q- o: O) |1 |: c - Disklabel type: dos
- b# h* C; R2 w - Disk identifier: 0x2cc9c27e9 V. d6 ?+ Y/ {* j, X# I5 d: Q
- . Z* @; x- M- @' R
- Device Boot Start End Sectors Size Id Type4 T% x" ?1 O& T* u7 A
- /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码 ) J }' E0 a! S5 Y) T6 ^* ` q
8 L# O6 }4 p6 t: v9 f+ @8 P8 k2 W S1 O: T: p, s1 r, _
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。, X% v H( b3 _' U R8 Y" [2 |
挂载块设备到本机路径' ~; P" I0 e9 ^9 x7 w
- mount /dev/mapper/loop1p1 /mnt
复制代码 - Y- z( M, n( C0 S5 s" j
l$ x; J+ G( Z
6 I- m0 O1 ^/ z; x5 H+ Y2 t进入挂载点 /mnt,查看文件4 L7 s" Q& ~0 ?0 k$ p$ o
* l* {- q6 }6 n9 B" g- cd /mnt
" o* O9 e7 o" y4 W! f1 Z* v - ls -la
复制代码
8 ^0 J* ~- e6 A" t% {% t* R! Y% y
$ k+ E3 E! q/ F2 ?5 n( Q/ H" D: }返回如下信息- total 162 J0 e r# D0 h/ \1 ]8 [
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .8 u- ]+ m! O2 e7 @; B: F3 D
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
' o) k" c* N4 ?' B4 C/ u - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
' P# K* u' g/ l9 W+ f - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
0 o& O, {0 k* [* e7 G6 S5 n1 [ - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
2 O$ h+ F7 U* B9 `3 J2 C - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc: U! u# I6 b6 s! }
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
8 N2 h2 X4 |# b' e" W% b( q5 L0 H' t - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib# l" |9 C5 \. G: Y% w( d& R
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64! s/ L/ H: P7 a) g
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
* x( a4 t& t# @2 n% o - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
; Y) O4 m/ _ k+ l6 N3 N - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
; r }6 ] l9 |" T. e - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc6 H/ f& [. k7 x) q, _/ _5 J' @
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root5 K8 C& E* ?8 Y* b# I* g
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
6 M& N, s% q) o+ s/ n! Q; \' V+ u - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
% K/ [: @0 S) }2 \6 N A0 z ? - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
- I9 G! p" x9 f$ T - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
& I G1 u. T. x3 J% B - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp) S c7 L, E" o: D7 P
- drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr( x6 T$ ~% a' R' u5 n3 \
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root; r2 h( d- \; B( L. p
- tar zcf /root/rootfs.tar.gz *
复制代码
& u5 r+ w$ I, ?5 Q! `$ R查看打包后的文件,确认文件存在,大小一般是在几百 MB
2 {4 o9 J8 |1 R7 K4 S- ll -h /root/rootfs.tar.gz
复制代码 " \! w2 q$ T& U R
至此,Rocky Linux 8 的文件系统基本上就制作完成了。% E& P5 {& W, v# b+ G
- d% j/ T- F$ }1 r
8 Q- o& X: v( t1 \3. 后续卸载挂载点
& ]" t' `- ]6 M8 z% Q, u- cd ~! z. [/ V( F: J) G% v1 Z( \# _
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
2 n( C% N$ v0 x( h. ^. r
% \6 g1 v" u" s* P$ G使用 losetup 卸载虚拟块设备% W: x$ L6 z7 Z: o, }3 {
) h4 K9 x6 J0 X; j @7 H1 z" |4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
' L z+ C Y$ G' O7 i9 Q项目地址:https://github.com/yuk7/wsldl" a8 ]4 G" D: ]2 r& F/ v. e# C* j9 ?
下载最新版 Release 的 icons.zip 文件* J. A1 \2 e+ N. g9 }
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:1 G2 `5 m7 b! h% u% S! r
2 C d; g) L- {1 I0 G
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
8 V4 }/ c7 Z8 K" S; a$ R" Q& Y
9 c9 U1 u1 J$ C$ ?. M" R8 y! G双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》; ` G' L: G; |4 s/ U
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
7 N+ z) T5 q; x4 i4 d' C& z" {( I) y0 e# `& t$ X2 A
5. 已制作好的 Linux 发行版下载链接如下:% ?8 B2 n7 v' ?2 g; o# _
CentOS 7.9
0 {2 O% ` E" t9 d: }4 j7 l6 Z& ECentOS 8.40 O3 P4 W% d$ P0 p6 I8 g
Fedora 35+ p1 V4 E! ~- R- T
Fedora 36
' V. D* J$ ~9 s* n* \AlmaLinux 8( A3 s/ g$ v; y$ ~+ i
AlmaLinux 9
" m1 w4 F$ z6 p: R( C3 q5 SRocky Linux 8.5
1 ` c' Y3 ~8 b# D% zAlpine 3.158 r/ Z! Z' ]1 l5 J5 R0 O9 l- v
Ubuntu 18.04
( X% M- n3 p5 hUbuntu 20.04: `! b3 g2 X# A
Ubuntu 22.04
5 F4 x& z* T+ J- T( VDebian 104 G: U ~# p+ E) |( R& w
Debian 116 Y: w+ h- m3 ~) z+ X W; R3 f( }
Amazon Linux 2
, e2 T) Z% ^6 S: L1 E" O; o
! O) @: V2 m6 y. d5 r |
|