|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
3 E7 K0 z6 m. N7 Y$ I" l如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
) V# b) n0 C {& O" \Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。) G0 @# ~- @; g/ R$ z
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。 e) V6 V) [9 v2 [, X1 r, B% ^
本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。
. T' ~9 l: A/ O( v
9 d) E, }' R& q下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
% ^; x0 t- S/ J K* l1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
' @( s, Q0 J$ y9 khttps://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
3 o; }" v; m: R% i9 y0 ]0 }! y6 R其他常见发行版的 qcow2 文件下载地址(节选)% L7 v4 M6 |4 S0 O9 X, K& w( r
CentOS 7.9
5 y' t0 p5 J! |; \1 B; k ?/ e+ E2 v8 z4 X8 @CentOS 8.49 x6 }+ q* a* X# ~. m+ J
AlmaLinux 8% g1 k. p" Q) x
Fedora 36 c/ u1 Z) q; Y* [9 ~- Z- v3 H
Debian 102 i( m) {! `6 V
Debian 11
$ q0 n8 F5 z; u: c! \, dUbuntu 18.04
. n) r/ F* t! }4 |# H, SUbuntu 20.04$ @3 S/ }, ^/ n. t! R
Amazon Linux 2: c- @ l4 F) O. m9 _2 S
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。4 z! Y. V! |# K7 H6 m. `
转换 qcow2 文件到 raw 文件6 Z1 i- m0 C/ q' v
- <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>
复制代码 $ l; ?. X+ L. b [0 q
$ [8 l% y! L- X' c& s7 O使用 losetup 将 raw 文件虚拟成块设备
) l) w1 G7 ~6 }4 Z+ z$ F- <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>
复制代码 % w& V# }; J" `
* k# u8 U! |( f$ H! z' B使用 kpartx 挂载虚拟文件系统
& G6 ^+ r) f* f' |* D. X/ D- <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>
复制代码 3 @% `& p$ z d- A2 o% L
0 P+ B5 k% M8 o6 l5 D
使用 fdisk 查看挂载的分区情况
9 P2 ^# D6 V- k* @6 K" 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>
复制代码
- E/ E) @' ?8 d, T+ d! ]" F- L3 l7 V. P3 S7 u# I d) W1 b
返回如下信息
' Q! K+ @/ k3 k j Y6 a- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors3 ]+ I5 r# `$ N g3 T% v
- Units: sectors of 1 * 512 = 512 bytes
$ k: c- j- o9 p( y$ [5 b4 @( z - Sector size (logical/physical): 512 bytes / 512 bytes0 a8 ]; C) B9 H! F& B
- I/O size (minimum/optimal): 512 bytes / 512 bytes
7 t8 l' c2 J7 R; k - Disklabel type: dos; H& _: I- z+ k& i
- Disk identifier: 0x2cc9c27e
9 N. D+ F$ O5 _: }, D: O% [ - 3 r- r& A+ ?0 D7 @" [; [
- Device Boot Start End Sectors Size Id Type
5 d* W4 P: R, U - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
. {6 U7 a" A& O6 A& @2 R- a5 Q7 m1 a; U+ S6 B
$ @8 {4 H5 ~6 `; }4 p% J; }& z1 n, C
此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。" }% |4 Q/ H9 T9 s5 Y; ^
挂载块设备到本机路径
8 z9 ^' G/ y& o7 a, x- mount /dev/mapper/loop1p1 /mnt
复制代码
: u3 p" K, s; I, \( I/ j/ c, F! @' j9 ?( a, E0 x0 o5 Q, u
. F6 p, @- h4 d J0 f
进入挂载点 /mnt,查看文件2 k* A+ B3 T. o$ C
" A* E8 }4 T- Y/ R# Q; e
- cd /mnt+ V6 W# M. ]0 n7 g G
- ls -la
复制代码 * i# J; Z$ r; b! s/ B( M6 i/ r
! g" k0 ?0 o2 c- [! q' `7 M
返回如下信息- total 169 }5 s; M9 j' y# ~. |
- dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
' x5 c# O6 m" E1 S/ F - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..% U2 H+ ?* g0 j2 @: Y8 p
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
% Z8 d2 U" ]; k7 \ - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
; B- f: E/ t5 g% G+ w) J& t - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev6 H {5 B& U- o7 ?/ N- ~6 x- [$ U
- drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc6 v! i0 |. }( C" f2 a5 p2 A4 [
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
8 p5 W% P. D- j, a" N& t+ H5 ` - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib1 p2 z' m$ b3 z3 U' ?; }/ R
- lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
( u. g4 [$ s5 w$ Y* |8 P! `# W - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
' N- Z w7 \3 p/ ~' z9 q" } - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
# e' F. d& ?- L$ |5 j - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt5 x4 E2 d+ M0 h% ~ z3 o$ H/ v0 _
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
/ l) x5 s: X- [% c# q - dr-xr-x---. 2 root root 114 Nov 15 03:47 root
: l. ?" b7 n7 R4 ~ k - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
+ q. \' D# ^% C - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin! {4 `. W$ r. L+ X8 z
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv+ A V% L' D# u( l
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys" h8 b& i# q0 O: R9 |! f+ {
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp
6 L$ E& W% [5 p e: ]" P! ` - drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr3 h$ T( B/ y3 t6 ^
- drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root* T9 S, e9 ~% Z
- tar zcf /root/rootfs.tar.gz *
复制代码
9 \5 @+ r: v' Q# y3 F查看打包后的文件,确认文件存在,大小一般是在几百 MB - V$ i& j" m$ }* m9 b& k4 {
- ll -h /root/rootfs.tar.gz
复制代码 ( U& N# T' B0 N" C
至此,Rocky Linux 8 的文件系统基本上就制作完成了。
/ M& s! p) d$ o# A! ~$ ^$ V" Y0 U6 N3 s! r8 G) i }$ H- X* o+ u
1 Y# ?5 V0 t6 x" n& [, f0 _: P# N
3. 后续卸载挂载点
) _ u9 T0 e2 p$ t- ?; Z- cd ~2 Z* [9 R; T1 c
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统+ E$ R: e: R N0 \
6 Z6 E4 H( Q" f9 I* {
使用 losetup 卸载虚拟块设备1 D! ~) v: \3 m( {7 Q9 U% D
0 u7 W! m% |$ u5 E5 C
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
+ n( L, g% D0 q" r! [: Q6 W0 {项目地址:https://github.com/yuk7/wsldl( D2 X8 b J5 q
下载最新版 Release 的 icons.zip 文件* K3 Q. p K W' ]# S4 l; Q
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
: |7 Z h0 i+ `/ t' P 4 ?3 }& s6 c) v) g, v( Z( }: m
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。& E; t$ j& ~$ ^4 L# [
/ X6 Q& _0 e. e% N2 }
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》, Y4 L5 @6 L, Z' L ?0 D
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
) W6 C1 K, F% P; z* |3 j6 O# z
- Y0 B* j! U+ y! B: z% \5. 已制作好的 Linux 发行版下载链接如下:; g3 }$ o9 X6 T- E
CentOS 7.9- {( n* o F: |# R1 `. S
CentOS 8.4
% i, \6 H' _6 |( mFedora 35$ K+ X9 I- ?7 Z, y) c1 B0 |5 _6 p0 ^, B
Fedora 36' z2 @% d q( Z* Z2 h8 B0 T
AlmaLinux 8; `# P/ _4 u# H6 j; A9 v0 Z* \1 J& Z
AlmaLinux 9
6 @2 N1 _/ ?" x4 i! r# |! y# D0 sRocky Linux 8.5+ l" B/ [: B: Y- [
Alpine 3.15
7 d! g% D! a6 T9 b7 n+ W4 mUbuntu 18.04' u x2 t6 n$ a5 ]' ?
Ubuntu 20.049 |9 ~ @! w" }$ l) t
Ubuntu 22.04" L, n1 ]8 I2 d
Debian 10
$ P+ l9 `2 W, n6 I8 ?* {2 fDebian 11
5 g& R' d9 D3 p2 I: v, KAmazon Linux 2# A4 _% }6 n" z+ Y" ]" B, P
. x# Z4 l. p3 y' f8 R, ^, i! X. f
|
|