WSL2 安装 ArchLinux

WSL2 安装 ArchLinux

2024/04/09

wsl2: wsl --set-default-version 2

推荐浏览:

安装 ArchLinux

基本安装

yuk7/ArchWSL 下载安装, 此处选择最轻便的 zip, 解压到例如 d:/wsl2/arch, 双击 Arch.exe 即完成安装.

关于其 release 的其他文件:

  • Arch_Online 是不带 fs 的, 运行 Arch.exe 后会先去 github(yuk7/ArchWSL-FS) 下载 fs, 通常作者会同步更新这俩仓库所以没必要使用此版本

安装完成后会在目录生成 ext4.vhdx, 其内部就是整个系统, rootfs 文件可以删除. 通过 wsl -l -v 的列表中有无 Arch 来确认是否成功

设置此 VHD (虚拟磁盘)自动收缩:

wsl --manage Arch --set-sparse true

wsl2 config

windows 下的 ~/.wslconfig 和 子系统下的 /etc/wsl.conf 可配置项部分不是完全相同的!!!

systemctl initializing 的解决方案:

  • wslconfig 的 [wsl2] 下配置 kernelCommandLine = cgroup_no_v1=all

windows ~/.wslconfig:

# boot interop ... 只能位于 /etc/wsl.conf
[experimental]
autoMemoryReclaim = gradual  # gradual  | dropcache | disabled
sparseVhd = true
networkingMode = mirrored
dnsTunneling = true
firewall = true
autoProxy = true

[wsl2]
kernelCommandLine = cgroup_no_v1=all

wsl2 网卡不支持 mtu 大于 1500, 上面配置了 networkingMode = mirrored 则需要保证主机网卡 mtu 不大于 1500. 所以如果使用 clash 的 tun 模式时, 需要修改 tun 的 mtu 为 1500

子系统下的 /etc/wsl.conf:

[boot]
systemd = true

[interop]
enabled = true
appendWindowsPath = false

[automount]
enabled = true
options = "metadata"
mountFsTab = true

启动

以下三种启动方式:

  • 执行上面目录的 Arch.exe
  • Arch 安装后 Windows Terminal 可以自动检测并生成配置文件
  • 设置为默认的 wsl: wsl --setdefault Arch 设置后可以通过 wsl 来启动

Windows Terminal 配置示例:

// .actions
{ "icon": "D:\\wsl2\\arch\\arch.ico", "name": "New Tab - Arch", "command": { "action": "newTab", "profile": "Arch" }, "keys": "ctrl+shift+t" }
{"command": {"action": "sendInput","input": "\u001b[27;5;9~"},"keys": "ctrl+tab"}

// .profiles.list
{
    "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
    "hidden": false,
    "icon": "D:\\wsl2\\arch\\arch.ico",
    "name": "Arch",
    "source": "Windows.Terminal.Wsl"
}

网络驱动器

官方文档: 在 Windows 中映射网络驱动器 再我的电脑上右击, 选择映射网络驱动器, 文件夹填: \\wsl.localhost\Arch. 完成后需要重启 explorer.exe 否则看不到

基本设置

  • 时区: 使用 timedatectl 查看时区和时间是否正确, 系统默认使用 systemd-timesyncd 来同步时间. 官网文档设置时区

  • 区域:

    grep -v '^#' /etc/locale.gen # 确认只保留 en_US.UTF-8 UTF-8*
    locale-gen
    cat /etc/locale.conf         # 确认包含 LANG=en_US.UTF-8

完成后重启: wsl -t Arch wsl

包管理器

设置镜像: pacman-mirrorlist 生成镜像

GPG keys:

pacman-key --init
pacman-key --populate
pacman-key --refresh-keys

更新:

pacman -Syu

基本包:

pacman -S man-db which wget git
# vi
ln -s /usr/bin/vim /usr/bin/vi

创建用户

groupadd sudo
visudo # 取消注释 `%wheel ALL=(ALL:ALL) NOPASSWD: ALL` 和 `%sudo  ALL=(ALL:ALL) ALL`
useradd -m -G wheel,sudo wsl

Windows 下到安装目录执行

./Arch.exe config --default-user wsl

其他工具

oh-my-zsh

pacman -S zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# .zshrc plugins 追加 zsh-syntax-highlighting zsh-autosuggestions
# 其他设置:
# setopt hist_ignore_all_dups
# setopt no_nomatch
cat >/etc/profile.d/z_usersettings.sh <<EOL
alias l="ls -ahl --group-directories-first"
export TIME_STYLE='+%Y-%m-%d %H:%M:%S'
EOL

yay

  • zsh-completions: 补充其他命令提示(go/yay…), 参考其文档即可 zsh-users/zsh-completions
  • go: yay 需要依赖 go, 此处先手动安装, yay 的 PKGBUILD makedepends 去掉 go 即可(保证版本满足)
  • yay: 参考其文档即可 Jguer/yay

常用工具

  • btop: yay btop
  • duf: yay duf, ‘df’ alternative
  • dust: yay dust, ‘du’ alternative
  • tmux: yay tmux
  • lf: yay lf
  • fzf: yay fzf, 快捷键文档 junegunn/fzf

podman

sudo pacman -S podman
podman info
podman run hello
podman image rm -f hello

less with color

yay source-highlight

cat >> ~/.zshrc <<EOL
export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
export LESS=' -R '
EOL
source ~/.zshrc

wslu

wsl 的工具, 比如在 wsl 下通过 windows 打开图片/视频等. 安装见教程见其文档: wslu 百科 - 安装.

使用示例:

# 使用 wslview 来替代 xdg-open
sudo ln -s $(which wslview) /usr/local/bin/xdg-open

xdg-open CreateCircle.mp4

疑难杂症

部分工具包需要依赖内核/syscall, 所以在 ArchWsl 上直接更新会报错, 推荐阅读 ArchWsl Known-issues

fakeroot/fakeroot-tcp 更新

此镜像的 fakeroot 被禁止更新, 所以 fakeroot-tcp 也要禁止更新, 追加到 /etc/pacman.confIgnorePkg

需要更新的话去 yuk7/arch-prebuilt 下载更新, 如:

wget https://github.com/yuk7/arch-prebuilt/releases/download/24042500/fakeroot-tcp-1.34-1-x86_64.pkg.tar.zst

pacman -U fakeroot-tcp-1.34-1-x86_64.pkg.tar.zst

WSL2 大量端口被保留

Huge amount of ports are being reserved 中给出的方案是修改端口范围, 查看和修改命令如下:

netsh int ipv4 show dynamicport tcp
netsh int ipv4 show excludedportrange protocol=tcp

netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384

备份

清除日志和缓存

# 清除日志
# 使总大小小于 100M
journalctl --vacuum-size=100M
# 清理两周前的日志
journalctl --vacuum-time=2weeks

# 清除 go build cache, 默认目录为 ~/.cache/go-build
go clean -cache

# 清除 yay
yay -Ps # 查看使用情况
yay -Sc # 清除缓存

备份: 作者仓库 yuk7/wsldl, 通过下面命令压缩, 然后其输出和 Arch.exe 即为完整备份

./Arch.exe backup --tgz

还原:

./Arch.exe install backup.tar.gz

与 ubuntu 的不同

  1. 没有 /var/log/auth.log, ssh 认证信息通过 journalctl 查看
  2. 没有 /var/log/syslog, 通过 journalctl 查看
Last updated on