Skip to content

Commit

Permalink
Merge pull request #7 from Senzing/issue-1.dockter.1
Browse files Browse the repository at this point in the history
issue-1 Remove /opt/senzing dependency
  • Loading branch information
docktermj authored Apr 3, 2019
2 parents 7fb7fd0 + 35ef1ca commit 67a9776
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 192 deletions.
160 changes: 3 additions & 157 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,36 +1,4 @@
ARG BASE_IMAGE=debian:9

# -----------------------------------------------------------------------------
# Stage: db2_builder
# -----------------------------------------------------------------------------

FROM ${BASE_IMAGE} as db2_builder

ENV REFRESHED_AT=2019-03-22

LABEL Name="senzing/senzing-base-db2-builder" \
Version="1.0.0"

# Install packages via apt.

RUN apt-get update \
&& apt-get -y install \
unzip

# Copy the DB2 ODBC client code.
# The tar.gz files must be independently downloaded before the docker build.

ADD ./downloads/ibm_data_server_driver_for_odbc_cli_linuxx64_v11.1.tar.gz /opt/IBM/db2
ADD ./downloads/v11.1.4fp4a_jdbc_sqlj.tar.gz /tmp/db2-jdbc-sqlj

# Extract ZIP file.

RUN unzip -d /tmp/extracted-jdbc /tmp/db2-jdbc-sqlj/jdbc_sqlj/db2_db2driver_for_jdbc_sqlj.zip

# -----------------------------------------------------------------------------
# Final stage
# -----------------------------------------------------------------------------

FROM ${BASE_IMAGE}

ENV REFRESHED_AT=2019-03-22
Expand Down Expand Up @@ -58,146 +26,24 @@ RUN apt-get update \
wget \
&& rm -rf /var/lib/apt/lists/*

# Install libmysqlclient21.

ENV DEBIAN_FRONTEND=noninteractive

# RUN wget -qO - https://repo.mysql.com/RPM-GPG-KEY-mysql | apt-key add - \
# && wget https://repo.mysql.com/mysql-apt-config_0.8.11-1_all.deb \
# && dpkg --install mysql-apt-config_0.8.11-1_all.deb \
# && apt-get update \
# && apt-get -y install libmysqlclient21 \
# && rm mysql-apt-config_0.8.11-1_all.deb \
# && rm -rf /var/lib/apt/lists/*

# Create MySQL connector.
# References:
# - https://dev.mysql.com/downloads/connector/odbc/
# - https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation-binary-unix-tarball.html

# RUN wget https://cdn.mysql.com//Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit.tar.gz \
# && tar -xvf mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit.tar.gz \
# && cp mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit/lib/* /usr/lib/x86_64-linux-gnu/odbc/ \
# && mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit/bin/myodbc-installer -d -a -n "MySQL" -t "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so;" \
# && rm mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit.tar.gz \
# && rm -rf mysql-connector-odbc-8.0.13-linux-ubuntu18.04-x86-64bit

# Install packages via pip.

RUN pip install \
psutil \
pyodbc

# Copy files from "db2_builder" stage.

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/adm/db2trc", \
"/opt/IBM/db2/clidriver/adm/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/bin/db2dsdcfgfill", \
"/opt/IBM/db2/clidriver/bin/db2ldcfg", \
"/opt/IBM/db2/clidriver/bin/db2lddrg", \
"/opt/IBM/db2/clidriver/bin/db2level", \
"/opt/IBM/db2/clidriver/bin/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/cfg/db2cli.ini.sample", \
"/opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg.sample", \
"/opt/IBM/db2/clidriver/cfg/db2dsdriver.xsd", \
"/opt/IBM/db2/clidriver/cfg/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/conv/alt/08501252.cnv", \
"/opt/IBM/db2/clidriver/conv/alt/12520850.cnv", \
"/opt/IBM/db2/clidriver/conv/alt/IBM00850.ucs", \
"/opt/IBM/db2/clidriver/conv/alt/IBM01252.ucs", \
"/opt/IBM/db2/clidriver/conv/alt/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/include/sqlcli1.h", \
"/opt/IBM/db2/clidriver/include/sqlsystm.h", \
"/opt/IBM/db2/clidriver/include/sqlca.h", \
"/opt/IBM/db2/clidriver/include/sqlcli.h", \
"/opt/IBM/db2/clidriver/include/sql.h", \
"/opt/IBM/db2/clidriver/include/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/lib/libdb2.so.1", \
"/opt/IBM/db2/clidriver/lib/libdb2o.so.1", \
"/opt/IBM/db2/clidriver/lib/" \
]

COPY --from=db2_builder [ \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2admh.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2adm.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2clia1.lst", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2clias.lst", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2clih.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2cli.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2clit.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2clp.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2diag.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2sqlh.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/db2sql.mo", \
"/opt/IBM/db2/clidriver/msg/en_US.iso88591/" \
]

COPY --from=db2_builder [ \
"/tmp/extracted-jdbc/db2jcc.jar", \
"/tmp/extracted-jdbc/db2jcc4.jar", \
"/tmp/extracted-jdbc/sqlj.zip", \
"/tmp/extracted-jdbc/sqlj4.zip", \
"/opt/IBM/db2/jdbc/" \
]

# FIXME: The following files have not yet been approved for distribution, but are necessary.
# Once the files are approved for distribution:
# 1) db2dsdriver.cfg: Remove "Authentication" and "SecurityTransportMode" parameters.
# 2) Remove "RUN touch /opt/IBM/db2/clidriver/bin/crypto_not_installed" from this Dockerfile.

#COPY --from=db2_builder [ \
# "/opt/IBM/db2/clidriver/lib/icc/libgsk8cms_64.so", \
# "/opt/IBM/db2/clidriver/lib/icc/libgsk8iccs_64.so", \
# "/opt/IBM/db2/clidriver/lib/icc/libgsk8km_64.so", \
# "/opt/IBM/db2/clidriver/lib/icc/libgsk8ssl_64.so", \
# "/opt/IBM/db2/clidriver/lib/icc/libgsk8sys_64.so", \
# "/opt/IBM/db2/clidriver/lib/icc/" \
# ]

#COPY --from=db2_builder [ \
# "/opt/IBM/db2/clidriver/lib/icc/C/icc/icclib/ICCSIG.txt", \
# "/opt/IBM/db2/clidriver/lib/icc/C/icc/icclib/libicclib084.so", \
# "/opt/IBM/db2/clidriver/lib/icc/C/icc/icclib/" \
# ]

# FIXME: For testing only.

# COPY --from=db2_builder /opt/IBM/db2 /opt/IBM/db2

# Set environment variables.

ENV SENZING_ROOT=/opt/senzing
ENV PYTHONPATH=${SENZING_ROOT}/g2/python
ENV LD_LIBRARY_PATH=${SENZING_ROOT}/g2/lib:${SENZING_ROOT}/g2/lib/debian:/opt/IBM/db2/clidriver/lib
ENV DB2_CLI_DRIVER_INSTALL_PATH=/opt/IBM/db2/clidriver
ENV PATH=$PATH:/opt/IBM/db2/clidriver/adm:/opt/IBM/db2/clidriver/bin
ENV LD_LIBRARY_PATH=${SENZING_ROOT}/g2/lib:${SENZING_ROOT}/g2/lib/debian:${SENZING_ROOT}/db2/clidriver/lib
ENV DB2_CLI_DRIVER_INSTALL_PATH=${SENZING_ROOT}/db2/clidriver
ENV PATH=$PATH:${SENZING_ROOT}/db2/clidriver/adm:${SENZING_ROOT}/db2/clidriver/bin

# Copy files from repository.

COPY ./rootfs /

# Create files and links.

RUN touch /opt/IBM/db2/clidriver/bin/crypto_not_installed \
&& ln -s /opt/IBM/db2/clidriver/lib/libdb2.so.1 /opt/IBM/db2/clidriver/lib/libdb2.so \
&& ln -s /opt/IBM/db2/clidriver/lib/libdb2o.so.1 /opt/IBM/db2/clidriver/lib/libdb2o.so

# Runtime execution.

ENTRYPOINT ["/app/docker-entrypoint.sh"]
Expand Down
21 changes: 1 addition & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ building apps with Senzing.
To see how to use the `senzing/senzing-base` docker image, see
[github.com/senzing/docker-python-demo](https://github.com/senzing/docker-python-demo).

FIXME: To see a demonstration of senzing, python, and postgresql, see
To see a demonstration of Senzing, python, and postgresql, see
[github.com/senzing/docker-compose-postgresql-demo](https://github.com/senzing/docker-compose-postgresql-demo).

### Contents
Expand Down Expand Up @@ -177,25 +177,6 @@ The following software programs need to be installed:
export GIT_REPOSITORY_DIR="${GIT_ACCOUNT_DIR}/${GIT_REPOSITORY}"
```

### Downloads

#### Download ibm_data_server_driver_for_odbc_cli_linuxx64_v11.1.tar.gz

1. Visit [Download initial Version 11.1 clients and drivers](http://www-01.ibm.com/support/docview.wss?uid=swg21385217)
1. Click on "[IBM Data Server Driver for ODBC and CLI (CLI Driver)](http://www.ibm.com/services/forms/preLogin.do?source=swg-idsoc97)" link.
1. Select :radio_button: "IBM Data Server Driver for ODBC and CLI (Linux AMD64 and Intel EM64T)"
1. Click "Continue" button.
1. Choose download method and click "Download now" button.
1. Download `ibm_data_server_driver_for_odbc_cli_linuxx64_v11.1.tar.gz` to ${GIT_REPOSITORY_DIR}/[downloads](./downloads) directory.

#### Download v11.1.4fp4a_jdbc_sqlj.tar.gz

1. Visit [DB2 JDBC Driver Versions and Downloads](http://www-01.ibm.com/support/docview.wss?uid=swg21363866)
1. In DB2 Version 11.1 > JDBC 3.0 Driver version, click on "3.72.52" link.
1. Click on "DSClients--jdbc_sqlj-11.1.4.4-FP004a" link.
1. Click on "v11.1.4fp4a_jdbc_sqlj.tar.gz" link to download.
1. Download `v11.1.4fp4a_jdbc_sqlj.tar.gz` to ${GIT_REPOSITORY_DIR}/[downloads](./downloads) directory.

### Build docker image for development

1. Variation #1 - Using `make` command.
Expand Down
5 changes: 0 additions & 5 deletions downloads/README.md

This file was deleted.

27 changes: 18 additions & 9 deletions rootfs/app/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ if [ "${PROTOCOL}" == "mysql" ]; then
-e "s/{SCHEMA}/${SCHEMA}/" \
/etc/odbc.ini

# Prevent interactivity.

export DEBIAN_FRONTEND=noninteractive

# Install libmysqlclient21.

wget -qO - https://repo.mysql.com/RPM-GPG-KEY-mysql | apt-key add -
Expand Down Expand Up @@ -180,28 +184,22 @@ elif [ "${PROTOCOL}" == "db2" ]; then
-e "s/{SCHEMA}/${SCHEMA}/" \
/etc/odbc.ini

cp /opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg.db2-template /opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg
sed -i.$(date +%s) \
-e "s/{HOST}/${HOST}/" \
-e "s/{PORT}/${PORT}/" \
-e "s/{SCHEMA}/${SCHEMA}/" \
/opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg

fi

# -----------------------------------------------------------------------------
# Handle common changes.
# -----------------------------------------------------------------------------

cp /etc/odbcinst.ini.template /etc/odbcinst.ini
sed -i.$(date +%s) \
-e "s|{SENZING_ROOT}|${SENZING_ROOT}|" \
/etc/odbcinst.ini

if [ ${DEBUG} -gt 0 ]; then
echo "---------- /etc/odbc.ini ------------------------------------------------------"
cat /etc/odbc.ini
echo "---------- /etc/odbcinst.ini --------------------------------------------------"
cat /etc/odbcinst.ini
echo "---------- /opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg -------------------------"
cat /opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg
echo "-------------------------------------------------------------------------------"
fi

Expand Down Expand Up @@ -250,6 +248,14 @@ fi
# Handle common changes.
# -----------------------------------------------------------------------------

mv ${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg ${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg.original
cp /opt/IBM/db2/clidriver/cfg/db2dsdriver.cfg.db2-template ${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg
sed -i.$(date +%s) \
-e "s/{HOST}/${HOST}/" \
-e "s/{PORT}/${PORT}/" \
-e "s/{SCHEMA}/${SCHEMA}/" \
${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg

sed -i.$(date +%s) \
-e "s|G2Connection=sqlite3://na:na@${SENZING_ROOT}/g2/sqldb/G2C.db|G2Connection=${NEW_SENZING_DATABASE_URL}|" \
${SENZING_ROOT}/g2/python/G2Project.ini
Expand All @@ -263,7 +269,10 @@ if [ ${DEBUG} -gt 0 ]; then
cat ${SENZING_ROOT}/g2/python/G2Project.ini
echo "---------- g2/python/G2Module.ini ---------------------------------------------"
cat ${SENZING_ROOT}/g2/python/G2Module.ini
echo "---------- ${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg -------------------------"
cat ${SENZING_ROOT}/db2/clidriver/cfg/db2dsdriver.cfg
echo "-------------------------------------------------------------------------------"

fi

# -----------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion rootfs/etc/odbcinst.ini.template
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[DB2]
Description = Db2 ODBC Driver
Driver = /opt/IBM/db2/clidriver/lib/libdb2o.so
Driver = {SENZING_ROOT}/db2/clidriver/lib/libdb2o.so
FileUsage = 1
dontdlclose = 1

Expand Down

0 comments on commit 67a9776

Please sign in to comment.