1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
# Copyright (c) 2009, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0, as
# published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an
# additional permission to link the program and your derivative works
# with the separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# Without limiting anything contained in the foregoing, this file,
# which is part of MySQL Connector/Python, is also subject to the
# Universal FOSS Exception, version 1.0, a copy of which can be found at
# http://oss.oracle.com/licenses/universal-foss-exception.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# By default the container will use oracle linux 10 from OCR.
# The BASE_IMAGE environment variable can be used to pull
# any other Oracle Linux image from any other Docker registry.
ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:10-slim
FROM ${BASE_IMAGE} as pure_python
# In order to be able to run the tests within a private network,
# optional proxy configurations can be used.
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY
ENV HTTP_PROXY=${HTTP_PROXY} HTTPS_PROXY=${HTTPS_PROXY} NO_PROXY=${NO_PROXY}
WORKDIR /connector-python
RUN microdnf install -y dnf \
&& dnf install -y gcc-c++
# Install Python (including dev files), and create a virtual environment
RUN dnf -y install python3-pip python3-devel python3-setuptools
RUN python3 -m venv /pyenvs/venv
ENV PATH="/pyenvs/venv/bin:$PATH"
RUN pip install --upgrade setuptools
# This volume can be used to share, among other things,
# the Unix socket file with the container.
VOLUME [ "/shared" ]
# Providing a private PyPI repository is allowed
# [PIP_INDEX_URL]: https://wiki.onap.org/display/DW/Configure+and+customize+pip
ARG PYPI_REPOSITORY
ENV PIP_INDEX_URL=${PYPI_REPOSITORY:-https://pypi.org/simple}
# Install MySQL Connector/Python (python only)
COPY . .
RUN cd mysqlx-connector-python \
&& pip install -r tests/requirements.txt \
&& pip install .
FROM pure_python AS c_extension
RUN dnf install -y git cmake
RUN mkdir /tools /install
ENV DIR_CONNECTOR=/connector-python
ENV DIR_TOOLS=/tools
ENV DIR_INSTALL=/install
# Abseil: https://github.com/abseil/abseil-cpp
# Install Protobuf C++: https://github.com/protocolbuffers/protobuf
ENV ABSEIL_VERSION="20230802.1"
ENV PROTOBUF_VERSION="v5.29.4"
RUN cd $DIR_TOOLS \
&& git clone --branch ${PROTOBUF_VERSION} https://github.com/protocolbuffers/protobuf.git \
&& cd protobuf/third_party \
&& git clone --branch ${ABSEIL_VERSION} https://github.com/abseil/abseil-cpp.git \
&& cd .. \
&& cmake . -DCMAKE_CXX_STANDARD=14 \
-Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_ABSL_PROVIDER=module \
-DCMAKE_PREFIX_PATH=${DIR_TOOLS}/protobuf \
-DCMAKE_INSTALL_PREFIX=${DIR_INSTALL}/protobuf \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF \
&& make -j$(nproc) \
&& make install
# Build protobuf cext
RUN rm -rf ${DIR_TOOLS} \
&& cd ${DIR_CONNECTOR} \
&& cd mysqlx-connector-python \
&& python setup.py install --with-protobuf-include-dir=${DIR_INSTALL}/protobuf/include \
--with-protobuf-lib-dir=${DIR_INSTALL}/protobuf/lib64 \
--with-protoc=${DIR_INSTALL}/protobuf/bin/protoc
|