#!/bin/bash
# # # # # # # # # # # # #
# #
# islath at Dec 27,2018 #
# #
# # # # # # # # # # # # #
################################################################
# #
# configure area #
# #
################################################################
# #
# manual install compat-libstdc++-33 #
# #
################################################################
password=midwacs
dbname=midwacs
nodename1=taijutsu
nodename2=kaiten
oradir=/u01
gridbase=${oradir}/app/grid
dbbase=${oradir}/app/oracle
gridhome=${oradir}/app/19.3.0/grid
dbhome=${oradir}/app/oracle/product/19.3.0/dbhome_1
oracleinventory=${oradir}/app/oraInventory
node1pubip=10.10.16.236
node2pubip=10.10.16.237
node1virtip=10.10.16.238
node2virtip=10.10.16.239
scanip=10.10.16.240
node1privip=192.168.0.236
node2privip=192.168.0.237
################################################################
# #
################################################################
#init node flag
node=1
if [ `echo ${#dbname}` -gt 8 ]
then
echo "dbname can not over 8 charactors"
exit 1
fi
#check basic environment
midwacs_osmem=`grep -i memtotal /proc/meminfo | awk '{print $2}'`
midwacs_osdisk=`df / | tail -1 | awk '{print $(NF-2)}'`
find *.zip
if [ "$?" -ne "0" ]; then
#according ./*.zip to judge node
node=2
echo "running on node2"
# exit 1
elif [ `id -u` -ne "0" ]; then
echo "should be running as root user "
exit 2
elif [ ${midwacs_osmem} -lt "1000000" ]; then
echo "memory insufficient"
exit 3
elif [ ${midwacs_osdisk} -lt "8000000" ]; then
echo "disk space insufficient"
exit 4
fi
#config hosts
cp -f /etc/hosts{.midwacsbak,} 2> /dev/null
cp -f /etc/hosts{,.midwacsbak}
cat >> /etc/hosts <<EOF
${node1pubip} ${nodename1}
${node2pubip} ${nodename2}
${node1virtip} ${nodename1}-vip
${node2virtip} ${nodename2}-vip
${scanip} ${dbname}-scan
${node1privip} ${nodename1}-priv
${node2privip} ${nodename2}-priv
EOF
#config local yumrepo
mkdir -p /media/cdromrac
umount /dev/cdrom
mount /dev/cdrom /media/cdromrac
cat > /etc/yum.repos.d/yum.local.repo << EOF
[local]
name=yum.local.repo
baseurl=file:///media/cdromrac
enable=1
gpgcheck=0
EOF
yum clean all
yum makecache
if [ "$?" -ne "0" ]; then
exit 2
fi
#multipath
yum install -y \
device-mapper-multipath
#unzip(extract the database installation file)
yum install -y \
unzip
#openssh-clients(optional for minimal installation)
#chrony
yum install -y \
chrony
#xdpy(optional)
yum install -y \
xterm \
xdpyinfo \
xorg-x11-xauth
#oracle rac dependences
yum install -y \
compat-libstdc++-33 \
libaio-devel \
elfutils-libelf-devel \
gcc-c++ \
sysstat \
ksh \
nfs-utils \
smartmontools \
compat-libcap1 \
bc
#config multipathd
cp /usr/share/doc/device-mapper-multipath-0*/multipath.conf /etc/multipath.conf
systemctl restart multipathd
systemctl enable multipathd
#create user,groups
groupadd oinstall
groupadd dba
groupadd oper
groupadd backupdba
groupadd dgdba
groupadd kmdba
groupadd asmdba
groupadd asmoper
groupadd asmadmin
groupadd racdba
useradd -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle
useradd -g oinstall -G asmadmin,asmdba,asmoper,dba grid
echo "oracle:${password:=midwacs}" | chpasswd
echo "grid:${password:=midwacs}" | chpasswd
cp -f /etc/profile{.midwacsbak,} 2> /dev/null
cp -f /etc/profile{,.midwacsbak}
cat >> /etc/profile <<EOF
# By ISLATH
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
#config user(root) ~/.bash_profile
cp -f ~root/.bash_profile{.midwacsbak,} 2> /dev/null
cp -f ~root/.bash_profile{,.midwacsbak}
echo "export LANG=en_US" >> ~root/.bash_profile
source ~root/.bash_profile
#config user(oarcle) ~/.bash_profile
cp -f ~oracle/.bash_profile{.midwacsbak,} 2> /dev/null
cp -f ~oracle/.bash_profile{,.midwacsbak}
echo "export ORACLE_BASE=${dbbase}" >> ~oracle/.bash_profile
echo "export ORACLE_HOME=${dbhome}" >> ~oracle/.bash_profile
echo '#the follow depend on database charset' >> ~oracle/.bash_profile
echo 'export NLS_LANG=american_america.zhs16gbk' >> ~oracle/.bash_profile
echo 'export PATH=$PATH:$ORACLE_HOME/bin' >> ~oracle/.bash_profile
echo 'export LANG=en.US' >> ~oracle/.bash_profile
echo "export ORACLE_UNQNAME=${dbname}" >> ~oracle/.bash_profile
echo "export ORACLE_SID=${dbname}${node}" >> ~oracle/.bash_profile
#config user(grid) ~/.bash_profile
cp -f ~grid/.bash_profile{.midwacsbak,} 2> /dev/null
cp -f ~grid/.bash_profile{,.midwacsbak}
echo "export ORACLE_BASE=${gridbase}" >> ~grid/.bash_profile
echo "export ORACLE_HOME=${gridhome}" >> ~grid/.bash_profile
echo 'export PATH=$PATH:$ORACLE_HOME/bin' >> ~grid/.bash_profile
echo "export ORACLE_SID=+ASM${node}" >> ~grid/.bash_profile
#destory cluster
rm -rf ${oradir}
rm -rf /etc/oracle
rm -rf /etc/oraInst.loc
rm -rf /etc/oratab
rm -rf /var/tmp/.oracle
rm -rf /etc/rc3.d/*asd*
rm -rf /etc/rc5.d/*afd*
rm -rf /etc/init.d/*asd*
rm -rf /etc/init.d/*afd*
rm -rf /etc/udev/rules.d/99-oracle-*mpath.rules
#for i in $(ls -tr /dev/mapper/mpath*);
for i in $(ls -tr /dev/asm-disk-*);
do
dd if=/dev/zero of=$i bs=1M count=10
done
for k in $(ps -ef | grep -i -E 'grid|ohasd|afd' | awk -F " " '{print $2}');
do
kill -9 $k
done
multipath -ll | grep -i mpath
if [ "$?" -eq "0" ];
then
cd /dev/mapper/
for i in $(ls -tr mpath*);
do
DMID=$(/usr/lib/udev/scsi_id -u -g $i)
echo "ACTION==\"add|change\",ENV{DM_UUID}==\"mpath-$DMID\",SYMLINK+=\"asm-disk-$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >> /etc/udev/rules.d/99-oracle-mpath.rules
done
cd -
else
cd /dev/
for i in $(ls -tr sd[b-z]*);
do
SSID=$(/usr/lib/udev/scsi_id -u -g $i)
echo "KERNEL==\"sd*\",ENV{ID_SERIAL}==\"$SSID\",SYMLINK+=\"asm-disk-$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >> /etc/udev/rules.d/99-oracle-nonmpath.rules
done
cd -
fi
udevadm control --reload-rules
udevadm trigger
systemctl restart systemd-udevd
#create directorys
mkdir -p ${gridbase}
mkdir -p ${gridhome}
mkdir -p ${dbhome}
mkdir -p ${oracleinventory}
chown -R grid:oinstall ${oradir}
chown -R oracle:oinstall ${dbbase}
chmod -R 775 ${oradir}
#config system services
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#network
cp -f /etc/sysconfig/network{.midwacsbak,} 2> /dev/null
cp -f /etc/sysconfig/network{,.midwacsbak}
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
if [ $node -eq 1 ];
then
pubadapter1=$(ip a | grep "${node1pubip}" | cut -d" " -f13)
echo 'HOTPLUG="no"' >> /etc/sysconfig/network-scripts/ifcfg-${pubadapter1}
else
pubadapter2=$(ip a | grep "${node2pubip}" | cut -d" " -f13)
echo 'HOTPLUG="no"' >> /etc/sysconfig/network-scripts/ifcfg-${pubadapter2}
fi
systemctl stop avahi-daemon.socket avahi-daemon.service
systemctl disable avahi-daemon.socket avahi-daemon.service
cp -f /etc/nsswitch.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/nsswitch.conf{,.midwacsbak}
sed -i 's/hosts: files dns myhostname/hosts: files dns myhostname nis/g' /etc/nsswitch.conf
#config diff(hostname,chrony)
cp -f /etc/chrony.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/chrony.conf{,.midwacsbak}
if [ ${node} -eq 1 ];
then
hostnamectl set-hostname ${nodename1}
timedatectl set-timezone "Asia/Shanghai"
echo "allow 0.0.0.0/0" >> /etc/chrony.conf
echo "local stratum 10" >> /etc/chrony.conf
echo "server localhost iburst" >> /etc/chrony.conf
else
hostnamectl set-hostname ${nodename2}
timedatectl set-timezone "Asia/Shanghai"
chronyc sources
echo "server ${node1pubip} iburst" >> /etc/chrony.conf
fi
systemctl restart chronyd
systemctl enable chronyd
cp -f /etc/sysctl.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/sysctl.conf{,.midwacsbak}
cat >> /etc/sysctl.conf <<EOF
#ORACLE SETTING
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = $(echo "scale=0; ${midwacs_osmem}/4" | bc)
kernel.shmmax = $(echo "scale=0; ${midwacs_osmem}*1024-1" | bc)
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
EOF
sysctl -p
#limits.conf
cp -f /etc/security/limits.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/security/limits.conf{,.midwacsbak}
echo "#ORACLE SETTING " >> /etc/security/limits.conf
echo "grid soft nproc 16384 " >> /etc/security/limits.conf
echo "grid hard nproc 16384 " >> /etc/security/limits.conf
echo "grid soft nofile 65536 " >> /etc/security/limits.conf
echo "grid hard nofile 65536 " >> /etc/security/limits.conf
echo "grid soft stack 32768 " >> /etc/security/limits.conf
echo "grid hard stack 32768 " >> /etc/security/limits.conf
echo "oracle soft nproc 16384 " >> /etc/security/limits.conf
echo "oracle hard nproc 16384 " >> /etc/security/limits.conf
echo "oracle soft nofile 65536 " >> /etc/security/limits.conf
echo "oracle hard nofile 65536 " >> /etc/security/limits.conf
echo "oracle soft stack 32768 " >> /etc/security/limits.conf
echo "oracle hard stack 32768 " >> /etc/security/limits.conf
echo "grid hard memlock $((${midwacs_osmem}-131072))" >> /etc/security/limits.conf
echo "grid soft memlock $((${midwacs_osmem}-131072))" >> /etc/security/limits.conf
echo "oracle hard memlock $((${midwacs_osmem}-131072))" >> /etc/security/limits.conf
echo "oracle soft memlock $((${midwacs_osmem}-131072))" >> /etc/security/limits.conf
#20-nproc.conf
cp -f /etc/security/limits.d/20-nproc.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/security/limits.d/20-nproc.conf{,.midwacsbak}
sed -i '/4096/d' /etc/security/limits.d/20-nproc.conf
echo '* - nproc 16384' >> /etc/security/limits.d/20-nproc.conf
#login
cp -f /etc/pam.d/login{.midwacsbak,} 2> /dev/null
cp -f /etc/pam.d/login{,.midwacsbak}
echo "session required pam_limits.so" >> /etc/pam.d/login
#hugepages
cp -f /etc/rc.d/rc.local{.midwacsbak,} 2> /dev/null
cp -f /etc/rc.d/rc.local{,.midwacsbak}
echo "if test -f /sys/kernel/mm/transparent_hugepage/enabled; then " >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled " >> /etc/rc.d/rc.local
echo "fi " >> /etc/rc.d/rc.local
echo "if test -f /sys/kernel/mm/transparent_hugepage/defrag; then " >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag " >> /etc/rc.d/rc.local
echo "fi " >> /etc/rc.d/rc.local
echo "# modify for oracle " >> /etc/rc.d/rc.local
echo "modprobe hangcheck-timer hangcheck-tick=30 hangcheck_margin=180" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
#/etc/systemd/logind.conf
cp -f /etc/systemd/logind.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/systemd/logind.conf{,.midwacsbak}
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
#numa
cp -f /etc/default/grub{.midwacsbak,} 2> /dev/null
cp -f /etc/default/grub{,.midwacsbak}
sed -i 's/quiet/quiet numa=off/g' /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
systemctl daemon-reload
systemctl restart systemd-logind
#reboot
#unzip oracle database installation files
#install cvuqdisk
#
#
#
#
#
#
#
#
#