Last active
November 4, 2022 17:33
-
-
Save 1242035/3d9936cd70be0e10e2f74feb6a64b64d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
groupadd -g 54321 oinstall | |
groupadd -g 54322 dba | |
groupadd -g 54323 oper | |
useradd -u 54321 -g oinstall -G dba,oper -m -s binbash oracle | |
passwd oracle | |
mkdir -p apporacleproduct12.2.0.1db_1 | |
chown -R oracleoinstall app | |
chmod -R 775 app | |
oracle - .bash_profile | |
# Oracle Settings | |
export TMP=tmp | |
export TMPDIR=$TMP | |
export ORACLE_HOSTNAME=hostname | |
export ORACLE_UNQNAME=sid | |
export ORACLE_BASE=apporacle | |
export ORACLE_HOME=$ORACLE_BASEproduct12.2.0.1db_1 | |
export ORACLE_SID=SHAKER12C | |
export PATH=usrsbin$PATH | |
export PATH=$ORACLE_HOMEbin$PATH | |
export LD_LIBRARY_PATH=$ORACLE_HOMEliblibusrlib | |
export CLASSPATH=$ORACLE_HOMEjlib$ORACLE_HOMErdbmsjlib | |
vi etcsysctl.conf | |
# for oracle 12C | |
fs.file-max = 6815744 | |
kernel.sem = 250 32000 100 128 | |
kernel.shmmni = 4096 | |
kernel.shmall = 1073741824 | |
kernel.shmmax = 4398046511104 | |
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 | |
vi etcsecuritylimits.conf | |
oracle soft nofile 1024 | |
oracle hard nofile 65536 | |
oracle soft nproc 16384 | |
oracle hard nproc 16384 | |
oracle soft stack 10240 | |
oracle hard stack 32768 | |
oracle hard memlock 134217728 | |
oracle soft memlock 134217728 | |
# 패키지 설치 | |
apt-get install alien autoconf automake autotools-dev binutils doxygen | |
elfutils expat gawk gcc-4.9 gcc-4.9-multilib g++-4.9-multilib libstdc++6i386 ksh less libtiff5 | |
libtiff5-dev lib32z1 libaio1 libaio-dev libc6-dev libc6-dev-i386 libc6-i386 | |
libelf-dev libltdl-dev libodbcinstq4-1 libodbcinstq4-1i386 | |
libpth-dev libstdc++5 make | |
openssh-server rlwrap rpm sysstat unixodbc unixodbc-dev x11-utils | |
zlibc libglapi-mesai386 libglu1-mesai386 libqt4-opengli386 | |
libpthread-workqueue0 libpthread-workqueue-dev libzthread-2.3-2 libzthread-dev | |
libpthread-stubs0-dev libaio-dev | |
#gcc | |
update-alternatives --install usrbingcc gcc usrbingcc-4.9 50 | |
update-alternatives --install usrbincpp cpp usrbincpp-4.9 50 | |
#링크 설정 | |
ln -s usrbinawk binawk | |
ln -s usrbinrpm binrpm | |
ln -s usrbinbasename binbasename | |
Linking Libraries | |
ln -s usrlibx86_64-linux-gnu usrlib64 | |
cd lib64 | |
ln -s libx86_64-linux-gnulibgcc_s.so.1 . | |
Source: https://drive.google.com/file/d/1a7lL4vhhFZat8F5Z7QuX5tnfBptcooew/view | |
Preinstall script : | |
#!/bin/bash | |
# --------------------------------------------------------------------------------- | |
# This script written by Howard Rogers. | |
# | |
# It's purpose is to install Oracle 12c onto 64-bit Ubuntu 16.04. | |
# | |
# See http://www.dizwell.com/wordpress/technical-articles/oracle/install-oracle-12c-on-ubuntu-16-04/ for some details. | |
# | |
# Copyright (c) 2016 Howard Rogers,Dizwell Informatics | |
# The script is supplied "as-is" with no warranties or guarantees of fitness of | |
# use or otherwise. Neither Dizwell Informatics nor Howard Rogers accepts any | |
# responsibility whatsoever for any damage caused by the use or misuse of this script. | |
# | |
# Version 1.0 - Initial Release - 29th May 2016 | |
# | |
# --------------------------------------------------------------------------------- | |
# --------------------------------------------------------------------------------- | |
# Define a little function to draw a progress indicator... Jaws! | |
# i forever increments; when 1 mod 60 = 0, we start decrementing $pos or | |
# incrementing it, depending on current direction of travel. Requires that | |
# the function is called as a background process before some task is performed, | |
# then killed when complete, which requires that you know the process spawned by the | |
# background call to the function. For example: | |
# | |
# jaws & | |
# jawsp=$! | |
# apt-get install some_program | |
# kill $jawsp | |
# wait $jawsp 2>/dev/null | |
# --------------------------------------------------------------------------------- | |
jaws() { | |
i=0 | |
char=">" | |
pos=4 | |
tput sgr0;tput clear;tput setaf $TITLECOL;tput cup 3 5;tput smul;echo "$mytitle"; | |
tput rmul;tput cup 5 5;tput rev; echo "$mysubtxt"; | |
tput sgr0;tput cup 7 5;tput setaf $TEXTCOL; echo "$mybody1"; | |
tput sgr0;tput cup 8 5;tput setaf $TEXTCOL; echo "$mybody2" | |
tput sgr0;tput cup 9 5;tput setaf $TEXTCOL; echo "$mybody3" | |
while true | |
do | |
i=$((i+1)) | |
if [ $i -gt 36000 ]; then | |
tput cup 18 5; echo "This is taking too long. Quitting." | |
clear | |
exit 1 | |
fi | |
if [ $(($i%60)) -eq 0 ]; then | |
if [ $char = ">" ]; then | |
char="<" | |
else | |
char=">" | |
fi | |
fi | |
if [ "$char" = ">" ]; then | |
pos=$((pos+1)) | |
if [ "$pos" -gt 64 ]; then | |
pos=64 | |
fi | |
else | |
pos=$((pos-1)) | |
if [ "$pos" -lt 5 ]; then | |
pos=5 | |
fi | |
fi | |
tput cup 18 5; echo "............................................................"; | |
tput cup 18 $(($pos)); echo -n $char;tput cup 23 0; | |
sleep 0.2 | |
done | |
} | |
# --------------------------------------------------------------------------------- | |
# Let's initialise the default values for some of the variables | |
# we'll be using later on | |
# --------------------------------------------------------------------------------- | |
ROOT_UID="0";VERGOOD=0;OSGOOD=0;USRGOOD=0;NAMEGOOD=0;SETSMSML=0;SETSEMMNS=0;SETSMOPM=0;SETSMMNI=0;SETSHMAX=0;SETSHMAL=0 | |
SETSHMNI=0;SETPRMIN=0;SETPRMAX=0;SETFSMAX=0;SETWMEMD=0;SETWMEMM=0;SETRMEMD=0;SETRMEMM=0;SETAIMAX=0;SETSUDMP=0 | |
TITLECOL=2;TEXTCOL=0;WARNCOL=1; | |
ver=16.04 | |
# --------------------------------------------------------------------------------- | |
# Check we're running on a 64-bit platform, aborting if not... | |
# --------------------------------------------------------------------------------- | |
ARCHITECTURE="`/bin/uname -m`" | |
if [ "$ARCHITECTURE" != "x86_64" ]; then | |
tput sgr0;tput clear;tput setaf $TITLECOL;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " W R O N G O/S A R C H I T E C T U R E ! ";tput sgr0;tput cup 7 5;tput setaf $WARNCOL;tput bold | |
echo "This script only works on 64-bit platforms, but yours is a 32-bit one.";tput cup 16 5;tput rev | |
tput cup 17 5; read -p "Press Enter to quit..." RESP | |
tput sgr0 | |
clear | |
exit 1 | |
fi | |
# --------------------------------------------------------------------------------- | |
# This script has to run with root privileges, so check you are root now | |
# and if you're not, re-call the script as root having prompted for the password. | |
# --------------------------------------------------------------------------------- | |
CMDLN_ARGS="$@" | |
export CMDLN_ARGS | |
chk_root () { | |
if [ ! $( id -u ) -eq 0 ]; then | |
tput sgr0;tput clear;tput setaf $TITLECOL;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " R O O T P R I V I L E G E S R E Q U I R E D ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "This script requires root privileges to run properly.";tput cup 8 5 | |
echo "Please enter your root password to continue... ";tput cup 17 5;tput bold;tput rev | |
exec sudo -S su -c "${0} ${CMDLN_ARGS}" | |
exit ${?} | |
fi | |
} | |
chk_root | |
# --------------------------------------------------------------------------------- | |
# The script only runs on Ubuntu 16.04. | |
# --------------------------------------------------------------------------------- | |
VERCHECK=`lsb_release -d` | |
if [ "$VERCHECK" != "Description: Ubuntu 16.04 LTS" ]; then | |
tput sgr0;tput clear;tput setaf $TITLECOL;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " W R O N G D I S T R O D E T E C T E D ! ";tput sgr0;tput cup 7 5;tput setaf $WARNCOL;tput bold | |
echo "This script is intended to run only on the following distros:";tput sgr0;tput cup 9 5;tput setaf $TEXTCOL | |
echo "* Ubuntu 16.04";tput cup 10 5; | |
echo "Your OS is, however, reporting itself to be:";tput cup 12 5 | |
echo `lsb_release -d` | awk '{print substr($0,14,99)}';tput cup 13 5;tput rev | |
read -p "Press Enter to quit..." RESP | |
tput sgr0 | |
clear | |
exit 1 | |
else | |
DISTRO="Deb" | |
fi | |
# --------------------------------------------------------------------------------- | |
# With those fundamental tests out of the way, let's display some boiler-plate | |
# explanation that most people probably won't read anyway... | |
# --------------------------------------------------------------------------------- | |
tput sgr0;tput clear;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " P R E L I M I N A R Y W A R N I N G S!! ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "This script will make considerable configuration changes";tput cup 8 5 | |
echo "to your system so that it can run the Oracle relational";tput cup 9 5 | |
echo "database management system. ";tput cup 11 5 | |
echo "Once these changes are made, they are only reversible ";tput cup 12 5 | |
echo "manually ...and with a lot of effort!";tput cup 17 5;tput rev;tput bold | |
read -p "Are you sure you wish to proceed? [default=n] (y/n): " RESP | |
if [ "$RESP" == "" ]; then | |
RESP=n | |
fi | |
if [ "$RESP" = "y" ]; then | |
tput setaf 1 | |
tput clear | |
else | |
tput sgr0 | |
clear | |
exit 0 | |
fi | |
# --------------------------------------------------------------------------------- | |
# Next, we need to know which Oracle version is to be installed. There | |
# are only two choices these days... | |
# --------------------------------------------------------------------------------- | |
tput sgr0;tput clear;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " C H O O S E O R A C L E V E R S I O N ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "1. Oracle 12c Release 1";tput cup 9 5 | |
echo "2. Quit";tput bold | |
while [ "$VERGOOD" != 1 ]; do | |
tput cup 17 5 | |
tput rev | |
read -p "Enter your choice [1-2]: " oraver | |
case $oraver in | |
1 ) ORAPATH="12.1.0"; | |
ORACHOICE="12c"; | |
VERGOOD=1;; | |
2 ) tput sgr0; | |
clear | |
exit 1;; | |
* ) tput cup 17 5; | |
VERGOOD=0; | |
echo "Please enter 1 or 2 only.";; | |
esac | |
done; | |
# --------------------------------------------------------------------------------- | |
# The IP address of the machine needs to be recorded in the /etc/hosts | |
# file. So we will first get the IP address of the machine. Then we'll check if that address | |
# is listed in /etc/hosts ...and if it isn't, we'll add it to it. Note the original hosts | |
# file is copied to a uniquely-named file first, so the edit is manually reversible if needed. | |
# --------------------------------------------------------------------------------- | |
IPADD=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}') | |
IPCHECK=$(awk '/$IPADD/{print $1}' /etc/hosts) | |
if [ "$IPCHECK" ] ; then | |
tput cup 16 5;tput setaf 4 | |
echo 'Hosts file is already configured correctly' | |
else | |
curDate=`date '+%m-%d-%y-%s'` | |
cp /etc/hosts /etc/hosts.$curDate | |
echo "$IPADD `hostname`"|cat - /etc/hosts > /tmp/out && mv -f /tmp/out /etc/hosts | |
tput cup 16 5;tput setaf 4 | |
echo "# Next line added for fresh Oracle Installation"|cat - /etc/hosts > /tmp/out && mv -f /tmp/out /etc/hosts | |
tput cup 17 5 | |
echo 'Hosts file configuration updated' | |
fi | |
# --------------------------------------------------------------------------------- | |
# A user has to own the Oracle installation. By default, we'll offer to create the user 'oracle' | |
# to do that. But a user can overtype the default and specify whatever name they like, if they are | |
# minded to... so long as they don't get smart and try submitting a blank name! | |
# --------------------------------------------------------------------------------- | |
while [ "$USRGOOD" != 1 ]; do | |
tput clear;tput sgr0;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " S P E C I F Y O R A C L E U S E R ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "An Oracle software installation has to be 'owned' by";tput cup 8 5 | |
echo "a user account. By default, that account is 'oracle',";tput cup 9 5 | |
echo "but you can specify any account name now. If you type";tput cup 10 5 | |
echo "a username that doesn't already exist, that account";tput cup 11 5 | |
echo "will be created for you.";tput cup 17 5;tput setaf 0;tput bold;tput rev | |
read -p "Type in a username [default=oracle]: " ORACLEUSER | |
if [ "$ORACLEUSER" == "" ]; then | |
ORACLEUSER=oracle | |
fi | |
LENGTHUSRNAME=`echo -n $ORACLEUSER | wc -m | sed -e s/^\s+//` | |
if [[ $LENGTHUSRNAME > 0 ]]; then | |
USRGOOD=1 | |
else | |
USRGOOD=0 | |
fi | |
done | |
egrep $ORACLEUSER /etc/passwd >/dev/null 2>&1 | |
if [ $? -eq 0 ]; then | |
# --------------------------------------------------------------------------------- | |
# The username specified is one that belongs to an existing user | |
# --------------------------------------------------------------------------------- | |
USREXISTS=1 | |
else | |
USREXISTS=0 | |
fi | |
egrep "^dba" /etc/group >/dev/null 2>&1 | |
if [ $? -eq 0 ]; then | |
# --------------------------------------------------------------------------------- | |
# The dba group already exists | |
# --------------------------------------------------------------------------------- | |
DBAEXISTS=1 | |
else | |
DBAEXISTS=0 | |
fi | |
egrep "^oinstall" /etc/group >/dev/null 2>&1 | |
if [ $? -eq 0 ]; then | |
# --------------------------------------------------------------------------------- | |
# The oinstall group already exists | |
# --------------------------------------------------------------------------------- | |
OINEXISTS=1 | |
else | |
OINEXISTS=0 | |
fi | |
egrep "^nobody" /etc/group >/dev/null 2>&1 | |
if [ $? -eq 0 ]; then | |
# --------------------------------------------------------------------------------- | |
# The nobody group already exists | |
# --------------------------------------------------------------------------------- | |
NOBEXISTS=1 | |
else | |
NOBEXISTS=0 | |
fi | |
# --------------------------------------------------------------------------------- | |
# We have to prompt for a password for the Oracle User, too, if it's a new user | |
# --------------------------------------------------------------------------------- | |
if [ "$USREXISTS" -eq 0 ]; then | |
tput clear;tput sgr0;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " O R A C L E U S E R P A S S W O R D ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "You've opted to create a new user to own the Oracle";tput cup 8 5 | |
echo "installation. That new user account needs password";tput cup 9 5 | |
echo "protection. The default password is 'oracle', but ";tput cup 10 5 | |
echo "you can supply an alternative now if you like.";tput cup 17 5;tput bold;tput rev | |
read -p "Type the new user's password [default=oracle]: " ORAPASSWD | |
if [ "$ORAPASSWD" == "" ]; then | |
ORAPASSWD=oracle | |
fi | |
fi | |
# --------------------------------------------------------------------------------- | |
# The users get to choose their database name, if they want to. | |
# But then we have to check that their proposed name is less than | |
# nine characters long, not null and doesn't start with a number! | |
# --------------------------------------------------------------------------------- | |
tput clear;tput sgr0;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev; | |
echo " S T A R T E R D A T A B A S E N A M E ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "When you perform the Oracle software installation, you'll ";tput cup 8 5 | |
echo "be prompted to create a starter database. That database will";tput cup 9 5 | |
echo "need a name, which needs to be specified now. By default,";tput cup 10 5 | |
echo "this script will assume you'll use a name of 'orc'.";tput cup 17 5 | |
while [ "$NAMEGOOD" != 1 ]; do | |
tput setaf 0 | |
tput cup 17 5 | |
tput bold | |
tput rev | |
read -p "Type in a database name [default=orcl] : " DBNAME | |
if [ "$DBNAME" == "" ]; then | |
DBNAME=orcl | |
fi | |
LENGTHDBNAME=`echo -n $DBNAME | wc -m | sed -e s/^\s+//` | |
NUMCHECK=`echo $DBNAME | sed -e s/^[0-9]//` | |
if [ "$LENGTHDBNAME" -gt 8 ]; then | |
tput setaf 1;tput cup 17 5;tput bold;tput rev | |
echo "That name is too long. 8 or fewer characters please!" | |
NAMEGOOD=0 | |
fi | |
if [ "$LENGTHDBNAME" -gt 0 ]; then | |
if [ "$DBNAME" != "$NUMCHECK" ]; then | |
tput setaf 1;tput cup 17 5;tput bold;tput rev | |
echo "That name starts with a number, which isn't allowed!" | |
NAMEGOOD=0 | |
fi | |
fi | |
if [ "$LENGTHDBNAME" -gt 0 ]; then | |
if [ "$LENGTHDBNAME" -lt 9 ]; then | |
if [ "$DBNAME" = "$NUMCHECK" ]; then | |
NAMEGOOD=1 | |
fi | |
fi | |
fi | |
done | |
# --------------------------------------------------------------------------------- | |
# That's the interactive part over with (almost!). So now it's time to | |
# actually make some changes to the system. Let's begin by creating the | |
# oracle user and setting his password to whatever was supplied earlier | |
# --------------------------------------------------------------------------------- | |
if [ "$USREXISTS" -eq 0 ]; then | |
if [ "$DBAEXISTS" -eq 0 ]; then | |
/usr/sbin/groupadd dba | |
fi | |
if [ "$OINEXISTS" -eq 0 ]; then | |
/usr/sbin/groupadd oinstall | |
fi | |
/usr/sbin/useradd -m $ORACLEUSER -g oinstall -G dba -s /bin/bash | |
echo $ORACLEUSER:$ORAPASSWD | chpasswd | |
history -c | |
fi | |
if [ "$USREXISTS" -eq 1 ]; then | |
# --------------------------------------------------------------------------------- | |
# We have to preserve the groups the user already has -which means working | |
# out what those groups are to start with! | |
# --------------------------------------------------------------------------------- | |
GROUPLIST=`id -Gn $ORACLEUSER` | |
for group in $GROUPLIST; do | |
if [ "$group" != 'dba' ] && [ "$group" != 'oinstall' ] ; then | |
groupstring=$groupstring,$group | |
fi | |
done | |
if [ "$DBAEXISTS" -eq 0 ]; then | |
/usr/sbin/groupadd dba | |
fi | |
if [ "$OINEXISTS" -eq 0 ]; then | |
/usr/sbin/groupadd oinstall | |
fi | |
/usr/sbin/usermod -g oinstall -G dba$groupstring $ORACLEUSER | |
fi | |
# --------------------------------------------------------------------------------- | |
# We need some symbolic links to make Ubuntu look more Red Hattish | |
# --------------------------------------------------------------------------------- | |
if [ ! -e "/bin/awk" ]; then | |
ln -s /usr/bin/awk /bin/awk >/dev/null 2>&1 | |
fi | |
if [ ! -e "/bin/rpm" ]; then | |
ln -s /usr/bin/rpm /bin/rpm >/dev/null 2>&1 | |
fi | |
if [ ! -e "/lib/x86_64-linux-gnu/libgcc_s.so.1" ]; then | |
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/libgcc_s.so.1 >/dev/null 2>&1 | |
fi | |
if [ ! -e "/lib/libgcc_s.so" ]; then | |
ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so >/dev/null 2>&1 | |
fi | |
if [ ! -e "/bin/basename" ]; then | |
ln -s /usr/bin/basename /bin/basename >/dev/null 2>&1 | |
fi | |
if [ ! -e "/usr/lib64" ]; then | |
ln -s /usr/lib/x86_64-linux-gnu /usr/lib64 >/dev/null 2>&1 | |
fi | |
if [ ! -e "/bin/sh" ]; then | |
ln -sf /bin/bash /bin/sh >/dev/null 2>&1 | |
fi | |
if [ "$NOBEXISTS" -eq 0 ]; then | |
/usr/sbin/groupadd nobody >/dev/null 2>&1 | |
fi | |
# --------------------------------------------------------------------------------- | |
# Now create the directory structure for the final Oracle | |
# installation. Additionally, we create an /osource directory where the | |
# Oracle software can be copied to disk, avoiding an off-DVD installation. | |
# --------------------------------------------------------------------------------- | |
if [ ! -e "/u01/app/oracle/product/$ORAPATH/db_1" ]; then | |
mkdir -p /u01/app/oracle/product/$ORAPATH/db_1 | |
fi | |
if [ ! -e "/osource" ]; then | |
mkdir /osource | |
fi | |
chown -R $ORACLEUSER:oinstall /u01/app | |
chmod -R 775 /u01/app | |
chown -R $ORACLEUSER:oinstall /osource | |
chmod -R 775 /osource | |
# --------------------------------------------------------------------------------- | |
# Now we check the existing kernel parameters so we can work out if | |
# they need to be changed... | |
# --------------------------------------------------------------------------------- | |
SMSML=`cat /proc/sys/kernel/sem | awk '{print $1}'` | |
SMMNS=`cat /proc/sys/kernel/sem | awk '{print $2}'` | |
SMOPM=`cat /proc/sys/kernel/sem | awk '{print $3}'` | |
SMMNI=`cat /proc/sys/kernel/sem | awk '{print $4}'` | |
MEMSZ=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` | |
let "MEMSZ *= 1024" | |
let "MEMSZ /= 2" | |
let "MEMSZ += 16777216" | |
SHMAX=`cat /proc/sys/kernel/shmmax` | |
SHMAL=`cat /proc/sys/kernel/shmall` | |
SHMNI=`cat /proc/sys/kernel/shmmni` | |
PRMIN=`cat /proc/sys/net/ipv4/ip_local_port_range | awk '{print $1}'` | |
PRMAX=`cat /proc/sys/net/ipv4/ip_local_port_range | awk '{print $2}'` | |
FSMAX=`cat /proc/sys/fs/file-max` | |
RMEMD=`cat /proc/sys/net/core/rmem_default` | |
RMEMM=`cat /proc/sys/net/core/rmem_max` | |
WMEMD=`cat /proc/sys/net/core/wmem_default` | |
WMEMM=`cat /proc/sys/net/core/wmem_max` | |
AIMAX=`cat /proc/sys/fs/aio-max-nr` | |
SUDMP=`cat /proc/sys/fs/suid_dumpable` | |
HSTNM=`hostname` | |
# --------------------------------------------------------------------------------- | |
# Time to set the kernel parameters to recommended values, but only | |
# if they are NOT already set to usable minima. | |
# --------------------------------------------------------------------------------- | |
if [ $SMSML -lt 250 ]; then | |
SMSML=250 | |
SETSMSML=1 | |
fi | |
if [ $SMMNS -lt 32000 ]; then | |
SMMNS=32000 | |
SETSEMMNS=1 | |
fi | |
if [ $SMOPM -lt 100 ]; then | |
SMOPM=100 | |
SETSMOPM=1 | |
fi | |
if [ $SMMNI -lt 128 ]; then | |
SMMNI=128 | |
SETSMMNI=1 | |
fi | |
result=`echo $SHMAX \< $MEMSZ | bc` | |
if [ "$result" -ne 0 ]; then | |
SHMAX=$MEMSZ | |
SETSHMAX=1 | |
else | |
SHMAX=8589934592 | |
SETSHMAX=1 | |
fi | |
SHMAL=2097152 | |
SETSHMAL=1 | |
SHMNI=4096 | |
SETSHMNI=1 | |
if [ $PRMIN -gt 1024 ]; then | |
PRMIN=1024 | |
SETPRMIN=1 | |
fi | |
if [ $PRMAX -lt 65000 ]; then | |
PRMAX=65000 | |
SETPRMAX=1 | |
fi | |
if [ $FSMAX -lt 65536 ]; then | |
FSMAX=65536 | |
SETFSMAX=1 | |
fi | |
if [ $WMEMD -lt 262144 ]; then | |
WMEMD=262144 | |
SETWMEMD=1 | |
fi | |
if [ $WMEMM -lt 262144 ]; then | |
WMEMM=262144 | |
SETWMEMM=1 | |
fi | |
if [ $ORACHOICE = "11gR2" ]; then | |
if [ $FSMAX -lt 6815744 ]; then | |
FSMAX=6815744 | |
SETFSMAX=1 | |
fi | |
if [ $WMEMM -lt 1048576 ]; then | |
WMEMM=1048576 | |
SETWMEMM=1 | |
fi | |
if [ $RMEMD -lt 4194304 ]; then | |
RMEMD=4194304 | |
SETRMEMD=1 | |
fi | |
if [ $PRMIN -lt 9000 ]; then | |
PRMIN=9000 | |
SETPRMIN=1 | |
fi | |
if [ $PRMAX -lt 65500 ]; then | |
PRMAX=65500 | |
SETPRMAX=1 | |
fi | |
if [ $AIMAX -lt 1048576 ]; then | |
AIMAX=1048576 | |
SETAIMAX=1 | |
fi | |
if [ $RMEMM -lt 4194304 ]; then | |
RMEMM=4194304 | |
SETRMEMM=1 | |
fi | |
if [ $SUDMP -eq 0 ]; then | |
SUDMP=1 | |
SETSUDMP=1 | |
fi | |
fi | |
if [ $ORACHOICE = "12c" ]; then | |
if [ $FSMAX -lt 6815744 ]; then | |
FSMAX=6815744 | |
SETFSMAX=1 | |
fi | |
if [ $WMEMM -lt 1048576 ]; then | |
WMEMM=1048576 | |
SETWMEMM=1 | |
fi | |
if [ $RMEMD -lt 262144 ]; then | |
RMEMD=262144 | |
SETRMEMD=1 | |
fi | |
if [ $PRMIN -lt 9000 ]; then | |
PRMIN=9000 | |
SETPRMIN=1 | |
fi | |
if [ $PRMAX -lt 65535 ]; then | |
PRMAX=65535 | |
SETPRMAX=1 | |
fi | |
if [ $AIMAX -lt 1048576 ]; then | |
AIMAX=1048576 | |
SETAIMAX=1 | |
fi | |
if [ $RMEMM -lt 4194304 ]; then | |
RMEMM=4194304 | |
SETRMEMM=1 | |
fi | |
if [ $SUDMP -eq 0 ]; then | |
SUDMP=1 | |
SETSUDMP=1 | |
fi | |
fi | |
# --------------------------------------------------------------------------------- | |
# Now actually set those parameters which have been determined to need re-setting | |
# ----------------------------------------------------------------------------------- | |
cat >> /etc/sysctl.conf << EOF | |
# | |
#Added for fresh Oracle $ORACHOICE Installation | |
EOF | |
if [ $SETSHMAL -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
kernel.shmall = $SHMAL | |
EOF | |
fi | |
if [[ $SETSHMAX -eq "1" ]]; then | |
cat >> /etc/sysctl.conf << EOF | |
kernel.shmmax = $SHMAX | |
EOF | |
fi | |
if [ $SETSHMNI -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
kernel.shmmni = 4096 | |
EOF | |
fi | |
cat >> /etc/sysctl.conf << EOF | |
kernel.semmni = $SHMNI | |
EOF | |
if [[ $SETSMSML -eq "1" || $SETSMMNS -eq "1" || $SETSMOPM -eq "1" || $SETSMMNI -eq "1" ]]; then | |
cat >> /etc/sysctl.conf << EOF | |
kernel.sem = $SMSML $SMMNS $SMOPM $SMMNI | |
EOF | |
fi | |
if [ $SETFSMAX -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
fs.file-max = $FSMAX | |
EOF | |
fi | |
if [[ $SETPRMIN -eq "1" || $SETPRMAX -eq "1" ]]; then | |
cat >> /etc/sysctl.conf << EOF | |
net.ipv4.ip_local_port_range = $PRMIN $PRMAX | |
EOF | |
fi | |
if [ $SETRMEMD -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
net.core.rmem_default = $RMEMD | |
EOF | |
fi | |
if [ $SETWMEMD -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
net.core.wmem_default = $WMEMD | |
EOF | |
fi | |
if [ $SETRMEMM -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
net.core.rmem_max = $RMEMM | |
EOF | |
fi | |
if [ $SETWMEMM -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
net.core.wmem_max = $WMEMM | |
EOF | |
fi | |
if [ $SETAIMAX -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
fs.aio-max-nr = $AIMAX | |
EOF | |
fi | |
if [ $SETSUDMP -eq "1" ]; then | |
cat >> /etc/sysctl.conf << EOF | |
fs.suid_dumpable = $SUDMP | |
EOF | |
fi | |
# --------------------------------------------------------------------------------- | |
# Now we have to set security limits. | |
# ---------------------------------------------------------------------------------- | |
cat /etc/security/limits.conf | sed /'# End of file'/d > /tmp/limits.wrk | |
cat >> /tmp/limits.wrk << EOF | |
$ORACLEUSER soft nproc 2047 | |
$ORACLEUSER hard nproc 16384 | |
$ORACLEUSER soft nofile 1024 | |
$ORACLEUSER hard nofile 65536 | |
$ORACLEUSER soft stack 10240 | |
# End of file | |
EOF | |
rm /etc/security/limits.conf | |
mv /tmp/limits.wrk /etc/security/limits.conf | |
cat >> /etc/pam.d/login << EOF | |
session required pam_limits.so | |
EOF | |
DISTRIB=5 | |
# --------------------------------------------------------------------------------- | |
# Now the Oracle User's environment variables are set | |
# --------------------------------------------------------------------------------- | |
ENVFILE="/home/$ORACLEUSER/.bashrc" | |
cat >> $ENVFILE << EOF | |
#Added for fresh Oracle $ORACHOICE Installation | |
export ORACLE_HOSTNAME=$HSTNM | |
export ORACLE_BASE=/u01/app/oracle | |
export ORACLE_HOME=/u01/app/oracle/product/$ORAPATH/db_1 | |
export ORACLE_SID=$DBNAME | |
export ORACLE_UNQNAME=$DBNAME | |
export PATH=\$ORACLE_HOME/bin:\$PATH:. | |
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib | |
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib | |
DISTRIB_RELEASE=$DISTRIB | |
alias sqlplus="rlwrap sqlplus" | |
alias sql="sqlplus / as sysdba" | |
alias diag="cd \$ORACLE_BASE/diag/rdbms/\$ORACLE_UNQNAME/\$ORACLE_SID/trace" | |
EOF | |
# --------------------------------------------------------------------------------- | |
# We need a script to auto-start Oracle databases at server reboot. Note that whilst | |
# this section will generate such a script, it won't be automatically run unless the | |
# user manually remembers to alter the contents of the /etc/oratab file. | |
# --------------------------------------------------------------------------------- | |
if [ -f /etc/init.d/dboraz ]; then | |
mv /etc/init.d/dboraz /etc/init.d/dboraz.original | |
fi | |
cat >> /etc/init.d/dboraz << EOF | |
#!/bin/bash | |
### BEGIN INIT INFO | |
# Provides: dboraz | |
# Required-Start: $remote_fs $syslog | |
# Required-Stop: $remote_fs $syslog | |
# Default-Start: 3 4 5 | |
# Default-Stop: 0 1 2 6 | |
# Short-Description: Startup script for Oracle Databases | |
# Description: Oracle Database Auto-Start Script | |
### END INIT INFO | |
export ORACLE_HOME=/u01/app/oracle/product/$ORAPATH/db_1 | |
export ORACLE_SID=$DBNAME | |
export PATH=\$ORACLE_HOME/bin:\$PATH:. | |
case "\$1" in | |
start) | |
echo -n "Starting Oracle: " | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/dbstart \$ORACLE_HOME" | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/emctl start dbconsole" | |
touch /var/lock/oracle | |
echo "OK" | |
;; | |
stop) | |
echo -n "Shutting down Oracle: " | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/emctl stop dbconsole" | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/dbshut \$ORACLE_HOME" | |
rm -f /var/lock/oracle | |
echo "OK" | |
;; | |
restart) | |
echo -n "Shutting down Oracle: " | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/emctl stop dbconsole" | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/dbshut \$ORACLE_HOME" | |
rm -f /var/lock/oracle | |
echo "OK" | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/dbstart \$ORACLE_HOME" | |
su $ORACLEUSER -c "\$ORACLE_HOME/bin/emctl start dbconsole" | |
touch /var/lock/oracle | |
echo "OK" | |
;; | |
esac | |
exit 0 | |
EOF | |
chmod 775 /etc/init.d/dboraz | |
(update-rc.d -f dboraz remove) >/dev/null 2>&1 2>&1 | |
tput sgr0;tput cup 16 5;tput dim;tput setaf 7 | |
(update-rc.d dboraz defaults) >/dev/null 2>&1 2>&1 | |
# --------------------------------------------------------------------------------- | |
# Time to get some software prerequisites installed | |
# --------------------------------------------------------------------------------- | |
tput sgr0;tput clear;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " S O F T W A R E D O W N L O A D ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "This script now wants to update your existing software and";tput cup 8 5 | |
echo "download quite a lot of new (and necessary) packages. ";tput cup 17 5;tput bold;tput rev | |
read -p "Do you wish to proceed? [default=n] (y/n): " RESP | |
if [ "$RESP" == "" ]; then | |
RESP=n | |
fi | |
if [ "$RESP" = "y" ]; then | |
tput setaf 1 | |
# --------------------------------------------------------------------------------- | |
# Check if the CD/DVD repository is still enabled. If so, comment it out | |
# from /etc/apt/sources.list, ensuring that software is downloaded from | |
# the Internet (otherwise you sit there for hours not realising that the O/S | |
# is asking you to insert a cd/dvd before it can proceed!) | |
# --------------------------------------------------------------------------------- | |
mytitle="UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER"; | |
mysubtxt=" S O F T W A R E D O W N L O A D "; | |
mybody1="Repositories are being updated. "; | |
mybody2="This can take a long time, so please be patient..."; | |
jaws $mytitle $mysubtxt $mybody1 $mybody2 & | |
jawsp=$! | |
sed -i 's/deb cdrom:/#deb cdrom:/' /etc/apt/sources.list | |
apt-get update >/dev/null 2>&1 | |
kill $jawsp | |
wait $jawsp 2>/dev/null | |
# --------------------------------------------------------------------------------- | |
# Installation loop | |
# --------------------------------------------------------------------------------- | |
tput cup 17 5 | |
mytitle="UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER"; | |
mysubtxt=" S O F T W A R E D O W N L O A D "; | |
mybody1="Necessary software packages and libraries are being downloaded."; | |
mybody2="This can take a long time, so please be patient..."; | |
jaws $mytitle $mysubtxt $mybody1 $mybody2 & | |
jawsp=$! | |
# --------------------------------------------------------------------------------- | |
# If one package does not exist in a request to install a long list of them, apt | |
# will not install ANY of them. So, we have to treat the list of packages as an | |
# array and install them one-by-one, by looping. | |
# --------------------------------------------------------------------------------- | |
for pkg in unixodbc unixodbc-dev unzip lsb-cxx pdksh sysstat gcc g++-multilib \ | |
ia32-libs ksh lesstif2 zlibc rpm libc6 libc6-dev libc6-dev-i386 libc6-i386 \ | |
gcc-multilib less lib32z1 libelf-dev binutils libodbcinstq4-1 libpth-dev zenity \ | |
libpthread-stubs0 libstdc++5 autotools-dev bzip2 elfutils g++ rlwrap libltdl-dev \ | |
libmotif4 libpthread-stubs0-dev build-essential expat gawk alien autoconf automake \ | |
lesstif2-dev make; do | |
apt-get -y install $pkg >/dev/null 2>&1 | |
tput cup 17 5 | |
echo " ";tput cup 17 5 | |
echo "Installing: "$pkg | |
done | |
tput cup 20 5;ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/libgcc_s.so.1 >/dev/null 2>&1 | |
tput cup 17 5 | |
echo " ";tput cup 17 5 | |
echo "Installing: older libaio libraries" | |
wget http://ftp.us.debian.org/debian/pool/main/liba/libaio/libaio1_0.3.109-3_amd64.deb >/dev/null 2>&1 | |
dpkg -i libaio1_0.3.109-3_amd64.deb >/dev/null 2>&1 | |
aptitude hold libaio1 >/dev/null 2>&1 | |
echo "libaio1 hold" | dpkg --set-selections >/dev/null 2>&1 | |
wget http://ftp.us.debian.org/debian/pool/main/liba/libaio/libaio-dev_0.3.109-3_amd64.deb >/dev/null 2>&1 | |
dpkg -i libaio-dev_0.3.109-3_amd64.deb >/dev/null 2>&1 | |
aptitude hold libaio-dev >/dev/null 2>&1 | |
echo "libaio-dev hold" | dpkg --set-selections >/dev/null 2>&1 | |
rm -f libaio*.deb >/dev/null 2>&1 | |
kill $jawsp | |
wait $jawsp 2>/dev/null | |
# --------------------------------------------------------------------------------- | |
# Ubuntu will produce a compilation error once the Oracle 11g software | |
# installation is underway. This part of the script creates a shell script | |
# in the oracle user's Documents directory which, if run, will add appropriate | |
# compiler switches to the various makefiles that will fix the problems, | |
# once a 'Retry' has been selected. | |
# --------------------------------------------------------------------------------- | |
mkdir -p /home/$ORACLEUSER/Documents/ | |
cat >> /home/$ORACLEUSER/Documents/ubuntu-fixup.sh << EOF | |
#!/bin/bash | |
export ORACLE_HOME=/u01/app/oracle/product/$ORAPATH/db_1 | |
sudo ln -s \$ORACLE_HOME/lib/libclntsh.core.so.12.1 /usr/lib | |
sudo ln -s \$ORACLE_HOME/lib/libclntsh.so.12.1 /usr/lib | |
cp \$ORACLE_HOME/rdbms/lib/ins_rdbms.mk \$ORACLE_HOME/rdbms/lib/ins_rdbms.bkp | |
cp \$ORACLE_HOME/rdbms/lib/env_rdbms.mk \$ORACLE_HOME/rdbms/lib/env_rdbms.bkp | |
sed -i 's/\$(ORAPWD_LINKLINE)/\$(ORAPWD_LINKLINE) -lnnz12/' \$ORACLE_HOME/rdbms/lib/ins_rdbms.mk | |
sed -i 's/\$(HSOTS_LINKLINE)/\$(HSOTS_LINKLINE) -lagtsh/' \$ORACLE_HOME/rdbms/lib/ins_rdbms.mk | |
sed -i 's/\$(EXTPROC_LINKLINE)/\$(EXTPROC_LINKLINE) -lagtsh/' \$ORACLE_HOME/rdbms/lib/ins_rdbms.mk | |
sed -i 's/\$(OPT) \$(HSOTSMAI)/\$(OPT) -Wl,--no-as-needed \$(HSOTSMAI)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(OPT) \$(HSDEPMAI)/\$(OPT) -Wl,--no-as-needed \$(HSDEPMAI)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(OPT) \$(EXTPMAI)/\$(OPT) -Wl,--no-as-needed \$(EXTPMAI)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' \$ORACLE_HOME/network/lib/env_network.mk | |
sed -i 's/\$(SPOBJS) \$(LLIBSERVER)/\$(SPOBJS) -Wl,--no-as-needed \$(LLIBSERVER)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(S0MAIN) \$(SSKFEDED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFEDED)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(S0MAIN) \$(SSKFODED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFODED)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(S0MAIN) \$(SSKFNDGED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFNDGED)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$(S0MAIN) \$(SSKFMUED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFMUED)/' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \($(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' \$ORACLE_HOME/rdbms/lib/env_rdbms.mk | |
sed -i 's/\$LD \$LD_RUNTIME/$LD -Wl,--no-as-needed \$LD_RUNTIME/' \$ORACLE_HOME/bin/genorasdksh | |
sed -i 's/\$(GETCRSHOME_OBJ1) \$(OCRLIBS_DEFAULT)/\$(GETCRSHOME_OBJ1) -Wl,--no-as-needed \$(OCRLIBS_DEFAULT)/' \$ORACLE_HOME/srvm/lib/env_srvm.mk | |
zenity --info --title "Fix-up Script Applied" --text="Click OK to return to the Oracle Installer, \nthen click the [Retry] option." | |
exit 0 | |
EOF | |
chmod 775 /home/$ORACLEUSER/Documents/ubuntu-fixup.sh | |
fi | |
tput clear;tput sgr0;tput setaf 2;tput cup 3 5;tput smul | |
echo "UBUNTU $ver - THE DIZWELL ORACLE PREINSTALLER";tput rmul;tput cup 5 5;tput rev | |
echo " R E B O O T R E Q U I R E D ";tput sgr0;tput cup 7 5;tput setaf $TEXTCOL | |
echo "To ensure the configuration changes made by this script take full";tput cup 8 5 | |
echo "effect, this PC will be rebooted as soon as you press Enter.";tput cup 10 5 | |
echo "When your PC comes back up, log on as '$ORACLEUSER' and launch the";tput cup 11 5 | |
echo "runInstaller.sh script from the Oracle software source of your choice.";tput cup 17 5;tput setaf 1;tput bold;tput rev | |
read -p "Press Enter to reboot..." RESP | |
reboot | |
exit 0 | |
Source: https://www.dizwell.com/wordpress/technical-articles/oracle/install-oracle-12c-on-ubuntu-16-04/3/ | |
https://onedrive.live.com/?authkey=%21AL1G4tLE8F3dgsQ&cid=8C51C47ADD8D1B71&id=8C51C47ADD8D1B71%2122250&parId=8C51C47ADD8D1B71%2122249&o=OneUp |
All slashes have been wiped on the 1st part of the script...
Bad copy/paste
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello, I'm trying to install oracle 12c on Ubuntu 16.04.5 following your commands and scripts above. I changed every occurrence of bash with zsh, because I set zsh as default shell, and when I ran the script, I got "sudo: chk_root : command not found", even when "su -c" was deleted from line 212 (exec sudo -S su -c "${0} ${CMDLN_ARGS}").
Can you tell me how to work around? I'm not proficient with shell programming.