12.4.高级主题
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
所有与 Linux 相关的 控制项列表可以在 中找到。
某些应用程序需要挂载特定的文件系统。
这通常由 /etc/rc.d/linux 脚本处理,但可以通过执行以下命令在启动时禁用该脚本:
由 rc 脚本挂载的文件系统对于 chroot 或 jail 中的 Linux 进程无效;如有需要,请在 /etc/fstab 中进行配置:
由于 Linux 二进制兼容层已经支持运行 32 位与 64 位 Linux 二进制文件,因此无法再将仿真功能静态链接进自定义内核中。
注意
对于使用 创建的基本系统子目录,请改为参照上文说明。
如果在配置好 Linux 二进制兼容层后某个 Linux 应用程序仍报告缺少共享库,请手动确定该 Linux 二进制程序所需的共享库并安装它们。
可以在使用相同 CPU 架构的 Linux 系统中使用 ldd
来确定该程序依赖哪些共享库。
例如,要查看 linuxdoom
所需的共享库,可在已安装 Doom 的 Linux 系统中运行以下命令:
输出应类似如下:
然后,将输出中最后一列的所有文件从 Linux 系统复制到 FreeBSD 系统的 /compat/linux 下。复制完成后,为这些文件创建符号链接,链接名称使用输出中第一列的名称。
此示例将在 FreeBSD 系统上生成如下文件:
如果某个 Linux 共享库已经存在,并且其主版本号与 ldd
输出中第一列相匹配,则无需复制输出中最后一列所指向的文件,因为已有的库通常可以正常工作。但如果复制的是更新版本的库,建议仍进行替换。只要符号链接指向新版本,就可以删除旧版本。
例如,FreeBSD 系统上已有以下库:
而 ldd
显示某个程序需要较新的版本:
由于已有的库版本只是在末尾小数字位相差一两个版本,该程序应仍然可以使用这个稍旧的版本。但更稳妥的做法是使用更新版本替换:
通常,在最初几次在 FreeBSD 上安装 Linux 程序时,才需要检查其依赖的共享库。随着系统上积累的 Linux 共享库越来越多,今后安装的新 Linux 程序通常就可以直接运行,无需额外处理。
FreeBSD 内核使用多种方式来判断一个待执行的可执行文件是否为 Linux 程序:它会检查 ELF 文件头中的标牌信息,查找已知的 ELF 解释器路径,并检查 ELF 注记;最后,默认情况下,如果一个 ELF 可执行文件没有标牌标识,也会被认为是 Linux 程序。
如果以上方法全部失败,尝试执行该程序时可能会出现如下错误信息:
输出可能如下:
如有必要,请对安装后的 ELF 可执行文件使用 brandelf
。注意,这样做将无法实现干净的卸载。
如果 DNS 无法使用,或者出现如下错误:
请按如下方式配置 /compat/linux/etc/host.conf
:
这表示先查找 /etc/hosts
,然后再使用 DNS。当 /compat/linux/etc/host.conf
不存在时,Linux 应用程序会使用主系统中的 /etc/host.conf
,但该文件在 FreeBSD 中默认不存在,因此会报错。如果没有使用 /etc/resolv.conf
配置名称服务器,请去掉 bind
。
为了帮助 FreeBSD 内核区分 FreeBSD ELF 可执行文件与 Linux 可执行文件,可以使用 命令:
要安装基于 Linux 的 RPM 应用程序,首先安装软件包或 port 。待安装完成,root
用户可以使用以下命令安装 .rpm
文件:
关于 Linux® 二进制兼容的工作机制,更多信息可参考文章 。