from time to time I am testing different flavors of linux on my workstation/laptop. this time it is fedora 20 (kde edition). tried to install oracle 12c with my simple script and ups:
****** *** creating database SQL*Plus: Release 12.1.0.1.0 Production on Thu Jan 2 17:19:07 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12547: TNS:lost contact
the script does not work anymore. what happened? the problem is with the linking phase, reproducable by:
[oracle@localhost ~]$ /opt/oracle/product/base/12.1.0.1/bin/relink all writing relink log to: /opt/oracle/product/base/12.1.0.1/install/relink.log tail -100 /opt/oracle/product/base/12.1.0.1/install/relink.log ..... /usr/bin/ld: /opt/oracle/product/base/12.1.0.1/lib//libnls12.a(lxhclrs.o): undefined reference to symbol '__tls_get_addr@@GLIBC_2.3' /usr/bin/ld: note: '__tls_get_addr@@GLIBC_2.3' is defined in DSO /lib64/ld-linux-x86-64.so.2 so try adding it to the linker command line /lib64/ld-linux-x86-64.so.2: could not read symbols: Invalid operation collect2: error: ld returned 1 exit status make: *** [/opt/oracle/product/base/12.1.0.1/rdbms/lib/rman] Error 1 Error in invoking target 'irman ioracle' of makefile '/opt/oracle/product/base/12.1.0.1/rdbms/lib/ins_rdbms.mk'. See '/opt/oracle/product/base/12.1.0.1/install/relinkActions2014-01-02_05-24-05-PM.log' for details.
asking my favorite search engine gave the right answer
so, here is an updated version of the script which works for fedora20 ( keep in mind that fedora is not supported ):
#!/bin/bash ################################################## # CONFIGURATION SECTION # ################################################## # ** location of the database source files SOURCEPATH=/home/dwe/Downloads # ** name of the first source file SOURCE1=linuxamd64_12c_database_1of2.zip # ** name of the second source file SOURCE2=linuxamd64_12c_database_2of2.zip # ** working directory for extracting the source WORKDIR=/opt/oracle/stage # ** the oracle top directory ORATOPDIR=/opt/oracle # ** the oracle inventory ORAINVDIR=${ORATOPDIR}/oraInventory # ** the ORACLE_BASE to use ORACLE_BASE=${ORATOPDIR}/product/base # ** the ORACLE_HOME to use ORACLE_HOME=${ORACLE_BASE}/12.1.0.1 # ** base directory for the oracle database files ORABASEDIR=/oradata # the ORACLE_SID to use ORACLE_SID=orcl # ** the owner of the oracle software ORAOWNER=oracle # ** the primary installation group ORAINSTGROUP=oinstall # ** the dba group ORADBAGROUP=dba # ** the oper group ORAOPERGROUP=oper # ** the backup dba group ORABACKUPDBA=backupdba # ** the dataguard dba group ORADGBAGROUP=dgdba # ** the transparent data encryption group ORAKMBAGROUP=kmdba ################################################## # MAIN SECTION # ################################################## PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora # print the header _header() { echo "*** ---------------------------- ***" echo "*** -- starting oracle 12c setup ***" echo "*** ---------------------------- ***" } # print simple log messages to screen _log() { echo "****** $1 " } # check for the current os user _check_user() { if [ $(id -un) != "${1}" ]; then _log "you must run this as ${1}" exit 0 fi } # create the user and the groups _create_user_and_groups() { _log "*** checking for group: ${ORAINSTGROUP} " getent group ${ORAINSTGROUP} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORAINSTGROUP} 2> /dev/null || : fi _log "*** checking for group: ${ORADBAGROUP} " getent group ${ORADBAGROUP} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORADBAGROUP} 2> /dev/null || : fi _log "*** checking for group: ${ORAOPERGROUP} " getent group ${ORAOPERGROUP} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORAOPERGROUP} 2> /dev/null || : fi _log "*** checking for group: ${ORABACKUPDBA} " getent group ${ORABACKUPDBA} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORABACKUPDBA} 2> /dev/null || : fi _log "*** checking for group: ${ORADGBAGROUP} " getent group ${ORADGBAGROUP} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORADGBAGROUP} 2> /dev/null || : fi _log "*** checking for group: ${ORAKMBAGROUP} " getent group ${ORAKMBAGROUP} if [ "$?" -ne "0" ]; then /usr/sbin/groupadd ${ORAKMBAGROUP} 2> /dev/null || : fi _log "*** checking for user: ${ORAOWNER} " getent passwd ${ORAOWNER} if [ "$?" -ne "0" ]; then /usr/sbin/useradd -g ${ORAINSTGROUP} -G ${ORADBAGROUP},${ORAOPERGROUP},${ORABACKUPDBA},${ORADGBAGROUP},${ORAKMBAGROUP} \ -c "oracle software owner" -m -d /home/${ORAOWNER} -s /bin/bash ${ORAOWNER} fi } # create the directories _create_dirs() { _log "*** creating: ${WORKDIR} " mkdir -p ${WORKDIR} chown ${ORAOWNER}:${ORAINSTGROUP} ${WORKDIR} _log "*** creating: ${ORATOPDIR} " mkdir -p ${ORATOPDIR} chown ${ORAOWNER}:${ORAINSTGROUP} ${ORATOPDIR} _log "*** creating: ${ORACLE_BASE} " mkdir -p ${ORACLE_BASE} chown ${ORAOWNER}:${ORAINSTGROUP} ${ORACLE_BASE} _log "*** creating: ${ORACLE_HOME} " mkdir -p ${ORACLE_HOME} chown ${ORAOWNER}:${ORAINSTGROUP} ${ORACLE_HOME} _log "*** creating: ${ORABASEDIR} " mkdir -p ${ORABASEDIR} chown ${ORAOWNER}:${ORAINSTGROUP} ${ORABASEDIR} _log "*** creating: ${ORABASEDIR}/${ORACLE_SID} " mkdir -p ${ORABASEDIR}/${ORACLE_SID} chown ${ORAOWNER}:${ORAINSTGROUP} ${ORABASEDIR}/${ORACLE_SID} _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/rdo1 " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/rdo1 _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/rdo2 " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/rdo2 _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/dbf " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/dbf _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/arch " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/arch _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/admin " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/admin _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/admin/adump " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/admin/adump _log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/pdbseed " mkdir -p ${ORABASEDIR}/${ORACLE_SID}/pdbseed chown -R ${ORAOWNER}:${ORADBAGROUP} ${ORABASEDIR}/${ORACLE_SID} } # extract the source files _extract_sources() { cp ${SOURCEPATH}/${SOURCE1} ${WORKDIR} cp ${SOURCEPATH}/${SOURCE2} ${WORKDIR} chown ${ORAOWNER}:${ORAINSTGROUP} ${WORKDIR}/* _log "*** extracting: ${SOURCE1} " su - ${ORAOWNER} -c "unzip -d ${WORKDIR} ${WORKDIR}/${SOURCE1}" _log "*** extracting: ${SOURCE2} " su - ${ORAOWNER} -c "unzip -d ${WORKDIR} ${WORKDIR}/${SOURCE2}" } # install required software _install_required_software() { _log "*** installing required software " yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh \ libgcc libstdc++ libstdc++-devel libaio libaio-devel libXext libXtst libX11 libXau libxcb libXi make sysstat } # install oracle software _install_oracle_software() { _log "*** installing oracle software" su - ${ORAOWNER} -c "cd ${WORKDIR}/database; ./runInstaller oracle.install.option=INSTALL_DB_SWONLY \ ORACLE_BASE=${ORACLE_BASE} \ ORACLE_HOME=${ORACLE_HOME} \ UNIX_GROUP_NAME=${ORAINSTGROUP} \ oracle.install.db.DBA_GROUP=${ORADBAGROUP} \ oracle.install.db.OPER_GROUP=${ORAOPERGROUP} \ oracle.install.db.BACKUPDBA_GROUP=${ORABACKUPDBA} \ oracle.install.db.DGDBA_GROUP=${ORADGBAGROUP} \ oracle.install.db.KMDBA_GROUP=${ORAKMBAGROUP} \ FROM_LOCATION=../stage/products.xml \ INVENTORY_LOCATION=${ORAINVDIR} \ SELECTED_LANGUAGES=en \ oracle.install.db.InstallEdition=EE \ DECLINE_SECURITY_UPDATES=true -silent -ignoreSysPrereqs -ignorePrereq -waitForCompletion" ${ORAINVDIR}/orainstRoot.sh ${ORACLE_HOME}/root.sh } # create a very minimal pfile _create_pfile() { _log "*** creating pfile " echo "instance_name=${ORACLE_SID}" > ${PFILE} echo "db_name=${ORACLE_SID}" >> ${PFILE} echo "db_block_size=8192" >> ${PFILE} echo "control_files=${ORABASEDIR}/${ORACLE_SID}/rdo1/control01.ctl,${ORABASEDIR}/${ORACLE_SID}/rdo2/control02.ctl" >> ${PFILE} echo "sga_max_size=512m" >> ${PFILE} echo "sga_target=512m" >> ${PFILE} echo "diagnostic_dest=${ORABASEDIR}/${ORACLE_SID}/admin" >> ${PFILE} echo "audit_file_dest=${ORABASEDIR}/${ORACLE_SID}/admin/adump" >> ${PFILE} echo "enable_pluggable_database=true" >> ${PFILE} } # create the database _create_database() { _log "*** creating database " # escaping the dollar seems not to work in EOF echo "alter pluggable database pdb\$seed close;" > ${ORABASEDIR}/${ORACLE_SID}/admin/seedhack.sql echo "alter pluggable database pdb\$seed open;" >> ${ORABASEDIR}/${ORACLE_SID}/admin/seedhack.sql su - ${ORAOWNER} -c "export ORACLE_HOME=${ORACLE_HOME};export LD_LIBRARY_PATH=${LD_LIBRARY_PATH};export PATH=${ORACLE_HOME}/bin:${PATH};export ORACLE_SID=${ORACLE_SID};export PERL5LIB=${ORACLE_HOME}/rdbms/admin; sqlplus / as sysdba <> /home/${ORAOWNER}/.bash_profile echo "ORACLE_HOME=${ORACLE_HOME}" >> /home/${ORAOWNER}/.bash_profile echo "ORACLE_SID=${ORACLE_SID}" >> /home/${ORAOWNER}/.bash_profile echo "LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}" >> /home/${ORAOWNER}/.bash_profile echo "PATH=${ORACLE_HOME}/bin:${PATH}" >> /home/${ORAOWNER}/.bash_profile echo "export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH" >> /home/${ORAOWNER}/.bash_profile } # fix for fedora 20 _fix_fedora_20() { is_20=`cat /etc/fedora-release | grep Heisenbug` if [ $? -eq "0" ]; then _log "running on fedora 20 -> applying fix" rm -f $ORACLE_HOME/rdbms/lib/config.o mv $ORACLE_HOME/lib/stubs $ORACLE_HOME/lib/stubs_bak sed 's/LINKTTLIBS\=\$(LLIBCLNTSH) \$(ORACLETTLIBS) \$(LINKLDLIBS)/LINKTTLIBS\=\$(LLIBCLNTSH) \$(ORACLETTLIBS) \$(LINKLDLIBS) -lons/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk > /tmp/env_rdbms.mk cp /tmp/env_rdbms.mk $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed 's/LINK\=\$(FORT_CMD) \$(PURECMDS) \$(ORALD) \$(LDFLAGS) \$(COMPSOBJS)/LINK\=\$(FORT_CMD) \$(PURECMDS) \$(ORALD) \$(LDFLAGS) \$(COMPSOBJS) -Wl,--no-as-needed/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk > /tmp/env_rdbms.mk cp /tmp/env_rdbms.mk $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed 's/LINK32\=\$(FORT_CMD) \$(PURECMDS) \$(ORALD) \$(LDFLAGS32) \$(COMPSOBJS)/LINK32\=\$(FORT_CMD) \$(PURECMDS) \$(ORALD) \$(LDFLAGS32) \$(COMPSOBJS) -Wl,--no-as-needed/' $ORACLE_HOME/rdbms/lib/env_rdbms.mk > /tmp/env_rdbms.mk cp /tmp/env_rdbms.mk $ORACLE_HOME/rdbms/lib/env_rdbms.mk su - ${ORAOWNER} -c "export ORACLE_HOME=${ORACLE_HOME}; $ORACLE_HOME/bin/relink all" fi } _header _check_user "root" _create_user_and_groups _create_dirs _install_required_software _extract_sources _install_oracle_software ######## fedora 20 fix _fix_fedora_20 ###################### _create_pfile _create_database _create_env