21.5 基于 archlinux-pacman 的 Arch Linux 兼容层(拟删除)

警告

由于 Bug 287690 sysutils/pacman: The archlinux flavor cannot be built or installed.,本文内容暂不可用;若在六个月内(2026-04-01 日前)仍未得到解决,将删除本文。

安装 Arch Linux 兼容层

  • 使用 pkg 安装:

# pkg install archlinux-pacman archlinux-keyring
  • 或者使用 Ports 安装:

# cd /usr/ports/sysutils/pacman/ && make FLAVOR=archlinux install clean
# cd /usr/ports/security/archlinux-keyring/ && make install clean

配置 Arch Linux 兼容层

  • 编辑 /usr/local/etc/pacman.conf 文件,添加 Arch Linux 的软件仓库使用中科大镜像:

[core]
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/x86_64

[extra]
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/x86_64
  • 创建符号链接,将 /compat/linux 指向 /compat/archlinux 目录,并启动 linux 服务:

# ln -s /compat/archlinux /compat/linux   # 为 Arch 兼容层创建符号链接 /compat/linux
# service linux enable                     # 设置 Linux 内核模块开机自启
# service linux start                      # 启动 Linux 内核模块

技巧

这样做的好处在于,无需通过手动编辑 FreeBSD 层的 /etc/fstab 文件来实现 Linux 文件系统的自动挂载,也无需配置 compat.linux.emul_path 选项。

即使在 /etc/sysctl.conf 文件中设置了 compat.linux.emul_path,也会因为 linux 服务的启动时机早于 /etc/sysctl.conf 中配置项的加载时机,导致系统重启后各个 Linux 文件系统仍位于 /compat/linux 目录下。此时必须在系统重启完成后手动重启 linux 服务,才能使 compat.linux.emul_path 设置生效。因此,从实际效果来看,直接创建符号链接是最简单且有效的方式。

  • 更新 pacman 软件仓库索引,并安装 Arch Linux 的 C/C++ 运行时库:

  • 使用只读 nullfs 挂载 FreeBSD 的 DNS 配置到 Arch 兼容层:

注意

跳过这一步将导致 Linux 应用程序无法正常进行 DNS 解析,从而无法访问网络。

  • 将 FreeBSD 层的 /etc/passwd 文件和 /etc/group 文件绑定到 Arch Linux 兼容层中:

注意

跳过这一步将导致 Linux 应用程序无法识别 FreeBSD 层中的用户名,从而使部分 Linux 应用程序将用户名显示为 I have no name!

关于 Arch Linux 兼容层的使用

你可以将上述所有绑定操作写入 FreeBSD 层的 /etc/fstab 文件中。编辑 /etc/fstab,并加入以下内容:

此时可以下载一些原本仅支持 Linux 的应用程序,理论上已经可以直接在 FreeBSD 层尝试运行。

在这种情况下,FreeBSD 会自动调用 Arch Linux 兼容层中的 C/C++ 运行时库。

将 Arch Linux 兼容层升级为完整的 chroot 环境

如果读者认为确有必要将 Arch Linux 兼容层升级为完整的 chroot 环境,可以在 FreeBSD 层使用 pacman 安装所需的软件包:

故障排除与未竟事项

  • 使用 AUR Helper 开启 AUR 包的安装和管理

  • 简要解析一下 FreeBSD Linuxulator 路径翻译过程当中存在的一些 magic

  • 以及我们应该如何利用这一机制来提高生产力

最后更新于

这有帮助吗?