From a984ac5c16eb9ceffef680160d364ce3c88a8553 Mon Sep 17 00:00:00 2001 From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu> Date: Fri, 8 Dec 2023 13:12:14 +0100 Subject: [PATCH] Update Oracle images from source github/Oracle/Docker (update java versions) --- smp-docker/images/build-docker-images.sh | 4 +- .../oracle/OracleJava/java-11/Dockerfile | 30 ++- .../oracle/OracleJava/java-11/Dockerfile.8 | 27 +- .../images/oracle/OracleJava/java-11/build.sh | 4 +- .../oracle/OracleJava/java-8/Dockerfile | 30 +-- .../oracle/OracleJava/java-8/Dockerfile.8 | 43 ++-- .../images/oracle/OracleJava/java-8/build.sh | 4 +- ...server-jre-8u211-linux-x64.tar.gz.download | 5 - .../oracle/oracle-db-11.2.0.2/Dockerfile.xe | 19 +- .../oracle/oracle-db-11.2.0.2/runOracle.sh | 13 +- .../images/oracle/oracle-db-19.3.0/Dockerfile | 45 +++- .../oracle/oracle-db-19.3.0/checkDBStatus.sh | 109 ++++++--- .../oracle/oracle-db-19.3.0/checkSpace.sh | 8 +- .../oracle/oracle-db-19.3.0/createDB.sh | 225 +++++++++++++---- .../oracle/oracle-db-19.3.0/db_inst.rsp | 2 +- .../oracle/oracle-db-19.3.0/dbca.rsp.tmpl | 2 +- .../oracle-db-19.3.0/installDBBinaries.sh | 44 ++-- .../oracle-db-19.3.0/relinkOracleBinary.sh | 12 +- .../oracle/oracle-db-19.3.0/runOracle.sh | 230 ++++++++++++++---- .../oracle/oracle-db-19.3.0/runUserScripts.sh | 8 +- .../oracle/oracle-db-19.3.0/setPassword.sh | 11 +- .../oracle/oracle-db-19.3.0/setupLinuxEnv.sh | 22 +- .../images/oracle/oracle-db-19.3.0/startDB.sh | 4 +- .../createAndStartEmptyDomain.sh | 2 +- 24 files changed, 610 insertions(+), 293 deletions(-) delete mode 100644 smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download diff --git a/smp-docker/images/build-docker-images.sh b/smp-docker/images/build-docker-images.sh index 3a3b17dd2..c426104d1 100755 --- a/smp-docker/images/build-docker-images.sh +++ b/smp-docker/images/build-docker-images.sh @@ -28,8 +28,8 @@ ORACLE_DB19_FILE="LINUX.X64_193000_db_home.zip" ORACLE_DOCKERFILE="Dockerfile.xe" ORACLE_DB_FILE="${ORACLE_DB11_FILE}" -SERVER_JDK_FILE="server-jre-8u333-linux-x64.tar.gz" -SERVER_JDK11_FILE="jdk-11.0.17_linux-x64_bin.tar.gz" +SERVER_JDK_FILE="server-jre-8u391-linux-x64.tar.gz" +SERVER_JDK11_FILE="jdk-11.0.21_linux-x64_bin.tar.gz" WEBLOGIC_122_QUICK_FILE="fmw_12.2.1.4.0_wls_quick_Disk1_1of1.zip" WEBLOGIC_14_FILE="fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip" SMP_VERSION= diff --git a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile index 7d51bc466..a5d3be3f7 100644 --- a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile +++ b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile @@ -1,16 +1,16 @@ -# Copyright (c) 2019, 2022 Oracle and/or its affiliates. +# Copyright (c) 2019, 2023 Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # ORACLE DOCKERFILES PROJECT # -------------------------- -# This is the Dockerfile for Oracle JDK 11 +# This is the Dockerfile for Oracle JDK 11 on Oracle Linux 7 # # REQUIRED FILES TO BUILD THIS IMAGE # ---------------------------------- # # (1) jdk-11.XX_linux-x64_bin.tar.gz or jdk-11.XX_linux-aarch64_bin.tar.gz -# Download from https://www.oracle.com/java/technologies/javase-jdk11-downloads.html +# Download from https://www.oracle.com/java/technologies/downloads/ # # HOW TO BUILD THIS IMAGE # ----------------------- @@ -25,12 +25,10 @@ FROM oraclelinux:7-slim as builder -MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com> +LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>" -RUN set -eux; \ - yum install -y \ - gzip \ - tar; +RUN yum install -y gzip tar + # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 @@ -43,15 +41,16 @@ ENV JAVA_HOME=/usr/java/jdk-11 ## COPY *.tar.gz /tmp/ +SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN set -eux; \ - ARCH=$(uname -m) && \ - if [ "$ARCH" == "x86_64" ]; \ + ARCH="$(uname -m)" && \ + if [ "$ARCH" = "x86_64" ]; \ then \ - mv $(ls /tmp/jdk-11*_linux-x64_bin.tar.gz) /tmp/jdk.tar.gz ; \ - JAVA_SHA256=ec4e2d98dae4a5342543b8c37cc764f9c0069d358522919c70ccde374fbe199a ; \ + mv "$(ls /tmp/jdk-11*_linux-x64_bin.tar.gz)" /tmp/jdk.tar.gz ; \ + JAVA_SHA256=612b6687c185b2b0f0651d5ca2cfd1dfd5936418e9bf0b169b516e83d18d178d ; \ else \ - mv $(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz) /tmp/jdk.tar.gz ; \ - JAVA_SHA256=d68bb1a266d78869111f038a61ba0c88658e87f7fcf9b776f1159d92d5b823b6 ; \ + mv "$(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz)" /tmp/jdk.tar.gz ; \ + JAVA_SHA256=5036569e689c5385a31d55d5f66332768e1ee552624cbd097fcab17c6b583f22 ; \ fi && \ echo "$JAVA_SHA256 */tmp/jdk.tar.gz" | sha256sum -c -; \ mkdir -p "$JAVA_HOME"; \ @@ -63,8 +62,7 @@ FROM oraclelinux:7-slim # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 -ENV JAVA_VERSION=11.0.17 \ - JAVA_HOME=/usr/java/jdk-11 +ENV JAVA_HOME=/usr/java/jdk-11 ENV PATH $JAVA_HOME/bin:$PATH diff --git a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8 b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8 index 84ec85014..ff8007497 100644 --- a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8 +++ b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8 @@ -1,16 +1,16 @@ -# Copyright (c) 2019, 2022 Oracle and/or its affiliates. +# Copyright (c) 2019, 2023 Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # ORACLE DOCKERFILES PROJECT # -------------------------- -# This is the Dockerfile for Oracle JDK 11 +# This is the Dockerfile for Oracle JDK 11 on Oracle Linux 8 # # REQUIRED FILES TO BUILD THIS IMAGE # ---------------------------------- # # (1) jdk-11.XX_linux-x64_bin.tar.gz or jdk-11.XX_linux-aarch64_bin.tar.gz -# Download from https://www.oracle.com/java/technologies/javase-jdk11-downloads.html +# Download from https://www.oracle.com/java/technologies/downloads/ # # HOW TO BUILD THIS IMAGE # ----------------------- @@ -25,10 +25,9 @@ FROM oraclelinux:8 as builder -MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com> +LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>" -RUN set -eux; \ - dnf install -y tar; +RUN dnf install -y tar # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 @@ -41,15 +40,16 @@ ENV JAVA_HOME=/usr/java/jdk-11 ## COPY *.tar.gz /tmp/ +SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN set -eux; \ - ARCH=$(uname -m) && \ - if [ "$ARCH" == "x86_64" ]; \ + ARCH="$(uname -m)" && \ + if [ "$ARCH" = "x86_64" ]; \ then \ - mv $(ls /tmp/jdk-11*_linux-x64_bin.tar.gz) /tmp/jdk.tar.gz ; \ - JAVA_SHA256=ec4e2d98dae4a5342543b8c37cc764f9c0069d358522919c70ccde374fbe199a ; \ + mv "$(ls /tmp/jdk-11*_linux-x64_bin.tar.gz)" /tmp/jdk.tar.gz ; \ + JAVA_SHA256=612b6687c185b2b0f0651d5ca2cfd1dfd5936418e9bf0b169b516e83d18d178d ; \ else \ - mv $(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz) /tmp/jdk.tar.gz ; \ - JAVA_SHA256=d68bb1a266d78869111f038a61ba0c88658e87f7fcf9b776f1159d92d5b823b6 ; \ + mv "$(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz)" /tmp/jdk.tar.gz ; \ + JAVA_SHA256=5036569e689c5385a31d55d5f66332768e1ee552624cbd097fcab17c6b583f22 ; \ fi && \ echo "$JAVA_SHA256 */tmp/jdk.tar.gz" | sha256sum -c -; \ mkdir -p "$JAVA_HOME"; \ @@ -61,8 +61,7 @@ FROM oraclelinux:8 # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 -ENV JAVA_VERSION=11.0.17 \ - JAVA_HOME=/usr/java/jdk-11 +ENV JAVA_HOME=/usr/java/jdk-11 ENV PATH $JAVA_HOME/bin:$PATH diff --git a/smp-docker/images/oracle/OracleJava/java-11/build.sh b/smp-docker/images/oracle/OracleJava/java-11/build.sh index 30d613135..03b7e10b4 100755 --- a/smp-docker/images/oracle/OracleJava/java-11/build.sh +++ b/smp-docker/images/oracle/OracleJava/java-11/build.sh @@ -7,8 +7,8 @@ if test "$1" = "8" then echo "Building Oracle JDK 11 on Oracle Linux 8" - docker build --file Dockerfile.8 --tag oracle/jdk:11-oraclelinux8 . + docker build --file Dockerfile.8 --tag oracle/jdk:11-ol8 . else echo "Building Oracle JDK 11 on Oracle Linux 7 slim" - docker build --tag oracle/jdk:11 --tag oracle/jdk:11-oraclelinux7 . + docker build --tag oracle/jdk:11-ol7 . fi diff --git a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile index 021afc3f8..8b3673725 100644 --- a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile +++ b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile @@ -1,4 +1,4 @@ -# Copyright (c) 2019, 2022 Oracle and/or its affiliates. +# Copyright (c) 2019, 2023 Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # @@ -10,11 +10,11 @@ # ---------------------------------- # # (1) server-jre-8uXX-linux-x64.tar.gz -# Download from https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html +# Download from https://www.oracle.com/java/technologies/downloads/ # # HOW TO BUILD THIS IMAGE # ----------------------- -# Put all downloaded files in the same directory as this Dockerfile +# Put the downloaded file in the same directory as this Dockerfile # Run: # $ docker build -t oracle/serverjre:8 . # @@ -25,15 +25,10 @@ FROM oraclelinux:7-slim as builder -MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com> +LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>" # Since the files is compressed as tar.gz first yum install gzip and tar -RUN set -eux; \ - yum install -y \ - gzip \ - tar \ - ; \ - rm -rf /var/cache/yum +RUN yum install -y gzip tar # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 @@ -41,12 +36,13 @@ ENV LANG en_US.UTF-8 # Environment variables for the builder image. # Required to validate that you are using the correct file -ENV JAVA_PKG=server-jre-8u333-linux-x64.tar.gz \ - JAVA_SHA256=e6383f75665f5674deeb7e5c366fc7c6fc93e990c638c224dc68c5ec2863b763 \ - JAVA_HOME=/usr/java/jdk-8 + +ENV JAVA_HOME=/usr/java/jdk-8 -COPY $JAVA_PKG /tmp/jdk.tgz +COPY server-jre-8u*-linux-x64.tar.gz /tmp/jdk.tgz +SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN set -eux; \ + JAVA_SHA256=03454fe3a293ad3179bcc00f09dc4ced38dea77ad4f952d0d4154d9cc1f87160 ; \ echo "$JAVA_SHA256 */tmp/jdk.tgz" | sha256sum -c -; \ mkdir -p "$JAVA_HOME"; \ tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1; @@ -58,9 +54,8 @@ FROM oraclelinux:7-slim # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 -ENV JAVA_VERSION=1.8.0_333 \ - JAVA_HOME=/usr/java/jdk-8 - +ENV JAVA_HOME=/usr/java/jdk-8 + ENV PATH $JAVA_HOME/bin:$PATH # Copy the uncompressed Java Runtime from the builder image @@ -80,4 +75,3 @@ RUN yum -y update; \ # the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa # See https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html java -Xshare:dump; - \ No newline at end of file diff --git a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8 b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8 index 71911a254..177d76438 100644 --- a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8 +++ b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8 @@ -1,62 +1,60 @@ -# Copyright (c) 2019, 2022 Oracle and/or its affiliates. +# Copyright (c) 2019, 2023 Oracle and/or its affiliates. # # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # ORACLE DOCKERFILES PROJECT # -------------------------- -# This is the Dockerfile for Oracle Server JRE 8 +# This is the Dockerfile for Oracle Server JRE 8 on Oracle Linux 8 # # REQUIRED FILES TO BUILD THIS IMAGE # ---------------------------------- # # (1) server-jre-8uXX-linux-x64.tar.gz -# Download from https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html +# Download from https://www.oracle.com/java/technologies/downloads/ # # HOW TO BUILD THIS IMAGE # ----------------------- -# Put all downloaded files in the same directory as this Dockerfile +# Put the downloaded file in the same directory as this Dockerfile # Run: # $ docker build -t oracle/serverjre:8 . # # This command is already scripted in build.sh so you can alternatively run -# $ bash build.sh +# $ bash build.sh 8 # # The builder image will be used to uncompress the tar.gz file with the Java Runtime. -FROM ghcr.io/oracle/oraclelinux8-compat:8-slim as builder +FROM oraclelinux:8 as builder -MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com> +LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>" + +# Since the files is compressed as tar.gz first yum install tar. gzip is already in oraclelinux:8 +RUN dnf install -y tar -# Since the files is compressed as tar.gz first yum install tar. gzip is already in ghcr.io/oracle/oraclelinux8-compat:8-slim -RUN set -eux; \ - dnf install -y tar ; - # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 # Environment variables for the builder image. # Required to validate that you are using the correct file -ENV JAVA_PKG=server-jre-8u333-linux-x64.tar.gz \ - JAVA_SHA256=e6383f75665f5674deeb7e5c366fc7c6fc93e990c638c224dc68c5ec2863b763 \ - JAVA_HOME=/usr/java/jdk-8 +ENV JAVA_HOME=/usr/java/jdk-8 -COPY $JAVA_PKG /tmp/jdk.tgz +COPY server-jre-8u*-linux-x64.tar.gz /tmp/jdk.tgz +SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN set -eux; \ + JAVA_SHA256=03454fe3a293ad3179bcc00f09dc4ced38dea77ad4f952d0d4154d9cc1f87160 ; \ echo "$JAVA_SHA256 */tmp/jdk.tgz" | sha256sum -c -; \ mkdir -p "$JAVA_HOME"; \ - tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1; + tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1; ## Get a fresh version of SLIM for the final image -FROM ghcr.io/oracle/oraclelinux8-compat:8-slim +FROM oraclelinux:8 # Default to UTF-8 file.encoding ENV LANG en_US.UTF-8 -ENV JAVA_VERSION=1.8.0_333 \ - JAVA_HOME=/usr/java/jdk-8 - +ENV JAVA_HOME=/usr/java/jdk-8 + ENV PATH $JAVA_HOME/bin:$PATH # Copy the uncompressed Java Runtime from the builder image @@ -72,8 +70,7 @@ RUN dnf -y update; \ [ ! -e "/usr/bin/$base" ]; \ alternatives --install "/usr/bin/$base" "$base" "$bin" 20000; \ done; \ -# -Xshare:dump will create a CDS archive to improve startup in subsequent runs -# the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa +# -Xshare:dump will create a CDS archive to improve startup in subsequent runs +# the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa # See https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html java -Xshare:dump; - \ No newline at end of file diff --git a/smp-docker/images/oracle/OracleJava/java-8/build.sh b/smp-docker/images/oracle/OracleJava/java-8/build.sh index 8e74ba7ac..04988e3ea 100755 --- a/smp-docker/images/oracle/OracleJava/java-8/build.sh +++ b/smp-docker/images/oracle/OracleJava/java-8/build.sh @@ -7,9 +7,9 @@ if test "$1" = "8" then echo "Building Oracle Server JRE 8 on Oracle Linux 8" - docker build --file Dockerfile.8 --tag oracle/serverjre:8-oraclelinux8 . + docker build --file Dockerfile.8 --tag oracle/serverjre:8-ol8 . else echo "Building Oracle Server JRE 8 on Oracle Linux 7 slim" - docker build --tag oracle/serverjre:8 --tag oracle/serverjre:8-oraclelinux7 . + docker build --tag oracle/serverjre:8-ol7 . fi diff --git a/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download b/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download deleted file mode 100644 index b247a644f..000000000 --- a/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download +++ /dev/null @@ -1,5 +0,0 @@ -# Download the Server JRE (which includes necessary JDK bits for backend Java based solutions) -# -# - http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html -# -97a5c3f10678d309a60ab0b17be0d637adb9fa4131050da0736bf2214d521d2d server-jre-8u211-linux-x64.tar.gz diff --git a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe index cdc6aea32..4e157640e 100644 --- a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe +++ b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe @@ -1,6 +1,6 @@ # LICENSE UPL 1.0 # -# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2020 Oracle and/or its affiliates. # # ORACLE DOCKERFILES PROJECT # -------------------------- @@ -28,9 +28,17 @@ # --------------- FROM oraclelinux:7-slim -# Maintainer -# ---------- -MAINTAINER Gerald Venzl <gerald.venzl@oracle.com> +# Labels +# ------ +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/u01/app/oracle/oradata" \ + "volume.setup.location1"="/u01/app/oracle/scripts/startup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/u01/app/oracle/scripts/setup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.apex"="8080" # Environment variables required for this build (do NOT change) # ------------------------------------------------------------- @@ -46,7 +54,6 @@ ENV ORACLE_BASE=/u01/app/oracle \ # Use second ENV so that variable get substituted ENV PATH=$ORACLE_HOME/bin:$PATH -ENV NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # Copy binaries # ------------- @@ -79,8 +86,6 @@ RUN yum -y install unzip libaio bc initscripts net-tools openssl compat-libstdc+ rm -rf $INSTALL_DIR && \ chmod ug+x $ORACLE_BASE/*.sh -VOLUME ["$ORACLE_BASE/oradata"] -EXPOSE 1521 8080 HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 diff --git a/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh b/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh index d5b06fde4..babd0235c 100644 --- a/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh +++ b/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh @@ -83,12 +83,6 @@ function _term() { /etc/init.d/oracle-xe stop } -########### SIGKILL handler ############ -function _kill() { - echo "SIGKILL received, shutting down database!" - /etc/init.d/oracle-xe stop -} - ############# Create DB ################ function createDB { # Auto generate ORACLE PWD if not passed on @@ -169,9 +163,6 @@ EOF" # Set SIGTERM handler trap _term SIGTERM -# Set SIGKILL handler -trap _kill SIGKILL - # Check whether database already exists if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then symLinkFiles; @@ -202,7 +193,7 @@ fi; $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" - echo "DATABASE IS READY TO USE!" |& tee /u01/status/database.status + echo "DATABASE IS READY TO USE!" echo "#########################" # Execute custom provided startup scripts @@ -211,7 +202,7 @@ if [ $? -eq 0 ]; then else echo "#####################################" echo "########### E R R O R ###############" - echo "DATABASE SETUP WAS NOT SUCCESSFUL!" |& tee /u01/status/database.status + echo "DATABASE SETUP WAS NOT SUCCESSFUL!" echo "Please check output for further info!" echo "########### E R R O R ###############" echo "#####################################" diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile b/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile index 12acbc8c5..04c270469 100644 --- a/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile +++ b/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile @@ -1,6 +1,6 @@ # LICENSE UPL 1.0 # -# Copyright (c) 2018, 2020 Oracle and/or its affiliates. +# Copyright (c) 2018, 2022 Oracle and/or its affiliates. # # ORACLE DOCKERFILES PROJECT # -------------------------- @@ -20,7 +20,9 @@ # # Pull base image # --------------- -FROM oraclelinux:7-slim as base +ARG BASE_IMAGE=oraclelinux:7-slim +# hadolint ignore=DL3006 +FROM ${BASE_IMAGE} as base # Labels # ------ @@ -36,26 +38,43 @@ LABEL "provider"="Oracle" \ # Argument to control removal of components not needed after db software installation ARG SLIMMING=true +ARG INSTALL_FILE_1="LINUX.X64_193000_db_home.zip" # Environment variables required for this build (do NOT change) # ------------------------------------------------------------- ENV ORACLE_BASE=/opt/oracle \ ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \ INSTALL_DIR=/opt/install \ - INSTALL_FILE_1="LINUX.X64_193000_db_home.zip" \ + INSTALL_FILE_1=$INSTALL_FILE_1 \ INSTALL_RSP="db_inst.rsp" \ CONFIG_RSP="dbca.rsp.tmpl" \ PWD_FILE="setPassword.sh" \ RUN_FILE="runOracle.sh" \ START_FILE="startDB.sh" \ CREATE_DB_FILE="createDB.sh" \ + CREATE_OBSERVER_FILE="createObserver.sh" \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" \ RELINK_BINARY_FILE="relinkOracleBinary.sh" \ - SLIMMING=$SLIMMING + CONFIG_TCPS_FILE="configTcps.sh" \ + SLIMMING=$SLIMMING \ + ENABLE_ARCHIVELOG=false \ + ARCHIVELOG_DIR_NAME=archive_logs \ + # To clone a database referred by PRIMARY_DB_CONN_STR + CLONE_DB=false \ + # To create a standby database referred by PRIMARY_DB_CONN_STR + STANDBY_DB=false \ + # Env var below should be in <HOST>:<PORT>/<SERVICE_NAME> format + PRIMARY_DB_CONN_STR="" \ + # For creating dataguard observer + DG_OBSERVER_ONLY=false \ + DG_OBSERVER_NAME="" \ + CHECKPOINT_FILE_EXTN=".created" \ + # Directory for keeping Oracle Wallet + WALLET_DIR="" # Use second ENV so that variable get substituted ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ @@ -65,7 +84,7 @@ ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ # Copy files needed during both installation and runtime # ------------- COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $INSTALL_DIR/ -COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $RELINK_BINARY_FILE $ORACLE_BASE/ +COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CREATE_OBSERVER_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $RELINK_BINARY_FILE $CONFIG_TCPS_FILE $ORACLE_BASE/ RUN chmod ug+x $INSTALL_DIR/*.sh && \ sync && \ @@ -90,9 +109,9 @@ COPY --chown=oracle:dba $INSTALL_FILE_1 $INSTALL_RSP $INSTALL_DB_BINARIES_FILE $ # Install DB software binaries USER oracle -RUN chmod ug+x $INSTALL_DIR/*.sh && \ +RUN chmod ug+x "$INSTALL_DIR"/*.sh && \ sync && \ - $INSTALL_DIR/$INSTALL_DB_BINARIES_FILE $DB_EDITION + "$INSTALL_DIR"/"$INSTALL_DB_BINARIES_FILE" $DB_EDITION @@ -108,14 +127,18 @@ USER oracle COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE USER root -RUN $ORACLE_BASE/oraInventory/orainstRoot.sh && \ - $ORACLE_HOME/root.sh +RUN "$ORACLE_BASE"/oraInventory/orainstRoot.sh && \ + "$ORACLE_HOME"/root.sh USER oracle WORKDIR /home/oracle -HEALTHCHECK --interval=1m --start-period=5m \ +# Add a bashrc file to capitalize ORACLE_SID in the environment +# hadolint ignore=SC2016 +RUN echo 'ORACLE_SID=${ORACLE_SID:-ORCLCDB}; export ORACLE_SID=${ORACLE_SID^^}' > .bashrc + +HEALTHCHECK --interval=1m --start-period=5m --timeout=30s \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh b/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh index a96fe77e9..1743029a4 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh @@ -1,40 +1,91 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: May, 2017 # Author: gerald.venzl@oracle.com # Description: Checks the status of Oracle Database. -# Return codes: 0 = PDB is open and ready to use -# 1 = PDB is not open -# 2 = Sql Plus execution failed +# Return codes: 0 = Database is healthy and ready to use +# 1 = Database role is neither PRIMARY nor STANDBY +# 2 = PDB is not open in required mode +# 3 = Sql Plus execution failed +# 4 = Observer is not running # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # -ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" -OPEN_MODE="READ WRITE" -ORAENV_ASK=NO -source oraenv - -# Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status -status=`sqlplus -s / as sysdba << EOF - set heading off; - set pagesize 0; - SELECT DISTINCT open_mode FROM v\\$pdbs WHERE open_mode = '$OPEN_MODE'; - exit; -EOF` - -# Store return code from SQL*Plus -ret=$? - -# SQL Plus execution was successful and PDB is open -if [ $ret -eq 0 ] && [ "$status" = "$OPEN_MODE" ]; then - exit 0; -# PDB is not open -elif [ "$status" != "$OPEN_MODE" ]; then - exit 1; -# SQL Plus execution failed +# Function to check database role: either Primary or Secondary +checkDatabaseRole() { + # Obtain DB_ROLE using SQLPlus + DB_ROLE=$(sqlplus -s / << EOF +set heading off; +set pagesize 0; +SELECT database_role FROM v\$database ; +exit; +EOF +) + # Store return code from SQL*Plus + ret=$? + + if [ $ret -eq 0 ] && [ "$DB_ROLE" != "PRIMARY" ] && [ "$DB_ROLE" != "PHYSICAL STANDBY" ]; then + exit 1 + elif [ $ret -ne 0 ]; then + exit 3 + fi +} + +# Function to check if at least one PDB is open in "READ WRITE" mode for Primary database +# Or in case of Secondary Database PDBs should be opened only in "READ ONLY" mode +checkPDBOpen() { + # Obtain OPEN_MODE for PDB using SQLPlus + PDB_OPEN_MODE=$(sqlplus -s / << EOF +set heading off; +set pagesize 0; +SELECT DISTINCT open_mode FROM v\$pdbs; +exit; +EOF +) + # Store return code from SQL*Plus + ret=$? + + if [ $ret -eq 0 ] && [ "$DB_ROLE" = "PRIMARY" ] && ! echo "$PDB_OPEN_MODE" | grep -q "READ WRITE"; then + exit 2 + elif [ $ret -eq 0 ] && [ "$DB_ROLE" = "PHYSICAL STANDBY" ] && [ "$PDB_OPEN_MODE" != "READ ONLY" ]; then + exit 2 + elif [ $ret -ne 0 ]; then + exit 3 + fi +} + +# Function to check that observer is running or not +checkObserver() { + dg_observer_status=$(dgmgrl sys@"$PRIMARY_DB_CONN_STR" "show observer" << EOF +${ORACLE_PWD} +EOF +) + if ! echo "$dg_observer_status" | grep -q 'Observer ".*"' ; then + exit 4 + fi + +} + +############################################# +################ MAIN ####################### +############################################# + +# Setting up ORACLE_PWD if podman secret is passed on + if [ -e '/run/secrets/oracle_pwd' ]; then + export ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + fi + +if [ "$DG_OBSERVER_ONLY" = "true" ]; then + checkObserver else - exit 2; -fi; + ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)" + DB_ROLE="" + ORAENV_ASK=NO + source oraenv + checkDatabaseRole + checkPDBOpen +fi +exit 0 diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh b/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh index 9eda76d39..332729df7 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: January, 2017 # Author: gerald.venzl@oracle.com @@ -11,10 +11,10 @@ # REQUIRED_SPACE_GB=18 -AVAILABLE_SPACE_GB=`df -PB 1G / | tail -n 1 | awk '{ print $4 }'` +AVAILABLE_SPACE_GB=$(df -PB 1G / | tail -n 1 | awk '{ print $4 }') -if [ $AVAILABLE_SPACE_GB -lt $REQUIRED_SPACE_GB ]; then - script_name=`basename "$0"` +if [ "$AVAILABLE_SPACE_GB" -lt "$REQUIRED_SPACE_GB" ]; then + script_name=$(basename "$0") echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "$script_name: ERROR - There is not enough space available in the container." echo "$script_name: The container needs at least $REQUIRED_SPACE_GB GB, but only $AVAILABLE_SPACE_GB GB are available." diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh b/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh index 1b3894b29..6b29975d5 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: November, 2016 # Author: gerald.venzl@oracle.com @@ -15,85 +15,216 @@ set -e +############## Setting up network related config files (sqlnet.ora, listener.ora) ############## +function setupNetworkConfig { + mkdir -p "$ORACLE_HOME"/network/admin + + # sqlnet.ora + echo "NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME) +DISABLE_OOB=ON" > "$ORACLE_HOME"/network/admin/sqlnet.ora + + # listener.ora + echo "LISTENER = +(DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) +) + +DEDICATED_THROUGH_BROKER_LISTENER=ON +DIAG_ADR_ENABLED = off +" > "$ORACLE_HOME"/network/admin/listener.ora + +} + +####################### Setting up tnsnames.ora ############################## +function setupTnsnames { + mkdir -p "$ORACLE_HOME"/network/admin + + # tnsnames.ora + echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > "$ORACLE_HOME"/network/admin/tnsnames.ora + echo "$ORACLE_PDB= +(DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = $ORACLE_PDB) + ) +)" >> "$ORACLE_HOME"/network/admin/tnsnames.ora + +} + +################################### +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # +############# MAIN ################ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # +################################### + # Check whether ORACLE_SID is passed on export ORACLE_SID=${1:-ORCLCDB} # Check whether ORACLE_PDB is passed on export ORACLE_PDB=${2:-ORCLPDB1} +# Setting up file creation mask for newly created files (dbca response templates) +umask 177 + # Checking if only one of INIT_SGA_SIZE & INIT_PGA_SIZE is provided by the user if [[ "${INIT_SGA_SIZE}" != "" && "${INIT_PGA_SIZE}" == "" ]] || [[ "${INIT_SGA_SIZE}" == "" && "${INIT_PGA_SIZE}" != "" ]]; then echo "ERROR: Provide both the values, INIT_SGA_SIZE and INIT_PGA_SIZE or neither of them. Exiting."; exit 1; fi; -# Auto generate ORACLE PWD if not passed on -export ORACLE_PWD=${3:-"`openssl rand -base64 8`1"} -echo "ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: $ORACLE_PWD"; +# If wallet is present for database credentials then prepare dbca options to use +if [[ -n "${WALLET_DIR}" ]] && [[ -f $WALLET_DIR/ewallet.p12 ]]; then + # Oracle Wallet is present + export DBCA_CRED_OPTIONS="-useWalletForDBCredentials true -dbCredentialsWalletLocation ${WALLET_DIR}" +else + if [[ "${CLONE_DB}" == "true" ]] || [[ "${STANDBY_DB}" == "true" ]]; then + # Validation: Checking if ORACLE_PWD is provided or not + if [[ -z "$ORACLE_PWD" ]]; then + echo "ERROR: Please provide sys password of the primary database as ORACLE_PWD env variable. Exiting..." + exit 1 + fi + + # Creating temporary response file containing sysPassword for clone/standby cases + cat > "$ORACLE_BASE"/dbca.rsp <<EOF +sysPassword=${ORACLE_PWD} +EOF + + export DBCA_CRED_OPTIONS=" -responseFile $ORACLE_BASE/dbca.rsp" + else + # If ORACLE_PWD is not provided, use DBCA auto password generation for generating a random, strong password + if [[ -z "${ORACLE_PWD}" ]]; then + export DBCA_CRED_OPTIONS="-autoGeneratePasswords" + fi + fi + +fi + +# Clone DB/ Standby DB creation path +if [[ "${CLONE_DB}" == "true" ]] || [[ "${STANDBY_DB}" == "true" ]]; then + # Reverting umask to original value for clone/standby DB cases + umask 022 + + # Validation: Check if PRIMARY_DB_CONN_STR is provided or not + if [[ -z "${PRIMARY_DB_CONN_STR}" ]] || [[ $PRIMARY_DB_CONN_STR != *:*/* ]]; then + echo "ERROR: Please provide PRIMARY_DB_CONN_STR in <HOST>:<PORT>/<SERVICE_NAME> format to connect with primary database. Exiting..." + exit 1 + fi + + # Primary database parameters extration + PRIMARY_DB_NAME=$(echo "${PRIMARY_DB_CONN_STR}" | cut -d '/' -f 2) + + # Creating the database using the dbca command + if [ "${STANDBY_DB}" = "true" ]; then + # Creating standby database + # Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca + # shellcheck disable=SC2086 + dbca -silent -createDuplicateDB -gdbName "$PRIMARY_DB_NAME" -primaryDBConnectionString "$PRIMARY_DB_CONN_STR" ${DBCA_CRED_OPTIONS} -sid "$ORACLE_SID" -createAsStandby -dbUniquename "$ORACLE_SID" ORACLE_HOSTNAME="$ORACLE_HOSTNAME" || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log + else + # Creating clone database using DBCA after duplicating a primary database; CLONE_DB is set to true here + # Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca + # shellcheck disable=SC2086 + dbca -silent -createDuplicateDB -gdbName "${ORACLE_SID}" -primaryDBConnectionString "${PRIMARY_DB_CONN_STR}" ${DBCA_CRED_OPTIONS} -sid "${ORACLE_SID}" -databaseConfigType SINGLE -useOMF true -dbUniquename "${ORACLE_SID}" ORACLE_HOSTNAME="${ORACLE_HOSTNAME}" || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log + fi + + # Setup tnsnames.ora after DBCA command execution, otherwise tnsnames gets overwritten by DBCA + setupTnsnames; + + # Stopping the Listener + lsnrctl stop; + + # Setup other network related configuration (sqlnet.ora, listener.ora) + setupNetworkConfig; + + # Starting the Listener + lsnrctl start; + + # Remove temporary response file + if [ -f "$ORACLE_BASE"/dbca.rsp ]; then + rm "$ORACLE_BASE"/dbca.rsp + fi + + exit 0 +fi # Replace place holders in response file -cp $ORACLE_BASE/$CONFIG_RSP $ORACLE_BASE/dbca.rsp -sed -i -e "s|###ORACLE_SID###|$ORACLE_SID|g" $ORACLE_BASE/dbca.rsp -sed -i -e "s|###ORACLE_PDB###|$ORACLE_PDB|g" $ORACLE_BASE/dbca.rsp -sed -i -e "s|###ORACLE_PWD###|$ORACLE_PWD|g" $ORACLE_BASE/dbca.rsp -sed -i -e "s|###ORACLE_CHARACTERSET###|$ORACLE_CHARACTERSET|g" $ORACLE_BASE/dbca.rsp +cp "$ORACLE_BASE"/"$CONFIG_RSP" "$ORACLE_BASE"/dbca.rsp +# Reverting umask to original value +umask 022 +sed -i -e "s|###ORACLE_SID###|$ORACLE_SID|g" "$ORACLE_BASE"/dbca.rsp +sed -i -e "s|###ORACLE_PDB###|$ORACLE_PDB|g" "$ORACLE_BASE"/dbca.rsp +if [[ -n "${WALLET_DIR}" ]] && [[ -f $WALLET_DIR/ewallet.p12 ]] || [[ -z "$ORACLE_PWD" ]]; then + # Deleting password options from dbca response file as wallet will be used for credentials or ORACLE_PWD is not provided (i.e. password auto-generation intended) + sed -i -e "/###ORACLE_PWD###/d" "$ORACLE_BASE"/dbca.rsp +else + sed -i -e "s|###ORACLE_PWD###|$ORACLE_PWD|g" "$ORACLE_BASE"/dbca.rsp +fi +sed -i -e "s|###ORACLE_CHARACTERSET###|$ORACLE_CHARACTERSET|g" "$ORACLE_BASE"/dbca.rsp # If both INIT_SGA_SIZE & INIT_PGA_SIZE aren't provided by user if [[ "${INIT_SGA_SIZE}" == "" && "${INIT_PGA_SIZE}" == "" ]]; then - # If there is greater than 8 CPUs default back to dbca memory calculations - # dbca will automatically pick 40% of available memory for Oracle DB - # The minimum of 2G is for small environments to guarantee that Oracle has enough memory to function - # However, bigger environment can and should use more of the available memory - # This is due to Github Issue #307 - if [ `nproc` -gt 8 ]; then - sed -i -e "s|totalMemory=2048||g" $ORACLE_BASE/dbca.rsp - fi; + # If AUTO_MEM_CALCULATION isn't set to false and a given amount of memory is allocated, + # we set the total memory with the amount of memory allocated for the container. + # Otherwise, we keep the default of 2GB. + if [[ "${AUTO_MEM_CALCULATION}" != "false" && "${ALLOCATED_MEMORY}" -le 655360 ]]; then + sed -i -e "s|totalMemory=.*|totalMemory=${ALLOCATED_MEMORY?}|g" "$ORACLE_BASE"/dbca.rsp + fi else - sed -i -e "s|totalMemory=2048||g" $ORACLE_BASE/dbca.rsp - sed -i -e "s|initParams=.*|&,sga_target=${INIT_SGA_SIZE}M,pga_aggregate_target=${INIT_PGA_SIZE}M|g" $ORACLE_BASE/dbca.rsp -fi; + sed -i -e "s|totalMemory=.*||g" "$ORACLE_BASE"/dbca.rsp + sed -i -e "s|initParams=.*|&,sga_target=${INIT_SGA_SIZE}M,pga_aggregate_target=${INIT_PGA_SIZE}M|g" "$ORACLE_BASE"/dbca.rsp +fi -# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora) -mkdir -p $ORACLE_HOME/network/admin -echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora +# Adding INIT_CPU_COUNT initParam if provided +if [ -n "${INIT_CPU_COUNT}" ]; then + sed -i -e "s|initParams=.*|&,cpu_count=${INIT_CPU_COUNT}|g" "$ORACLE_BASE"/dbca.rsp +fi -# Listener.ora -echo "LISTENER = -(DESCRIPTION_LIST = - (DESCRIPTION = - (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) - (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) - ) -) +# Adding INIT_PROCESSES initParam if provided +if [ -n "${INIT_PROCESSES}" ]; then + sed -i -e "s|initParams=.*|&,processes=${INIT_PROCESSES}|g" "$ORACLE_BASE"/dbca.rsp +fi -DEDICATED_THROUGH_BROKER_LISTENER=ON -DIAG_ADR_ENABLED = off -" > $ORACLE_HOME/network/admin/listener.ora +# Create network related config files (sqlnet.ora, listener.ora) +setupNetworkConfig; + +# Directory for storing archive logs +export ARCHIVELOG_DIR=$ORACLE_BASE/oradata/$ORACLE_SID/$ARCHIVELOG_DIR_NAME # Start LISTENER and run DBCA +# Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca +# shellcheck disable=SC2086 lsnrctl start && -dbca -silent -createDatabase -responseFile $ORACLE_BASE/dbca.rsp || - cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID/$ORACLE_SID.log || - cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID.log +dbca -silent -createDatabase -enableArchive "$ENABLE_ARCHIVELOG" -archiveLogDest "$ARCHIVELOG_DIR" ${DBCA_CRED_OPTIONS} -responseFile "$ORACLE_BASE"/dbca.rsp || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log || + cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log -echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora -echo "$ORACLE_PDB= - (DESCRIPTION = - (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) - (CONNECT_DATA = - (SERVER = DEDICATED) - (SERVICE_NAME = $ORACLE_PDB) - ) - )" >> $ORACLE_HOME/network/admin/tnsnames.ora +# Setup tnsnames.ora after DBCA command execution, otherwise tnsnames gets overwritten by DBCA +setupTnsnames; # Remove second control file, fix local_listener, make PDB auto open, enable EM global port +# Create externally mapped oracle user for health check sqlplus / as sysdba << EOF ALTER SYSTEM SET control_files='$ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl' scope=spfile; ALTER SYSTEM SET local_listener=''; ALTER PLUGGABLE DATABASE $ORACLE_PDB SAVE STATE; EXEC DBMS_XDB_CONFIG.SETGLOBALPORTENABLED (TRUE); + + ALTER SESSION SET "_oracle_script" = true; + CREATE USER OPS\$oracle IDENTIFIED EXTERNALLY; + GRANT CREATE SESSION TO OPS\$oracle; + GRANT SELECT ON sys.v_\$pdbs TO OPS\$oracle; + GRANT SELECT ON sys.v_\$database TO OPS\$oracle; + ALTER USER OPS\$oracle SET container_data=all for sys.v_\$pdbs container = current; + exit; EOF # Remove temporary response file -rm $ORACLE_BASE/dbca.rsp +rm "$ORACLE_BASE"/dbca.rsp diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp b/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp index afd579b9d..461d6f810 100644 --- a/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp +++ b/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp @@ -1,5 +1,5 @@ #################################################################### -## Copyright(c) Oracle Corporation 1998,2017. All rights reserved.## +## Copyright(c) Oracle Corporation 1998,2022. All rights reserved.## ## ## ## Specify values for the variables listed below to customize ## ## your installation. ## diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl b/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl index eb1c91d1f..91958fb17 100644 --- a/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl +++ b/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl @@ -2,7 +2,7 @@ ## ## ## DBCA response file ## ## ------------------ ## -## Copyright(c) Oracle Corporation 1998,2017. All rights reserved. ## +## Copyright(c) Oracle Corporation 1998,2022. All rights reserved. ## ## ## ## Specify values for the variables listed below to customize ## ## your installation. ## diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh b/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh index b9ebc55f9..42426f242 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: December, 2016 # Author: gerald.venzl@oracle.com @@ -44,44 +44,44 @@ fi; # Replace place holders # --------------------- -sed -i -e "s|###ORACLE_EDITION###|$EDITION|g" $INSTALL_DIR/$INSTALL_RSP && \ -sed -i -e "s|###ORACLE_BASE###|$ORACLE_BASE|g" $INSTALL_DIR/$INSTALL_RSP && \ -sed -i -e "s|###ORACLE_HOME###|$ORACLE_HOME|g" $INSTALL_DIR/$INSTALL_RSP +sed -i -e "s|###ORACLE_EDITION###|$EDITION|g" "$INSTALL_DIR"/"$INSTALL_RSP" && \ +sed -i -e "s|###ORACLE_BASE###|$ORACLE_BASE|g" "$INSTALL_DIR"/"$INSTALL_RSP" && \ +sed -i -e "s|###ORACLE_HOME###|$ORACLE_HOME|g" "$INSTALL_DIR"/"$INSTALL_RSP" # Install Oracle binaries -cd $ORACLE_HOME && \ -mv $INSTALL_DIR/$INSTALL_FILE_1 $ORACLE_HOME/ && \ -unzip $INSTALL_FILE_1 && \ -rm $INSTALL_FILE_1 && \ -$ORACLE_HOME/runInstaller -silent -force -waitforcompletion -responsefile $INSTALL_DIR/$INSTALL_RSP -ignorePrereqFailure && \ -cd $HOME +cd "$ORACLE_HOME" && \ +mv "$INSTALL_DIR"/"$INSTALL_FILE_1" "$ORACLE_HOME"/ && \ +unzip "$INSTALL_FILE_1" && \ +rm "$INSTALL_FILE_1" && \ +"$ORACLE_HOME"/runInstaller -silent -force -waitforcompletion -responsefile "$INSTALL_DIR"/"$INSTALL_RSP" -ignorePrereqFailure && \ +cd "$HOME" if $SLIMMING; then # Remove not needed components # APEX - rm -rf $ORACLE_HOME/apex && \ + rm -rf "$ORACLE_HOME"/apex && \ # ORDS - rm -rf $ORACLE_HOME/ords && \ + rm -rf "$ORACLE_HOME"/ords && \ # SQL Developer - rm -rf $ORACLE_HOME/sqldeveloper && \ + rm -rf "$ORACLE_HOME"/sqldeveloper && \ # UCP connection pool - rm -rf $ORACLE_HOME/ucp && \ + rm -rf "$ORACLE_HOME"/ucp && \ # All installer files - rm -rf $ORACLE_HOME/lib/*.zip && \ + rm -rf "$ORACLE_HOME"/lib/*.zip && \ # OUI backup - rm -rf $ORACLE_HOME/inventory/backup/* && \ + rm -rf "$ORACLE_HOME"/inventory/backup/* && \ # Network tools help - rm -rf $ORACLE_HOME/network/tools/help && \ + rm -rf "$ORACLE_HOME"/network/tools/help && \ # Database upgrade assistant - rm -rf $ORACLE_HOME/assistants/dbua && \ + rm -rf "$ORACLE_HOME"/assistants/dbua && \ # Database migration assistant - rm -rf $ORACLE_HOME/dmu && \ + rm -rf "$ORACLE_HOME"/dmu && \ # Remove pilot workflow installer - rm -rf $ORACLE_HOME/install/pilot && \ + rm -rf "$ORACLE_HOME"/install/pilot && \ # Support tools - rm -rf $ORACLE_HOME/suptools && \ + rm -rf "$ORACLE_HOME"/suptools && \ # Temp location rm -rf /tmp/* && \ # Database files directory - rm -rf $INSTALL_DIR/database + rm -rf "$INSTALL_DIR"/database fi diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh b/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh index 5fc748b8e..15629d5d6 100644 --- a/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: March, 2020 # Author: rishabh.y.gupta@oracle.com @@ -23,12 +23,12 @@ if [ "${LIB_EDITION}" == "std" ]; then fi # If datafiles already exists -if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then - datafiles_edition=$(ls $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/.docker_* | rev | cut -d_ -f1 | rev) - if [ "${ORACLE_EDITION}" != "" ] && [ "${ORACLE_EDITION,,}" != $datafiles_edition ]; then +if [ -f "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" ]; then + datafiles_edition=$(find "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ -maxdepth 1 -name '.docker_*' | rev | cut -d_ -f1 | rev) + if [ "${ORACLE_EDITION}" != "" ] && [ "${ORACLE_EDITION,,}" != "$datafiles_edition" ]; then echo "The datafiles being used were created with $datafiles_edition edition software home. Please pass -e ORACLE_EDITION=$datafiles_edition to the docker run cmd."; exit 1; - elif [ "${ORACLE_EDITION}" == "" ] && [ "${CURRENT_EDITION,,}" != $datafiles_edition ]; then + elif [ "${ORACLE_EDITION}" == "" ] && [ "${CURRENT_EDITION,,}" != "$datafiles_edition" ]; then echo "The current software home is of ${CURRENT_EDITION,,} edition whereas the datafiles being used were created with $datafiles_edition edition software home. Please pass -e ORACLE_EDITION=$datafiles_edition to the docker run cmd."; exit 1; fi @@ -45,4 +45,4 @@ if [ "${ORACLE_EDITION}" != "" ]; then fi echo "ORACLE EDITION: ${CURRENT_EDITION}" -touch $ORACLE_HOME/install/.docker_${CURRENT_EDITION,,} +touch "$ORACLE_HOME"/install/.docker_"${CURRENT_EDITION,,}" diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh b/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh index 169ef6bf8..2a5bcc290 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: November, 2016 # Author: gerald.venzl@oracle.com @@ -13,19 +13,19 @@ ########### Move DB files ############ function moveFiles { - if [ ! -d $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID ]; then - mkdir -p $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + if [ ! -d "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID" ]; then + mkdir -p "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ fi; - mv $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ - mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ - mv $ORACLE_HOME/network/admin/sqlnet.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ - mv $ORACLE_HOME/network/admin/listener.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ - mv $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ - mv $ORACLE_HOME/install/.docker_* $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + mv "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + mv "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + mv "$ORACLE_HOME"/network/admin/sqlnet.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + mv "$ORACLE_HOME"/network/admin/listener.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + mv "$ORACLE_HOME"/network/admin/tnsnames.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + mv "$ORACLE_HOME"/install/.docker_* "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ # oracle user does not have permissions in /etc, hence cp and not mv - cp /etc/oratab $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + cp /etc/oratab "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ symLinkFiles; } @@ -33,28 +33,53 @@ function moveFiles { ########### Symbolic link DB files ############ function symLinkFiles { - if [ ! -L $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]; then - ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora + if [ ! -L "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora ]; then + ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/spfile"$ORACLE_SID".ora "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora fi; - if [ ! -L $ORACLE_HOME/dbs/orapw$ORACLE_SID ]; then - ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID + if [ ! -L "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" ]; then + ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/orapw"$ORACLE_SID" "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" fi; - if [ ! -L $ORACLE_HOME/network/admin/sqlnet.ora ]; then - ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/sqlnet.ora $ORACLE_HOME/network/admin/sqlnet.ora + if [ ! -L "$ORACLE_HOME"/network/admin/sqlnet.ora ]; then + ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/sqlnet.ora "$ORACLE_HOME"/network/admin/sqlnet.ora fi; - if [ ! -L $ORACLE_HOME/network/admin/listener.ora ]; then - ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/listener.ora $ORACLE_HOME/network/admin/listener.ora + if [ ! -L "$ORACLE_HOME"/network/admin/listener.ora ]; then + ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/listener.ora "$ORACLE_HOME"/network/admin/listener.ora fi; - if [ ! -L $ORACLE_HOME/network/admin/tnsnames.ora ]; then - ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora + if [ ! -L "$ORACLE_HOME"/network/admin/tnsnames.ora ]; then + ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/tnsnames.ora "$ORACLE_HOME"/network/admin/tnsnames.ora fi; # oracle user does not have permissions in /etc, hence cp and not ln - cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab + cp "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/oratab /etc/oratab + +} + +########### Undoing the symbolic links ############ +function undoSymLinkFiles { + + if [ -L "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora ]; then + rm "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora + fi; + + if [ -L "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" ]; then + rm "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" + fi; + + if [ -L "$ORACLE_HOME"/network/admin/sqlnet.ora ]; then + rm "$ORACLE_HOME"/network/admin/sqlnet.ora + fi; + + if [ -L "$ORACLE_HOME"/network/admin/listener.ora ]; then + rm "$ORACLE_HOME"/network/admin/listener.ora + fi; + + if [ -L "$ORACLE_HOME"/network/admin/tnsnames.ora ]; then + rm "$ORACLE_HOME"/network/admin/tnsnames.ora + fi; } @@ -86,17 +111,32 @@ EOF # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ################################### +# Only EE is supported for 19c on ARM64 platform +if [ "$(arch)" == "aarch64" ] || [ "$(arch)" == "arm64" ]; then + if { [ "${ORACLE_EDITION^^}" != "" ] && [ "${ORACLE_EDITION^^}" != "ENTERPRISE" ]; }; then + echo "${ORACLE_EDITION} edition is not supported on ARM64 platform."; + exit 1; + fi; +fi; + # Check whether container has enough memory +if [[ -f /sys/fs/cgroup/cgroup.controllers ]]; then + memory=$(cat /sys/fs/cgroup/memory.max) +else + memory=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes) +fi + +# Default memory to 2GB, if not able to fetch memory restrictions from cgroups +export ALLOCATED_MEMORY=$((${memory:=2147483648}/1024/1024)) + # Github issue #219: Prevent integer overflow, -# only check if memory digits are less than 11 (single GB range and below) -if [ `cat /sys/fs/cgroup/memory/memory.limit_in_bytes | wc -c` -lt 11 ]; then - if [ `cat /sys/fs/cgroup/memory/memory.limit_in_bytes` -lt 2147483648 ]; then - echo "Error: The container doesn't have enough memory allocated." - echo "A database container needs at least 2 GB of memory." - echo "You currently only have $((`cat /sys/fs/cgroup/memory/memory.limit_in_bytes`/1024/1024/1024)) GB allocated to the container." - exit 1; - fi; -fi; +# only check if memory digits are less than 11 (single GB range and below) +if [[ ${memory} != "max" && ${#memory} -lt 11 && ${memory} -lt 2147483648 ]]; then + echo "Error: The container doesn't have enough memory allocated." + echo "A database container needs at least 2 GB of memory." + echo "You currently only have $ALLOCATED_MEMORY MB allocated to the container." + exit 1; +fi # Check that hostname doesn't container any "_" # Github issue #711 @@ -111,6 +151,47 @@ trap _int SIGINT # Set SIGTERM handler trap _term SIGTERM +# Setting up ORACLE_PWD if podman secret is passed on + if [ -e '/run/secrets/oracle_pwd' ]; then + ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + export ORACLE_PWD + fi + +# Creation of Observer only section +if [ "${DG_OBSERVER_ONLY}" = "true" ]; then + if [ -z "${DG_OBSERVER_NAME}" ]; then + # Auto generate the observer name if not given + DG_OBSERVER_NAME="observer-$(openssl rand -hex 4)" + export DB_OBSERVER_NAME + fi + export DG_OBSERVER_DIR=${ORACLE_BASE}/oradata/${DG_OBSERVER_NAME} + + # Calling the script to create observer + "$ORACLE_BASE"/"$CREATE_OBSERVER_FILE" "$DG_OBSERVER_NAME" "$PRIMARY_DB_CONN_STR" "${ORACLE_PWD:?'ORACLE_PWD not set. Exiting...'}" "$DG_OBSERVER_DIR" + + if [ ! -f "$DG_OBSERVER_DIR/observer.log" ]; then + # Display the content of nohup.out to show errors + if [ -f "$DG_OBSERVER_DIR/nohup.out" ]; then + cat "$DG_OBSERVER_DIR"/nohup.out + echo "Observer is not able to start. Exiting..." + else + echo "Observer creation and startup fail !! Exiting..." + fi + exit 1 + else + # Tail on observer log and wait (otherwise container will exit) + echo "The following output is now a tail of the observer.log:" + tail -f "$DG_OBSERVER_DIR"/observer.log & + childPID=$! + wait $childPID + + # Show nohup output and exit + echo "Exiting..." + cat "$DG_OBSERVER_DIR"/nohup.out + exit 0; + fi +fi + # Default for ORACLE SID if [ "$ORACLE_SID" == "" ]; then export ORACLE_SID=ORCLCDB @@ -145,61 +226,106 @@ export ORACLE_PDB=${ORACLE_PDB^^} export ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8} # Call relinkOracleBinary.sh before the database is created or started +# shellcheck disable=SC1090 . "$ORACLE_BASE/$RELINK_BINARY_FILE" # Check whether database already exists -if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then +if [ -f "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" ] && [ -d "$ORACLE_BASE"/oradata/"${ORACLE_SID}" ]; then symLinkFiles; # Make sure audit file destination exists - if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then - mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump + if [ ! -d "$ORACLE_BASE"/admin/"$ORACLE_SID"/adump ]; then + mkdir -p "$ORACLE_BASE"/admin/"$ORACLE_SID"/adump fi; # Start database - $ORACLE_BASE/$START_FILE; + "$ORACLE_BASE"/"$START_FILE"; + + # In case of the prebuiltdb extended image container, provision changing password by ORACLE_PWD + if [ -n "${ORACLE_PWD}" ] && [ -e "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" ]; then + "${ORACLE_BASE}"/"${PWD_FILE}" "${ORACLE_PWD}" + fi else + undoSymLinkFiles; + # Remove database config files, if they exist - rm -f $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora - rm -f $ORACLE_HOME/dbs/orapw$ORACLE_SID - rm -f $ORACLE_HOME/network/admin/sqlnet.ora - rm -f $ORACLE_HOME/network/admin/listener.ora - rm -f $ORACLE_HOME/network/admin/tnsnames.ora - + rm -f "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora + rm -f "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" + rm -f "$ORACLE_HOME"/network/admin/sqlnet.ora + rm -f "$ORACLE_HOME"/network/admin/listener.ora + rm -f "$ORACLE_HOME"/network/admin/tnsnames.ora + + # Clean up incomplete database + rm -rf "$ORACLE_BASE"/oradata/"$ORACLE_SID" + cp /etc/oratab oratab.bkp + sed "/^#/!d" oratab.bkp > /etc/oratab + rm -f oratab.bkp + rm -rf "$ORACLE_BASE"/cfgtoollogs/dbca/"$ORACLE_SID" + rm -rf "$ORACLE_BASE"/admin/"$ORACLE_SID" + + # clean up zombie shared memory/semaphores + ipcs -m | awk ' /[0-9]/ {print $2}' | xargs -n1 ipcrm -m 2> /dev/null + ipcs -s | awk ' /[0-9]/ {print $2}' | xargs -n1 ipcrm -s 2> /dev/null + # Create database - $ORACLE_BASE/$CREATE_DB_FILE $ORACLE_SID $ORACLE_PDB $ORACLE_PWD || exit 1; + "$ORACLE_BASE"/"$CREATE_DB_FILE" "$ORACLE_SID" "$ORACLE_PDB" "$ORACLE_PWD" || exit 1; + + # Check whether database is successfully created + if "$ORACLE_BASE"/"$CHECK_DB_FILE"; then + # Create a checkpoint file if database is successfully created + # Populate the checkpoint file with the current date to avoid timing issue when using NFS persistence in multi-replica mode + date -Iseconds > "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" + fi # Move database operational files to oradata moveFiles; - + + # Execute setup script for extensions + "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/extensions/setup + # Execute custom provided setup scripts - $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/setup + "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/setup + + # Setup TCPS with the database + if [ "${ENABLE_TCPS}" = "true" ]; then + "${ORACLE_BASE}"/"${CONFIG_TCPS_FILE}" + fi + fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE -if [ $? -eq 0 ]; then +"$ORACLE_BASE"/"$CHECK_DB_FILE" +status=$? + +if [ $status -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" echo "#########################" - - # Execute custom provided startup scripts - $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup - - echo "DATABASE IS READY TO USE!" > /u01/status/database.status + # Execute startup script for extensions + "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/extensions/startup + # Execute custom provided startup scripts + "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/startup + else echo "#####################################" echo "########### E R R O R ###############" - echo "DATABASE SETUP WAS NOT SUCCESSFUL!" |& tee /u01/status/database.status + echo "DATABASE SETUP WAS NOT SUCCESSFUL!" echo "Please check output for further info!" echo "########### E R R O R ###############" echo "#####################################" fi; +# Exiting the script without waiting on the tail logs +if [ "$1" = "--nowait" ]; then + # Creating state-file for identifyig container of the prebuiltdb extended image + touch "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" + exit $status; +fi + # Tail on alert log and wait (otherwise container will exit) echo "The following output is now a tail of the alert.log:" -tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log & +tail -f "$ORACLE_BASE"/diag/rdbms/*/*/trace/alert*.log & childPID=$! wait $childPID diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh b/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh index 3ebf2305b..edc2628e5 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: July, 2017 # Author: gerald.venzl@oracle.com @@ -19,15 +19,15 @@ if [ -z "$SCRIPTS_ROOT" ]; then fi; # Execute custom provided files (only if directory exists and has files in it) -if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A $SCRIPTS_ROOT)" ]; then +if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A "$SCRIPTS_ROOT")" ]; then echo ""; echo "Executing user defined scripts" - for f in $SCRIPTS_ROOT/*; do + for f in "$SCRIPTS_ROOT"/*; do case "$f" in *.sh) echo "$0: running $f"; . "$f" ;; - *.sql) echo "$0: running $f"; echo "exit" | $ORACLE_HOME/bin/sqlplus -s "/ as sysdba" @"$f"; echo ;; + *.sql) echo "$0: running $f"; echo "exit" | "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"$f"; echo ;; *) echo "$0: ignoring $f" ;; esac echo ""; diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh b/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh index cd140cd38..79ce7df2f 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: November, 2016 # Author: gerald.venzl@oracle.com @@ -10,9 +10,14 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ -e "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" ] && [ -n "${ORACLE_PWD}" ] && [ "${ORACLE_PWD}" != "$1" ]; then + echo "WARNING: The database password can not be changed for this container having a prebuilt database. The original password exists in the container environment. Your new password has been ignored!" + exit 1 +fi + ORACLE_PWD=$1 -ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" -ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`" +ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)" +ORACLE_PDB="$(ls -dl "$ORACLE_BASE"/oradata/"$ORACLE_SID"/*/ | grep -v -e pdbseed -e "$ARCHIVELOG_DIR_NAME" | awk '{print $9}' | cut -d/ -f6)" ORAENV_ASK=NO source oraenv diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh b/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh index 42994830a..5a8ed8465 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: December, 2016 # Author: gerald.venzl@oracle.com @@ -13,14 +13,16 @@ # Setup filesystem and oracle user # Adjust file permissions, go to /opt/oracle as user 'oracle' to proceed with Oracle installation # ------------------------------------------------------------ -mkdir -p $ORACLE_BASE/scripts/setup && \ -mkdir $ORACLE_BASE/scripts/startup && \ -ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \ -mkdir $ORACLE_BASE/oradata && \ -mkdir -p $ORACLE_HOME && \ -chmod ug+x $ORACLE_BASE/*.sh && \ -yum -y install oracle-database-preinstall-19c openssl && \ +mkdir -p "$ORACLE_BASE"/scripts/setup && \ +mkdir "$ORACLE_BASE"/scripts/startup && \ +mkdir -p "$ORACLE_BASE"/scripts/extensions/setup && \ +mkdir "$ORACLE_BASE"/scripts/extensions/startup && \ +ln -s "$ORACLE_BASE"/scripts /docker-entrypoint-initdb.d && \ +mkdir "$ORACLE_BASE"/oradata && \ +mkdir -p "$ORACLE_HOME" && \ +chmod ug+x "$ORACLE_BASE"/*.sh && \ +yum -y install oracle-database-preinstall-19c openssl hostname && \ rm -rf /var/cache/yum && \ -ln -s $ORACLE_BASE/$PWD_FILE /home/oracle/ && \ +ln -s "$ORACLE_BASE"/"$PWD_FILE" /home/oracle/ && \ echo oracle:oracle | chpasswd && \ -chown -R oracle:dba $ORACLE_BASE +chown -R oracle:dba "$ORACLE_BASE" diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh b/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh index 2a88ecd7f..5da043d8c 100755 --- a/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh +++ b/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh @@ -1,7 +1,7 @@ #!/bin/bash # LICENSE UPL 1.0 # -# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved. # # Since: November, 2016 # Author: gerald.venzl@oracle.com @@ -13,7 +13,7 @@ # Check that ORACLE_HOME is set if [ "$ORACLE_HOME" == "" ]; then - script_name=`basename "$0"` + script_name=$(basename "$0") echo "$script_name: ERROR - ORACLE_HOME is not set. Please set ORACLE_HOME and PATH before invoking this script." exit 1; fi; diff --git a/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh b/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh index 9b0fc88ec..d5eb9a79a 100755 --- a/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh +++ b/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh @@ -37,7 +37,7 @@ if [ ! -e ${DOMAIN_HOME}/servers/${ADMIN_NAME}/logs/${ADMIN_NAME}.log ]; then echo "Create Domain" PROPERTIES_FILE=/u01/oracle/properties/domain.properties if [ ! -e "$PROPERTIES_FILE" ]; then - echo "A properties file [$PROPERTIES_FILE] with the username and password needs to be supplied." + echo "A properties file with the username and password needs to be supplied." exit fi -- GitLab