最近工作需要安装oracle 11g R2在阿里云ECS上,因此编写了一个脚本来完成图形化安装界面之前的准备工作,这样节省时间,shell如下:
#!/bin/bash SYSCTL="/etc/sysctl.conf" LIMITS="/etc/security/limits.conf" PAM="/etc/pam.d/login" PROFILE="/etc/profile" BASH_PROFILE="/home/oracle/.bash_profile" oracle_passwd='oracle' SID=orcl lang="AMERICAN_AMERICA.AL32UTF8" #ora_install_dir=/u01 #ora_database_dir=/u02 ORACLE_BASE=$ora_install_dir/app/oracle ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db #初始化检查,OS版本、内存、磁盘情况 check_init() { OS=`cat/etc/redhat-release` MEM=`free-m|grep'Mem'|awk'{print$2}'` cpuS=`grep-i"processor"/proc/cpuinfo|wc-l` echo"系统版本:$OS" echo"内存:${MEM}M" echo"cpu核数:$cpuS" } #检查swap空间是否分配 check_swap() { swap_check="`grep-i'swaptotal'/proc/meminfo|awk'{print$2}'`" if[[$swap_check="0"]];then echo"swapspaceNotset,pleasecreateforswapspace!!!" exit1 fi } #检查是否root用户执行脚本 isroot() { if[$USER!="root"];then echo-e"\n\e[1;31mTheusermustberoot,andyouuseris$USER,pleasesutoroot.\e[0m" exit4 fi } #创建oracle用户 oracle_useradd() { if[[`grep"oracle"/etc/passwd`!=""]];then echo-e"\e[1;31mUseroracleexits,deleteandcreateoracle!\e[0m"&&sleep2 userdel-rforacle fi if[[`grep"oinstall"/etc/group`=""]];then groupaddoinstall fi if[[`grep"dba"/etc/group`=""]];then groupadddba fi useraddoracle-goinstall-Gdba&&echo$oracle_passwd|passwdoracle--stdin if[$?-eq0];then echo-e"\n\e[1;32moracle'spasswordupdatesuccessfully---OK!\e[0m" else echo-e"\n\e[1;31moracle'spasswordsetFailed.---NO!\e[0m" fi } #创建oracle使用的目录 oracle_dirs() { read-p"pleaseinputoracleinstalldirname,default/u01":ora_install_dir read-p"pleaseinputoracledatabasedirname,default/u02":ora_database_dir mkdir-p$ora_install_dir/app/oracle/{oraInventory,product/11.2.0/db} mkdir-p"$ora_database_dir/oradata/oradb" chown-Roracle:oinstall$ora_install_dir chown-Roracle.oinstall$ora_database_dir chmod-R755$ora_install_dir$ora_database_dir if[$?==0];then echo"$ora_install_dircreatesucessfully!" echo"$ora_database_dircreatesucessfully!" else echo"$ora_install_diror$ora_database_dircreateFailed,pleasecheck!" exit2 fi } #配置profile文件 oracle_profile() { if[-f"/etc/profile.bak"];then rm-rf/etc/profile>/dev/null cp/etc/profile.bak/etc/profile cat<<EOF>>$PROFILE if[$USER="oracle"];then if[$SHELL="/bin/ksh"];then ulimit-p16384 ulimit-n65536 else ulimit-u16384-n65536 fi fi EOF else cp/etc/profile/etc/profile.bak cat<<EOF>>$PROFILE if[$USER="oracle"];then if[$SHELL="/bin/ksh"];then ulimit-p16384 ulimit-n65536 else ulimit-u16384-n65536 fi fi EOF fi if[$?-eq0];then echo-e"\n\e[1;32m$PROFILEupdatesuccessfully...OK!\e[0m" fi } #配置.bash_profile() oracle_bash() { if[-f"/home/oracle/.bash_profile.bak"];then rm-rf$BASH_PROFILE>/dev/null cp/home/oracle/.bash_profile.bak$BASH_PROFILE cat<<EOF>>$BASH_PROFILE exportORACLE_BASE=$ORACLE_BASE exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db exportORACLE_SID=$SID exportORACLE_TERM=xterm exportORACLE_OWNER=oracle exportTNS_ADMIN=$ORACLE_HOME/network/admin exportORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/lib exportLIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/lib exportPATH=$PATH:/sbin:/usr/bin:/usr/sbin:$JAVA_HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/lib:$HOME/bin:$ORACLE_HOME/OPatch:. umask022 exportNLS_LANG=$lang EOF else cp$BASH_PROFILE/home/oracle/.bash_profile.bak cat<<EOF>>$BASH_PROFILE exportORACLE_BASE=$ORACLE_BASE exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db exportORACLE_SID=$SID exportORACLE_TERM=xterm exportORACLE_OWNER=oracle exportTNS_ADMIN=$ORACLE_HOME/network/admin exportORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/lib exportLIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/lib exportPATH=$PATH:/sbin:/usr/bin:/usr/sbin:$JAVA_HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/lib:$HOME/bin:$ORACLE_HOME/OPatch:. umask022 exportNLS_LANG=$lang EOF fi if[$?-eq0];then echo-e"\n\e[1;32m$BASH_PROFILEupdatesuccessfully...OK!\e[0m" fi } #设置limit资源限制 oracle_limit() { if[-f"/etc/security/limits.conf.bak"];then rm-rf$LIMITS>/dev/null cp/etc/security/limits.conf.bak$LIMITS cat<<EOF>>$LIMITS oraclesoftnproc8192 oraclehardnproc16384 oraclesoftnofile8192 oraclehardnofile65536 EOF else cp$LIMITS/etc/security/limits.conf.bak cat<<EOF>>$LIMITS oraclesoftnproc8192 oraclehardnproc16384 oraclesoftnofile8192 oraclehardnofile65536 EOF fi if[$?-eq0];then echo-e"\n\e[1;32m$LIMITSupdatesucessfully...OK!\e[0m" fi } #设置内核参数 oracle_kernal() { if[-f/etc/sysctl.conf.bak];then rm-rf$SYSCTL>/dev/null cp/etc/sysctl.conf.bak$SYSCTL sed-i's/kernel.msgmnb.*/#kernel.msgmnb=65536/g'$SYSCTL sed-i's/kernel.msgmax.*/#kernel.msgmax=65536/g'$SYSCTL sed-i's/kernel.shmmax.*/#kernel.shmmax=68719476736/g'$SYSCTL sed-i's/kernel.shmall.*/#kernel.shmall=4294967296/g'$SYSCTL cat<<EOF>>$SYSCTL kernel.shmall=2097152 kernel.shmmax=2147483648 kernel.shmmni=40960 kernel.sem=25032000100128 kernel.msgmni=4096 kernel.msgmax=65536 kernel.msgmnb=84000 fs.file-max=6815744 net.ipv4.ip_local_port_range=900065500 fs.file-max=6815744 net.core.rmem_default=262144 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=1048576 fs.aio-max-nr=1048576 net.ipv4.tcp_wmem=262144262144262144 net.ipv4.tcp_rmem=419430441943044194304 EOF else cp$SYSCTL/etc/sysctl.conf.bak sed-i's/kernel.msgmnb.*/#kernel.msgmnb=65536/g'$SYSCTL sed-i's/kernel.msgmax.*/#kernel.msgmax=65536/g'$SYSCTL sed-i's/kernel.shmmax.*/#kernel.shmmax=68719476736/g'$SYSCTL sed-i's/kernel.shmall.*/#kernel.shmall=4294967296/g'$SYSCTL cat<<EOF>>$SYSCTL kernel.shmall=2097152 kernel.shmmax=2147483648 kernel.shmmni=40960 kernel.sem=25032000100128 kernel.msgmni=4096 kernel.msgmax=65536 kernel.msgmnb=84000 fs.file-max=6815744 net.ipv4.ip_local_port_range=900065500 fs.file-max=6815744 net.core.rmem_default=262144 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=1048576 fs.aio-max-nr=1048576 net.ipv4.tcp_wmem=262144262144262144 net.ipv4.tcp_rmem=419430441943044194304 EOF fi if[$?-eq0];then echo-e"\n\e[1;32m$SYSCTLupdatesucessfully...OK!\e[0m" fi } #关闭iptablesandselinux iptables_selinux() { serviceiptablesstop&&chkconfigiptablesoff setenforce0&>/dev/null sed-i'/SELINUX/s/enforcing/disabled/;/SELINUX/s/permissive/disabled/'/etc/selinux/config } #下载oracle安装文件 get_oracle() { wgethttp://10.139.96.23:8080/p13390677_112040_Linux-x86-64_1of7.zip-P/home/oracle&&wgethttp://10.139.96.23:8080/p13390677_112040_Linux-x86-64_2of7.zip-P/home/oracle } #oracle安装准备主程序 main() { isroot check_init&&sleep1 oracle_useradd&&sleep1 oracle_dirs&&sleep1 oracle_profile&&sleep1 oracle_bash&&sleep1 oracle_limit&&sleep1 oracle_kernal&&sleep1 iptables_selinux&&sleep1 get_oracle&&sleep1 if[$?-eq0];then echo-e"\n\e[1;32moracle初始化配置已经完成,请确保图形化界面正常工作,执行./database安装程序!\e[0m" fi } main