Ubuntu 18.04クラスタにNetSuite 64ビットODBCドライバをインストールすると、次のエラーが発生します。 - lib '/opt/netsuite/odbcclient/lib64/ivoa27.so を開けません。

Ubuntu 18.04クラスタにNetSuite 64ビットODBCドライバをインストールすると、次のエラーが発生します。 - lib '/opt/netsuite/odbcclient/lib64/ivoa27.so を開けません。

この問題を解決するために、2〜3日間前後しても成功しませんでした。誰かが私を案内し、この問題を解決するのに役立つことを願っています。

私はODBCを介してNetSuiteに接続し、テーブルリストを読む必要がある3ノードUbuntu 18.04クラスタ環境の/home/admin/app/example.pyディレクトリでPythonアプリケーションを実行しています。コードとディレクトリの設定は3つのノードすべて同じです。 3つのノードすべてに要求をルーティングするロードバランサーがあります。

以下は、PyODBCモジュールを介して接続する方法の例です。

import pyodbc
cnxn = pyodbc.connect('DSN=NetSuite;UID=user;PWD=pass'.format(dsn, uid, pwd), autocommit=True)
        cursor=cnxn.cursor()
        tables_list = []
        for row in cursor.tables():
            tables_list.append(row.table_name)
print (tables_list)

ただし、クラスタでPythonアプリケーションを実行すると、常にエラーが発生します。lib '/opt/netsuite/odbcclient/lib64/ivoa27.so を開けません。;ドライバファイル、すべての依存関係(lddコマンドを介して)、およびすべてのパス変数($ LD_LIBRARY_PATH、$ ODBCINI、および$ OASDK_ODBC_HOMEなど)が存在し、システム全体で使用できるように設定されていても(/ etc / environmentファイルに追加されます) )、以下の3つのノードがすべて含まれています。

PYTHON_APP_HOME=/home/admin/app/
LD_LIBRARY_PATH="/opt/netsuite/odbcclient/lib64"
ODBCINI="/opt/netsuite/odbcclient/odbc64.ini"
OASDK_ODBC_HOME="/opt/netsuite/odbccli

以下は、ドライバの依存関係に対する "ldd"コマンドの出力です。

-rwxr-xr-x 1 root root  3277375 Jul 25 16:03 ivoa27.so

/opt/netsuite/odbcclient/lib64$ ldd /opt/netsuite/odbcclient/lib64/ivoa27.so
        linux-vdso.so.1 (0x00007fff401a2000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fee1d589000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fee1d385000)
        libicuuc.so.42 => /opt/netsuite/odbcclient/lib64/libicuuc.so.42 (0x00007fee1d12b000)
        libicudata.so.42 => /opt/netsuite/odbcclient/lib64/libicudata.so.42 (0x00007fee1c0e6000)
        libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fee1bed8000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fee1bcb9000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fee1b930000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fee1b592000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fee1b37a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fee1af89000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fee1db3c000)
        libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fee1ad60000)
        libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007fee1ab5b000)

以下は、NetsuiteドライバREADME.txtの指示に従って手順に従って、Ubuntu 18.04オペレーティングシステムの3つのノードすべてで同様の方法でODBCドライバを設定する方法です。

  1. Netsuite 64ビットLinuxドライバファイル/フォルダを解凍し、次の場所にコピーします。 $cd /opt/netsuite/odbcclient/*。フルディレクトリ、サブディレクトリ、およびその中のファイルにはr + x権限があります。
  2. インストールされたライブラリ$sudo apt install unixodbc && apt-get インストール unixodbc-dev
  3. /opt/netsuite/odbcclientディレクトリでNetsuiteが提供するスクリプト/コマンドを実行します。$ソースoaodbc64.sh(bashシェルだから)。これにより、上記と同じ変数が設定されます。
  4. 同じディレクトリ/フォルダで次のコマンドを実行して、システム全体のドライバとして登録します。

$sudo odbcinst -i -d -f /opt/netsuite/odbcclient/odbcinst.ini

戻りメッセージは次のとおりです。

odbcinst:ドライバがインストールされました。使用回数が1に増加します。ターゲットディレクトリには/ etc
odbcinst:ドライバがインストールされています。使用回数が1回に増えました。宛先ディレクトリは/ etcです。

  1. 次に、次のコマンドを実行してシステムDSNとしてインストールします。

$sudo odbcinst -i -s -l -f /opt/netsuite/odbcclient/odbc64.ini

次に、odbc.iniファイルとodbcinst.iniファイルが作成/登録されている/ etcディレクトリを確認します。両方の *.ini ファイルに実行権限が付与されます。

-rwxr-xr-x 1 root root 500 Jul 24 10:31 odbc.ini
-rwxr-xr-x 1 root root 199 Jul 24 10:31 odbcinst.ini

$odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /opt/netsuite/odbcclient/odbc64.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

$odbcinst -q -d
[ODBC Drivers]
[NetSuite ODBC Drivers 8.1]

$odbcinst -q -s
[NetSuite]
[ODBC]

isqlを介して各個々のノードから接続することも、ローカルのPythonシェルを介してexample.pyを実行することもできます。

$isql -v 'NetSuite' 'ユーザー' '通過'

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

ただし、クラスタで同じタスクを実行すると、常に同じエラーが発生します。助けてください。何か抜けたのは確かです。

以下は、/ etcディレクトリにあるodbc.iniファイルとodbcinst.iniファイルの出力です。

/etc$ more odbcinst.ini
[ODBC Drivers]
NetSuite ODBC Drivers 8.1=Installed
UsageCount=1

[NetSuite ODBC Drivers 8.1]
APILevel=1
ConnectFunctions=YYN
Driver=ivoa27.so
DriverODBCVer=03.52
FileUsage=0
SQLLevel=1
UsageCount=1

/etc$ more odbc.ini
[ODBC Data Sources]
NetSuite=NetSuite ODBC Drivers 8.1

[NetSuite]
Driver=/opt/netsuite/odbcclient/lib64/ivoa27.so
Description=Connect to your NetSuite account
Host=XXXXX.connect.api.netsuite.com
Port=1708
ServerDataSource=NetSuite.com
Encrypted=1
Truststore=/opt/netsuite/odbcclient/cert/ca3.cer
CustomProperties=AccountID=XXXXX;RoleID=XXXX

[ODBC]
Trace=0
IANAAppCodePage=4
TraceFile=odbctrace.out
TraceDll=/opt/netsuite/odbcclient/lib64/ddtrc27.so
InstallDir=/opt/netsuite/odbcclient

次のように動作しない他の操作を試しました。

  1. .profile、.bashrc、/etc/profile、/etc/bash.bashrcに/etc/environment以外のODBC変数パスが追加されました。
  2. /lib64/ フォルダ、その中のすべてのファイル、および /etc の下の *.ini ファイルの所有者をルートから管理者に変更します。
  3. 次の方法でシンボリックリンクを作成します。 sudo ln -s /etc/odbcinst.ini /usr/local/etc/odbcinst.ini sudo ln -s /etc/odbc.ini /usr/local/etc/odbc.ini

ありがとうございます! !

ベストアンサー1

アップデート - 解決しました!私たちが逃した重要なステップの1つは、すべてのノードの再起動/再起動この3つの変数を/ etc / environmentファイルに追加して、システム全体に適用するようにします。

調査のために、コードに次の追加コンテンツを印刷して、実際に64ビットプラットフォーム/アーキテクチャであること、およびドライバとデータソースが登録およびリストされていることを確認しました。ただし、変数はまだ空白/なしで表示されます。これは、さまざまなノードで実行するときに変数パスがローカルに設定/有効であることを確認します。ただし、外部/リモートセッションを介して実行している場合は、変数の値は適用されません。

import os
import pyodbc
import platform

print(platform.architecture())
print (pyodbc.drivers())
print(pyodbc.dataSources())
print(os.environ["LD_LIBRARY_PATH"])
print(os.environ["ODBCINI"])
print(os.environ["OASDK_ODBC_HOME"])

再起動する前に:

[2020-07-27 18:46:51,948] {logging_mixin.py:112} INFO - ('64bit', 'ELF')
[2020-07-27 18:46:51,949] {logging_mixin.py:112} INFO - ['ODBC Drivers', 'NetSuite ODBC Drivers 8.1']
[2020-07-27 18:46:51,950] {logging_mixin.py:112} INFO - {'NetSuite': '/opt/netsuite/odbcclient/lib64/ivoa27.so', 'ODBC': ''}
[2020-07-27 18:46:51,950] {logging_mixin.py:112} INFO - Error: 'LD_LIBRARY_PATH'

再起動後:

[2020-07-28 06:11:59,961] {logging_mixin.py:112} INFO - ('64bit', 'ELF')
[2020-07-28 06:11:59,963] {logging_mixin.py:112} INFO - ['ODBC Drivers', 'NetSuite ODBC Drivers 8.1']
[2020-07-28 06:11:59,965] {logging_mixin.py:112} INFO - {'NetSuite': '/opt/netsuite/odbcclient/lib64/ivoa27.so', 'ODBC': ''}
[2020-07-28 06:11:59,965] {logging_mixin.py:112} INFO - /opt/netsuite/odbcclient/lib64
[2020-07-28 06:11:59,965] {logging_mixin.py:112} INFO - /opt/netsuite/odbcclient/odbc64.ini
[2020-07-28 06:11:59,965] {logging_mixin.py:112} INFO - /opt/netsuite/odbcclient/lib64

おすすめ記事