简介:这份文档面向需要在虚拟机中搭建CentOS 6.5-x86_64开发或测试环境的运维与测试人员,系统梳理了从操作系统安装到常用组件部署的完整流程。资源包内仅含1个docx文件,大小约32KB,以图文步骤形式记录关键配置命令与参数,便于按需检索和对照操作。内容覆盖网络静态IP与DNS配置、VMware虚拟工具安装、mpiag与oracle用户创建,以及SSH、FTP、telnet、SVN、JDK、buildc、RF和Oracle数据库等组件的安装要点,并针对root访问限制、防火墙与SELinux、FTP中文路径等常见问题给出处理思路。已有384人学习下载,适合刚接触Linux部署、需要快速复现CentOS 6.5基础环境并完成Oracle相关自动化测试准备的读者参考。
1. 虚拟机里装 CentOS 6.5:一份被 Oracle 逼出来的部署清单
如果你手上有一台跑着 Oracle 10g 的老测试机,或者要复现一套基于 buildc + RF 的自动化测试环境,那你大概率绕不开 CentOS 6.5 这个版本。这份文档记录的就是在虚拟机里从零搭出这套环境的完整过程:装系统、配静态 IP、装 VMware Tools、建 mpiag 和 oracle 两个用户、开 SSH/FTP/Telnet、装 SVN 和 JDK、部署 buildc 框架、最后把 Oracle 数据库跑起来。它解决的不是"怎么学 Linux"的问题,而是"怎么在半天内把一台能跑自动化测试的机器交付出去"的问题。适合谁?适合需要维护遗留测试环境的一线工程师,以及被要求"照着文档搭一遍"的新人。硬盘给 30G 不是随便写的,Oracle 装完加上自动化测试跑起来,20G 就没了,剩下 10G 是留给你的后悔药。
2. 装系统与网络配置:静态 IP 是后面所有事的前提
2.1 系统安装时的几个硬性选择
安装介质是 RedHat 5.6_x64,序列号 550dd56b51499bd5,语言选中文,防火墙直接禁用。这几项在安装界面里都是一次性选择,装完再改成本高。硬盘 30G 的分配逻辑前面说了,Oracle 数据库安装后自动化测试会吃掉 20G 左右,所以别想着 20G 能凑合。
安装完成后第一件事是把终端快捷方式放到桌面。这个操作看起来不起眼,但后面所有配置都要在终端里敲命令,没有快捷方式就得每次去菜单里翻,属于典型的"五分钟省事,五天难受"。
2.2 静态 IP 配置:ifcfg-eth0 逐行拆解
网络配置是后面 SSH、FTP、SVN、Oracle 监听全部能通的基础。配置文件在/etc/sysconfig/network-scripts/ifcfg-eth0,静态 IP 的写法如下:
# /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 # 接口名称,别改 BOOTPROTO=static # 静态配置,DHCP 则写 dhcp BROADCAST=10.10.126.255 # 广播地址,此行可以不写 HWADDR=B2:23:38:50:3E:6B # 网卡物理地址,虚拟机里要跟实际一致 ONBOOT=yes # 开机自动加载,必须 yes IPADDR=10.10.126.235 # IP 地址,也可用 10.10.126.244 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=10.10.126.1 # 默认网关 TYPE=Ethernet USERCTL=yes IPV6INIT=no PEERDNS=yes几个参数说明一下。BOOTPROTO=static表示静态配置,如果写成DHCP就是动态获取,也可以写none。HWADDR在虚拟机里必须跟虚拟网卡的实际 MAC 一致,否则网卡起不来。ONBOOT=yes是开机自动加载,写成 no 的话每次重启都要手动ifup eth0。PEERDNS=yes表示允许 DHCP 获取的 DNS 覆盖/etc/resolv.conf,静态 IP 场景下影响不大。
DNS 配置在/etc/resolv.conf:
# /etc/resolv.conf nameserver 202.107.117.11 nameserver 210.83.210.155改完重启网络:
service network restart2.3 NAT 链接方式的配置差异
如果虚拟机用的是 NAT 模式,ifcfg-eth0的写法略有不同:
DEVICE=eth0 BOOTPROTO=none # NAT 下常用 none HWADDR=00:0c:29:2e:e8:f8 ONBOOT=yes IPADDR=192.168.50.132 NETMASK=255.255.255.0 GATEWAY=192.168.50.1 TYPE=Ethernet USERCTL=yes IPV6INIT=noNAT 模式下网关是虚拟网络编辑器里设定的网关地址,通常是192.168.x.1这个段。IP 地址要在 NAT 网段内且不被 DHCP 池占用。这里BOOTPROTO=none和static效果一样,都是不走 DHCP。
提示:改完网络配置后先用
ping网关确认二层通不通,再ping外网 DNS 确认路由和 DNS 都对。两步都过了再往下走,否则后面 SSH 连不上你会以为是 SSH 的问题。
3. 基础服务与用户体系:SSH、FTP、Telnet 的取舍
3.1 安装 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.plgzip -d解压.gz文件,tar -xvf解开 tar 包,然后进目录跑安装脚本。安装过程中一路回车用默认值即可。装完重启,虚拟工具功能生效。
3.2 创建 mpiag 和 oracle 用户
useradd mpiag passwd mpiag useradd oracle passwd oracleuseradd建用户,passwd设密码。这两个用户后面分别跑自动化测试和 Oracle 数据库,权限要分清楚。mpiag 是测试执行用户,oracle 是数据库管理用户,别混用。
3.3 SSH 配置:关 SELinux 和 DNS 反解
SSH 默认已安装并开启,但 root 用户默认不可访问。要让 root 能 SSH 登录,改/etc/sysconfig/selinux:
# 将 SELINUX=enforcing 改为 SELINUX=disabled改完立即生效。另外 SSH 连接慢通常是 DNS 反向解析拖的,在/etc/ssh/sshd_config尾部加一行:
UseDNS no3.4 FTP 安装与 root 访问放行
FTP 服务端用 vsftpd,安装包是vsftpd-2.0.5-16.el5_5.1.x86_64.rpm。启动和开机自启:
service vsftpd start chkconfig vsftpd onFTP 默认端口 21,如果 iptables 开着需要放行:
vi /etc/sysconfig/iptables # 增加一行 -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT让 root 用户能访问 FTP,需要改三个文件:
# 1. 编辑 /etc/vsftpd/ftpusers,在 root 前面加上 # # 2. 编辑 /etc/vsftpd/user_list,在 root 前面加上 # # 3. 编辑 /etc/vsftpd/vsftpd.conf,找到 userlist_enable=YES,把 YES 改为 NO service vsftpd restart如果 FTP 不能显示文件列表也不能创建文件,还是 SELinux 的问题,改/etc/selinux/config把 SELINUX 改为 disabled 后重启。如果 root 还是登不上,临时关防火墙:
/etc/init.d/iptables status # 查看防火墙状态 /etc/init.d/iptables stop # 本次关闭 /etc/init.d/iptables restart # 重启防火墙永久关闭:
chkconfig --level 35 iptables off注意--level中间是两个英式小短线。如果每次 FTP 访问验证密码很慢,是 DNS 反解的问题,把/etc/resolv.conf里的 nameserver 注释掉,然后重启 vsftpd。
3.5 Telnet 安装与 root 访问
Telnet 服务端安装包是telnet-server-0.17-39.el5.x86_64.rpm。启用服务:
vi /etc/xinetd.d/telnet # 将 disable 字段改为 no 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不需要重启即可生效。
注意:Telnet 是明文传输,生产环境不要用。这里装它是因为老测试环境里有些脚本依赖 telnet 做连通性检查,属于历史包袱。
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这个坑很典型:SVN 内部用 UTF-8,系统 locale 是 GBK 时转换失败。加上这行后中文路径正常。
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建软链接到/usr/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也可以不建链接,直接重启机器。Jenkins 如果跑在 Linux 上没装 JDK,需要配环境变量:
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/libJAVA_HOME是 JDK 根目录,JRE_HOME是 JRE 目录,PATH让java和javac命令全局可用,CLASSPATH指定类库搜索路径。
4.3 buildc 框架部署
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/buildcsvn export是不带.svn目录的干净导出,python setup.py install是 Python 包的标准安装方式,最后给/usr/bin/buildc可执行权限。
4.4 RF 环境安装
RF 框架从 SVN 导出后安装:
cd /home/temp svn export http://10.10.125.156/svn0/mpiag/users/wangtzh/rf_setup cd rf_setup python rf_setup.py install需要 root 用户执行安装。RF 是自动化测试框架,buildc 是构建框架,两者配合完成测试流程。
5. Oracle 数据库安装:从内核参数到监听配置
5.1 解压安装包与用户配置文件
Oracle 安装包是10201_database_linux_x86_64.cpio.gz:
gzip -d 10201_database_linux_x86_64.cpio.gz cpio -idv < 10201_database_linux_x86_64.cpiogzip -d解压 gz,cpio -idv从 cpio 归档中提取文件。
oracle 用户的.bashrc需要配置环境变量,关键部分:
# Oracle 环境 ORACLE_BASE=/home/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME ORACLE_SID=orcl; export ORACLE_SID; ORACLE_TERM=xterm; export ORACLE_TERM # 库路径 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib export LD_LIBRARY_PATH # Shell 搜索路径 PATH=$PATH:$ORACLE_HOME/bin; export PATH # CLASSPATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib export CLASSPATH # 语言设置 export NLS_LANG=AMERICAN_AMERICA.UTF8 export LC_ALL=CORACLE_BASE是 Oracle 根目录,ORACLE_HOME是具体产品目录,ORACLE_SID是数据库实例名。NLS_LANG和LC_ALL控制字符集,图形化安装界面需要LC_ALL=C。
5.2 内核参数调整
不调内核参数,安装检查会报警告。在/etc/sysctl.conf尾部加:
# For Oracle 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 -pkernel.shmmni是共享内存段最大数量,kernel.sem是信号量参数,fs.file-max是文件句柄上限,后面几个是网络缓冲区大小。
5.3 安装过程中的典型报错处理
情况一:操作系统版本检查失败
报错Checking operating system version: must be redhat-3, SuSE-9, redhat-4... Failed。方法一是改/etc/redhat-release,把版本号从 5.6 改成 4。方法二是改oraparam.ini,在[Certified Versions]的Linux=后面加上redhat-5。
情况二:libXp.so.6 缺失
报错libXp.so.6: cannot open shared object file,安装libXp-1.0.0-8.1.el5.i386.rpm即可。
情况三:DISPLAY 设置报错
报错Xlib: connection to ":0.0" refused by server或No protocol specified。root 用户下执行xhost +,然后回到 oracle 用户运行./runInstaller。
情况四:字符集选择
数据库字符集选Simplified Chinese ZHS16GBK。以前用ZGS32 GB18030,但导入 sqlplus 语句有乱码。数据库密码设为a12345A。
5.4 监听配置与数据库启动
数据库监听配置示例:
mpiag28 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.126.188)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )启动数据库四步:
lsnrctl start # 打开监听 sqlplus /nolog # 进入 sqlplus SQL> conn /as sysdba # 用 sysdba 角色登录 SQL> startup # 启动数据库验证监听:
sqlplus /nolog conn A28/A28@mpiag28 conn A27/A27@mpiag27 select table_name from user_tables;5.5 权限与共享内存问题
mpiag 用户不能用 sqlplus:root 登录后chmod -R 777 /home/oracle。
ORA-27121 共享内存段错误:oracle 可执行程序没有正确的 setuid。解决:
su - oracle cd $ORACLE_HOME/bin chmod 6751 oraclempiag 用户不能 conn / as sysdba:root 登录后usermod -a -G oracle mpiag。或者建 dba 组:
groupadd -g 151 dba usermod -a -G dba oracle usermod -a -G dba mpiag usermod -a -G oracle mpiag su - oracle sqlplus / as sysdba create user ops$mpiag identified by mpiag;5.6 打补丁
补丁包p8202632_10205_Linux-x86-64.zip,先关数据库:
unzip p8202632_10205_Linux-x86-64.zip cd Disk1 ./runInstaller sqlplus / as sysdba SQL> startup upgrade SQL> @/home/oracle/product/10.2.0/db_1/rdbms/admin/catupgrd.sql如果报OUI-11108: Packages information not specified,把/etc/redhat-release版本号改成 4。
6. 避坑与排查:那些文档没写但你一定会遇到的事
6.1 坑一:SELinux 没关干净导致 FTP 文件列表为空
现象:FTP 能登录,但ls不显示文件,也不能创建文件。
原因:SELinux 处于 enforcing 状态,限制了 vsftpd 对文件系统的访问。
解决:改/etc/selinux/config把SELINUX=改为disabled,重启生效。临时验证可以setenforce 0,但重启后会恢复。
6.2 坑二:SSH 连接慢到以为网络断了
现象:SSH 能连上,但每次输完密码要等十几秒才进 shell。
原因:sshd 默认对客户端 IP 做 DNS 反向解析,DNS 服务器响应慢或不可达时就会卡住。
解决:/etc/ssh/sshd_config尾部加UseDNS no,重启 sshd。FTP 密码验证慢同理,把/etc/resolv.conf里的 nameserver 注释掉再重启 vsftpd。
6.3 坑三:Oracle 安装检查报操作系统版本不匹配
现象:runInstaller走到操作系统版本检查时失败,提示只支持 redhat-3/4 等。
原因:Oracle 10g 的oraparam.ini里没有 redhat-5 的认证标记。
解决:改/etc/redhat-release版本号为 4,或者改oraparam.ini在Linux=后面加redhat-5。前者影响系统标识,后者只影响安装程序,推荐后者。
6.4 坑四:mpiag 用户执行 sqlplus 报权限错误
现象:mpiag 用户跑sqlplus报ORA-27121: unable to determine size of shared memory segment。
原因:$ORACLE_HOME/bin/oracle没有 setuid 位,非 oracle 用户无法访问共享内存。
解决:chmod 6751 $ORACLE_HOME/bin/oracle,然后用ls -l确认权限是-rwsr-s--x。
6.5 坑五:SVN 中文路径报编码转换错误
现象:svn export或svn update遇到中文路径时报Can't convert string from 'UTF-8' to native encoding。
原因:系统 locale 是 UTF-8,但 SVN 期望的 native encoding 是 GBK。
解决:在.bashrc里加export LC_ALL=zh_CN.GBK,重新登录或source ~/.bashrc。
7. 验证清单与一个老手的检查习惯
环境搭完不算完,得有一套验证动作确认每个组件都真的能用。下面这张表是我每次交付前必跑的检查项:
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 网络连通 | ping 10.10.126.1 | 通 |
| DNS 解析 | nslookup 域名 | 返回 IP |
| SSH 登录 | ssh root@IP | 秒进 shell |
| FTP 登录 | ftp IP用 root | 能列目录能上传 |
| SVN 导出 | svn export <url> | 无编码报错 |
| JDK 版本 | java -version | 1.6.0_37 |
| buildc | buildc --help | 有输出 |
| Oracle 监听 | lsnrctl status | READY |
| 数据库连接 | sqlplus A28/A28@mpiag28 | 能查表 |
这张表看着简单,但每一条背后都对应一个前面踩过的坑。比如 SSH 登录那条,如果没加UseDNS no,你会在"秒进"和"等十秒"之间反复怀疑网络。
最后说一个我自己的习惯:每次装完 Oracle 打完补丁,我一定会用 mpiag 用户跑一遍sqlplus / as sysdba和conn A28/A28@mpiag28,两个都通了才算完。因为补丁安装过程中catupgrd.sql会重建数据字典,有时候会把之前赋的权限冲掉。这个动作花不了两分钟,但能省掉后面自动化测试跑一半报数据库连接错误的排查时间。从那以后我每次交付前都强制走一遍这个验证清单,希望帮到你。
本文还有配套的精品资源,点击获取