|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。
5 a! u) U" Y/ t如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
$ P9 h0 h) R" m% g2 [Microsoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。* Y3 D+ ]3 K( l6 `% M0 ~: C
微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
7 G* P: {) y5 Y/ o本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。( _$ q1 j0 d' x2 a) h
/ {/ s% `8 \6 \) X2 I" p下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
( {2 S2 j' Q9 |# ^$ z1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:
0 B* W/ s) }& X' i3 g6 rhttps://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2% A1 G6 A1 o: X/ w
其他常见发行版的 qcow2 文件下载地址(节选)
5 Z) d3 h8 R- n- ~CentOS 7.93 t7 U( u m0 H0 t$ ?! y
CentOS 8.4
. S/ q# Y+ x L8 H/ pAlmaLinux 8* i( K h) ^% s+ Q' N9 ^
Fedora 36% n& ~$ h% n) Q% j% c
Debian 10
0 A! G7 u1 f% PDebian 11
5 {2 X% R0 { O1 h7 C6 q1 w7 G& cUbuntu 18.04, b" t/ w+ U3 o$ i+ L# C4 w
Ubuntu 20.04# x# `. @6 d1 a# V7 O& z
Amazon Linux 27 K, Y" H3 p2 @4 c$ r
2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。
6 U% V0 w) \7 X: O8 a t转换 qcow2 文件到 raw 文件' ?0 H' t/ A$ s
- <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>
复制代码 ) _' s, p! {; l; N. ]
. k1 P* ]4 \! H4 t* c使用 losetup 将 raw 文件虚拟成块设备# V1 g3 O0 `+ [ Z2 o$ C
- <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>
复制代码
/ i" F' i6 J V- r
7 T, H3 Y+ ~: L* C! [/ S使用 kpartx 挂载虚拟文件系统
$ _: E; v U5 ?7 Z/ L/ u- <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>
复制代码 * T" c* w9 T: Z6 x, K4 o* H1 h
. V" H1 y: K7 j! S9 h$ P1 a使用 fdisk 查看挂载的分区情况
, p9 e6 A7 Q( C n. w3 t2 r3 `7 H- <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>
复制代码
/ Q+ i, @4 w5 e+ w
/ T& o" q, |+ f; s+ E6 e返回如下信息# U8 V. A+ {' [( v6 U
- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors
5 Y& {4 x0 u/ s' Q6 B - Units: sectors of 1 * 512 = 512 bytes
7 l9 ]+ Q! ^+ Q! r* U8 V - Sector size (logical/physical): 512 bytes / 512 bytes
- h, }* y+ l; I8 a - I/O size (minimum/optimal): 512 bytes / 512 bytes
! ?. t+ E- y* N' _2 K - Disklabel type: dos
& m, _( a* c' b, S6 U* T7 s3 ~ - Disk identifier: 0x2cc9c27e
6 h' ^& V+ ?! _
3 `; E) A. ^, r3 q1 C1 C- Device Boot Start End Sectors Size Id Type5 Z3 k: U/ p3 {! `; D
- /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
9 ^. L- w) d+ n, N7 ]# b7 _0 v! X0 r5 p+ C' A" J; ^2 h8 q! @
0 e; F7 B3 D5 H1 @3 r此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。) g P* X# K5 n* P9 `
挂载块设备到本机路径- D* N3 x( Q- v" ^/ y( c* I
- mount /dev/mapper/loop1p1 /mnt
复制代码
# `$ z8 H0 c' u3 l( v$ R9 E q! R0 n) T6 V7 X
; o- P A! R2 L( k- N7 i9 E7 W' P7 ^进入挂载点 /mnt,查看文件
! R, Z* G' b5 u5 ?: u
$ o( R4 |( G: G9 z2 F- cd /mnt
& F! [8 N2 r* m6 ?- H - ls -la
复制代码 , S- F5 |4 u* U8 E" m% F6 E! J0 F
; ^5 q/ T' t- D- e1 ]返回如下信息- total 16
! M4 ? y2 R1 H: e' V - dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .# ~ G" W/ t" n
- dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..5 @+ h# ?3 b) }* r; l
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
; y% M$ ?; O& h C7 |9 @ - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot
+ X; A0 Q! w. R8 x9 s - drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev1 O9 E9 h( J) Z: n
- drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
' W) L) g8 @1 G' y ~ - drwxr-xr-x. 2 root root 6 Oct 11 08:48 home9 E( t$ Y% ^# m9 X1 b% A# }! I/ `
- lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
. x" u! y0 W& A2 f2 s0 J/ W7 r - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64
& H4 |& @ {9 v - drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
+ {; u# c8 `0 ]9 K( C3 s - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt
/ a$ o1 e5 a& U5 D5 H6 v) c0 P7 ] - drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt& Q Z6 @+ z6 O; b$ e0 {+ ^
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc1 K% l1 j" h% ^5 u: Y# W" ~$ B
- dr-xr-x---. 2 root root 114 Nov 15 03:47 root* y8 H7 K8 s7 G
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
+ U# C: D0 B& j! N" |! `% \ - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
* }' B# d* b( S; A - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv
7 \+ z9 i9 G7 j, y; r) e - drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys
2 g9 q. T. V6 G/ f - drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp3 L/ Y" }- l# l" t1 Z
- drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr
7 n# ]+ j* ?8 N* `3 m4 r* O - drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root; D6 w1 [' |) X7 E6 c
- tar zcf /root/rootfs.tar.gz *
复制代码
2 G# b. L0 `5 q$ Z查看打包后的文件,确认文件存在,大小一般是在几百 MB / B5 {& B# ^/ t* P. }
- ll -h /root/rootfs.tar.gz
复制代码 % H5 g# T, l/ L2 R) ]. ~' E
至此,Rocky Linux 8 的文件系统基本上就制作完成了。8 D. X3 L' M$ q a
: D2 ~: U" p% o
/ D( U+ w# S5 Y' a$ e3 J. ?
3. 后续卸载挂载点3 f% Y* t5 p; O% Q
- cd ~9 |& h3 a5 n# `5 W/ D- s; L
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
: P, n4 ` [/ H, K
- E* g+ ?! U) _; ^; m& @使用 losetup 卸载虚拟块设备
: X1 E" Y* n6 P) A/ w7 u2 R
- o) i3 t5 k* U' b" C4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
0 P* T, p7 m! Q; ]项目地址:https://github.com/yuk7/wsldl3 V" q# r* E9 N; Y
下载最新版 Release 的 icons.zip 文件/ D9 n! V( ` \- E9 ?
解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:2 i. m6 i8 M7 o" H7 F
" E$ f$ s$ A/ r8 A! O+ Z5 W8 E
找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
9 T' k, t5 G0 s, }- R6 h: r
, g% b# V) ^& z双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》
/ _ b0 {4 [5 n J k" ^其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。2 n6 O7 V3 ~; H5 e# B1 m
4 n1 [6 Q& \6 U$ G- ]5. 已制作好的 Linux 发行版下载链接如下:
1 P7 ^: M4 Y/ b- W& q- D3 g' _9 PCentOS 7.9; w- m, A* V" o: V# N
CentOS 8.41 b8 ~" Z: K) u( g
Fedora 35
& g6 s) n: h; n7 ~Fedora 36
" o5 v+ I7 f3 A% FAlmaLinux 80 n' }/ W, N% V4 q& k ] S6 n% U
AlmaLinux 9
! m e* n2 e5 U, U" s; QRocky Linux 8.5
) q, M" v3 e* T8 N2 VAlpine 3.158 k3 N5 ]" m2 M
Ubuntu 18.04
$ l( y# u1 P/ I3 lUbuntu 20.04' {% Q- [- ]8 A# |1 H
Ubuntu 22.04
! B( a. c/ [6 A/ z5 F( N5 m8 vDebian 10
0 a5 K' f2 E4 N2 u, gDebian 114 q( R- C2 t' w
Amazon Linux 2
. k$ t6 w0 s3 e$ {8 X6 U& Y" a& j7 l' T7 ?; ~) e' p7 f' U' `8 f! A
|
|