如何在 Intel x86 服务器上构建 IBM PowerLinux 应用程序 第2页

如何在 Intel x86 服务器上构建 IBM PowerLinux 应用程序 第2页,第1张

环境和配置

测试环境有一个 IBM Flex System® 组成,该系统有多个 IBM Flex System x240 计算节点和两个基于 IBM POWER7 处理器的节点(一个 Flex System p260 和一个 Flex System p460)。出于本项目的目的,我使用一个 Flex system x240 计算节点来交叉编译 Apache httpd 和 PostgreSQL。构建二进制程序后,我将它们转移到 Flex System p460 计算节点。图 7 显示了 IBM Flex System 测试环境的布局图。

图 7. IBM Flex System 测试环境

以下是我的系统配置、操作系统级别和其他与系统设置相关的信息。

Flex System x240 计算节点

用于交叉编译二进制程序的 Intel 节点仅需要足够的处理能力和内存,以便能够构建 Power 二进制程序。配置如下:

基于内核的虚拟机 (KVM) 管理程序 Red Hat 6.5

32 个处理器

64 GB 内存

IBM Storwize® V7000 存取区域网络 (SAN) 连接磁盘

KVM Guest 系统

Red Hat Enterprise Linux 6.5

4 个处理器

16 GB 内存

一个 virtio 磁盘:100 GB

一个配置为 br0 的虚拟网络接口卡 (NIC)

所有其他 KVM Guest 系统都已关闭,以消除破坏环境的任何可能性。

Flex System p440 计算节点

Flex System p440 计算节点包含多个逻辑分区 (LPAR),其中一个配置为测试服务器。PowerLinux 服务器配置如下:

IBM PowerVM® 来宾

Red Hat Enterprise Linux 6.5

8 个处理器(专用)

32 GB 内存

Storwize V7000 SAN 连接磁盘 (50 GB)

通过虚拟 I/O 服务器 (VIOS) 共享的以太网适配器

LPAR 配置

最小内存:256 MB

目标内存:32 GB

最大内存:64 GB

最少处理器数:8

目标处理器数:8

最大处理器数:32

处理模式:专用

专用内存

虚拟以太网适配器(通过 VIOS 建立)

适配器 ID:2

VLAN ID:1

需要此适配器来激活虚拟服务器:已选择

以下是我运行的其他一些命令:

# ppc64_cpu --frequency

min:3.56 GHz (cpu 28)

max:3.56 GHz (cpu 4)

avg:3.56 GHz

# ppc64_cpu --cores-present

Number of cores present = 8

# sysctl.conf

kernel.sem = 250 32000 3212288

使用 toolchain 构建应用程序

通常,构建开源发行版的过程是一个迭代过程。如果您很幸运的话,该过程可能已构建完成。不幸的是,因为大多数开源发行版都构建于 x86 服务器之上,所以在尝试为不同架构(比如 IBM Power 架构)构建它们时可能遇到问题。

如果在 Power 上构建开源包时遇到问题,只需在互联网上搜索类似情形,查看这些已报告的问题是否与您的经历密切相关。如果是相关的,那么在大多数情况下,您可以找到如何解决该问题的建议。

对我而言,尽管为配置脚本选择正确参数后,postgresql 很好地构建完成了,但 apache httpd 没那么幸运。接下来的几节将介绍为 Power 架构构建 apache httpd 所需的修复程序。

交叉编译器经验

编写本文时,我使用的交叉编译器版本是一个仅供 IBM 内部使用的版本,它专为修复我在测试期间遇到的一个错误而构建。读者可以下载 AT 7.0-5 版,它是最新的交叉编译器(在发表本文时),拥有接下来的几段中描述的错误的修复程序。

在我尝试交叉编译 apr-1.5.1 源代码发行版时,我看到了以下编译器消息。

"sorry - this program has been built without plugin support"

按照我在互联网上搜索可能的帮助和解决方案的建议,我找到多个链接提到编译器需要使用 “plugin enabled” 选项来构建。我向 toolchain 支持小组报告了此问题,toolchain 维护人员很快就回复了我,为我提供了一个使用 plugin enabled 选项构建的修改版本。请注意,toolchain 的交叉编译器和原生编译器版本都需要使用 plugin enabled 选项构建。我能够在获得拥有该修复程序的 toolchain 版本后继续工作。

这是我使用 PowerLinux toolchain 的第一次经历。

交叉编译 httpd 2.4.3

要交叉编译 Apache httpd,需要使用另外 3 个包。它们是:apr、apr-util 和 pcre。找到下载最新包的位置后,开始使用 toolchain 交叉编译器在 x86 服务器上构建它们。

我构建 apr-1.5.1 时遇到的问题是构建 gen_test_char.o 模块。请参阅 ASF Bugzilla – 错误 51257 了解有关的更多细节。我修改了 Makefile.in 文件(如下所示)并运行 buildconf 脚本,以便将更改包含在配置脚本中。

对 Makefile.in 的修改如下所示:

[root@stgisv240 apr-1.5.1]# diff -u Makefile.in ../../apr-1.5.1/Makefile.in

--- Makefile.in 2014-03-17 10:10:26.000000000 -0500

+++ ../../apr-1.5.1/Makefile.in 2014-07-03 13:36:11.125013781 -0500

@@ -46,7 +46,6 @@

CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs build/apr_rules.out tools/gen_test_char@EXEEXT@ - tools/gen_test_char.o tools/gen_test_char.lo \

include/private/apr_escape_test_char.h

DISTCLEAN_TARGETS = config.cache config.log config.status include/apr.h include/arch/unix/apr_private.h @@ -132,10 +131,9 @@

make_tools_dir:

$(APR_MKDIR) tools

-OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)

-tools/gen_test_char.lo: make_tools_dir

-tools/gen_test_char@EXEEXT@:$(OBJECTS_gen_test_char)

- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)

+tools/gen_test_char@EXEEXT@: make_tools_dir

+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c

+ $(BUILD_CC) $(CFLAGS_FOR_BUILD) $<-o $@

include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@

$(APR_MKDIR) include/private

修改 Makefile.in 文件后,我运行 buildconf 来创建了一个新配置脚本。下一段将介绍用于配置脚本的参数和变量。顺便说一下,我是根据其他尝试在其他平台(比如 ARM)上交叉编译 Apache httpd 及其组件的开发人员的建议,为配置脚本选择配置参数的。

以下是我在 x86 服务器上运行 apr-1.5.1 组件的配置脚本时,使用的参数和环境变量。

# Config script using Power Linux toolchain on x86

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux ac_cv_file__dev_zero=no

ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

BUILD_CC=gcc make install

我在 Power 服务器上了略加修改的相同发行版。请注意,用于 Power 服务器的 PowerLinux toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp 和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 Power toolchain 的路径首先传入您的 PATH 环境中。

以下是我在 Power 服务器上运行 apr-1.5.1 的配置脚本时使用的参数和环境变量。

# Config script using PowerLinux toolchain on Power

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp # Note the difference

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=ld # Note the difference

STRIP=powerpc64-linux-strip

#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"

#LDFLAGS=-L$SYSROOT/lib

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local/apr ac_cv_file__dev_zero=no

ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

ac_cv_struct_rlimit=yes

BUILD_CC=gcc make install

以下是我在 x86 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。

# Configure script for apr-util-1.5.3 on x86

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux --with-

apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no

apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

以下是我在 Power 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。

# Configure script for apr-util-1.5.3 on Power

BUILD_CC=gcc

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local/apr --host=powerpc64-linux --with-

apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no

apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1

以下是我在 x86 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。

# Configure script for httpd 2.4.3 on x86

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no --with-

pcre=/tmp/usr/local/bin/pcre-config --with-apr=/tmp/usr/local/apr --with-mpm=worker--

with-apr-util=/tmp/usr/local/apr/bin/apu-1-config

以下是我在 Power 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。

# Configure script for httpd 2.4.3 on Power

CC_FOR_BUILD=gcc

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

#ASCPP=powerpc-apm-linux-gnu-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

#CXXCPP=powerpc-apm-linux-gnu-cpp

CXX=powerpc64-linux-c++

LD=/opt/at7.0-5-rc1/bin/ld

STRIP=powerpc64-linux-strip

#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"

#LDFLAGS=-L$SYSROOT/lib

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no--with-

pcre=/home/usr/local/bin/pcre-config --with-apr=/home/usr/local/apr --with-mpm=worker--

with-apr-util=/home/usr/local/apr/bin/apu-1-config

交叉编译 PostgreSQL 9.4.3

不同于之前构建 httpd 所需的源代码发行版,我在交叉编译 PostgreSQL 时未遇到问题。PostgreSQL 是使用以下配置脚本来构建的。

以下是我在 x86 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。

# Configure script for postgresql-9.3.4 on x86

CC=powerpc64-linux-gcc

CPP=powerpc64-linux-cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

D=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/tmp/usr/local --host=powerpc64-linux --without-readline --without-zlib

与 Apache 配置脚本一样,您可以注意到针对 Power 服务器 toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 toolchain 的路径首先传入您的 PATH 环境中。

以下是我在 Power 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。

# Configure script for postgresql-9.3.4 on Power

CC=powerpc64-linux-gcc

CPP=cpp

AS=powerpc64-linux-as

AR=powerpc64-linux-ar

RANLIB=powerpc64-linux-gcc-ranlib

CXX=powerpc64-linux-c++

LD=powerpc64-linux-ld

STRIP=powerpc64-linux-strip

export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD

./configure --prefix=/home/usr/local --host=powerpc64-linux --without-readline --without-zlib

结束语

toolchain 交叉编译器的实际价值在于,开发人员可在他们熟悉的开发平台上(在大多数情况下是 x86)编译和构建 Power Architecture 应用程序。从我们的用例中可以看到,toolchain 可生成像原生编译的应用程序一样高效地执行的二进制可执行程序和库。而且,交叉编译的库与原生编译的应用程序兼容。最后但同样重要的是,交叉编译的应用程序可在本地调试以及使用 gdb 调试器远程调试。

PowerLinux toolchain 与在 x86 平台上使用原生 Linux toolchain 没什么不同。希望本文能让读者很好地了解 PowerLinux toolchain 的特性和功能。

以下非复制粘贴,为本人安装过程记录:

1. 安装CentOS,注意先不要创建oracle用户,语言务必选择英语;

2. 获取Oracle 11G安装包;

3. 创建Oracle安装目录;

1) 创建用户:oracle,组:oinstall,dba;

1) groupadd oinstall #创建用户组oinstall

2) groupadd dba #创建用户组dba

3) useradd -g oinstall -g dba -m oracle #创建用户oracle,并加入oinstall和dba用户组

4) passwd oracle #设置用户oracle的登录密码,根据提示输入两次密码

5) mkdir /oracle #创建Oracle安装目录

6) chown -R oracle:oinstall /oracle #设置目录所有者为oinstall用户组的oracle用户

1. 修改内核参数;

这一步修改主要是因为,在oracle的官方文档中有对oracle数据库安装配置的最低要求,因此需要修改一下

vi /etc/sysctl.conf #编辑,

#在最后添加以下代码

net.ipv4.icmp_echo_ignore_broadcasts = 1

net.ipv4.conf.all.rp_filter = 1

fs.file-max = 6815744

fs.aio-max-nr = 1048576

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max= 4194304

net.core.wmem_default= 262144

net.core.wmem_max= 1048576

保存退出后要进行如下操作以使配置生效

sysctl -p #使配置立即生效

2. 设置oracle用户限制

vi /etc/security/limits.conf #在末尾添加以下代码

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

3. 关闭SELINUX

vi /etc/selinux/config

#编辑配置文件

#注释掉SELINUX=enforcing

# 注释掉SELINUXTYPE=targeted

SELINUX=disabled #增加

4. 安装必备软件;

yum install gcc* gcc-* gcc-c++-* glibc-devel-* glibc-headers-* compat-libstdc* libstdc* elfutils-libelf-devel* libaio-devel* sysstat* unixODBC-* pdksh-*

5. 检查依赖关系

binutils-2.23.52.0.1-12.el7.x86_64

compat-libcap1-1.10-3.el7.x86_64

gcc-4.8.2-3.el7.x86_64

gcc-c++-4.8.2-3.el7.x86_64

glibc-2.17-36.el7.i686

glibc-2.17-36.el7.x86_64

glibc-devel-2.17-36.el7.i686

glibc-devel-2.17-36.el7.x86_64

ksh

libaio-0.3.109-9.el7.i686

libaio-0.3.109-9.el7.x86_64

libaio-devel-0.3.109-9.el7.i686

libaio-devel-0.3.109-9.el7.x86_64

libgcc-4.8.2-3.el7.i686

libgcc-4.8.2-3.el7.x86_64

libstdc++-4.8.2-3.el7.i686

libstdc++-4.8.2-3.el7.x86_64

libstdc++-devel-4.8.2-3.el7.i686

libstdc++-devel-4.8.2-3.el7.x86_64

libXi-1.7.2-1.el7.i686

libXi-1.7.2-1.el7.x86_64

libXtst-1.2.2-1.el7.i686

libXtst-1.2.2-1.el7.x86_64

make-3.82-19.el7.x86_64

sysstat-10.1.5-1.el7.x86_64

6. 配置用户的环境变量(可以安装完再设置)

vi /home/oracle/.bash_profile

#在最后添加以下代码

export ORACLE_BASE=/oracle/app/oracle #oracle数据库安装目录

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 #oracle数据库路径

export ORACLE_SID=orcl #oracle启动数据库实例名

export ORACLE_TERM=xterm #xterm窗口模式安装

export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH #添加系统环境变量

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量

export #防止安装过程出现乱码

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK #设置Oracle客户端字符集,必须与Oracle安装时设置的字符集保持一致,如:ZHS16GBK,否则出现数据导入导出中文乱码问题

保存退出以后,输入如下命令使配置生效

source .bash_profile #使设置立刻生效

7. 运行如下命令启动安装界面

export LANG=en_US #设置编码,防止图形界面乱码

./runInstaller [jarLoc=]

8. “ins_ctx.mk”错误处理

下载下面的文件,解压后使用其中libstdc++替换/usr/lib64目录下的同名文件即可

9. “ins_emagent.mk”编译错误,未解决,但未发现影响使用。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/202654.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存