21.5 ArchLinux 兼容层(基于 archlinux-pacman)
安装 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 archlinux /compat/linux
# service linux enable
# service linux start
技巧
这样做的好处在于你不需要通过手动编辑 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++ 运行时库
# pacman -Sy glibc gcc-libs
将 FreeBSD 层的
/etc/resolv.conf
文件绑定至 Arch Linux 兼容层
# mount -t nullfs -o ro /etc/resolv.conf /compat/archlinux/etc/resolv.conf
警告
跳过这一步会导致 Linux 应用程序无法正常执行 DNS 解析,以至于 Linux 应用程序无法上网
将 FreeBSD 层的
/etc/passwd
文件和/etc/group
文件绑定至 Arch Linux 兼容层内
# mount -t nullfs -o ro /etc/passwd /compat/archlinux/etc/passwd
# mount -t nullfs -o ro /etc/group /compat/archlinux/etc/group
警告
跳过这一步会导致 Linux 应用程序无法识别你在 FreeBSD 层的用户名,以至于部分 Linux 应用程序把你的用户名显示为
I have no name!
关于 Arch Linux 兼容层的使用
你可以把上面涉及到的所有绑定操作放到 FreeBSD 层的 /etc/fstab
中去,编辑 /etc/fstab
,加入:
/etc/resolv.conf /compat/archlinux/etc/resolv.conf nullfs ro 0 0
/etc/passwd /compat/archlinux/etc/passwd nullfs ro 0 0
/etc/group /compat/archlinux/etc/group nullfs ro 0 0
去下载一些原本只支持 Linux 的应用程序,理论上这个时候你已经可以直接尝试在 FreeBSD 层运行了。
这时候 FreeBSD 会自动调用 Arch Linux 兼容层里的 C/C++ 运行时库。
将 Arch Linux 兼容层升级为完整的 chroot 环境
如果你相信自己确有必要将 Arch Linux 兼容层升级为完整的 chroot 环境,那么你可以在 FreeBSD 层用 pacman 将必要软件包予以补齐:
# pacman -S base
# chroot /compat/archlinux bash
(chroot) # uname -srv
Linux 4.4.0 FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC
故障排除与未竟事项
使用 AUR Helper 开启 AUR 包的安装和管理
简要解析一下 FreeBSD Linuxulator 路径翻译过程当中存在的一些 magic
以及我们应该如何利用这一机制来提高生产力
最后更新于