WSL2 安装 ArchLinux —— In The Arch Way
本文已迁移至新的博客地址 https://www.devws.cn/posts/wsl2-archlinux/
The Arch Way
Arch 的核心原则是 KISS(Keep It Simple Stupid)。这让它和 Ubuntu , RedHat 有着显著的区别。后者会考虑到开箱即用,而Arch不会,Arch会尽可能的保持和上游一致,而只做最小范围的更改。
Arch 崇尚的 KISS 不是站在使用者的角度出发的,而是站在维护者的角度出发的。软件打包或者说封装集成上,应该尽可能的的简单,最好什么都不做。然后提供手册,由用户自己要去进行组装配置。
本文将分享一个手动导入 archlinux-bootstrap 镜像文件,搭建基础的 ArchLinux WSL2 命令行环境的配置方法。
如果你觉得本文的配置方法太复杂,那么建议你使用 ArchWSL 项目: https://github.com/yuk7/ArchWSL
当然对于 Arch 用户而言,折腾其实是一种乐趣。如果你体会不到这种乐趣,那么可能 Arch 并不适合你。
环境要求
- win 10 / 11 最新版本系统
- 默认 WSL 版本为 2
wsl --set-default-version 2
- 已通过
wsl --install
安装过一个其他的 WSL2 发行版,或者有其他 Linux 机器。用于生成 rootfs 文件
我当前(2023/3/13)的软件版本为:
wsl --version
----
WSL version: 1.1.3.0
Kernel version: 5.15.90.1
WSLg version: 1.0.49
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22621.1265
打包 rootfs
ArchLinux 的镜像仓储中,会保存一份 archlinux-bootstrap-x86_64.tar.gz 文件,是当前最新版本的 bootstrap tar镜像。我们可以通过 tar/bsdtar 命令将其转换为 WSL 所需的 rootfs 文件。
在已有的 WSL2 发行版中,执行下述命令
# 切换到家目录
cd ~
# 从清华镜像下载 bootstrap-x86_64.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz
# 使用bsdtar解压bootstrap tar.gz压缩文件
# 使用bsdtar而非tar是因为GNU tar不会保留拓展属性(extended attributes)
# https://wiki.archlinux.org/title/Full_system_backup_with_tar
sudo bsdtar -xpvf archlinux-bootstrap-x86_64.tar.gz
# 重新打包为archlinux-bootstrap.tar文件
sudo bsdtar -cpvf archlinux-bootstrap.tar -C root.x86_64 .
# 移动archlinux-bootstrap.tar到D盘
mv archlinux-bootstrap.tar /mnt/d
在Windows中导入 archlinux-bootstrap.tar 为 Arch WSL2发行版
wsl --import Arch C:\Arch D:\archlinux-bootstrap.tar
至此你已经有了一个可用的 Arch WSL 发行版,但是就和安装 Arch 一样,你还是需要进行一些初始配置。
配置 locale
设置 en_US.UTF-8
sed -i -e "s/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
locale
配置 pacman
# 配置镜像
echo 'Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
# 初始化 keyring,这是关键安全配置
# https://wiki.archlinux.org/title/Pacman/Package_signing
pacman-key --init && pacman-key --populate
pacman -Sy archlinux-keyring && pacman -Su
安装必备软件
看自己的需求,安装必备软件
pacman -S --needed vim sudo wget man
配置 systemd
启用官方的 systemd,并检查是否存在失败服务,如果有则禁用。
一般来说基于bootstrap.tar.gz 导入的系统镜像,systemd 不会有太大问题,但如果是参考官方文档,通过 Docker 导出的镜像tar,就需要注意禁用失败的 Service,否则会遇到 Docker 启动失败或启动特别慢的问题。
# 启用 systemd
echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf
ps --no-headers -o comm 1
# 关闭 wsl 使 systemd 生效
wsl --shutdown
# 禁用启动失败的服务
FAILED_SERVICES=`systemctl list-units --type=service --state=failed --quiet | awk '{print $2}'`
echo $FAILED_SERVICES
systemctl mask $FAILED_SERVICES
# 查看正在运行的服务
systemctl list-units --type=service --state=running
配置用户
创建一个用户“ws”,并允许其使用 sudo
# 配置 sudo
EDITOR=vim visudo
--
%wheel ALL=(ALL:ALL) ALL
# 新增用户 ws 并加入 wheel用户组
useradd ws -m -G wheel -s /bin/bash
# 设置用户密码
passwd ws
# 设置 ws 为默认用户
echo -e "[user]\ndefault = ws" >> /etc/wsl.conf
# 禁用 root 账户
passwd -l root
# 重启 wsl 使配置生效
wsl --shutdown
安装 docker
在 Arch 中安装 Docker还是比较简单的,官方源里自带了。
这里我配置了日志文件最大为100m,并使用了网易的Docker镜像。
sudo pacman -S docker
sudo usermod -aG docker ws
newgrp docker
sudo mkdir /etc/docker
MIRROR=http://hub-mirror.c.163.com
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"registry-mirrors": ["$MIRROR"]
}
EOF
sudo systemctl enable docker
导出镜像
配置完成后,记得将 WSL 实例导出,免去重复配置的烦恼。在windows下运行:
# 导出
wsl --export Arch Arch.tar
# 导入
wsl --import Arch C:\Arch Arch.tar
导出/导入时,可使用 --vhd
参数来导入导出 vhdx 文件,也可以直接备份 C:\Arch 下的vhdx
最后
bsdtar的思路来源于 ArchWSL-FS,感谢原作者。
你也可以通过 Linux 官方镜像下载 archlinux-bootstrap-x86_64.tar.gz,其他主流发行版的源也都在其中,地址:https://mirrors.edge.kernel.org
如果你要触类旁通安装 Fedora,可以下载Fedora-Container-Minimal-Base-xxx.x86_64.tar,解压出 layer.tar 进行导入。地址:
https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/36/Container/x86_64/images/
本文采用 知识共享署名 4.0 国际许可协议 进行许可