Exploratory サーバーにDenodoのODBCドライバーをインストールするには、Exploratory サーバーのデフォルトR環境DockerイメージをベースにカスタマイズされたDockerイメージを作成します。
次のコマンドを実行して、デフォルトのr-exploratory DockerイメージをベースにDockerコンテナを起動します。この例では、Collaboration Serverバージョン8.3.2のDockerイメージを使用しています。コマンド内のバージョン番号を使用しているものに置き換えてください。
docker run -it r-exploratory:8.3.2 /bin/bash
開いたシェルで、Exploratory Serverで使用するDenodo ODBCドライバーをインストールします。
ODBC ドライバーは、Denodo のWebサイトからダウンロードできます。
※ 外部ネットワークに接続するためにプロキシサーバーが必要な場合は、事前にターミナルで以下のコマンドを実行してください。(username、password、server、portを実際の値に置き換えてください)
export http_proxy=
http://username:password@server:port/
ODBC ドライバーをファイルサーバーに配置して、Docker内で取得できるようにします。ここにいくつかの例を示します。
curl -O https://<your_file_server>/downloads/denodo-vdp-odbcdriver-8.0-update-20230914-linux.zip
次に、zipファイルを解凍します。
unzip denodo-vdp-odbcdriver-8.0-update-20230914-linux.zip
次のステップとして設定ファイルを更新する必要があるので、以下のようにテキストエディタ(vim)をインストールします。
apt-get -y --no-install-recommends install vim
インストールが完了したら、以下のコマンドを入力します。
odbcinst -j
これにより、次のようにODBC構成ファイルの場所が表示されます。
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
これにより、/etc/odbcinst.ini
がODBCドライバーの設定ファイルであることがわかりました。
この例では、ODBC ドライバーは /denodo-vdp-odbcdriver-linux-8.0.8/ にインストールされているため、エントリを/etc/odbcinst.ini
ファイルに追加します。
テキストエディタ(Vim)でodbcinst.iniファイルを開きます。
vim /etc/odbcinst.ini
ファイルの最後に以下を追加して保存します。
[DenodoODBCDriver]
Description=ODBC driver for Denodo 8.0
Driver=/denodo-vdp-odbcdriver-linux-8.0.8/denodo-vdp-odbcdriver-linux/lib/unixodbc_x64/denodoodbc.so
UsageCount=1
ドライバーのパスが正しいことを確認してください。ターミナルから以下のコマンドを実行して結果が返されることを確認します。
ls -l /denodo-vdp-odbcdriver-linux-8.0.8/denodo-vdp-odbcdriver-linux/lib/unixodbc_x64/denodoodbc.so
ODBCドライバには古いバージョンのlibcurlが含まれているため、Dockerに付属するもので上書きします。
cd /denodo-vdp-odbcdriver-linux-8.0.8/denodo-vdp-odbcdriver-linux/lib/unixodbc_x64
libcurl.so.4.backのファイルを次のようにバックアップします。
mv libcurl.so.4 libcurl.so.4.back
ln -s /lib/x86_64-linux-gnu/libcurl.so.4 libcurl.so.4
次のようにlddを入力し、結果が返されることを確認します。
ldd libcurl.so.4
ターミナルでR
を入力し、Rのセッションを開始します。
R
R のコマンドラインインターフェイスで、odbc::odbcListDrivers()
を入力し、結果にDenodoODBCDriverのエントリが表示されることを確認します。
> odbc::odbcListDrivers()
Rのコマンドラインインターフェースで、以下のコマンドを入力します。(host、port、username、password、databaseを実際の値に置き換えてください)そして、これがTRUE
を返すことを確認してください。
conn <- exploratory::getDBConnection(type='dbiodbc', subType='conn_str_kv', driver = 'DenodoODBCDriver', host = 'host', port=1234, username = 'username', password = ‘password', database = 'database'); DBI::dbIsValid(conn);
ホストLinuxマシンで別のシェルを開き、以下のコマンドを実行して、変更を加えたDockerコンテナのIDを見つけます。
docker ps
上記のコマンドにより、次のようなテーブルがアウトプットとして得られるはずです。
CONTAINER ID IMAGE COMMAND PORTS
aad6f8d956a9 r-exploratory:8.3.2 "/bin/bash" 6311/tcp
テーブルからDockerコンテナのContainer IDを見つけます。この場合はaad6f8d956a9
です。
IDを使って、変更を加えたDockerイメージを作成します。ここでは、新しいイメージにカスタマイズされたバージョン番号8.3.2.1を付けます。
docker commit -c 'CMD ["R", "-e", "Rserve::run.Rserve(remote=TRUE)"]' -c 'EXPOSE 6311' aad6f8d956a9 r-exploratory:8.3.2.1
作成した新しいDockerイメージでDockerコンテナを起動します。
docker run -it r-exploratory:8.3.2.1 /bin/bash
docker-compose.yml
ファイル内でr-exploratory DockerコンテナのDockerイメージバージョンを指定した行を見つけます。
...
rserve:
image: r-exploratory:8.3.2
...
バージョンを先ほど作成したバージョンに変更します。
...
rserve:
image: r-exploratory:8.3.2.1
...
これで、Exploratory サーバーを再起動すると、カスタム変更を加えた新しいR環境を使用して起動するようになります。