21.4 Arch Linux 兼容层(基于 Arch Linux bootstrap)
注意
在完成兼容层构建并执行 chroot 进入环境后,终端界面可能看似处于无响应状态;这一现象的实际原因是 bash 进程未产生任何输出,但该进程仍然可以正常接收输入并执行命令。
即使将默认 shell 切换至 zsh,该现象仍会持续存在,且 TTY 终端会报告如下错误信息:linux: jid 0 pid 1154 (bash): linux_ioctl_fallback fd=0, cmd=0x802c542a ('T',42) is not implemented。
根据 FreeBSD 源代码仓库中的相关提交记录 linux: support termios2 ioctls,该 bug 已在 FreeBSD 15.0-STABLE 版本中得到修复。
视频教程:07-FreeBSD-Arch Linux 兼容层脚本使用说明


Arch Linux 兼容层看起来占用的资源略高于 Ubuntu 兼容层,这是因为系统中正在运行谷歌 Chrome 浏览器。
构建基本系统
构建 Arch Linux 兼容层需要先处理必要的服务项和设置。
处理所需服务项
Linux 服务项
D-Bus
通常桌面环境已经配置了 D-Bus 服务,如果未安装 D-Bus,请自行安装。
调整 Linux 兼容层默认内核版本
对于滚动发行版,Linux 兼容层的默认内核版本通常较低。若直接构建,Arch Linux 兼容层在 chroot 时会报错 FATAL: kernel too old。因此,需要将 Linux 兼容层的内核版本调整为 6.12.63(或其他较高版本)。
查看当前 Linux 兼容层的内核版本:
注意
你必须先启动
linux服务才能查看当前的 Linux 内核版本。
将其调整到较新的版本号(参见:The Linux Kernel Archives[EB/OL]. [2026-03-26]. https://www.kernel.org/. 可获得所需版本号):
放置自举系统
--strip-components=1 即在解压 archlinux-bootstrap-x86_64.tar.zst 文件时去掉外层路径 root.x86_64,直接解压到指定路径中。
挂载文件系统
将 nullfs_load="YES" 写入 /boot/loader.conf(如需立刻生效,可使用 kldload nullfs)。
将以下内容添加到 /etc/fstab 文件中:
加入后的 /etc/fstab 示例(请勿复制粘贴下方代码):
警告
请勿看错行、照抄上面的示例,否则你将需要进入急救模式!
检查挂载过程中是否有报错:
挂载 /etc/fstab 中所有未挂载的文件系统。
基本配置
初始化 pacman 密钥环
换源
由于新安装的 Arch 没有任何文本编辑器,所以我们需要在 FreeBSD 中编辑相关文件,设置 Arch Linux 的 pacman 使用清华大学镜像源:
启用 DisableSandbox
我们需要为 pacman 启用 DisableSandbox,否则会报错 error: restricting filesystem access failed because landlock is not supported by the kernel!,因为 FreeBSD 未实现此沙箱。
在 pacman.conf 文件中取消 DisableSandbox 选项的注释:
检查是否启用成功,在 pacman.conf 中查找 DisableSandbox 所在行及行号:
使用 pacman 安装基本系统、开发工具、文本编辑器 nano、AUR 助手 yay 以及文泉驿字体 wqy-zenhei:
参考文献
Arch Linux Project. pacman.conf(5)[EB/OL]. [2026-03-25]. https://man.archlinux.org/man/pacman.conf.5.en. 指出“在 Linux 系统上,禁用为下载文件进程应用默认的 sandbox。当因当前 Linux 内核不支持该特性而导致下载文件时出现 landlock 相关失败时,这会很有用。” 该文档系统说明 pacman 配置项 DisableSandbox 的用途,为本章节配置提供官方技术依据。
archlinuxcn 源配置
配置 Arch Linux CN 仓库使用清华大学镜像:
安装 Arch Linux CN 仓库密钥环:
技巧
在
==> Locally signing trusted keys in keyring...这一步可能需要十分钟或更长时间。请耐心等待。
由于 yay 及其他用于安装 AUR 的软件禁止以 root 用户直接操作,因此需要在 chroot 中创建一个具有普通权限的新用户(经测试,FreeBSD 中现有普通用户不可用)。
创建用户 test,并加入 wheel 组,同时创建用户主目录:
使用 nano 编辑 sudoers 文件,配置用户权限(若有红色警告请忽略):
删除 # %wheel ALL=(ALL) ALL 前的注释符号 #。
删除 # %sudo ALL=(ALL:ALL) ALL 前的注释符号 #。
卸载 fakeroot 并安装 fakeroot-tcp,否则无法使用 AUR。
该 Bug 见 Problem with fakeroot and qemu。
使用 pacman 安装 fakeroot-tcp 工具:
技巧
如果为用户
test设置了密码后仍提示密码错误,需要新开一个终端,执行reboot命令重启 FreeBSD,然后继续操作。
区域设置
提示
如果不进行此设置,Arch Linux 的图形化程序将无法使用中文输入法。
编辑 /etc/locale.gen,将 zh_CN.UTF-8 UTF-8 前面的注释 # 删掉。
生成系统本地化语言环境:
Shell 脚本
脚本内容如下:
参考文献
FreeBSD Project. linux(4)[EB/OL]. [2026-03-25]. https://man.freebsd.org/cgi/man.cgi?linux(4). 该文档详细介绍 FreeBSD Linux 兼容层的技术原理与配置方法。
Arch Linux 中文维基. 从现有 Linux 发行版安装 Arch Linux[EB/OL]. [2026-03-25]. https://wiki.archlinuxcn.org/wiki/%E4%BB%8E%E7%8E%B0%E6%9C%89_Linux_%E5%8F%91%E8%A1%8C%E7%89%88%E5%AE%89%E8%A3%85_Arch_Linux. 该文档提供从现有系统安装 Arch Linux 的标准流程指引。
课后习题
尝试在 FreeBSD 14.x 上复现 Arch Linux 兼容层的 termios2 ioctl 问题,对比 FreeBSD 15.x 的修复方案,分析该 bug 产生的原因。
在 Arch Linux 兼容层中,保持
DisableSandbox启用或尝试在 FreeBSD 内核中实现 landlock,实现 pacman 的沙箱机制。分析为什么必须在兼容层内创建新用户才能使用 yay,而不能直接使用 FreeBSD 的现有用户,优化这一机制。
最后更新于