|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。# U. i/ i/ G/ L$ H( G
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。5 F5 T. ^* T% T$ C3 E( U& s
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
% t3 u* d0 [4 K# ]; i微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。) _5 a; |; {/ W P% N, u
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。- B/ s; Q0 k/ j7 {9 S7 d q% |
$ x: [$ q2 u9 I$ k1 t( a下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
# W, L p' Y' {" n- E1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
+ U G7 x/ N$ S. [https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
5 b+ q c5 p. m' P$ v# m, \其他常见发行版的 qcow2 文件下载地址(节选)
7 ~5 t4 V; U- W& bCentOS 7.9& z) x0 x( r0 E: e6 A
CentOS 8.4
: h% l6 [; b' _! l- [! H2 X0 AAlmaLinux 8
3 Z) U3 K, d7 cFedora 36+ @, g: [! h/ N! X, ?
Debian 102 o1 D% E2 @' O* `0 J
Debian 11
% h' [* W7 _/ ^ d; W: gUbuntu 18.04
* o. Y- }+ ]9 U) L% u; Q$ YUbuntu 20.04
+ }% V! W$ K! x: GAmazon Linux 2
+ D# \& ]1 k3 @5 p2 l2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
; w& I0 Z6 h( z/ u% L- [- L- B转换 qcow2 文件到 raw 文件
; H3 Y+ Z( z+ b" B3 l- <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>
复制代码
/ e1 L8 b2 D' F
! `8 [- a# s# y+ c使用 losetup 将 raw 文件虚拟成块设备 |8 D4 W2 m9 ?$ [% y H0 ^3 s: n
- <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>
复制代码 0 ~) y1 p7 @) y: i5 v
# k3 ~6 P9 }4 x5 b; V" K
使用 kpartx 挂载虚拟文件系统
3 t" P6 O+ {) }- ?- <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>
复制代码 ; S. ^" x/ _* C6 G6 i
1 h( X7 t' g* K9 A2 k使用 fdisk 查看挂载的分区情况
' @ O+ [; N5 C0 u/ g. g( n- <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>
复制代码 + E" W0 M$ T: F8 X
9 L7 ~& K/ t# f( C返回如下信息$ _* [! }6 d( p. q
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors; K# Z* T; l' j, u) o" ? h
- Units: sectors of 1 * 512 = 512 bytes
8 F( N' p; e1 x- @2 J; I0 j - Sector size (logical/physical): 512 bytes / 512 bytes' @6 x( [5 G$ O2 Y: m% z' O* @
- I/O size (minimum/optimal): 512 bytes / 512 bytes
8 S; V Y4 k! ^1 N$ | - Disklabel type: dos
; v, }1 @& K/ K - Disk identifier: 0x2cc9c27e2 e" w7 j' ]1 I9 q* L6 p5 G
6 E% |. i7 L0 x D8 k) V. z- Device Boot Start End Sectors Size Id Type
, b0 d* z- m9 x6 A- J: Z5 _ - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
+ ]8 `3 f6 \, A. m* w8 g
6 w1 ?% M1 W. p( c( W5 {4 J7 @
0 i5 L9 B1 \( _& M+ S- }- w- V此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
# t$ b5 ^4 W# R) Y挂载块设备到本机路径
/ P! x, b3 L) r! t. T- mount /dev/mapper/loop1p1 /mnt
复制代码
! [# e v. q, C1 e- O9 k- E' a) @( P& u- N9 l/ ?; D
; p( G. e, v; q7 ?
进入挂载点 /mnt,查看文件( m" X e! R+ T/ |1 A4 j
* Y: b7 Z f5 Q9 m& ^6 ]6 b
- cd /mnt
5 j2 T% f/ g; f6 M; C. D! b - ls -la
复制代码 ' b1 w* P' C0 J% a4 q. c+ R
5 C/ O; g5 b1 \% Q0 p- G, D返回如下信息- total 16
% W- N# S& b0 Z/ z3 o% _0 Y - dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
2 [! n: r Y3 @2 |2 y - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..: l$ U8 `( H- J" D
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
# k; x! F8 x! V, p+ w; q/ t - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot( u$ y0 {2 {1 y) I9 \! o: V6 v
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
: W6 Y& o* f( w- y: z4 f' w# h) o - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
6 H& e- n8 P3 i# @4 g" Y, Q - drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
3 M1 d$ B/ U5 f7 ] - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib/ j0 M) M. ~! ?, @7 P
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib649 S7 I5 |. D) d+ T2 i; `, ~
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
I1 y& ] y3 t - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
6 @5 N6 x; V1 [" M - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt6 S2 M: V' d) `) p; H8 _: o r$ N
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc3 B% `/ H7 \2 r! P2 W5 M( o+ N
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root
) R c9 E2 ^ f: j! { ^. X# I) m - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run& ? P1 n0 J/ r, g( {
- lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin+ s3 x6 t* p2 @
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv4 Z# D) ^, a4 j
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys8 a9 t' g$ s. V9 H ?: l
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
+ P, M/ t; U1 ]. d' `$ Q - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr4 U" I8 @0 Y1 f5 B
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root
1 b) W; [. v4 K5 ^8 C- tar zcf /root/rootfs.tar.gz *
复制代码 # t1 f/ I- y* S# G6 l. }
查看打包后的文件,确认文件存在,大小一般是在几百 MB # N, d: R$ x5 c- \0 f5 J
- ll -h /root/rootfs.tar.gz
复制代码
" x' R8 u4 s5 y, i5 H9 b至此,Rocky Linux 8 的文件系统基本上就制作完成了。( p' A1 {+ a$ n1 |( Q) S- d
( e9 r. z7 u ]! \* N& E1 ]6 R+ Z
& `2 o# ~$ \" }: B
3. 后续卸载挂载点
6 y: ~0 ~8 T0 }# c5 F% \- cd ~
1 Z! T5 |/ h$ d- G - umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统" ?* {2 e8 G; J/ G' @) Y* \
9 Y4 [1 ]1 P4 \) M* _' r
使用 losetup 卸载虚拟块设备5 t% T9 P# g3 F$ A2 H: H; Y2 R$ J! t
- F/ f3 H8 I& P* a. n4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
4 O5 A3 w k& L( l项目地址:https://github.com/yuk7/wsldl
! C( a, Z) a; v下载最新版 Release 的 icons.zip 文件) `& G$ q& y; B& {$ f6 g5 G
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
, G0 Q# w8 z% a& X0 D! z 6 g* Q: F4 Y: a8 k7 n; z
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
# r: H& Y7 H, K ^# W ( ]7 \9 H" @" |2 W1 B! n0 j8 {- U
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
, U+ c) @8 d( d7 S" [. d; R9 x其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
. j% H# \' I* \* N. B: K6 g+ ^9 ^0 Z: R! T: [3 M. V/ a( B
5. 已制作好的 Linux 发行版下载链接如下:/ J7 f1 e7 o& o8 h( k
CentOS 7.99 \; \1 m9 M1 V% y# ?
CentOS 8.43 `) v4 W" l; J5 Q' I; v
Fedora 35
) n( c3 D+ }8 x. s ^) Z0 iFedora 36
+ u; `8 M6 D& X$ uAlmaLinux 8
1 ]. F* X r7 FAlmaLinux 98 F3 m$ w* D' V; Q0 d* P8 g; m
Rocky Linux 8.5! M* ?8 X# I3 n v h/ h
Alpine 3.152 j0 l0 @! h- ~9 _9 I5 N
Ubuntu 18.043 @5 ]9 W( c/ y0 v) S- S4 b
Ubuntu 20.04
' j% P2 p5 \7 e3 K( bUbuntu 22.04
* ^7 k0 u. {" N# m1 N- N% NDebian 10) m: ~: b9 p. j' u* Y
Debian 115 P- C1 J( o1 Z$ d: ?- S
Amazon Linux 2
( P- a( W. s3 g* x9 J$ O
1 v* R% H/ n6 R' r( o |
|