From 9c25813493f260f15175c98606e815d49cd30a55 Mon Sep 17 00:00:00 2001
From: Ioannis Igoumenos <ioigoume@gmail.com>
Date: Fri, 7 Jun 2024 13:21:58 +0300
Subject: [PATCH] Add oracle instantclient with sqlplus, php oci8.

---
 container/registry/base/Dockerfile | 74 ++++++++++++++++++++++++------
 1 file changed, 60 insertions(+), 14 deletions(-)

diff --git a/container/registry/base/Dockerfile b/container/registry/base/Dockerfile
index c66a7f332..05f38464f 100644
--- a/container/registry/base/Dockerfile
+++ b/container/registry/base/Dockerfile
@@ -22,7 +22,7 @@ FROM php:${PHP_IMAGE_VERSION}-apache-bookworm
 # Official PHP image with Apache HTTPD includes
 # --with-openssl
 # --with-mbstring
-# but xls, pdo, pdo_mysql, pdo_pgsql, mysqli, pgsql, 
+# but gd, xls, pdo, pdo_mysql, pdo_pgsql, mysqli, pgsql, oci8 (Oracle support)
 # and ldap extensions must be built.
 RUN apt-get update && apt-get install -y \
          libldap-2.5-0 \
@@ -36,21 +36,62 @@ RUN apt-get update && apt-get install -y \
          wget \
          zlib1g \
          libpcre3-dev \
-      && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
-      && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
-      && docker-php-ext-configure mysqli \
-      && docker-php-ext-install intl xsl pdo pdo_mysql pdo_pgsql mysqli pgsql ldap pcntl \
-      && docker-php-source delete \
-      && apt-get purge -y \
-         libldap2-dev \
-         libmysqlclient-dev \
+         libz-dev \
          libpq-dev \
-      && apt-get clean
+         libjpeg-dev \
+         libpng-dev \
+         libfreetype6-dev \
+         libssl-dev \
+         libmcrypt-dev \
+         zip \
+         unzip \
+         build-essential \
+         libaio1 \
+         libzip-dev \
+         && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
+         && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
+         && docker-php-ext-configure mysqli \
+         && docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-freetype=/usr/include/ \
+         && docker-php-ext-install intl xsl pdo pdo_mysql pdo_pgsql mysqli pgsql ldap pcntl gd \
+         && docker-php-source delete \
+         && apt-get purge -y \
+            libldap2-dev \
+            libmysqlclient-dev \
+         && apt-get clean
 
-# Configure TLS CA signing certificates for LDAP TLS libraries.
-ARG LDAPTLS_CACERT
-ENV LDAPTLS_CACERT ${LDAPTLS_CACERT:-/etc/ssl/certs/ca-certificates.crt}
-LABEL ldaptls_cacert=${LDAPTLS_CACERT}
+#
+#--------------------------------------------------------------------------
+# Application Dependencies
+#--------------------------------------------------------------------------
+#
+
+ARG ORACLE_VERSION=19.23.0.0
+ARG ORACLE_DIR=/usr/lib/oracle
+ARG ORACLE_INSTACLIENT_DIR=instantclient_19_23
+
+# Download oracle packages and install OCI8
+RUN mkdir -p ${ORACLE_DIR} \
+    && wget -O instantclient-basic-linux.x64-${ORACLE_VERSION}.0dbru.zip https://download.oracle.com/otn_software/linux/instantclient/1923000/instantclient-basic-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && unzip -o instantclient-basic-linux.x64-${ORACLE_VERSION}.0dbru.zip -d ${ORACLE_DIR}/ \
+    && rm instantclient-basic-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && wget -O instantclient-sdk-linux.x64-${ORACLE_VERSION}.0dbru.zip https://download.oracle.com/otn_software/linux/instantclient/1923000/instantclient-sdk-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && unzip -o instantclient-sdk-linux.x64-${ORACLE_VERSION}.0dbru.zip -d ${ORACLE_DIR}/ \
+    && rm instantclient-sdk-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && wget -O instantclient-sqlplus-linux.x64-${ORACLE_VERSION}.0dbru.zip https://download.oracle.com/otn_software/linux/instantclient/1923000/instantclient-sqlplus-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && unzip -o instantclient-sqlplus-linux.x64-${ORACLE_VERSION}.0dbru.zip -d ${ORACLE_DIR}/ \
+    && rm instantclient-sqlplus-linux.x64-${ORACLE_VERSION}.0dbru.zip \
+    && echo ${ORACLE_DIR}/${ORACLE_INSTACLIENT_DIR} > /etc/ld.so.conf.d/oracle-instantclient.conf \
+    && ldconfig
+
+# Setting the LD_LIBRARY_PATH environment variable so the systems dynamic linker can find the newly installed libraries.
+ENV LD_LIBRARY_PATH ${ORACLE_DIR}/${ORACLE_INSTACLIENT_DIR}
+# Updating PATH environment program so that utility binaries installed by the various libraries will be found.
+ENV PATH="${PATH}:${ORACLE_DIR}/${ORACLE_INSTACLIENT_DIR}"
+
+# Install our compiled oci8 extensions
+RUN docker-php-ext-configure oci8 --with-oci8=instantclient,${ORACLE_DIR}/${ORACLE_INSTACLIENT_DIR} \
+    && docker-php-ext-install -j$(nproc) oci8 \
+    && docker-php-source delete
 
 # Build the redis extension to use Redis for session storage.
 RUN docker-php-source extract \
@@ -62,6 +103,11 @@ RUN docker-php-source extract \
 # Copy the production php.ini into place.
 RUN cp "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
 
+# Configure TLS CA signing certificates for LDAP TLS libraries.
+ARG LDAPTLS_CACERT
+ENV LDAPTLS_CACERT ${LDAPTLS_CACERT:-/etc/ssl/certs/ca-certificates.crt}
+LABEL ldaptls_cacert=${LDAPTLS_CACERT}
+
 # Signal the PHP code to configure itself for container deployment.
 ENV COMANAGE_REGISTRY_CONTAINER 1