1、首先需要搭建一个Web站点,用于提供yum服务和oracle软体下载,类似软件资料库一样。(也可使用Ftp服务代替Web服务,看自己的选择)
2、Oracle软件安装时,建议不要安装在根目录下,所以此脚本中/u 目录为一个分区,若无/u分区,则相关目录会在根目录下。此脚本还可以结合PXE+KICKSTART无人值守安装实现批量部署。
3、脚本内容如下:
#!/bin/bash
################################################################################################
# Install softeare -- Install oracle 11g database software
#
# History: 2016/01/25 zhuwei First release
################################################################################################
# set a safe path before doing anything else
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH
WEBSITE="http://192.168.1.10"
#-----------------------------------------------------------------------------------------------
# This script must be executed as root
RUID=`/usr/bin/id|awk -F\( ‘{print $1}‘|awk -F\= ‘{print $2}‘`
if [ ${RUID} != "0" ];then
$ECHO "This script must be executed as root"
exit 1
fi
#-----------------------------------------------------------------------------------------------
prepareSystem(){
# Set SElinux to disabled mode regardless of its initial value
sed -i -e ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/selinux/config
setenforce 0
# stop iptables
/etc/init.d/iptables stop
# *** Chkconfig section
# Turn off unwanted services
chkconfig --level 0123456 iptables off
chkconfig --level 0123456 ip6tables off
}
#-----------------------------------------------------------------------------------------------
# Display an error and exit
errorExit() {
echo "$@" >&2
exit 1
}
#-----------------------------------------------------------------------------------------------
# Display the normal print
displayheader() {
echo -e "\033[32m*******************************************************************\033[0m"
echo -e "\033[32m*\033[0m"$@""
echo -e "\033[32m*******************************************************************\033[0m"
echo ""
}
#-----------------------------------------------------------------------------------------------
#download oracle software
download(){
wget -N -q -P /u $WEBSITE/oracle11g/p10404530_112030_Linux-x86-64_1of7.zip
wget -N -q -P /u $WEBSITE/oracle11g/p10404530_112030_Linux-x86-64_2of7.zip
unzip -q -d /u /u/p10404530_112030_Linux-x86-64_1of7.zip
unzip -q -d /u /u/p10404530_112030_Linux-x86-64_2of7.zip
rm -rf /u/p10404530_112030_Linux-x86-64_1of7.zip
rm -rf /u/p10404530_112030_Linux-x86-64_2of7.zip
chown -R oracle:oinstall /u/database
}
#-----------------------------------------------------------------------------------------------
#Configure the kernel params
Configure1(){
cat >> /etc/sysctl.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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
EOF
if [ $? != 0 ]; then
errorExit ‘Unable to configure sysctl settings for database‘
fi
return 0
}
Configure2(){
cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
if [ $? != 0 ]; then
errorExit ‘Unable to configure settings for database‘
fi
return 0
}
Configure3(){
cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF
if [ $? != 0 ]; then
errorExit ‘Unable to configure settings for database‘
fi
return 0
}
#-----------------------------------------------------------------------------------------------
#In the table below for the list of users and user groups
#
# User Name Group Name
# --------- -------
# oracle dba,oinstall
# grid asmdba(If using the asm storage)
#
#Add Users and Groups
addUsers(){
GROUPEXIT1=`grep oinstall /etc/group|awk -F: ‘{print $1}‘`
if [ -z ${GROUPEXIT1} ]; then
/usr/sbin/groupadd oinstall || errorExit ‘Unable to add oinstall group‘
fi
GROUPEXIT2=`grep dba /etc/group|awk -F: ‘{print $1}‘`
if [ -z ${GROUPEXIT2} ]; then
/usr/sbin/groupadd dba || errorExit ‘Unable to add dba group‘
fi
USERSEXIT=`grep oracle /etc/shadow | awk -F: ‘{print $1}‘`
if [ -z ${USERSEXIT} ]; then
/usr/sbin/useradd -d /home/oracle -g oinstall -G dba oracle && passwd -l oracle || errorExit ‘Unable to add oracle user‘
#这里oracle用户是锁定的,不能通过ssh进行登录的,使用su - oracle切换用户之后操作是没有
#问题的,其实这里也可以使用usermod -L oracle && chage -d 0 oracle 让oracle用户第一次登录 #时要求修改密码。
fi
return 0
}
#-----------------------------------------------------------------------------------------------
#Configure the oracle user‘s environment
profile(){
cat >> /home/oracle/.bash_profile <<EOF
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_SID=test
export ORACLE_BASE=/u/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export ORACLE_TERM=xterm
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib:\$ORACLE_HOME/jdbc/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
export NLS_LANG="AMERICAN_AMERICA.GB2312"
export NLS_DATE_FORMAT=‘yyyy/mm/dd hh24:mi:ss‘
umask 022
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
EOF
if [ $? != 0 ]; then
errorExit ‘bash_profile this file does not exist‘
fi
return 0
}
#-----------------------------------------------------------------------------------------------
#To establish the oracle software installation directory
directory(){
if [ ! -d "/u/app/oracle" ]; then
mkdir -p /u/app/oracle
fi
chown -R oracle:oinstall /u/app
chmod -R 775 /u/app
}
HOSTNAME=`hostname`
PATH1="/u/database/response"
#-----------------------------------------------------------------------------------------------
#Configure the oracle silent installation files
silent(){
ORACLE_BASE="\/u\/app\/oracle"
ORACLE_HOME=${ORACLE_BASE}"\/product\/11\.2\.0\/db_1"
A1="ORACLE_HOSTNAME\="
A2="INVENTORY_LOCATION\="
A3="ORACLE_HOME\="
A4="ORACLE_BASE\="
B1=${A1}${HOSTNAME}
B2=${A2}${ORACLE_BASE}"\/oraInventory"
B3=${A3}${ORACLE_HOME}
B4=${A4}${ORACLE_BASE}
mv -f $PATH1/db_install.rsp $PATH1/db_install.rsp.bak
wget -N -q -P $PATH1 $WEBSITE/oracle11g/db_install.rsp
sed -i -e "s/${A1}/${B1}/g" -e "s/${A2}/${B2}/g" -e "s/${A3}/${B3}/g" -e "s/${A4}/${B4}/g" $PATH1/db_install.rsp || errorExit "The configuration file failed!"
#这里的wget下载下来的db_install.rsp文件有一通用的部分我是处理过的,然后放到Web服务端
#提供下载,修改过的内容如下:
#oracle.install.option=INSTALL_DB_SWONLY
#UNIX_GROUP_NAME=oinstall
#SELECTED_LANGUAGES=en
#oracle.install.db.InstallEdition=EE
#oracle.install.db.DBA_GROUP=dba
#oracle.install.db.OPER_GROUP=dba
#DECLINE_SECURITY_UPDATES=true
}
################################################################################################
# Detect and install oracle rpm package you need
VERSION1=`sed -n ‘1p‘ /etc/issue|awk ‘BEGIN{OFS=""} {print $1,$2,$7}‘`
VERSION2=`sed -n ‘1p‘ /etc/issue|awk ‘BEGIN{OFS=""} {print $1,$2,$7}‘|awk -F. ‘{print $1}‘`
VALUE=`/usr/bin/getconf LONG_BIT`
OSDIGIT=`/bin/uname -m`
P_YUM="/etc/yum.repos.d/"
#-----------------------------------------------------------------------------------------------
# Download yum client configure file
/usr/bin/wget -N -q -P $P_YUM $WEBSITE/rhelrepo/$VERSION2.repo || errorExit ‘Failed to download the yum client files,Please manually configure!‘
/bin/sed -i ‘s/RedHat/‘$VERSION1\_$OSDIGIT‘/g‘ $P_YUM$VERSION2.repo || errorExit ‘Replace the files is not successful,Please manually configure!‘
if [ -f $P_YUM$VERSION2.repo ]; then
displayheader "Successfully configured yum client, please continue"
fi
#-----------------------------------------------------------------------------------------------
# RedHat 5 and RedHat 6 install oracle software required RPM package
Red5=(binutils-2* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-0.* elfutils-libelf-devel-static-0.* gcc-4.* gcc-c++-4* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2* kernel-headers-2.* libaio-0.* libaio-devel-0.* libgcc-4.* libgomp-4.* libstdc++-4.* libstdc++-devel-* make-* numactl-devel-* sysstat-* pdksh-* ksh-* unixODBC-* unixODBC-devel-*)
Red6=(binutils-2* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-0.* gcc-4.* gcc-c++-4* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2* kernel-headers-2.* libaio-0.* libaio-devel-0.* libgcc-4.* libgomp-4.* libstdc++-4.* libstdc++-devel-* make-* numactl-devel-* sysstat-* pdksh-* unixODBC-* unixODBC-devel-*)
len5=${#Red5[@]}
len6=${#Red6[@]}
COUNT=0
#-----------------------------------------------------------------------------------------------
# Test your system has been installed the RPM package
displayheader "You have installed the required RPM package is as follows:"
if [ $VERSION2 == "RedHat5" ] ; then
for((i=0;i<len5;i++));
do
CHAR=${Red5[$i]}
rpm -qa | grep "^$CHAR"
if [ $? != 0 ] ; then
UNINSTALL[$COUNT]=${Red5[$i]}
COUNT=$(($COUNT+1))
fi
done
fi
if [ $VERSION2 == "RedHat6" ] ; then
for((i=0;i<len6;i++));
do
CHAR=${Red6[$i]}
rpm -qa | grep "^$CHAR"
if [ $? != 0 ] ; then
UNINSTALL[$COUNT]=${Red6[$i]}
COUNT=$(($COUNT+1))
fi
done
fi
printf ‘\n‘
#-----------------------------------------------------------------------------------------------
# Will not install the RPM packages for installation
if [ $COUNT -gt "0" ];then
displayheader "Do you have "$COUNT" rpm package not installed,not installed patch is:"
len=${#UNINSTALL[@]}
for((j=0;j<len;j++));
do
echo "${UNINSTALL[$j]}"
done
printf ‘\n‘
read -p "Are you sure to install the patch[yes or y]:" SELECT
printf ‘\n‘
if [ $SELECT == "yes" -o $SELECT == "y" ]; then
for((l=0;l<len;l++));
do
VAR=${UNINSTALL[$l]}
if [ $VAR == "pdksh-5.2.14-36.el5.x86_64.rpm" ]; then
rpm -qa ksh-*
if [ $? == 0 ]; then
yum -q -y remove ksh-*
fi
fi
yum -q -y install $VAR
done
fi
else
displayheader "Required RPM packages have been installed"
fi
prepareSystem || errorExit ‘Failed to prepare system‘
Configure1 && displayheader "The configure1 successful execution" || errorExit ‘Failed to system‘
Configure2 && displayheader "The configure2 successful execution" || errorExit ‘Failed to system‘
Configure3 && displayheader "The configure1 successfu3 execution" || errorExit ‘Failed to system‘
addUsers && displayheader "Building a successful oracle users and groups" || errorExit ‘Failed to system‘
directory && displayheader "Building a successful directory" || errorExit ‘Failed to system‘
profile || errorExit ‘Failed to system‘
displayheader "Is the download file, please wait a few minutes" && download
silent && displayheader "Modify db_install. RSP file successfully" || errorExit ‘Failed to system‘
displayheader "Is database software installed, please wait"
chmod a+x ${PATH1}/db_install.rsp
chown oracle:oinstall ${PATH1}/db_install.rsp
su - oracle -c "/u/database/./runInstaller -silent -force -responseFile ${PATH1}/db_install.rsp -ignoreSysPrereqs"执行以上脚本后还需要执行$ORACLE_BASE/oraInventory/orainstRoot.sh和$ORACLE_HOME/root.sh两个脚本。
本文出自 “以前,以后” 博客,谢绝转载!
原文地址:http://wyzwl.blog.51cto.com/8932072/1769299