|
|
WSL,Windows Subsystem for Linux 的缩写,意为适用于 Linux 的 Windows 子系统。可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销。7 |6 M3 O/ P+ |
如何在 Windows 10 版本 2004 及更高版本或 Windows 11 上安装 WSL,可以参考微软的官方文档。
4 D7 k y% M Y) @8 sMicrosoft Store 上已存在一些 Linux 发行版,比如 Ubuntu 等,基本上寥寥无几,或者版本比较古老。
& Y: e+ M- z8 T- D微软官方有文档示例,通过使用 tar 文件导入任何 Linux 发行版。通过使用 Docker 容器获取 Linux 发行版的 tar 文件来将它导入 WSL。
Y/ O# L. { E0 _, X }8 s" \本文则是介绍另一种制作适用于 WSL 的任意 Linux 镜像的方法,基于各个 Linux 发行版官方提供的 qcow2 镜像来制作。
/ i2 V- L: P) }" D: G4 D" O' t Z- ^3 q; D; O* P* M+ q) R
下面以 Rocky Linux 8 作为示例,介绍具体制作过程。
7 h9 W9 F N& a- S1. 下载官方提供的 qcow2 文件Rocky Linux 提供最新版的 qcow2 文件下载地址:( p+ r" d7 G c& z1 x+ I1 b6 k
https://download.rockylinux.org/pub/rocky/8/images/Rocky-8-GenericCloud.latest.x86_64.qcow2
4 u* f* X+ b" h: \4 L, J8 w3 i, k其他常见发行版的 qcow2 文件下载地址(节选)
6 o& P" ?# a2 M3 F5 J4 OCentOS 7.96 B/ T4 j: P( x
CentOS 8.4
3 m4 W4 r5 Z/ a- g0 rAlmaLinux 8! w1 `2 Z2 e$ Q* e. U2 }9 ?4 d
Fedora 368 }& X9 C- t E0 T6 i: F
Debian 104 h6 v0 f P0 i# e. @
Debian 11( L: L5 [" @- G0 Y
Ubuntu 18.04
6 c/ {/ _6 d- |Ubuntu 20.04
5 ?, z% L8 s6 S2 O0 B: o8 f& uAmazon Linux 2
* i0 x# }- Z* p. C( D4 ?6 J2. 制作 rootfs.tar.gz以下所有的操作依赖的命令有:kpartx、qemu-img、losetup、fdisk、mount、umount,如果命令不存在,请自行安装之。1 T% Q. L+ @& b$ ]! u( @
转换 qcow2 文件到 raw 文件
4 H/ E% T: \7 M( ]; I0 T! K- <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>
复制代码 8 v/ d: ]) j0 ]8 a* ~8 x- g
- L; [) [! h8 A& V; d) L$ |
使用 losetup 将 raw 文件虚拟成块设备8 N8 A# a; K4 ?' X: ~& p
- <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>
复制代码
3 P$ X9 ]' W4 b0 k" ?- h
; u; P: v; Y- Y7 |: j3 e! [+ {0 H6 v使用 kpartx 挂载虚拟文件系统& S" V5 o0 |$ ?* C
- <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>
复制代码
& D' `( }/ }: ]3 S6 E, [, q
$ Z# ?8 i& q% l) p: f使用 fdisk 查看挂载的分区情况
) ]4 u, `% V6 p* d- <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>
复制代码 " U% R0 k- B) M5 i+ @9 L' `$ A
8 }4 M5 s, j- z% x/ ^( [
返回如下信息
1 H7 @6 C: i6 h2 i- Disk /dev/loop1: 10 GiB, 10737418240 bytes, 20971520 sectors2 }& e Y6 Z# ]2 C$ k
- Units: sectors of 1 * 512 = 512 bytes2 G6 C- H6 }" A$ \
- Sector size (logical/physical): 512 bytes / 512 bytes( d: c/ d; J. z7 Z8 i$ `+ d
- I/O size (minimum/optimal): 512 bytes / 512 bytes0 _6 s- |" y$ \, Y
- Disklabel type: dos
~ b+ u# S9 q, h% p - Disk identifier: 0x2cc9c27e
. b1 h5 u: K0 Y, k4 R7 u$ ~
/ C8 o9 E/ Q6 w' [0 @- Device Boot Start End Sectors Size Id Type
/ @ H" A2 W( D; A$ N2 Y; ^ - /dev/loop1p1 * 2048 16386047 16384000 7.8G 83 Linux
复制代码
, t7 [6 H% Y/ _* _2 \! r- A: c3 I5 G7 e& F# P8 F R \- o
; k# `/ H" V6 J; A4 s' T @4 [此处的/dev/loop1p1就是等下要 mount 的块设备具体的名称。6 O, f4 ~; {7 U( \
挂载块设备到本机路径0 E2 C6 u) p c. \; U: y' C$ B$ `# Q
- mount /dev/mapper/loop1p1 /mnt
复制代码 1 x, n- I; f |) X
1 C4 @" J; b5 S; s
7 @- b) ?( _8 Y# _' G进入挂载点 /mnt,查看文件& j! ~+ g5 c6 A' I, D! Z& L
5 h B) a G4 a5 d8 Y2 V
- cd /mnt+ S! m' z- U Y( d0 w; X
- ls -la
复制代码 " y$ r; v- ?* v; M
" P! D/ i7 ^6 X1 i9 v; E返回如下信息- total 16
d; o. k9 T2 b7 Q$ [ - dr-xr-xr-x. 17 root root 224 Nov 15 03:17 .
; s3 P# @3 s$ Y3 p7 x& _% @$ { - dr-xr-xr-x. 18 root root 256 Nov 17 09:09 ..
7 V7 k) m3 ^: i0 z( l - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 bin -> usr/bin
o0 C6 ? I' @$ f) {* v* M2 z% Z) q - dr-xr-xr-x. 6 root root 4096 Nov 15 03:24 boot4 l' i, [* r3 Y' K! V; |
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 dev
4 n2 w3 H- g+ a, j4 E) W0 Q - drwxr-xr-x. 94 root root 8192 Nov 15 03:24 etc
4 R. B0 P* |- j6 s4 G" Y' x - drwxr-xr-x. 2 root root 6 Oct 11 08:48 home
, w7 t* F( g- u, Q2 g* e. c5 Q2 M - lrwxrwxrwx. 1 root root 7 Oct 11 08:48 lib -> usr/lib
F: L! \ M$ b3 i- W - lrwxrwxrwx. 1 root root 9 Oct 11 08:48 lib64 -> usr/lib64+ d5 R& z7 A- w# t
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 media
9 r/ t: [$ Z: |% {( J. G6 g2 l - drwxr-xr-x. 2 root root 6 Oct 11 08:48 mnt+ Q& J+ z% ~2 }9 t8 G
- drwxr-xr-x. 2 root root 6 Oct 11 08:48 opt
6 |# ]# l: d4 ^$ I* P7 ~ - drwxr-xr-x. 2 root root 6 Nov 15 02:50 proc
J" z/ f; h7 t7 @7 k2 @& f - dr-xr-x---. 2 root root 114 Nov 15 03:47 root
! L% H6 G$ P. g - drwxr-xr-x. 2 root root 6 Nov 15 02:50 run
, `$ M, i# D$ x7 G b- R - lrwxrwxrwx. 1 root root 8 Oct 11 08:48 sbin -> usr/sbin
# E$ l' N" p# A; `/ M0 a1 H: L - drwxr-xr-x. 2 root root 6 Oct 11 08:48 srv" M6 O8 c5 d+ I
- drwxr-xr-x. 2 root root 6 Nov 15 02:50 sys/ h8 `; h% ]9 P7 `
- drwxrwxrwt. 2 root root 84 Nov 15 03:47 tmp, u* u4 X* j7 o- I- n& a5 K
- drwxr-xr-x. 13 root root 158 Nov 15 03:01 usr
" W; k: _6 z" j' W* [ - drwxr-xr-x. 20 root root 262 Nov 15 03:00 var
复制代码 打包压缩 /mnt 整个目录为 rootfs.tar.gz,保存到 /root" B7 l2 ^3 i# g( v6 T5 X" o
- tar zcf /root/rootfs.tar.gz *
复制代码 ) _/ u3 r- e' s) H! n
查看打包后的文件,确认文件存在,大小一般是在几百 MB ( D/ j7 }2 W2 B4 F4 v% s* f
- ll -h /root/rootfs.tar.gz
复制代码 g. C) `, M$ `" v6 `8 d
至此,Rocky Linux 8 的文件系统基本上就制作完成了。
! H+ ~1 @) I9 [6 d& r r9 M! P; l' ~& Q, ] \
5 z- _; t3 |2 C. v7 T5 _ c+ \2 |3. 后续卸载挂载点
( a7 O; i) Z: d9 u) }5 X* u& v- cd ~* F7 ]+ h- {' ]& `& o8 I
- umount /mnt
复制代码 使用 kpartx 卸载虚拟文件系统
1 T( z+ E+ H, Q- d. n9 |1 A4 M7 ?! ~; r
使用 losetup 卸载虚拟块设备2 Z: T9 \6 x) x5 w, \* D
$ j- o3 ~1 \, T; L0 j
4. 搭配 wsldl 使用wsldl,Advanced WSL launcher / installer,是一个用 Go 编写的多功能和高级 WSL/WSL2 启动器和安装程序。它可用于安装任何 rootfs 软件包或充当现有已安装发行版的启动器。
" x* D. {3 X/ J项目地址:https://github.com/yuk7/wsldl( u7 _- U1 [# V# {3 e) C! B
下载最新版 Release 的 icons.zip 文件
1 I4 v3 `; y1 L0 l' @解压 icons.zip 后,你会发现一系列的 Linux 发行版的 exe 文件。如下图:
* m/ O1 B0 m: _& K9 h: |6 A# t8 D
* x! c" v. t5 b# \找到 Rocky.exe 文件,再将上一步打包压缩好的 rootfs.tar.gz 文件下载回本地。将这 2 个文件放到同一个目录下。
# @- ?. F" }, ]2 } b; G' ? & g! o/ A0 K0 k6 K' ]! S, N
双击 Rocky.exe 即可安装 Rocky Linux 8,具体过程参考另一篇文章《在 Windows 10 上安装 Rocky Linux 系统》3 }: t" x& l4 t, g9 F2 H
其余发行版的制作过程大同小异。嫌麻烦的可以直接下载我已经制作好的一些常用的 Linux 发行版。
: u& t$ r: [5 d( }& G* Q3 W% q; u' f5 s6 I( ~2 k9 T+ Y$ t9 o
5. 已制作好的 Linux 发行版下载链接如下:
& P) S o/ b0 F, JCentOS 7.9
6 B! M4 C H; {) D7 KCentOS 8.4
$ e) N; P* E7 o+ t. PFedora 35
6 L; H6 ]6 ?2 H8 h* T" R6 O9 i1 P9 ZFedora 36, c* d M4 i* ^& L7 J4 x K
AlmaLinux 8
* J, F6 M( A" F1 HAlmaLinux 9
, @% i4 z/ h+ g- r/ Z+ g0 u3 ZRocky Linux 8.5
; ?7 ]9 c* b, c$ EAlpine 3.15+ u5 z5 }5 V) H$ g3 w
Ubuntu 18.04
$ \& F" J9 c; i0 Y9 bUbuntu 20.04
6 k1 e0 i+ j% nUbuntu 22.04( C3 G$ P7 S x" K% B
Debian 10
4 S, g1 E- c# _2 M0 g4 x- @Debian 11$ i% J8 B/ v4 z2 f/ ?* b
Amazon Linux 2
4 s5 p2 G, A; S3 _2 s
; x: z1 u S; T2 K2 K7 u |
|