ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CentOS 6.5虚拟机安装Oracle 10g与自动化测试环境搭建避坑指南

CentOS 6.5虚拟机安装Oracle 10g与自动化测试环境搭建避坑指南

简介:这份文档面向需要在虚拟机中搭建CentOS 6.5-x86_64开发或测试环境的运维与测试人员,系统梳理了从操作系统安装到常用组件部署的完整流程。内容涵盖Red Hat 5.6_x64基础系统安装、静态网络配置、VMware虚拟工具安装、mpiag与oracle用户创建,以及SSH、FTP、telnet、SVN、JDK、buildc、RF和Oracle数据库等组件的安装与配置,并针对防火墙、SELinux、DNS反向解析等常见问题给出排错思路。资源包为1个docx文档,大小约32KB,以图文步骤形式记录关键命令与配置文件修改位置,便于对照操作。目前已有384人学习下载,适合刚接触Linux部署、需要快速搭建完整测试环境的读者参考,也可作为Oracle自动化测试环境搭建的实操笔记。

1. 虚拟机装 CentOS 6.5 这件事,版本选错后面全是坑

虚拟机里装 CentOS 6.5-x86_64,看着像老掉牙的操作,但真到要跑 Oracle 10g、buildc、RF 这套自动化测试环境的时候,你会发现只有这个组合最稳。我见过太多人上来就装 CentOS 7 甚至 8,结果 Oracle 10.2.0 的 runInstaller 直接卡在操作系统版本检查那一步,报Checking operating system version: must be redhat-3, SuSE-9, redhat-4... Failed,然后开始满世界找补丁,一折腾就是两天。这套环境的核心诉求其实很明确:30G 硬盘起步(Oracle 装完加上自动化测试跑起来,20G 左右就没了),静态 IP 固定住,防火墙关掉,SELinux 关掉,然后按顺序把 SSH、FTP、telnet、SVN、JDK、buildc、RF、Oracle 一个个装上去。适合谁?适合那些手里拿到一份部署文档、需要在隔离网络里从零搭一套能跑自动化测试的 Linux 环境的开发者。装不好会怎样?网络不通、FTP 登不上、Oracle 监听起不来、sqlplus 连不上,每一个都能让你卡半天。

2. 装系统与基础配置:从 RedHat 5.6 到 CentOS 6.5 的落地步骤

2.1 操作系统安装与序列号处理

原始文档里写的是安装 RedHat 5.6_x64,序列号550dd56b51499bd5。实际落地时,很多人手里拿到的镜像就是 CentOS 6.5-x86_64,这两者在 Oracle 安装检查环节的表现基本一致,因为 CentOS 6.5 对应的 redhat-release 版本标记可以被 Oracle 的 oraparam.ini 识别为 redhat-5。安装过程中几个关键选择:语言选中文,防火墙直接禁用,SELinux 在安装时就可以设为 disabled,硬盘给 30G。我一般会在虚拟机创建时就把磁盘类型设成单个文件,避免后续快照和迁移出问题。

安装完成后第一件事是确认系统版本和内核:

cat /etc/redhat-release uname -r

如果显示的是CentOS release 6.5 (Final)和2.6.32-431.el6.x86_64,说明基础系统没问题。接下来把终端快捷方式放到桌面,这个操作在 GNOME 桌面环境下就是右键桌面创建启动器,命令指向/usr/bin/gnome-terminal。别小看这一步,后面配网络、装 Oracle 的时候要频繁开终端,有个桌面快捷方式能省不少事。

2.2 静态 IP 与 DNS 配置

网络配置是整套环境能不能通的基础。编辑/etc/sysconfig/network-scripts/ifcfg-eth0,内容按下面这样写:

DEVICE=eth0 BOOTPROTO=static HWADDR=B2:23:38:50:3E:6B ONBOOT=yes IPADDR=10.10.126.235 NETMASK=255.255.255.0 GATEWAY=10.10.126.1 TYPE=Ethernet USERCTL=yes IPV6INIT=no PEERDNS=yes

这里几个参数值得说清楚。BOOTPROTO=static表示静态配置,如果写成dhcp就是动态获取,生产环境里 Oracle 监听绑定的 IP 不能变,所以必须静态。HWADDR是网卡物理地址,虚拟机克隆后这个值会变,如果发现网络起不来,先检查这里。ONBOOT=yes保证开机自动加载。IPADDR按你实际网段填,文档里给了两个可选值,选一个没被占用的就行。PEERDNS=yes表示允许 DHCP 获取的 DNS 覆盖,但我们是静态配置,所以这个值实际不影响,写上也无妨。

DNS 配置在/etc/resolv.conf:

nameserver 202.107.117.11 nameserver 210.83.210.155

改完重启网络:

service network restart

如果重启后ping外网不通,先ifconfig看 IP 有没有生效,再route -n看默认网关对不对。NAT 模式下配置略有不同,BOOTPROTO=none,IPADDR用192.168.50.132这类 VMware NAT 网段地址,网关指向192.168.50.1。我一般会在配完网络后立刻ping一下网关和 DNS,确认通了再往下走,不然后面装 Oracle 时发现网络问题,排查成本翻倍。

2.3 安装 VMware Tools 与创建用户

VMware Tools 装不装,直接影响虚拟机的显示分辨率和文件拖拽。操作步骤:

mkdir /home/temp cp /media/VMware\ Tools/VMwareTools-9.6.1-1378637.tar.gz /home/temp cd /home/temp gzip -d VMwareTools-9.6.1-1378637.tar.gz tar -xvf VMwareTools-9.6.1-1378637.tar cd vmware-tools-distrib/ ./vmware-install.pl

安装脚本一路回车用默认值就行,装完重启。这里注意,/media/VMware Tools/路径里有空格,复制的时候要转义或者加引号,否则cp会报错。

创建用户是 Oracle 安装的前置条件:

useradd mpiag passwd mpiag useradd oracle passwd oracle

mpiag 用户是后面跑自动化测试用的,oracle 用户是装数据库用的。密码按文档里给的a12345A设置。创建完用户后,我习惯用id mpiag和id oracle确认一下用户和组信息,后面配权限的时候心里有数。

3. 服务组件安装:SSH、FTP、telnet 的配置与排错

3.1 SSH 安装与 root 访问配置

SSH 在 CentOS 6.5 里默认已经安装并开启,但 root 用户默认不能直接访问。要让 root 能 SSH 登录,编辑/etc/sysconfig/selinux:

SELINUX=disabled

改完立即生效。另外 SSH 连接慢的问题,十有八九是 DNS 反向解析卡住了。在/etc/ssh/sshd_config尾部加一行:

UseDNS no

然后重启 SSH 服务:

service sshd restart

这两个操作做完,root 用户 SSH 登录应该就正常了。如果还是连不上,检查/etc/ssh/sshd_config里PermitRootLogin是不是yes,CentOS 6.5 默认是yes,但有些镜像会改成no。

3.2 FTP 服务端安装与 root 登录

FTP 服务端用的是vsftpd-2.0.5-16.el5_5.1.x86_64.rpm,安装命令:

rpm -ivh vsftpd-2.0.5-16.el5_5.1.x86_64.rpm service vsftpd start chkconfig vsftpd on

chkconfig vsftpd on是设置开机自启,别漏了。FTP 默认端口 21,如果 iptables 开着,需要放行:

vi /etc/sysconfig/iptables

增加一行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

然后重启 iptables。让 root 用户能登录 FTP,需要改三个地方:

vi /etc/vsftpd/ftpusers # root 前面加 # vi /etc/vsftpd/user_list # root 前面加 # vi /etc/vsftpd/vsftpd.conf # userlist_enable=YES 改为 NO service vsftpd restart

如果 FTP 能登录但看不到文件列表、也不能创建文件,大概率是 SELinux 没关干净。检查/etc/selinux/config,把SELINUX=改成disabled,重启生效。如果每次 FTP 验证密码特别慢,还是 DNS 解析的问题,把/etc/resolv.conf里的 nameserver 注释掉,重启 vsftpd。

3.3 telnet 服务端安装与 root 访问

telnet 虽然不安全,但在隔离网络里调试端口连通性还是有用。安装telnet-server-0.17-39.el5.x86_64.rpm,然后编辑/etc/xinetd.d/telnet,把disable字段改成no,重启 xinetd:

service xinetd restart

让 root 用户能 telnet 登录,文档里给了两种方法。方法一是去掉/etc/pam.d/login里的auth required /lib/security/pam_securetty.so,但文档明确说了“此方法重启没好用”。方法二是编辑/etc/securetty,加上:

pts/0 pts/1 pts/2 pts/3

不需要重启,立即生效。我一般直接用方法二,省事。

4. 开发环境搭建:SVN、JDK、buildc、RF 的安装顺序

4.1 SVN 客户端与中文路径问题

SVN 客户端默认已经安装,但中文路径会报错svn: Can't convert string from 'UTF-8' to native encoding。解决办法是在.bashrc里加:

export LC_ALL=zh_CN.GBK

然后source ~/.bashrc。这个坑我踩过,当时 checkout 一个带中文目录的仓库,死活报编码错误,加了这行就好了。

4.2 JDK 安装与环境变量配置

JDK 用的是jdk-6u37-linux-x64.bin,安装到/usr/java:

mkdir /usr/java cp /home/temp/jdk-6u37-linux-x64.bin /usr/java/ cd /usr/java ./jdk-6u37-linux-x64.bin rm -f jdk-6u37-linux-x64.bin

安装完创建软链接:

cd /usr/bin ln -s -f /usr/java/jdk1.6.0_37/jre/bin/java ln -s -f /usr/java/jdk1.6.0_37/bin/javac

环境变量配置:

export JAVA_HOME=/usr/java/jdk1.6.0_37/ export JRE_HOME=/usr/java/jdk1.6.0_37/jre export PATH=$PATH:/usr/java/jdk1.6.0_37/bin export CLASSPATH=$CLASSPATH:./:/usr/java/jdk1.6.0_37/lib:/usr/java/jdk1.6.0_37/jre/lib

这些写到/etc/profile或者用户自己的.bashrc里都行。Jenkins 如果跑在这台机器上,JDK 是必须的,而且环境变量要配全,不然 Jenkins 启动时会报找不到 Java。

4.3 buildc 框架与 RF 环境安装

buildc 框架从 SVN 导出:

cd /home/temp svn export http://10.10.125.156/svn0/mpiag/users/wangtzh/kernel_buildc-0.3.2 cd kernel_buildc-0.3.2 python setup.py install cd .. chmod 777 /usr/bin/buildc

RF 环境文档里标注了“不安装”,但步骤还是记一下:

cd /home/temp svn export http://10.10.125.156/svn0/mpiag/users/wangtzh/rf_setup cd rf_setup python rf_setup.py install

这两个框架都依赖 Python,CentOS 6.5 自带 Python 2.6,够用。chmod 777 /usr/bin/buildc这一步是为了让所有用户都能执行 buildc 命令,生产环境里这么干有点糙,但测试环境图省事就这么写了。

5. Oracle 10g 安装避坑:从内核参数到监听配置

5.1 内核参数调整与用户配置文件

Oracle 安装前必须调内核参数,否则安装检查会报一堆警告。编辑/etc/sysctl.conf,尾部加:

kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default = 262144 net.core.rmem_max = 262144 net.core.wmem_default = 262144 net.core.wmem_max = 262144

然后/sbin/sysctl -p激活。oracle 用户的.bashrc要配全环境变量,重点是ORACLE_BASE、ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH、PATH、CLASSPATH,还有NLS_LANG=AMERICAN_AMERICA.UTF8和LC_ALL=C。LANG和LANGUAGE设成zh_CN.GB18030保证中文不乱码。这些变量一个都不能少,少一个后面 sqlplus 就可能报错。

5.2 安装报错处理与字符集选择

安装过程中最常见的报错是操作系统版本检查失败。两种改法:一是改/etc/redhat-release,把版本号改成 4;二是改oraparam.ini,在[Certified Versions]的Linux=后面加上redhat-5。我一般用第二种,不动系统文件,风险小。

libXp.so.6缺失就装libXp-1.0.0-8.1.el5.i386.rpm。DISPLAY设置报No protocol specified,在 root 下执行xhost +,再回到 oracle 用户跑./runInstaller。

数据库字符集选Simplified Chinese ZHS16GBK,别选ZHS32GB18030,文档里明确说了后者导入 sqlplus 语句会有乱码。数据库密码设成a12345A。

5.3 监听配置与权限修复

监听配置示例:

mpiag28 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.126.188)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )

验证监听:

sqlplus /nolog conn A28/A28@mpiag28 select table_name from user_tables;

mpiag 用户不能用 sqlplus,需要chmod -R 777 /home/oracle。遇到ORA-27121: unable to determine size of shared memory segment,是 oracle 可执行文件的 setuid 没设对:

su - oracle cd $ORACLE_HOME/bin chmod 6751 oracle

mpiag 用户不能用conn / as sysdba,需要把 mpiag 加到 oracle 组:

su - root usermod -a -G oracle mpiag

然后创建ops$mpiag用户。这些权限问题在 Oracle 安装里非常典型,本质上是安装程序没有自动处理好组和 setuid,手动补上就行。

6. 装完怎么验证:从监听启动到 sqlplus 连通的完整检查

装完 Oracle 只是第一步,能不能跑起来才是关键。我一般按下面这个顺序验证,每一步过了再走下一步,不跳步。

第一步,启动监听:

lsnrctl start

看到The command completed successfully才算过。如果报错,检查$ORACLE_HOME/network/admin/listener.ora里的 HOST 是不是本机 IP,PORT 是不是 1521。

第二步,进入 sqlplus 并以 sysdba 登录:

sqlplus /nolog SQL> conn /as sysdba SQL> startup

startup输出里会显示Database opened,说明数据库实例起来了。如果卡在ORACLE not available,回头检查ORACLE_SID环境变量和$ORACLE_HOME/dbs/下的参数文件。

第三步,验证业务用户连接:

sqlplus /nolog SQL> conn A28/A28@mpiag28 SQL> select table_name from user_tables;

能查出表来,说明监听、服务名、用户密码全对。这一步如果报ORA-12541: TNS:no listener,就是监听没起或者端口不对;报ORA-01017: invalid username/password,就是密码错了或者用户没建对。

第四步,检查开机自启。Oracle 本身没有chkconfig那种服务管理,我一般会在/etc/rc.local里加:

su - oracle -c "lsnrctl start" su - oracle -c "sqlplus /nolog <<EOF conn /as sysdba startup EOF"

这样重启后数据库自动起来。但注意,/etc/rc.local要有执行权限,chmod +x /etc/rc.local。

第五步,验证 mpiag 用户能不能跑自动化测试。用 mpiag 登录,执行sqlplus连接,确认权限没问题。如果报ORA-27121,回去检查chmod 6751 oracle那一步。

提示:每次改完 Oracle 相关配置,重启监听和数据库之前,先用lsnrctl status和ps -ef | grep ora_确认当前状态,避免盲目重启导致问题被掩盖。

从那以后我每次装完 Oracle,都强制走一遍这五步验证,不看到select table_name from user_tables出结果,绝不往下装别的组件。这套环境搭一次不容易,验证环节省不得。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进