首先得有一个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了。
当然这个脚本还有很多需要完善,有空再做了。