|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。 w4 x+ z$ q' X5 n+ \
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
7 Q2 {- d$ b* n6 ~: |$ C2 lMicrosoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
2 l" `! r! ?* C- U" W7 C微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。 \% H1 g. v* x* z0 D3 G E( U+ t
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。/ ~0 o, O3 R. H7 i
4 @) Y+ ^& c' j3 a下面以 Rocky Linux 8 作为示例,介绍具体制作过程。+ v3 \3 H! v+ Q' h: }
1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
) J5 C5 X- p6 D' T ?https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2! e" h3 B2 y& {' q) b: d8 I, b
其他常见发行版的 qcow2 文件下载地址(节选)
4 f" D- I# U9 P# FCentOS 7.9) i& J! K- M% x! l- {
CentOS 8.4. i! L! Z" E) J3 L) P, D
AlmaLinux 88 F" N. @2 `: C6 }8 W
Fedora 367 T8 [% |: @0 C
Debian 10
9 f% O; y$ w3 b* F" U# JDebian 11. A/ b' B% K5 v: V
Ubuntu 18.04/ b: a! K& e5 {) d i" W! `% o7 h# g
Ubuntu 20.04+ u6 G$ X1 m6 c) `
Amazon Linux 2! g/ x b. F- C, b& `
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。8 P" N* X1 K, N; V
转换 qcow2 文件到 raw 文件/ f# T$ S: X0 n! ]6 A8 H, I4 K% y
- <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>
复制代码 # A% o% Z2 u9 ^: x- w* I
5 \6 C8 c: ?1 y0 P1 P6 o& g9 f. R
使用 losetup 将 raw 文件虚拟成块设备& n/ f$ A5 [" M- J- x4 o+ J& @
- <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>
复制代码 # h2 ~/ H Q7 g
5 \. X1 U- U2 W$ V0 D" ]/ j使用 kpartx 挂载虚拟文件系统
( A: O7 {6 L: _( M- <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>
复制代码
- M/ i* n8 T; S2 d0 R4 E% b3 y7 |& S8 ^
使用 fdisk 查看挂载的分区情况
/ U* ~7 n- y! U- <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. Q0 d3 J# R1 {2 Z
+ v. N/ v: H# r' [0 Y返回如下信息( ~& V' E& U7 d( r: F& x+ O0 o
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors9 k9 I: g0 l. U* x
- Units: sectors of 1 * 512 = 512 bytes
: v& S% `" Y" ]$ |0 B - Sector size (logical/physical): 512 bytes / 512 bytes# z, s" J- o, E1 }8 s
- I/O size (minimum/optimal): 512 bytes / 512 bytes
2 x% t4 ]+ X! Z( I% b - Disklabel type: dos
; h& H9 U9 m7 G+ P - Disk identifier: 0x2cc9c27e
# M+ U* U: t% z. k# b
8 g7 g0 k) F4 |2 f! ^- Device Boot Start End Sectors Size Id Type& l) B8 ^7 D: \& I& e
- /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码 4 S+ I0 i& v' b) Z& |( K. s+ y! }
9 ^7 h# K8 i( e1 q. m
1 y# r" q& A2 y! N+ n, y7 X
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
! ~, D* D0 ]2 ^- z9 b- t挂载块设备到本机路径* t; Q1 Q2 `8 U! O, Z% r; ~
- mount /dev/mapper/loop1p1 /mnt
复制代码
" p/ C' M! P+ c* w! p/ q! }0 s9 I& s. ~
f6 r/ T* T0 ?+ D2 L, y进入挂载点 /mnt,查看文件( S P9 ?* ]6 @# ]! h
, s. M' G" i+ p3 S( r2 U8 P5 M- b3 M, j
- cd /mnt
/ m w6 r% _- M+ a1 z - ls -la
复制代码 7 Z9 t6 g5 S/ B# y* C0 ~5 N E3 h
* U6 y# ~4 U! V4 @! k, Z
返回如下信息- total 16
3 Y# D- I7 \* t% T$ Y4 b) N - dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
, F+ X2 B+ z" ^5 g+ e S* c - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
) q3 m' [! O; l' @, P8 O5 y - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
# D: H% T# X- s/ D A - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot! @0 [5 k7 Y+ X% |* _8 }% S
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev! a H6 ^" J# h! L$ B. @9 d U) t
- drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc5 I1 S4 c) ?/ e; ]$ j6 h# h
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
! p7 K3 D' a g" q - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
; V& F4 `8 e: x0 Y - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
. t ~- s, f3 @4 ]8 E7 f - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media6 `4 b: {4 @- i1 p& X# u/ F3 J% c
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt0 E* k3 Y, [2 t' E2 l, g) G
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt8 W# z4 u; y; \7 F1 g8 m$ g1 d# |
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
6 }: Z$ m" P- B9 y" ~9 H4 x+ P) { - dr-xr-x---. 2 root root 114 Nov 15 03:47 root
' F# h) \7 ` I - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
3 ?% a& _8 m8 t0 k( J - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin$ I7 u$ ?. W" V' A$ D3 ?3 y
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
. V3 t6 I# d9 Z) I; d - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
. v* @! b3 s+ k5 T" T+ N$ W - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp3 k1 Q0 D# [' w& U
- drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr3 L; X+ O8 [ e; J
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
) r) T/ B( W: x, K- tar zcf /root/rootfs.tar.gz *
复制代码
: `0 r+ R1 y1 Q) D# n$ ]查看打包后的文件,确认文件存在,大小一般是在几百 MB
8 k# W& s+ B' T- B- ll -h /root/rootfs.tar.gz
复制代码 " ?9 ^& @- }4 G" Q, j; y, o
至此,Rocky Linux 8 的文件系统基本上就制作完成了。
. O) C1 w: s) m
8 }, E( s- r; o: O) g. Z; N1 V2 G8 v. b/ \* m! q* g
3. 后续卸载挂载点
, E! v% q7 [: w6 ~# T- cd ~
) ^4 [/ K) D1 Y0 y, t2 f - umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
5 s* L! d& W- x& A' ?; w1 \! g) \/ M3 E3 v3 K
使用 losetup 卸载虚拟块设备) u+ }% Y) p0 n! y! n1 E8 z: N
- w; [& ]; n- B% X3 x: W$ v4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
! g$ Z5 y, }. m9 c0 W6 `4 B1 ^% B项目地址:https://github.com/yuk7/wsldl) h7 M$ s, I2 h5 d* l* [
下载最新版 Release 的 icons.zip 文件0 c6 |9 C( Z" k4 U! Y8 ~
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:' }3 Z! ~7 q! t- i

: k0 p5 G5 C1 ?找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。& j$ K& R/ d! o

! i: u1 F* e9 a- p8 _; Y双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
4 n4 O2 Z7 i4 U7 H其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
6 i; y$ }+ m1 o$ P. d8 k% R6 r4 F
% ?( R) ?7 L4 r4 ?, q5 v2 @5. 已制作好的 Linux 发行版下载链接如下:. ?& `! _9 B6 T9 w( ~
CentOS 7.9
6 p7 d8 F/ [5 d Y: oCentOS 8.4
( A, S* i: ]9 aFedora 356 D/ `* t5 y& M. u! c
Fedora 36
+ ?$ A8 _' i' U* D; J! B6 zAlmaLinux 8! S9 _1 l' Q0 d1 j
AlmaLinux 9
5 t D" ~ r1 r/ j2 C/ i% KRocky Linux 8.5
# I/ n: _1 L* A k$ aAlpine 3.15
5 O- V& O* m2 m$ s; O. tUbuntu 18.04, X. x. }8 B( p6 |+ ~* V8 [
Ubuntu 20.04
6 B4 ~. \ f7 ~+ aUbuntu 22.044 D% T3 L1 i9 \
Debian 10
: f2 H4 H. c: A9 ?+ R4 J2 n" ~Debian 11# u' z$ H9 m/ r
Amazon Linux 21 x& W8 P7 q8 p
1 S6 }, @1 e' |$ U |
|