Gentoo IA32 模拟

IA32_EMULATION

通过选择 IA32 模拟 ( CONFIG_IA32_EMULATION )和 32-bit time_t ( CONFIG_COMPAT_32BIT_TIME ) ,可以让系统运行混合32位/64位计算。

配置内核支持32位程序运行
Processor type and features  --->
   [ ] Machine Check / overheating reporting 
   [ ]   Intel MCE Features
   [ ]   AMD MCE Features
   Processor family (AMD-Opteron/Athlon64)  --->
      ( ) Opteron/Athlon64/Hammer/K8
      ( ) Intel P4 / older Netburst based Xeon
      ( ) Core 2/newer Xeon
      ( ) Intel Atom
      ( ) Generic-x86-64
Binary Emulations --->
   [*] IA32 Emulation
   [*] x32 ABI for 64-bit mode  <= 这个选项为Wine运行准备
General architecture-dependent options  --->
   [*] Provide system calls for 32-bit time_t <= Wine运行需要这个内核支持

在64位硬件上,通过 IA32_EMULATION 配置编译的内核可以支持运行32位应用。

通过 zcat /proc/config.gz 检查内核是否支持32位
zcat /proc/config.gz | grep CONFIG_IA32_EMULATION

如果内核已经激活了32位支持,那么看到的输出如下:

通过 zcat /proc/config.gz 检查内核显示支持32位
CONFIG_IA32_EMULATION=y

如果类似我在 在MacBook Pro上安装Gentoo Linux 后编译内核去除了32位模拟支持,则显示

通过 zcat /proc/config.gz 检查内核显示去除了32位支持
# CONFIG_IA32_EMULATION is not set

Multilib

正如 在MacBook Pro上安装Gentoo Linux 我选择纯64位 stage 3 构建 no-multilib 的系统,带来的一个问题是无法运行32位程序。通常这不是问题,但是在 Gentoo平台wine环境运行Windows程序 时会遇到无法运行的问题。所以我采用一种变通方法:

  • 物理主机内核启用32位支持,但是我依然选择采用纯64位 No-Multilib (见 在MacBook Pro上安装Gentoo Linux 安装stage)

  • 在Docker中使用 Gentoo镜像 是 Multilib(32和64位),这样就可以在容器内部运行 Gentoo平台wine环境运行Windows程序

  • 保持物理主机的操作系统最精简,将所有图形运行程序迁移到Docker容器内部运行,这样有以下优点:

    • 容器可以在服务器上远程运行,使用服务器资源来解决本地物理主机性能有限的不足

    • 可以采用 Docker Atlas 方式运行,也可以推送到 Kubernetes Atlas 集群中,也就是说一次部署,到处运行

    • 随时随地工作,通过 X持久化远程应用Xpra 远程运行服务器上的应用,可以保持持续的 移动工作

备注

实践待完成…

参考