Loading

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 并不适合你。

环境要求

  1. win 10 / 11 最新版本系统
  2. 默认 WSL 版本为 2 wsl --set-default-version 2
  3. 已通过 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/

posted @ 2023-03-13 22:56  wswind  阅读(2219)  评论(0编辑  收藏  举报