实现用response文件静态安装Oracle
首先得有一个response文件,这个文件可能从/staging/response中得到。当然还得做必要的修改。
可以根据需要做一些修改:
RESPONSEFILE_VERSION=2.2.1.0.0
FROM_LOCATION="../stage/products.xml"
ORACLE_HOME="/u01/app/oracle/product/10.1.0/db_1"
ORACLE_HOME_NAME="OUIHome1"
TOPLEVEL_COMPONENT={"oracle.server","10.1.0.3.0"}
DEINSTALL_LIST={"oracle.server","10.1.0.3.0"}
。。。
s_superAdminPasswdType="N"
b_useSamePassword=false
s_superAdminSamePasswd="oracle"
s_superAdminSamePasswdAgain="oracle"
sl_superAdminPasswds={"sys","system","oracle","oracle"}
sl_superAdminPasswdsAgain={"sys","system","oracle","oracle"}
?
接着在linux环境中还得做不好工作,当然这些都可以放到一个shell脚本中一次做完:
????? #if oracle was never installed in this machine, it is must
function create_oraInst_file()
{
?? #create file /etc/oraInst.loc
?? echo "Create oracle location file /etc/oraInst.loc"
?? echo
?? rm -f /etc/oraInst.loc
?? touch oraInst.loc
?? cat >> oraInst.loc << EOF
inventory_loc=${ORACLE_BASE}/oraInventory
inst_group=oinstall
EOF
?? cp oraInst.loc /etc/oraInst.loc
?? chown oracle:oinstall /etc/oraInst.loc
?? chmod 664 /etc/oraInst.loc
?? mkdir ${ORACLE_BASE}/oraInventory
?? chown oracle:oinstall ${ORACLE_BASE}/oraInventory
?? rm -f oraInst.loc
}
???? create user and group
#include groups: osinstall, dba, oper
#include use: oracle
function add_groups_and_user()
{
?? #add groups for installing oracle
?? echo
?? echo "check or add the groups for installing ORACLE "
?? echo
?? [ "`grep oinstall: /etc/group`" = "" ] && sudo /usr/sbin/groupadd oinstall
?? [ "`grep dba: /etc/group`" = "" ] && sudo /usr/sbin/groupadd dba
?? [ "`grep oper /etc/group`" = "" ] && sudo /usr/sbin/groupadd oper
?? ! id oracle >&/dev/null && useradd oracle
?? usermod -g oinstall -G dba oracle
?? ORACLE_USER_DIR=$(get_user_directory oracle)
?? echo "User oracle directory: $ORACLE_USER_DIR"
?? cp /etc/sudoers /etc/sudoers.bak
?? sed '/.*/{/^( )*oracle/d}' /etc/sudoers > sudoers
?? cat >> sudoers <<EOF
oracle ALL=(ALL) NOPASSWD: ALL
EOF
?? cp -f sudoers /etc/
?? rm -f sudoers
}
#create oracle directory
function create_directory()
{
?? #make oracle_base
?? echo "make ORACLE_BASE:${ORACLE_BASE}"
?? echo
?? rm -rfv ${ORACLE_BASE}
?? mkdir -pv ${ORACLE_BASE}
?? mkdir -pv ${ORACLE_BASE}/oradata
?? chown -R oracle:oinstall ${ORACLE_BASE}
?? chmod -R 775 ${ORACLE_BASE}
?? #make directory /var/opt/oracle to contain files that describe various components of the
?? #Oracle server software installation
?? echo "make directory /var/opt/oracle to contain files that describe various components"
?? echo "of the Oracle server software installation"
?? echo
?? mkdir -pv /var/opt/oracle
?? chown oracle:dba /var/opt/oracle
?? chmod 755 /var/opt/oracle
}
#config system
function config_system_parameters()
{
?? echo "Config system parameters."
?? echo
?? cp /etc/sysctl.conf /etc/sysctl.conf.bak
?? sed '/.*/{/^kernel.shmall/d;/^kernel.shmmax/d;/^kernel.shmmni/d;/kernel.sem /d;/^fs.file-max/d;/^net.ipv4.ip_local_port_range/d}' /etc/sysctl.conf > sysctl.conf
?? cat >> sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
EOF
?? cp -f sysctl.conf /etc/
?? rm -f sysctl.conf
}
#need to change /etc/redhat-release
function config_release()
{
?? echo "Config OS release."
?? echo
?? [ -f /etc/redhat-release ] && mv /etc/redhat-release /etc/redhat-release.bak
?? cat >> redhat-release << EOF
Red Hat Enterprise Linux AS release 2.1 (Nahant Update 1)
EOF
?? cp -f redhat-release /etc/
?? rm -f redhat-release
}
function config_security_parameters()
{
?? echo "Config security parameters."
?? echo
?? cp /etc/security/limits.conf /etc/security/limits.conf.bak
?? sed '/.*/{/oracle/d}' /etc/security/limits.conf > limits.conf
?? cat >> limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
?? cp -f limits.conf /etc/security/limits.conf
?? rm -f limits.conf
??
?? cp /etc/pam.d/login /etc/pam.d/login.bak
?? if [ "`grep -c '^session.*required.*pam_limits.so' /etc/pam.d/login`" ]; then
????? echo "session required /lib/security/pam_limits.so" >> /etc/pam.d/login
?? fi
}
function config_user_parameters()
{
?? local user_name=$1
?? echo "Config $user_name user parameters."
?? echo
?? local user_dir=$(get_user_directory $user_name)
?? eval "sed '/.*/{/ORACLE/d}' ${user_dir}/.bashrc > bash_profile"
?? cat >> bash_profile <<EOF
[ -f /etc/bashrc ] && . /etc/bashrc
ORACLE_BASE=${ORACLE_BASE}
ORACLE_HOME=\$ORACLE_BASE/product/10.1.0/db_1
ORACLE_SID=bmcs
PATH=\$ORACLE_HOME/bin:\$PATH
LD_LIBRARY_PATH=\$ORACLE_HOME/jdk/jre/lib/i386
LD_LIBRARY_PATH=\$ORACLE_HOME/jdk/jre/lib/i386/server:\$LD_LIBRARY_PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH
EOF
?? eval "sed -n '/.*/w ${user_dir}/.bashrc' bash_profile"
?? . ${user_dir}/.bashrc
?? rm -f bash_profile
}
?
最后好好写安装命令,因为命令比较复杂也放到一个文件中了:
RETURN_CODE_ERROR_NET=101
RETURN_CODE_ERROR_CREATE_DB=102
RETURN_CODE_ERROR_OTHER=100
cmd="/home/oracle/Disk1/runInstaller -silent -responseFile /home/oracle/enterprise.rsp | awk \
'{if ( match(\$0,/^Check|Done|^Please check|successful|complete|succeed|in progress|^[^ ].*ing/) ) print \$0; \
if ( match(\$0,/^Launch.* Net.* Assistant/) ) {print \$0;print \"Config Oracle net ...\"};
if ( match(\$0,/^Launch.* Database.* Assistant/) ) {print \$0;print \"Create Database ...\"};
if ( endflag0 == 1 ) {exit endflag1}; \
if ( match(\$0,/Net Assistant .* unsucceed/) ) {endFlag1=$RETURN_CODE_ERROR_NET}; \
if ( match(\$0,/Database Assistant .* unsucceed/) ) {endFlag1=$RETURN_CODE_ERROR_NET}; \
if ( match(\$0,/The Installation .* successful/) ) {endFlag0=1;endFlag1=0}; \
if ( match(\$0,/The Installation .* unsuccessful/) ) {endFlag0=1;endFlag1=$RETURN_CODE_ERROR_OTHER} }'"
eval "$cmd"
retValue=$?
exit $retValue
?
OK了。
?
当然这个脚本还有很多需要完善,有空再做了。
?