自动化部署——Linux 系统中一键完成 Oracle 11gR2 客户端(64 位)和 JDK 1.6.0_45 的安装配置的bash shell脚本

脚本分为 3 个核心函数 + 执行逻辑,整体流程:

  1. int_profile():复制 bash 配置文件到 /app 目录,统一环境配置;
  2. install_oracle_client():下载并安装 Oracle 11gR2 客户端,包含用户 / 组创建、安装目录准备、环境变量配置、TNS 配置、静默安装等;
  3. jdk_install():下载并安装 JDK 1.6.0_45,配置全局环境变量;
  4. 最后删除自身脚本文件,完成部署。
#!/bin/bash
int_profile() {
	cd /app
	\cp -rvf /home/yewu/.bash* /app
}
int_profile
install_oracle_client() {
	cd /app
	#下载文件
	rm -rf client
	wget -N http://172.16.0.123:80/SRCS/linux.x64_11gR2_client.zip
	unzip linux.x64_11gR2_client.zip &>/dev/null
	cd -
	#建立用户与用户组
	if [[ -z "$(id oracle 2>/dev/null)" ]]; then
		sudo groupadd oinstall &>/dev/null
		sudo groupadd dba &>/dev/null
		sudo useradd -g oinstall -G dba oracle
		sudo echo -e "Gaoyangsray\nGaoyangsray" | passwd oracle
	else
		echo "oracle用户已经存在"
	fi
	#建立安装目录
	if [[ -d "/app/oracle" ]]; then
		echo "/app/oracle已经存在"
		backupfile="oracle_$(date +'%Y%m%d_%H%M%Si').tar.bz2"
		echo "自动归档备份为$backupfile"
		cd /app
		#sudo tar cjf ./$backupfile oracle &>/dev/null
		echo "初始化安装目录"
		sudo \rm -rf /app/oracle/* &>/dev/null
	else
		sudo mkdir -p /app/oracle &>/dev/null
	fi
	sudo chown -R oracle:oinstall /app/oracle
	sudo chmod -R 755 /app/oracle
	#设置环境变量1
	backupfile=".bash_profile_$(date +'%Y%m%d_%H%M%S').tar.bz2"
	echo "自动归档备份为$backupfile"
	sudo cat >/home/oracle/.bash_profile <<EOF
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
 
# User specific environment and startup programs
 
PATH=\$PATH:\$HOME/bin
# Oracle Settings
# Oracle Settings
TMP=/tmp
export TMP
TMPDIR=\$TMP
export TMPDIR
ORACLE_BASE=/app/oracle
export ORACLE_BASE
ORACLE_HOME=\$ORACLE_BASE/product/11.2/client_1
export ORACLE_HOME
export TNS_ADMIN=\$ORACLE_BASE/network/admin
ORACLE_SID=pro
export ORACLE_SID
ORACLE_TERM=xterm
export ORACLE_TERM
PATH=\$ORACLE_HOME/bin:\$PATH
export PATH
LD_LIBRARY_PATH=\$HOME/lib:\$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib:.
export CLASSPATH
export LD_ASSUME_KERNEL
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG
if [ \$USER = "oracle" ] || [ \$USER = "app" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
EOF
	#设置环境变量2
	backupfile=".bash_profile_$(date +'%Y%m%d_%H%M%S').tar.bz2"
	echo "自动归档备份为$backupfile"
	sudo cat >/app/.bash_profile <<EOF
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
 
# User specific environment and startup programs
 
PATH=\$PATH:\$HOME/bin
# Oracle Settings
# Oracle Settings
TMP=/tmp
export TMP
TMPDIR=\$TMP
export TMPDIR
ORACLE_BASE=/app/oracle
export ORACLE_BASE
ORACLE_HOME=\$ORACLE_BASE/product/11.2/client_1
export ORACLE_HOME
export TNS_ADMIN=\$ORACLE_BASE/network/admin
ORACLE_SID=pro
export ORACLE_SID
ORACLE_TERM=xterm
export ORACLE_TERM
PATH=\$ORACLE_HOME/bin:\$PATH
export PATH
LD_LIBRARY_PATH=\$HOME/lib:\$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib:.
export CLASSPATH
export LD_ASSUME_KERNEL
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG
if [ \$USER = "oracle" ] || [ \$USER = "app" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
EOF
	#建立oraInst.loc文件
	sudo cat >/etc/oraInst.loc <<EOF
inventory_loc=/app/oracle/oraInventory
inst_group=oinstall
EOF
	sudo chmod 664 /etc/oraInst.loc
	sudo mkdir -p /app/oracle/oraInventory
	sudo chown -R oracle:oinstall /app/oracle
	sudo chmod -R 755 /app/oracle
	#修改rsp文件
	sudo cat >/app/client/response/client.rsp <<EOF
oracle.install.responseFileVersion=/oracle/install/rspfmt_clientinstall_response_schema_v11_2_0
ORACLE_HOSTNAME=JSNJ-IVR-CS-LIN.10.2
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/app/oracle/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/app/oracle/product/11.2/client_1
ORACLE_BASE=/app/oracle
oracle.install.client.installType=Administrator
oracle.install.client.customComponents="oracle.sqlj:11.2.0.1.0","oracle.rdbms.util:11.2.0.1.0","oracle.javavm.client:11.2.0.1.0","oracle.sqlplus:11.2.0.1.0","oracle.dbjava.jdbc:11.2.0.1.0","oracle.ldap.client:11.2.0.1.0","oracle.rdbms.oci:11.2.0.1.0","oracle.precomp:11.2.0.1.0","oracle.xdk:11.2.0.1.0","oracle.network.aso:11.2.0.1.0","oracle.assistants.oemlt:11.2.0.1.0","oracle.oraolap.mgmt:11.2.0.1.0","oracle.network.client:11.2.0.1.0","oracle.network.cman:11.2.0.1.0","oracle.network.listener:11.2.0.1.0","oracle.ordim.client:11.2.0.1.0","oracle.ons:11.2.0.0.0","oracle.odbc:11.2.0.1.0","oracle.has.client:11.2.0.1.0","oracle.dbdev:11.2.0.1.0","oracle.rdbms.scheduler:11.2.0.1.0"
oracle.install.client.oramtsPortNumber=
oracle.install.client.schedulerAgentHostName=
oracle.install.client.schedulerAgentPortNumber=
EOF
	#设置文件
	mkdir -pv /app/oracle/network/admin/
	cat >/app/oracle/network/admin/tnsnames.ora <<EOF
pro1=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.64.31)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = IVRPRO)
 (SID=IVRPRO1)
    )
  )
 
 
pro2=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.64.32)(PORT = 1521))
   
    (CONNECT_DATA =
      (SERVICE_NAME = IVRPRO)
      (SID=IVRPRO1)
    )
  )
 
 
pro=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.64.41)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = IVRPRO)
)
)
EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
EOF
	#安装client
	\rm -f /tmp/oksilent.lock
	su - oracle <<EOF
/app/client/runInstaller -silent -responseFile /app/client/response/client.rsp 2>/dev/null
if [[ "$(ps aux | grep -c "[r]unInstaller")" == "0" ]];then
echo "ok" >/tmp/oksilent.lock
fi
EOF
	while :; do
		if [[ -s "/tmp/oksilent.lock" ]]; then
			echo "Next"
			break 1
		fi
		echo "Wait oracle client silent install"
		sleep 1
	done
	#root用户执行脚本
	/app/oracle/product/11.2/client_1/root.sh 2>/dev/null
	#测试
	#sqlplus dbp/jsnjivrdbp@pro1
}

jdk_install() {
	cd /tmp
	wget -N -c "http://172.16.0.123/SRCS/jdk-6u45-linux-x64.bin"
	if [[ -d "/tmp/jdk1.6.0_45" ]]; then
		\rm -rf /tmp/jdk1.6.0_45
	fi
	chmod 755 ./jdk-6u45-linux-x64.bin && ./jdk-6u45-linux-x64.bin
	\rm -f /tmp/jdk-6u45-linux-x64.bin
	if [[ -d "/app/jdk1.6.0_45" ]]; then
		\rm -rf /app/jdk1.6.0_45
	fi
	\mv /tmp/jdk1.6.0_45 /app/
	cat >>/app/.bash_profile <<EOF
#JDK1.6
JAVA_HOME=/app/jdk1.6.0_45
PATH=\$JAVA_HOME/bin:\$PATH
CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
EOF
	cat >>/home/oracle/.bash_profile <<EOF
#JDK1.6
JAVA_HOME=/app/jdk1.6.0_45
PATH=\$JAVA_HOME/bin:\$PATH
CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
EOF
}
install_oracle_client
jdk_install
rm -f /app/install.sh
Categories: 数据库运维