Skip to content

Commit 9e49cb9

Browse files
authored
Merge pull request #647 from ss10sb/oci8-v3
Update OCI8 layer for Bref 3
2 parents 9bcff1c + ed502db commit 9e49cb9

5 files changed

Lines changed: 94 additions & 41 deletions

File tree

Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ functions:
8282
| ODBC Snowflake | `${bref-extra:odbc-snowflake-php-81}` |
8383
| OpenSwoole | `${bref-extra:openswoole-php-81}` |
8484
| OpenTelemetry | `${bref-extra:opentelemetry-php-81}` |
85-
| Oracle | `${bref-extra:oci8-php-80}` |
85+
| Oracle | `${bref-extra:oci8-php-83}` |
8686
| Pcov | `${bref-extra:pcov-php-81}` |
8787
| PostgreSQL | `${bref-extra:pgsql-php-81}` |
8888
| RdKafka | `${bref-extra:rdkafka-php-81}` |

layers/oci8/Dockerfile

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
11
ARG PHP_VERSION
22
ARG BREF_VERSION
3-
FROM bref/build-php-$PHP_VERSION:$BREF_VERSION AS ext
3+
ARG OL_VERSION=8
4+
ARG IC_VERSION=21
5+
# Oracle Instant Client image
6+
FROM public.ecr.aws/docker/library/oraclelinux:$OL_VERSION AS oracle_base
7+
ARG OL_VERSION
8+
RUN dnf -y install oracle-instantclient-release-el${OL_VERSION}
9+
10+
FROM oracle_base AS oracle_devel
11+
RUN dnf -y install oracle-instantclient-devel && \
12+
mkdir -p /opt/oracle && \
13+
cp -r /usr/lib/oracle/*/client64/lib/* /opt/oracle/ && \
14+
cp -r /usr/include/oracle/*/client64/* /opt/oracle/
15+
16+
FROM oracle_base AS oracle_client
17+
RUN dnf -y install oracle-instantclient-basiclite && \
18+
mkdir -p /opt/oracle && \
19+
cp -r /usr/lib/oracle/*/client64/lib/* /opt/oracle/
20+
21+
# Redeclare for scope
422
ARG PHP_VERSION
5-
6-
# Specify library path
7-
ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH
8-
ENV ORACLE_BUILD_DIR=${BUILD_DIR}/oracle
9-
10-
# Install libaio
11-
RUN dnf install -y libaio
12-
13-
# Instant Client newer than 21.x requires glibc 2.28+ which is not available on Amazon Linux 2
14-
RUN mkdir -p ${ORACLE_BUILD_DIR}; \
15-
cd ${ORACLE_BUILD_DIR}; \
16-
curl -o oci-basic.zip https://download.oracle.com/otn_software/linux/instantclient/2116000/instantclient-basiclite-linux.x64-21.16.0.0.0dbru.zip && \
17-
unzip oci-basic.zip -d src -x META-INF/* && \
18-
curl -o oci-sdk.zip https://download.oracle.com/otn_software/linux/instantclient/2116000/instantclient-sdk-linux.x64-21.16.0.0.0dbru.zip && \
19-
unzip oci-sdk.zip -d src -x META-INF/*
20-
21-
RUN if [ "$PHP_VERSION" = "80" ] ; then \
22-
echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8-3.0.1; \
23-
elif [ "$PHP_VERSION" = "81" ] ; then \
24-
echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8-3.2.1; \
25-
else \
26-
echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8; \
27-
fi
28-
29-
RUN cp /usr/lib64/libaio.so.1 /tmp/libaio.so.1
30-
RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libclntshcore.so.21.1 /tmp/libclntshcore.so.21.1
31-
RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libclntsh.so.21.1 /tmp/libclntsh.so.21.1
32-
RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libocci.so.21.1 /tmp/libocci.so.21.1
33-
RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libnnz21.so /tmp/libnnz21.so
34-
RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libociicus.so /tmp/libociicus.so
35-
RUN cp `php-config --extension-dir`/oci8.so /tmp/oci8.so
36-
RUN echo 'extension=oci8.so' > /tmp/ext.ini
37-
38-
RUN php /bref/lib-copy/copy-dependencies.php /tmp/oci8.so /tmp/extension-libs
39-
# Missing these two
40-
RUN cp /tmp/libocci.so.21.1 /tmp/extension-libs
41-
RUN cp /tmp/libociicus.so /tmp/extension-libs
23+
ARG BREF_VERSION
24+
FROM bref/build-php-$PHP_VERSION:$BREF_VERSION AS ext
25+
ARG IC_VERSION
26+
ENV ORACLE_DEVEL_DIR=/opt/oracle-devel
27+
ENV ORACLE_CLIENT_DIR=/opt/oracle-client
28+
ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$ORACLE_CLIENT_DIR:$ORACLE_DEVEL_DIR:$LD_LIBRARY_PATH
29+
30+
COPY --from=oracle_devel /usr/lib64/libaio.so.1 /usr/lib64/libaio.so.1
31+
COPY --from=oracle_devel /opt/oracle $ORACLE_DEVEL_DIR
32+
COPY --from=oracle_client /opt/oracle $ORACLE_CLIENT_DIR
33+
34+
RUN echo "instantclient,${ORACLE_DEVEL_DIR}" | pecl install oci8
35+
36+
RUN cp /usr/lib64/libaio.so.1 /tmp/libaio.so.1 && \
37+
cp ${ORACLE_CLIENT_DIR}/libclntshcore.so.${IC_VERSION}.1 /tmp && \
38+
cp ${ORACLE_CLIENT_DIR}/libclntsh.so.${IC_VERSION}.1 /tmp && \
39+
cp ${ORACLE_CLIENT_DIR}/libnnz${IC_VERSION}.so /tmp && \
40+
cp ${ORACLE_CLIENT_DIR}/libocci.so.${IC_VERSION}.1 /tmp && \
41+
cp ${ORACLE_CLIENT_DIR}/libociicus.so /tmp && \
42+
cp `php-config --extension-dir`/oci8.so /tmp/oci8.so && \
43+
echo 'extension=oci8.so' > /tmp/ext.ini
44+
45+
RUN php /bref/lib-copy/copy-dependencies.php /tmp/oci8.so /tmp/extension-libs && \
46+
cp /tmp/libocci.so.${IC_VERSION}.1 /tmp/extension-libs && \
47+
cp /tmp/libociicus.so /tmp/extension-libs
4248

4349
# Build the final image from the scratch image that contain files you want to export
4450
FROM scratch
4551

4652
COPY --from=ext /tmp/oci8.so /opt/bref/extensions/oci8.so
4753
COPY --from=ext /tmp/ext.ini /opt/bref/etc/php/conf.d/ext-oci8.ini
48-
COPY --from=ext /tmp/extension-libs /opt/lib
54+
COPY --from=ext /tmp/extension-libs /opt/lib

layers/oci8/config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
22
"php": [
3+
"83",
4+
"84",
5+
"85"
36
]
47
}

layers/oci8/docker-compose.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
services:
2+
db:
3+
image: container-registry.oracle.com/database/free:latest-lite
4+
ports:
5+
- "1521:1521"
6+
environment:
7+
- ORACLE_PWD=testing

layers/oci8/test.php

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,45 @@
11
<?php
22

3-
if (!function_exists($func = 'oci_connect')) {
3+
if (! extension_loaded('oci8')) {
4+
echo 'FAIL: Extension "oci8" is not loaded.'.PHP_EOL;
5+
exit(1);
6+
}
7+
8+
if (! function_exists($func = 'oci_connect')) {
49
echo sprintf('FAIL: Function "%s" does not exist.', $func).PHP_EOL;
510
exit(1);
611
}
712

13+
$clientVersion = oci_client_version();
14+
if (empty($clientVersion) || $clientVersion === '0.0.0.0.0') {
15+
echo 'FAIL: Extension loaded, but can\'t find Oracle Instant Client libraries.'.PHP_EOL;
16+
exit(1);
17+
}
18+
19+
// Test live connection assuming db container is started (see docker-compose.yml for example).
20+
// You may need to add --add-host=host.docker.internal:host-gateway to Makefile test: docker run if
21+
// you are on Linux
22+
/*
23+
$conn = oci_connect('SYSTEM', 'testing', 'host.docker.internal/FREE');
24+
if (! $conn) {
25+
echo 'FAIL: Can\'t connect to Oracle database: '.oci_error()['message'].PHP_EOL;
26+
exit(1);
27+
}
28+
29+
$stid = oci_parse($conn, 'SELECT 1 FROM DUAL');
30+
if (! $stid) {
31+
echo 'FAIL: Can\'t parse SQL statement: '.oci_error($conn)['message'].PHP_EOL;
32+
oci_close($conn);
33+
exit(1);
34+
}
35+
36+
if (! oci_execute($stid)) {
37+
echo 'FAIL: Can\'t execute SQL statement: '.oci_error($conn)['message'].PHP_EOL;
38+
oci_close($conn);
39+
exit(1);
40+
}
41+
$stid = null;
42+
oci_close($conn);
43+
*/
44+
845
exit(0);

0 commit comments

Comments
 (0)