在guest系统中Linux on x86 32位和64位应用程序的安装和运行与在支持多进制的x86计算机上的运行是相同的。
配置ExaGear for Server on Ubuntu
host系统和guest系统共享的目录
ExaGear Server整个文件系统对host系统应用程序可见,只有guest系统文件对Linux on x86应用程序可见。
图1 host系统和guest系统的文件系统(以Ubuntu 18为例)
配置文件/opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list包含了host系统和guest系统共享的一系列目录和文件。
cat /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list
显示:
/home/
/etc/adduser.conf
/etc/deluser.conf
...
以下文件及配置会在host系统和guest系统中共享使用:
- User accounts
- user groups
- user privileges
- /home directories
- host configurations
- system information provided by Linux kernel
- devices and disks
- sockets
- pidfiles
- mount points
- logs
- temporary files
如需创建一个在host系统和guest系统之间共享的目录或文件,可以选择如下两种方法:
-
- 将newdir挂载到shareddir挂载点下:
sudo mount --bind /newdir /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
-
![]()
说明:
在卸载ExaGear Server前,需要卸载挂载的目录:
sudo umount /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
代理配置
/etc/environment在host系统和guest系统之间不共享。因此,如果你需要在本地网络中通过/etc/environment使用代理配置,确保你已经使用如下命令将配置复制到guest系统:
sudo cp /etc/environment /opt/exagear/images/ubuntu-<os_version>-x86_64/etc/environment
sysctl和网络配置
guest系统可以访问/proc/sys/中的sysctl设置,但不能修改/etc/sysctl.conf或/etc/sysctl.d/。sysctl参数的配置应在host系统上进行。
guest系统可以访问描述网络配置的文件(例如/etc/resolv.conf)但guest系统不可修改网络设置。网络设置的配置应在host系统上进行。
guest SysV风格的init脚本和systemd在host中的集成
Ubuntu采用systemd作为init系统,并支持SysV风格的init脚本作为legacy。许多Ubuntu包中会提供这些服务的配置。
默认情况下,系统采用全自动集成机制将guest服务表示为host服务。guest服务被注册为host服务,服务名称相同。因此,你可以从guest和host shell来管理guest服务(在这种情况下,host服务会将所有start/stop/testconfig等请求委托给各自的guest服务)。以Ubuntu为例:
显示:Starting the shell in the guest image /opt/exagear/images/ubuntu-<os_version>-x86_64
sudo apt-get update
sudo apt-get install nginx
exit
arch aarch64
sudo service nginx start
service nginx status
显示:
● nginx.service - nginx - high performance web server
Loaded: loaded (/run/systemd/generator.late/nginx.service; generated)
Active: active (running) since Fri 2019-05-17 11:56:35 EDT; 2h 54min ago ...
你可以通过列出guest系统的/opt/exagear/images/ubuntu-<os_version>-x86_64/etc/init.d/和
/opt/exagear/images/ubuntu-<os_version>-x86_64/lib/systemd/system/目录中的文件来查看guest系统中注册了哪些服务。
内存顺序模型
ExaGear Server 默认为Linux on x86应用程序提供弱内存顺序模型。 如果软件依赖于x86强内存顺序模型,则可能需要强制ExaGear严格遵循x86强内存顺序模型。可以通过修改Exagear Server配置文件来完成:
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /etc/exagear-x86_32.conf
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /etc/exagear-x86_64.conf
使用以下命令恢复弱内存序模型:
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /etc/exagear-x86_32.conf
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /etc/exagear-x86_64.conf
升级ExaGear for Server on Ubuntu
升级前准备
1. 确保host 系统已安装ExaGear Server
2. 将ExaGear Server的所有配置文件拷贝至host系统目录备份:
cp -r /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/* /tmp
升级步骤
1. 运行命令升级ExaGear Server软件包。
sudo dpkg -i exagear-utils_<package_version>_all.deb exagear-core-x64a64_<package_version>_arm64.deb exagear-core-x32a64_<package_version>_arm64.deb exagear-guest-for-ubuntu-<os_version>-x86_64-<package_version>_all.deb exagear-integration_<package_version>_all.deb
sudo apt-get install -f
2. 将备份的ExaGear Server配置文件与升级后的默认配置文件合并,以共享目录vpath-list配置文件为例,执行以下命令:
cat /tmp/vpath-list /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list |sort|uniq > /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list
升级后检查
通过以下命令确认升级后的ExaGear Server 版本:
cat /opt/exagear/cmcversion
![]()
说明:
新版本ExaGear Server将安装在旧版本上。所有guest系统中的Linux on x86 应用程序及ExaGear Server的相关配置均将保留
卸载ExaGear for Server on Ubuntu
须知:
卸载ExaGear for Server on Ubuntu会导致guest系统中的所有文件都会被删除,包括ExaGear for Server on Ubuntu安装时留下的文件以及后来由用户创建的文件。
在移除ExaGear for Server on Ubuntu之前,应确保已安装的所有Linux on x86 应用程序都已停止,如果你已经在guest系统中将host目录挂载到挂载点上,那么在卸载ExaGear for Server on Ubuntu之前,需要先卸载这些挂载点,更多请参考“配置ExaGear for Server on Ubuntu”
运行以下命令卸载ExaGear for Server on Ubuntu:
sudo dpkg -r exagear-core-x64a64 exagear-core-x32a64 exagear-guest-for-ubuntu-<os_version>-x86-64 exagear-integration exagear-utils
sudo rm -rf /opt/exagear
至此,ExaGear及其支撑工具已被移除,guest系统的目录和文件也将被移除。
日志记录
本章描述了ExaGear的日志记录功能。
Exagear Server的日志文件路径为/var/log/exagear目录下,日志文件格式如下所示:
[time stamp][ log type ][ guest executable name ][ PID ] [Message]
例如:
[2020-01-19 02:01:46][MEMORY][/opt/exagear/images/centos-7-x86_64/usr/bin/bash] [55060]TCache: 1824 Kb AddrMap: 20516 Kb HostMman: 34816 Kb TOTAL: 57156 Kb
ExaGear Server日志类型:
- ERROR:Exagear Errors;
- MEMORY:内存使用信息(通过--log-meminfo选项启用,详见附录内容);
- INFO:--verbose选项启用的附加信息。
![]()
说明:
- 只有ERROR日志类型消息是Exagear error消息,除附加info消息外其他日志类型消息是note error消息。
- 必须事先在host系统中手动创建文件夹 /Log/exagear,ExaGear才能使用该文件夹存储日志文件。
漏洞更新与安全加固
漏洞更新
ExaGear在发布之前会将涉及的Guest系统漏洞更新,保持与Guest OS的官网同步,在发布之后请用户自行根据Guest OS官方提供的补丁进行修复,例如CentOS的漏洞更新可参考官网(https://www.centos.org/)针对漏洞补丁的更新说明。涉及到ExaGear软件自身的漏洞修复,请通过鲲鹏社区获取ExaGear的最新进展。
安全加固
- 帐户口令
Guest系统的系统账户共享自Host系统,权限与Host系统保持一致,用户若加固,建议从Host系统上进行加固。
- 文件权限
Linux将所有对象都当作文件来处理,即使一个目录也被看作是包含有多个其他文件的大文件。因此,Linux中最重要的就是文件和目录的安全性。文件和目录的安全性主要通过权限和属主来保证。
该默认策略对系统中的常用目录、可执行文件和配置文件设置了权限和属主。
/usr/bin/readelf、/usr/bin/objdump属于binutils rpm包,该rpm包被rpm-build、 kmod等依赖,因此ExaGear安装包中涉及到的Guest系统必需包含此工具。为了尽量避免安全风险,这些文件的权限建议设置为750,属主被设置为root。
另外,Guest系统中如下的文件和Host系统共享,其权限和属主与Host系统保持一致,用户若加固,建议从Host系统进行加固。其他与Host系统非共享的文件,可直接在Guset系统进行加固:
表1 各目录结构
| etc目录 |
usr目录 |
其他目录 |
| /etc/host.conf |
/usr/share/icons/ |
/home/ |
| /etc/hostname |
/usr/share/pixmaps/ |
/root/ |
| /etc/hosts |
/usr/share/X11/ |
/proc/ |
| /etc/hosts.allow |
|
/dev/ |
| /etc/hosts.deny |
|
/sys/ |
| /etc/hosts.equiv |
|
/tmp/ |
| /etc/resolvconf/ |
|
/run/ |
| /etc/resolv.conf |
|
/mnt/ |
| /etc/yp.conf |
|
/media/ |
| /etc/nscd.conf |
|
/var/log/ |
| /etc/nslcd.conf |
|
/var/lib/dbus/ |
| /etc/nsswitch.conf |
|
|
| /etc/adduser.conf |
|
|
| /etc/deluser.conf |
|
|
| /etc/netgroup |
|
|
| /etc/netgroup- |
|
|
| /etc/group |
|
|
| /etc/group- |
|
|
| /etc/group+ |
|
|
| /etc/passwd |
|
|
| /etc/passwd- |
|
|
| /etc/passwd+ |
|
|
| /etc/gshadow |
|
|
| /etc/gshadow- |
|
|
| /etc/gshadow+ |
|
|
| /etc/shadow |
|
|
| /etc/shadow- |
|
|
| /etc/shadow+ |
|
|
| /etc/login.defs |
|
|
| /etc/machine-id |
|
|
| /etc/ldap.conf |
|
|
| /etc/ldap/ |
|
|
| /etc/sudoers |
|
|
| /etc/sudoers.d/ |
|
|
| /etc/securetty |
|
|
| /etc/fstab |
|
|
| /etc/fstab.d/ |
|
|
| /etc/fuse.conf |
|
|
| /etc/mtab |
|
|
| /etc/mtab.fuselock |
|
|
| /etc/mtab.old |
|
|
| /etc/blkid.conf |
|
|
| /etc/blkid.tab |
|
|
| /etc/mke2fs.conf |
|
|
| /etc/services |
|
|
| /etc/protocols |
|
|
| /etc/security/ |
|
|
| /etc/inputrc |
|
|
FAQ
Q1:指令翻译后的应用,重新启动后需要重新翻译吗?
A:需要重新翻译,ExaGear是动态翻译,不会改变x86应用二进制文件内容,只有执行过程中才会进行翻译。
Q2:指令翻译会有多大的性能损失?
A :通过SPEC CPU 2006工具测试,CPU性能损失20%,具体实际应用性能损失可能会比20%高,或者比20%低,需要实际测试。
Q3:当前只支持CentOS吗?是否支持其它OS?
A:当前支持CentOS 7、CentOS 8、Ubuntu18、Ubuntu20、OpenEuler 20.03。
Q4:可以在虚拟机中安装吗?
A:可以支持在虚拟机中安装ExaGear,需要注意,虚拟机的OS类型和ExaGear支持的Guest OS类型相同,虚拟机必须是ARM的虚拟机。
Q5:支持windows应用翻译吗?
A:不支持。
Q6: ExaGear for Server 和ExaGear for Docker可以部署在同一台机器上吗?
A: 不可以。
Q7: ExaGear使用的虚拟地址范围?
A: 当前版本使用的虚拟地址长度是48bit,如果内核允许的虚拟地址空间小于该长度,启动时会发生segment fault.
Q8: 安装时遇到错误:”Error: Problem: conflicting requests - nothing provides tar needed by exagear-guest-centos-7-x86_64-xxxx-1.noarch” 或者 “error: Failed dependencies: tar is needed by exagear-guest-centos-7-x86_64-xxxx-1.noarch”
A: 在host系统上,安装tar工具,或者若使用yum安装,需要配置好yum源。
技术支持
在使用过程中遇到问题,需提供技术支持时,请反馈如下信息至指令翻译工具论坛。
- 硬件信息
| 信息类型 |
获取命令 |
| CPU信息 |
lscpu 和/或者 cat /proc/cpuinfo |
| RAM信息 |
cat /proc/meminfo 和 free -h |
| 驱动信息 |
mount sudo parted -l sudo fdisk -l df -h |
- 操作系统信息
| 信息类型 |
获取命令 |
| 操作系统整体信息 |
cat /etc/os-release |
| 内核信息 |
uname -a |
| 系统页大小 |
getconf PAGE_SIZE |
| 内存映射信息 |
cat /proc/self/maps cat /etc/issue |
- ExaGear软件信息
| 信息类型 |
获取命令 |
| 已安装的ExaGear软件包 |
dpkg -l | grep exagear |
| 日志文件 |
该路径下的所有文件 /var/log/exagear/ |
| ExaGear二进制文件的Checksum信息 |
shasum -a 256 /opt/exagear/bin/ubt_x64a64_al shasum -a 256 /opt/exagear/bin/ubt_x32a64_al |
- 使用ExaGear运行的软件信息
| 信息类型 |
| 运行软件的完整版本信息 |
| 获取该软件的方式,比如下载链接等 |
| 该软件依赖的其它软件或者系统库等 |
- 复现问题的详细步骤
- 完整的测试命令及问题复现时的所有错误信息
- 如果问题出在运行benchmark中,请提供准确的启动命令,包括涉及的相关参数(比如运行数据库benchmark的相关参数)
附录
二进制选项
这些选项是ExaGear二进制的实现-特定的选项。对于一般的ExaGear运行,用户应该很少需要使用这些选项。
表1 ExaGear二进制选项
| 类别 |
命令 |
说明 |
| 一般选项 |
--help/-h |
显示包含所有exagear内部选项的描述。 |
| --version/-v |
显示产品构建版本。 |
| -f <param> |
执行给定的文件,而不是argv[0]。 |
| --program-fd <param> |
从给定的文件描述符中读取已执行的应用程序文件内容。 |
| --use-binfmt_misc |
使用binfmt_misc取代execve()实现。 |
| --force-binfmt_misc |
强制通过binfmt_misc执行execve()。 |
| 虚拟文件系统 (VFS) 选项 |
--path-prefix <param> |
Guest FS镜像路径。 |
| --opaths-list <param> |
重写的FS元素列表的路径。如果guest对“=”符号左边的二进制文件执行execve,那么“=”符号右边的host二进制文件也被执行。 |
| --vpaths-list <param> |
被替代的FS元素列表的路径。此列表中的路径是guest可见的host路径。有关更多详细信息,以Ubuntu 18为例,请参阅host系统和guest系统共享的目录一节。 |
| --utmp-paths-list <param> |
系统utmp路径列表的路径。Utmp文件是包含C结构体的文件,在guest和host架构中,这些C结构体可能不同。这些文件需要特殊控制后在此文件中列出。 |
| --vfs-kind <param> |
fs的一级根和二级根的选择(有效值为'host-first'和'guest-first')。 |
| --fs-root <param> |
Guest文件系统的根路径(chroot仿真)。 |
| --hifd-base <param> |
HiFd区域最高文件描述符。这个区域的文件描述符由exagear自己使用。 |
| --tmp-dir <param> |
存放临时文件的目录路径。 |
| --foreign-ubt-binary <param> |
外部guest架构的ubt路径。 |
| --foreign-opt-binary <param> |
外部guest架构的优化器的路径。 |
| --fast-math |
允许更快地执行数学计算,但在某些情况下可能导致不准确的结果。 |
| --smo-mode (none/*fbase*/all) |
强内存排序支持机制(默认启用'fbase')。 |
| --smo-severity (*smart*/full) |
强内存排序支持机制(默认启用'smart')。 |
| --use_opt <param> |
使用区域优化器(启用性能分析)。 |
| --opt_fd <param> |
优化器区域I/O的文件描述符。 |