|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。, y0 V. f4 y$ o& q, p
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。) l) {6 F5 w* K f4 Z3 U$ l4 j
Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。; P. C& h) X/ I# y: P
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
( f3 @1 K! w# c1 K8 _8 l+ h: I4 Q本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。
1 D' \" {# `9 L, \: h3 X% R" }) q# Y3 ~. ?" t+ U( r I X3 |% f
下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
" W2 H( x. i/ m. O c" Q2 {1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:8 ] U Q. w% ]% v8 m
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2; H# s* \6 b4 a; [
其他常见发行版的 qcow2 文件下载地址(节选)
1 J6 d# E) o5 H2 H. [! H' s# g& pCentOS 7.9, M( l, d: U, h* R0 n. G- l/ y
CentOS 8.4* X( @3 z8 G' D' ^% A. z
AlmaLinux 87 H3 B$ w# N- X& ^
Fedora 36' _+ N8 u }7 G
Debian 10
2 }* T! z p- I0 `% b! ?: K9 uDebian 11
f3 J5 `2 q. g/ v, n+ s* P2 q; N6 QUbuntu 18.04
+ u2 o3 @; X# [! F9 O) f- ZUbuntu 20.04
7 P2 R. x- d- fAmazon Linux 2, ~5 \5 c& q% D9 V
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。/ E9 y5 U& s1 |2 _8 T: s
转换 qcow2 文件到 raw 文件
3 Q* V' O% c* r0 c- <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>
复制代码 7 v( Q% u# ~2 _ @; i
3 K2 |0 G: |6 \" N
使用 losetup 将 raw 文件虚拟成块设备2 V9 _9 |5 J/ p# R. u1 X# Z2 J, B
- <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>
复制代码
' [. Q1 J4 h+ y, J! u. t$ k. n1 \1 g. K$ @* f2 i3 `
使用 kpartx 挂载虚拟文件系统
* A* P" _/ r) j5 a; U9 b# r- <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 v8 N3 _. S. j& X# o
9 z, L- E P4 Q2 S! z7 [使用 fdisk 查看挂载的分区情况
, v2 M n! Z5 u9 r- N4 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>
复制代码
3 n. a2 D# y+ x4 V4 m6 W" Z! T5 ?8 X' y% n! j
返回如下信息
' N9 x. J. i6 S8 q3 z. Q2 v& ^- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
3 B3 `) o9 H7 H1 E/ m7 e% ] - Units: sectors of 1 * 512 = 512 bytes* [; V+ ~6 `, `" C+ w! ~
- Sector size (logical/physical): 512 bytes / 512 bytes
! ]) D5 }' T6 r! S. p) G @5 l - I/O size (minimum/optimal): 512 bytes / 512 bytes
- m6 I) I0 Q# c& V% i - Disklabel type: dos5 X3 }* l4 D7 s
- Disk identifier: 0x2cc9c27e5 K' r H& E6 n$ ^& H3 H$ ]
- ; W4 _6 K- m; q( ?/ w" |5 p
- Device Boot Start End Sectors Size Id Type0 h8 x# j1 n' H( c. p& F u
- /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
4 r, Z7 X# P, M: P: D& ~: Z C& ?8 g3 I
: f$ M" A* O: J此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。
; a) f- F) c- R% _挂载块设备到本机路径$ d3 I$ d' B, z2 a/ K2 m
- mount /dev/mapper/loop1p1 /mnt
复制代码 3 W% ] Q" L5 w9 h, t
5 y5 {/ Y1 H$ M. Q/ e% U% t4 A
进入挂载点 /mnt,查看文件
/ d1 L# d9 Z1 G# Q# H( i8 ~: T( t3 {
- cd /mnt
3 R6 {% v0 }- j; a0 i9 W7 b - ls -la
复制代码
# N+ M$ j8 @* W7 H% ~( q5 k1 ] s+ v) c! ?- V0 `5 e
返回如下信息- total 16
4 c1 c; l# I( N - dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
2 d! }5 h- v) C; L - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
) _+ p% G2 D/ X) c& c9 U, G - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
1 n3 N+ _3 M. ^3 b$ @ - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
8 {; q' q8 Z2 r* X) C7 u2 T - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev) q J8 n; _8 S$ [ d) V
- drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc. Y; r6 R4 }* \+ [# f, d" e2 a
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
& S5 l1 o1 q# N( d/ F, O - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib4 S. o5 L# I8 V6 a
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
3 C |8 E! V2 e' A. ]* [& v/ h - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media* p5 N$ }# \3 z' P/ y6 u$ C
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt- L- W' q& ]2 N9 i/ N3 Z2 Z: C x
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
! b( b+ L' Y3 F- i6 ? - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
s0 Z3 B4 ^' r+ @ - dr-xr-x---. 2 root root 114 Nov 15 03:47 root" i2 K6 R. Y+ m% @) G
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run9 f( b$ k/ B$ G5 S
- lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin* N, j, F8 v4 `2 j$ w1 r7 J7 X
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv" |5 G2 x! ]8 {0 |" Y
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
/ e5 J$ H( G, t9 k$ w0 Z" ]6 Z - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
5 |+ K6 W+ Y/ }! C) k - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr5 B& P8 E! E& U. H& s
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root6 i" h& w: h% l3 l& K
- tar zcf /root/rootfs.tar.gz *
复制代码
( [ m, j7 @- \4 W- M. M4 v! f查看打包后的文件,确认文件存在,大小一般是在几百 MB ) v) ^) m1 Q6 o" u+ N+ e
- ll -h /root/rootfs.tar.gz
复制代码
! C3 Z5 s6 V- k1 J g# h3 j至此,Rocky Linux 8 的文件系统基本上就制作完成了。
* j" y* h" W( F- ^0 g# G
0 q9 Z1 ~' d% h) A* R$ m& ]. P( l: l8 c/ v. g7 x, U( T* ]
3. 后续卸载挂载点
# n4 h# l9 ~/ J- cd ~% o0 x* N+ `2 [% q2 w
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
, V. f% t) O" O0 J7 L1 r' j/ l4 [; r( v0 o6 H P3 ]+ M; U# v( t5 ~, ?
使用 losetup 卸载虚拟块设备3 W6 B/ d N! B0 R2 D9 P: k/ O
0 R/ N0 C5 ~3 C/ R2 j# y4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
5 J h; {) |: a# C. X; \项目地址:https://github.com/yuk7/wsldl, f' c: n8 q; d; {/ u: z
下载最新版 Release 的 icons.zip 文件/ G2 f, x; H" X; |
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
8 V! i$ D2 C& E) Y. k . T! J; A( t0 v F3 T
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
$ S3 S7 l) x7 K$ {; ~3 j6 n
' o& c1 e6 f% B; }双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》5 ~5 _* T7 m1 H
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。& E% p+ j( T8 J# e4 U
( J, W: K* y, n
5. 已制作好的 Linux 发行版下载链接如下:
' l/ S; j5 y8 D. b: w% H) bCentOS 7.9# i1 n5 Q8 y8 X. _3 Y& l
CentOS 8.4
% v( _) k. _) A5 R- UFedora 356 [0 {3 g+ S6 Z, J" y M( T) q
Fedora 36$ ?: ?" o* O1 {% h
AlmaLinux 8% w2 l" d n' W/ T* M
AlmaLinux 9( o$ _; R5 R& z9 _9 A; P: _& T
Rocky Linux 8.5
( m+ ^8 H, b0 q8 g3 NAlpine 3.15
! i/ q1 D9 p: `2 GUbuntu 18.043 H+ O1 O; _8 i$ @
Ubuntu 20.04
6 x/ \; F9 {! }; j+ dUbuntu 22.04- g& T- i! L% j+ P5 M" U
Debian 10
3 w( f9 O2 F7 L( R: y" bDebian 118 n: v1 [8 `) ~( C& h. ^/ ]! T! u
Amazon Linux 2. \1 k. o2 i: V" H+ D
; R4 ~% L0 A6 f0 C |
|