Chapter 15. Linux 模拟

Table of Contents
15.1. 模拟的设定
15.2. 目录结构

i386 平台上的 NetBSD 使用 Linux 的模拟可以执行大量的 Linux 程序。 一般而言,谈到模拟,你会想象到某些事会慢下来而没有效率,因为仿真 必须利用软件重新产生硬件的指令或是架构(通常来自老旧的机器)。在 Linux 模拟的例子中,则具有根本性的差异:它只是一个软件层级,大部 份的系统呼叫在两个系统之间已经非常相似。应用程序可以如你的 CPU 的速度一般,全速地被执行,所以使用 Linux 模拟不会降低效能而且感觉 就像是 NetBSD 的程序一样。

这一章解释如何设定 Linux 模拟并举例:安装著名的 Acrobat Reader 软件第 4 版。

15.1. 模拟的设定

Linux 模拟的安装被描述在 compat_linux(8) 在线手册里;使用 package 系统只需要两个步骤。

  1. 设定核心。

  2. 安装 Linux 链接库。

15.1.1. 设定核心

如果你使用 GENERIC 核心,则你毋需做任何事,因为 Linux 的 兼容性已经被包含在内。

如果你使用个人化的核心,检查以下的选项是否被增加:

option COMPAT_LINUX
option EXEC_ELF32
      

如果你编译好的核心已经包含先前的选项,你可以开始安装必要的软件。

15.1.2. 安装 Linux 链接库

你可以从任何的 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 目录,然后 执行 makemake install

使用相同的方法安装 suse_compatsuse_libc5suse_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
      

15.1.3. 安装 Acrobat Reader

现在已经准备好可以安装 Acrobat Reader 程序(或是其它的 Linux 程序。)进入 /usr/pkgsrc/print/acroread 并 使用相同的指令。

make
make install
      

Acrobat Reader 安装程序要求你接受 同意书。完成之后,你可以开始执行程序。

15.2. 目录结构

如果我们检视 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/