#!/bin/bash
## written by xwsnet 2009.4.3
## This script detect environment of oracle install in redhat enterprise linux 4
#############################################
## Environment detect ##
uid=`id -u`
if [[ $uid != 0 ]]
then
echo "Execute this script must be root user,Thank you."
exit
fi
echo "############### Memory ###############"
echo ""
mem=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
mem_m=`expr $mem \/ 1024`
echo -e "MemTotal\t: $mem_m M (recommend > 922M)"
swap=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}'`
swap_m=`expr $swap \/ 1024`
echo -e "SwapTotal\t: $swap_m M (recommend > 1026M)"
tmp=`df -h /tmp | sed -n '$p' | awk '{if(5==NF){print $3}else if(6==NF){print $4}}'`
echo -e "TmpTotal\t: $tmp (recommend > 400M)"
echo ""
echo "######################################"
sleep 1
echo "############# Dependence #############"
echo ""
kernel_v=`uname -r`
glibc_v=`rpm -q glibc`
gcc_v=`rpm -q gcc`
make_v=`rpm -q make`
binutils_v=`rpm -q binutils`
libaio_v=`rpm -q libaio`
openmotif_v=`rpm -q openmotif`
setarch_v=`rpm -q setarch`
echo -e "Kernel\tversion :$kernel_v (Must be newer than 2.6.9)"
echo -e "glibc\tversion :$glibc_v (Must be newer than 2.3.2.95.27)"
echo -e "gcc\tversion :$gcc_v (Must be newer than 3.2)"
echo -e "make\tversion :$binutils_v (Must be newer than 2.14)"
echo -e "libaio\tversion :$libaio_v (Must be newer than 0.3)"
echo -e "openmotif version :$openmotif_v (Must be newer than 2.2.2-16)"
echo -e "setarch\tversion :$setarch_v (Must be newer than 1.3-1)"
echo ""
echo "#############################################"
sleep 3
echo "########## Update kernel parameter ##########"
echo "/etc/sysctl.conf"
echo ""
kernel_shmall=`sysctl -a | grep "kernel.shmall" | cut -d'=' -f2`
kernel_shmmax=`sysctl -a | grep "kernel.shmmax" | cut -d'=' -f2`
kernel_shmmni=`sysctl -a | grep "kernel.shmmni" | cut -d'=' -f2`
fs_file_max=`sysctl -a | grep "fs.file-max" | cut -d'=' -f2`
net_core_rmem_default=`sysctl -a | grep "net.core.rmem_default" | cut -d'=' -f2`
net_core_wmem_default=`sysctl -a | grep "net.core.wmem_default" | cut -d'=' -f2`
net_core_rmem_max=`sysctl -a | grep "net.core.rmem_max" | cut -d'=' -f2`
net_core_wmem_max=`sysctl -a | grep "net.core.wmem_max" | cut -d'=' -f2`
net_ipv4_ip_local_port_range=`sysctl -a | grep "net.ipv4.ip_local_port_range" | cut -d'=' -f2`
range_1=`echo $net_ipv4_ip_local_port_range | cut -d' ' -f1`
range_2=`echo $net_ipv4_ip_local_port_range | cut -d' ' -f2`
kernel_sem=`sysctl -a | grep "kernel.sem" | cut -d'=' -f2`
sem_1=`echo $kernel_sem | cut -d' ' -f1`
sem_2=`echo $kernel_sem | cut -d' ' -f2`
sem_3=`echo $kernel_sem | cut -d' ' -f3`
sem_4=`echo $kernel_sem | cut -d' ' -f4`
if [[ $kernel_shmall -ge 2097152 ]]
then
sysctl -a | grep "kernel.shmall"
else
echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
echo "kernel.shmall less than 2097152,altered."
fi
if [[ $kernel_shmmax -ge 536870912 ]]
then
sysctl -a | grep "kernel.shmmax"
else
echo "kernel.shmmax = 536870912" >> /etc/sysctl.conf
echo "kernel.shmmax less then 536870912,altered."
fi
if [[ $kernel_shmmni -ge 4096 ]]
then
sysctl -a | grep "kernel.shmmni"
else
echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
echo "kernel.shmmni less than 4096,altered."
fi
if [[ $fs_file_max -ge 65536 ]]
then
sysctl -a | grep "fs.file-max"
else
echo "fs.file-max = 65536" >> /etc/sysctl.conf
echo "fs.file-max less than 65536,altered."
fi
if [[ $net_core_rmem_default -ge 262144 ]]
then
sysctl -a | grep "net.core.rmem_default"
else
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_default less than 262144,altered."
fi
if [[ $net_core_wmem_default -ge 262144 ]]
then
sysctl -a | grep "net.core.wmem_default"
else
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_default less than 262144,altered."
fi
if [[ $net_core_rmem_max -ge 262144 ]]
then
sysctl -a | grep "net.core.rmem_max"
else
echo "net.core.rmem_max = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max less than 262144,altered."
fi
if [[ $net_core_wmem_max -ge 262144 ]]
then
sysctl -a | grep "net.core.wmem_max"
else
echo "net.core.wmem_max = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_max less than 262144,altered."
fi
sys_ctl=`sysctl -a | grep "net.ipv4.ip_local_port_range"`
sys_ctl_0=`echo $sys_ctl`
if [[ $range_1 -le 1024 ]]
then
if [[ $range_2 -ge 65000 ]]
then
echo $sys_ctl_0
else
echo "net.ipv4.ip_local_port_range = $range_1 65000" >> /etc/sysctl.conf
echo "$sys_ctl_0 range less than 1024 65000,altered."
fi
else
if [[ $range_2 -ge 65000 ]]
then
echo "net.ipv4.ip_local_port_range = 1024 $range_2" >> /etc/sysctl.conf
echo "$sys_ctl_0 range less than 1024 65000,altered."
else
echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
echo "$sys_ctl_0 range less than 1024 65000,altered."
fi
fi
if [[ $sem_1 -ge 250 ]]
then
if [[ $sem_2 -ge 32000 ]]
then
sem_a=`echo "$sem_1 $sem_2"`
else
sem_a=`echo "$sem_1 32000"`
fi
else
if [[ $sem_2 -ge 32000 ]]
then
sem_a=`echo "250 $sem_2"`
else
sem_a="250 32000"
fi
fi
if [[ $sem_3 -ge 100 ]]
then
if [[ $sem_4 -ge 128 ]]
then
sem_b=`echo "$sem_3 $sem_4"`
else
sem_b=`echo "$sem_3 128"`
fi
else
if [[ $sem_4 -ge 128 ]]
then
sem_b=`echo "100 $sem_4"`
else
sem_b="100 128"
fi
fi
sem_c=`echo "$sem_a $sem_b"`
k_sem=`echo $kernel_sem`
sys_ctl_1=`sysctl -a | grep "kernel.sem" | cut -d'=' -f2`
sys_ctl_2=`echo $sys_ctl_1`
if [[ $sem_c == $k_sem ]]
then
echo "kernel.sem = $sys_ctl_2"
else
echo "kernel.sem = $sem_c" >> /etc/sysctl.conf
echo "kernel.sem = $sys_ctl_2 less than 250 32000 100 128,altered."
fi
sysctl -p >> /dev/null 2>&1
echo "#################################################"
sleep 3
echo "############# Create Group and User #############"
echo ""
echo "Create oinstall group."
groupadd oinstall
echo "Create dba group."
groupadd dba
echo "Create user Oracle."
useradd -m -g oinstall -G dba oracle
if [[ $? == 0 ]]
then
echo "Please set a password to Oracle."
passwd oracle
fi
mkdir -p /u01/app/oracle
chmod -R 775 /u01
chown -R oracle.oinstall /u01
echo "####################################################"
sleep 1
echo "############# Amend the relevant files #############"
echo ""
echo "/etc/hosts"
hn=`hostname`
ip_addr=`ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -d':' -f2`
egrep "$ip_addr.*$hn" /etc/hosts 2>/dev/null
if [[ $? != 0 ]]
then
echo -e "add $ip_addr\t$hn to /etc/hosts"
echo -e "$ip_addr\t\t$hn" >> /etc/hosts
fi
echo ""
echo "/etc/security/limits.conf"
grep oracle /etc/security/limits.conf 2>/dev/null
if [[ $? != 0 ]]
then
#sed -i '/oracle/d' /etc/security/limits.conf # delete old configure including oracle words
echo -e "oracle\tsoft\tnproc\t2047" >> /etc/security/limits.conf
echo -e "oracle\thard\tnproc\t16384" >> /etc/security/limits.conf
echo -e "oracle\tsoft\tnfile\t1024" >> /etc/security/limits.conf
echo -e "oracle\thard\tnfile\t65536" >> /etc/security/limits.conf
echo -e "oracle\tsoft\tnproc\t2047"
echo -e "oracle\thard\tnproc\t16384"
echo -e "oracle\tsoft\tnfile\t1024"
echo -e "oracle\thard\tnfile\t65536"
fi
echo ""
echo "/etc/pam.d/login"
egrep "session.*required.*\/lib\/security\/pam_limits.so" /etc/pam.d/login 2>/dev/null
if [[ $? != 0 ]]
then
echo -e "session\trequired\t/lib/security/pam_limits.so" >> /etc/pam.d/login
echo -e "session\trequired\t/lib/security/pam_limits.so"
fi
echo ""
echo "/home/oracle/.bash_profile"
grep "ORACLE_HOME" /home/oracle/.bash_profile > /dev/null 2>&1
oracle_1=`echo $?`
grep "ORACLE_SID" /home/oracle/.bash_profile > /dev/null 2>&1
oracle_2=`echo $?`
grep "ORACLE_BASE" /home/oracle/.bash_profile > /dev/null 2>&1
oracle_3=`echo $?`
ora_var=`expr $oracle_1 + $oracle_2 + $oracle_3`
if [[ $ora_var != 0 ]]
then
echo 'umask 022' >> /home/oracle/.bash_profile
echo 'PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin' >> /home/oracle/.bash_profile
echo 'LD_LIBRARY_PATH=/usr/lib:/usr/X11R6/lib' >> /home/oracle/.bash_profile
echo '' >> /hom