WSL2 安装 ArchLinux
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 生成镜像
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.conf
的 IgnorePkg
需要更新的话去 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 的不同
- 没有
/var/log/auth.log
, ssh 认证信息通过journalctl
查看 - 没有
/var/log/syslog
, 通过journalctl
查看