12.4.高级主题
可以在linux(4)中找到所有与 Linux 相关的sysctl(8)变量的列表。
某些应用程序需要挂载特定的文件系统。
这通常由 /etc/rc.d/linux 脚本处理,但可以在启动时禁用,执行以下命令:
通过 rc 脚本挂载的文件系统将不适用于 chroot 或 jail 中的 Linux 进程;如果需要,可以在 /etc/fstab 中配置它们:
由于 Linux 二进制兼容层已经支持运行 32 位和 64 位 Linux 二进制文件,因此不再可能将仿真功能静态链接到自定义内核中。
12.4.1. 手动安装额外的库
注意
对于使用debootstrap(8)创建的基本系统子目录,请改用上面的说明。
如果在配置 Linux 二进制兼容层后,Linux 应用程序报告缺少共享库,则需要手动确定 Linux 二进制文件需要哪些共享库,并手动安装它们。
可以使用相同 CPU 架构的 Linux 系统上的 ldd
来确定应用程序需要哪些共享库。
例如,要检查 linuxdoom
需要哪些共享库,请从已安装 Doom 的 Linux 系统上运行以下命令:
输出应该类似于以下内容:
然后,将来自 Linux 系统输出的最后一列中的所有文件复制到 FreeBSD 系统上的 /compat/linux 中。复制后,创建指向第一列中的名称的符号链接。
此示例将在 FreeBSD 系统上产生以下文件:
如果已经存在具有与 ldd
输出的第一列相匹配的主要修订号的 Linux 共享库,则不需要将其复制到最后一列中的文件中,因为现有库应该可以正常工作。但是,如果它是一个更新版本,则建议复制共享库。只要符号链接指向新版本,就可以删除旧版本。
例如,这些库已经存在于 FreeBSD 系统上:
而 ldd
表示二进制需要一个更新的版本:
由于现有库在最后一个数字中只过时了一到两个版本,因此该程序应该仍然可以使用略旧的版本。但是,如果是新版本,建议复制共享库。只要符号链接指向新版本,就可以删除旧版本。
例如,这将在 FreeBSD 系统上产生以下文件:
通常,只有在首次在 FreeBSD 上安装 Linux 程序的前几次时,才需要查找 Linux 二进制文件所依赖的共享库。过一段时间后,系统上将有足够的 Linux 共享库集,可以在不进行任何额外工作的情况下运行新安装的 Linux 二进制文件。
12.4.2. 标记化 Linux ELF 二进制文件
FreeBSD 内核使用多种方法来确定要执行的二进制文件是否是 Linux 二进制文件:它检查 ELF 文件头中的品牌,查找已知的 ELF 解释器路径并检查 ELF 注释;最后,默认情况下,未标记化的 ELF 可执行文件默认被视为 Linux。
如果所有这些方法都失败,尝试执行二进制文件可能会导致错误消息:
输出应该类似于以下内容:
为了帮助 FreeBSD 内核区分 FreeBSD ELF 二进制文件和 Linux 二进制文件,请使用 brandelf(1):
12.4.3. 安装基于 Linux RPM 的应用程序
要安装基于 Linux RPM 的应用程序,首先安装软件包或 Port archivers/rpm4 。安装后,root
可以使用以下命令安装 .rpm:
如果需要,对安装的 ELF 二进制文件进行 brandelf
。请注意,这将阻止彻底卸载。
12.4.4. 配置主机名解析器
如果 DNS 不工作或出现以下错误:
请将 /compat/linux/etc/host.conf 配置为如下所示:
这指定首先搜索 /etc/hosts,然后搜索 DNS。当 /compat/linux/etc/host.conf 不存在时,Linux 应用程序使用主机系统中的 /etc/host.conf,但它们会抱怨因为在 FreeBSD 中不存在该文件。如果没有使用 /etc/resolv.conf 配置名称服务器,请删除 bind
。
12.4.5. 其他
有关与 Linux® 一起使用二进制兼容层的更多信息,请参阅文章FreeBSD 中的 Linux 仿真。
最后更新于