|
| 1 | +FROM mcr.microsoft.com/devcontainers/base:trixie |
| 2 | + |
| 3 | +# Install libaio1t64 and provide a libaio.so.1 symlink for Oracle Instant Client |
| 4 | +# Install rlwrap for readline support in sqlplus |
| 5 | +RUN rm -f /etc/apt/sources.list.d/yarn.list \ |
| 6 | + && apt-get update \ |
| 7 | + && apt-get install -y libaio1t64 rlwrap \ |
| 8 | + && rm -rf /var/lib/apt/lists/* \ |
| 9 | + && DEB_HOST_MULTIARCH="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" \ |
| 10 | + && ln -sf /usr/lib/${DEB_HOST_MULTIARCH}/libaio.so.1t64 \ |
| 11 | + /usr/lib/${DEB_HOST_MULTIARCH}/libaio.so.1 \ |
| 12 | + && echo "alias sqlplus='rlwrap sqlplus'" >> /etc/bash.bashrc |
| 13 | + |
| 14 | +# Create directory structure for Oracle |
| 15 | +RUN mkdir -p /opt/oracle |
| 16 | + |
| 17 | +# Download and install Oracle Instant Client based on architecture. |
| 18 | +# x86_64 uses Oracle's version-less "always latest" URLs; arm64 must pin a |
| 19 | +# version because Oracle does not publish version-less arm64 zips. |
| 20 | +WORKDIR /tmp |
| 21 | +RUN ARCH=$(uname -m) && \ |
| 22 | + if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \ |
| 23 | + IC_VERSION="23.26.1.0.0"; \ |
| 24 | + IC_PATH="2326100"; \ |
| 25 | + BASE_URL="https://download.oracle.com/otn_software/linux/instantclient/${IC_PATH}"; \ |
| 26 | + BASIC="instantclient-basic-linux.arm64-${IC_VERSION}.zip"; \ |
| 27 | + SDK="instantclient-sdk-linux.arm64-${IC_VERSION}.zip"; \ |
| 28 | + SQLPLUS="instantclient-sqlplus-linux.arm64-${IC_VERSION}.zip"; \ |
| 29 | + else \ |
| 30 | + BASE_URL="https://download.oracle.com/otn_software/linux/instantclient"; \ |
| 31 | + BASIC="instantclient-basic-linuxx64.zip"; \ |
| 32 | + SDK="instantclient-sdk-linuxx64.zip"; \ |
| 33 | + SQLPLUS="instantclient-sqlplus-linuxx64.zip"; \ |
| 34 | + fi && \ |
| 35 | + wget -q "${BASE_URL}/${BASIC}" \ |
| 36 | + && wget -q "${BASE_URL}/${SDK}" \ |
| 37 | + && wget -q "${BASE_URL}/${SQLPLUS}" \ |
| 38 | + && unzip -qo "${BASIC}" \ |
| 39 | + && unzip -qo "${SDK}" \ |
| 40 | + && unzip -qo "${SQLPLUS}" \ |
| 41 | + && mv instantclient_*/ /opt/oracle/instantclient \ |
| 42 | + && rm -f instantclient-*.zip |
| 43 | + |
| 44 | +# Set Oracle environment variables |
| 45 | +ENV ORACLE_HOME=/opt/oracle/instantclient \ |
| 46 | + LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH \ |
| 47 | + PATH=/opt/oracle/instantclient:$PATH |
| 48 | + |
| 49 | +# Switch to vscode user |
| 50 | +USER vscode |
| 51 | + |
| 52 | +# Set working directory |
| 53 | +WORKDIR /workspaces/ruby-plsql |
0 commit comments