i386 平台上的 NetBSD 使用 Linux 的模拟可以执行大量的 Linux 程序。 一般而言,谈到模拟,你会想象到某些事会慢下来而没有效率,因为仿真 必须利用软件重新产生硬件的指令或是架构(通常来自老旧的机器)。在 Linux 模拟的例子中,则具有根本性的差异:它只是一个软件层级,大部 份的系统呼叫在两个系统之间已经非常相似。应用程序可以如你的 CPU 的速度一般,全速地被执行,所以使用 Linux 模拟不会降低效能而且感觉 就像是 NetBSD 的程序一样。
这一章解释如何设定 Linux 模拟并举例:安装著名的 Acrobat Reader 软件第 4 版。
Linux 模拟的安装被描述在 compat_linux(8) 在线手册里;使用 package 系统只需要两个步骤。
设定核心。
安装 Linux 链接库。
如果你使用 GENERIC 核心,则你毋需做任何事,因为 Linux 的 兼容性已经被包含在内。
如果你使用个人化的核心,检查以下的选项是否被增加:
option COMPAT_LINUX option EXEC_ELF32
如果你编译好的核心已经包含先前的选项,你可以开始安装必要的软件。
你可以从任何的 Linux 套件取得 linux 链接库,如果不是太旧的话, 不过我所建议的方法是使用 package 系统并且自动地安装链接库(在 此使用 Suse 的链接库)。当你安装了链接库之后,会发生以下的事:
一个次级的根目录被建立且被 Linux 程序所使用。这个目录为 /emul/linux/。 在仿真模式中,这个目录被 Linux 程序当做根目录使用。
Linux 的共享链接库被安装。大部分的应用程序都采用动态的连结 并期望在系统上找到必要的链接库。例如,就 Acrobat Reader 而言,如果进入 /usr/pkgsrc/print/acroread 并执行 make depends 命令,你会得到以下的信息:
===> acroread-4.0 requires Linux glibc2 libraries - see compat_linux(8).
这两项作业将会被 package 系统做自动地处理,而不需要使用者做 举手之劳(我想此时你已经开始爱上了 package 系统...)
为了安装链接库,有一个工具先安装来用以处理 RPM 格式:它是 rpm-2.5.4,被用来解压缩 Suse 的 链接库。
接着是安装 suse_base package。Suse RPM 檔 可以被 package 系统下载或是,如果你有 Suse CD,你可以复制它们 到 /usr/pkgsrc/distfiles/suse 目录,然后 执行 make 和 make install。
使用相同的方法安装 suse_compat, suse_libc5 和 suse_x11。 最后的设定为:
# pkg_info -a | grep suse suse_base-6.1p1 Linux compatibility package suse_x11-6.1p1 Linux compatibility package for X11 binaries suse_compat-6.1p1 Linux compatibility package with old shared libraries suse_libc5-6.1p1 Linux compatibility package for libc5 binaries
现在已经准备好可以安装 Acrobat Reader 程序(或是其它的 Linux 程序。)进入 /usr/pkgsrc/print/acroread 并 使用相同的指令。
make make install
Acrobat Reader 安装程序要求你接受 同意书。完成之后,你可以开始执行程序。
如果我们检视 Linux 链接库和程序安装之后的结果,可以发现 /emul/linux 是一个炼结指向 /usr/pkg/emul/linux,在那里被建立 以下的目录:
bin/ boot/ cdrom/ dev/ etc/ floppy/ home/ lib/ mnt/ opt/ proc/ root/ sbin/ usr/
Note: 请记得使用 /emul/linux 而不是 /usr/pkg/emul/linux。后者在未来可能会 有所更改。
Linux 仿真软件需要多少硬盘空间? 在我的系统上得到以下的数据:
# cd /usr/pkg/emul # du -k linux ... 60525 linux/
Acrobat Reader 被安装在一般 package 可执行文件的目录里:/usr/pkg/bin/。