Oracle Solaris Preflight Applications Checker "Preflight Checker" を使用すると、Oracle Solaris 10 アプリケーションを Oracle Solaris 11 に移行するときの潜在的な問題を特定できます。このツールは、Oracle Solaris 10 でソースコード、静的バイナリ、および実行時分析モジュールを組み合わせて実行して、既存のアプリケーションをテストし、アプリケーションを Oracle Solaris 11 で正常に実行するために必要なコード変更を提案します。
Oracle Solaris Preflight Applications Checker は、潜在的な問題を見つけ、Oracle Solaris 11 システムにアプリケーションを実装する適切な方法を提案します。Preflight Applications Checker には、カーネルモジュールの潜在的な問題点を見つける際に役立つ Oracle Solaris Preflight Kernel Checker も含まれています。これには、ソースコードアナライザモジュールおよびバイナリアナライザモジュールが含まれています。
これらのツールの主な目的は、アプリケーションが対応しているかどうかを開発者が移行前にテストできるようにすることです。
詳細は、Oracle Solaris 保証プログラムを参照してください。
Preflight Applications Checker には、次の 3 つのメインモジュールがあります。
バイナリアナライザ
ソースコードアナライザ
実行時アナライザ
次の図は、バイナリの互換性を解析するために使用できるモジュールの概略を示します。
バイナリアナライザモジュール (ELF アナライザとも呼ばれます) は、アプリケーションのバイナリからすべてのバインディングおよび関連付けられているシンボル情報を抽出します。アプリケーションの実行のために LD_LIBRARY_PATH 環境変数を設定する必要がある場合、またはシステムのデフォルトの実行時リンク環境が crle または LD_CONFIG によって変更されている場合は、LD_LIBRARY_PATH に値を指定できます。
Preflight Checker は、LD_LIBRARY_PATH 値を使用して、実行時にアプリケーションで使用されるライブラリを判別します。この情報により、シンボルバインディングから Oracle Solaris システム共有ライブラリへの対応付けが容易になります。バイナリ分析の実行中に、LD_LIBRARY_PATH 変数を設定する必要のないアプリケーションの場合、この値を空白のままにします。lib パス /usr/lib/64 (/usr/lib または /lib/64) は、crle と同様にバイナリアナライザモジュールで自動的に使用されます。
Preflight Checker には、Oracle Solaris 10 から Oracle Solaris 11 に移行するときの潜在的な問題のデータを含む、組み込みのデータベースがあります。このデータベースは、アプリケーションで使用されているシステムシンボルごとにアクセスされます。データベース検索の出力に基づき、このツールは該当する潜在的な問題、および問題を解決するために考えられる回避方法や推奨事項を報告します。
ソースコードアナライザモジュールは、Oracle Solaris で削除、名前変更、変更されたか、または非推奨となったライブラリ関数が使用されていないかどうかをチェックします。また、このモジュールは C および C++ のソースコードの問題をチェックし、シェルスクリプトの潜在的な問題を検出します。
シェルスキャナモジュールによって潜在的な問題の特定が容易になり、警告メッセージを報告できます。さらにこのモジュールは、Oracle Solaris 11 で使用不可能なファイルの使用についても報告します。
シェルスキャナモジュールはスキャン時に、ターゲットアプリケーションのディレクトリの内側で使用可能なシェルスクリプト内で検索することによってシェル変数を解決しようとします。適切な結果を得るには、ターゲットスキャンディレクトリの外側に環境変数を設定し、アプリケーション環境を設定するためのスクリプトのコンマ区切りのリストを init_script フィールドに設定します。次に例を示します。
init_script = /export/home/user/.profile,/export/home/user/.bashrc,/export/home/user/setenv.sh
実行時アナライザモジュールは、既存の Oracle Solaris 10 テスト環境で実行可能であり、潜在的な問題を報告します。Preflight Checker のこのモジュールでは、DTrace を使用してプロセスの詳細を調べます。このモジュールは、Oracle Solaris 10 で使用可能なほかのシステムツールを呼び出すこともあります。
次のいずれかのスコープで実行するように実行時アナライザモジュールを構成できます。
システム全体
特定のゾーンの内側で実行されているすべてのプロセス
特定の UID を持つすべてのプロセス
特定の実行可能ファイル名に対するすべての実行中のプロセス
特定の PID
ユーザーが指定したカスタムコマンド
フィルタで除去されたプロセスのリストは、編集可能な構成ファイル tool-base-dir/conf/SystemProcs.conf に保持されます。
実行時アナライザモジュールは、次のような場合に既知の問題を報告できます。
削除、名前変更、再配置されたライブラリ、スクリプト、コマンド、およびデバイスまたはその他のシステム提供ファイルの呼び出し。
非推奨の非公開型関数や廃止された関数、API、シンボルの使用または呼び出し。
削除、名前変更、または移動されたライブラリの dlopen()。
非公開インタフェースの使用または呼び出し。
古いバージョンおよび削除されたバージョンのユーティリティーまたはパッケージの使用 (たとえば、削除されたファイルへのハードコードされたパス)。
最近の Oracle Solaris OS リリースでアップグレードまたは置換されたファイルまたはライブラリの使用。
このアプリケーションは Oracle Solaris 依存関係が記録されていない共有オブジェクトにアクセスしているため、dlopen() 関数または mmap() 関数を使用している場合は、静的バイナリアナライザおよびソースコードアナライザが共有オブジェクトの場所にアクセスできません。ただし、実行時アナライザは、dlopen() 関数を使用してロードされたライブラリ、および mmap() を使用してメモリーにロードされたファイルにアクセスできます。詳細は、dlopen(3C) および mmap(9E) のマニュアルページを参照してください。
バイナリアナライザおよびソースコードアナライザが検査できないその他のオブジェクトは次のとおりです。
読み取り/実行アクセス権が設定されていない実行可能ファイル
ELF 以外の実行可能ファイル
Preflight Checker を使用するときは、次のガイドラインに留意してください。
Preflight Checker の実行時は、アプリケーション環境の詳細を正しく指定する必要があります。環境が異なると、潜在的なバイナリの非互換性や Oracle Solaris ライブラリ内のインタフェースへの未解決参照が間違って検出される可能性があります。たとえば、LD_LIBRARY_PATH が正しく設定されていない場合、バインドされていないシンボルが Preflight Checker から追加で報告されます。
Preflight Checker から正確に報告されるように、Oracle Solaris Studio 12.4 の –z defs リンクオプションを使用して、コンパイル時に動的ライブラリの依存関係を記録します。このオプションにより、オブジェクトが自己完結型となり、さらに詳しく定義されます。リンクの終了時に未定義のシンボルが残っている場合は、致命的なエラーが発生します。このオプションは、実行可能オブジェクトを作成する場合のデフォルトの設定です。
実行時アナライザモジュールは、DTrace を使用してプロセスの詳細を調べるので、Oracle Solaris 10 上で使用可能なその他のシステムツールを呼び出すことがあります。システム全体のパフォーマンスや応答性に対する実行時アナライザのオーバーヘッドを制限するには、スコープをできるかぎり狭いレベルに制限します。たとえば、ターゲットとなるアプリケーションの特定の PID がわかっている場合は、システム全体の実行時解析は実行しないでください。
スキャンの対応する各段階で、Oracle Solaris Preflight Applications Checker から出力されるレポートには、ターゲットとなった分析済みファイル (バイナリ分析およびソースコード分析の場合) やプロセス (Runtime 分析の場合) が一覧表示されます。
レポートの先頭に、検査されたバイナリの数および見つかった潜在的なバイナリ安定性の問題の数を示すサマリーが表示されます。サマリーレポートは tool-install-dir/reports からも参照できます。デフォルトでは、レポートは HTML 形式で作成されます。
レポートには、潜在的な問題を解決するために実行するアクションの推奨事項も含まれています。スキャンの実行後に Preflight Checker によって報告される一般的な問題には、次のものがあります。
プライベートシンボルの使用 - このシンボルが現在のリリースで変更されていない場合、アプリケーションはまだ実行可能です。ただし、このシンボルが今後も使用されるという保証はなく、問題が発生する可能性があります。このようなプライベートなシンボルの使用は中止してください。
静的リンク - アプリケーションが libc.a を使用した静的リンクでビルドされている場合、アプリケーションが参照するカーネルインタフェースは libc.a アーカイブから抽出され、アプリケーションの一部になります。このアプリケーションは、使用したカーネルインタフェースと同期しているカーネルでのみ実行できます。アプリケーションは共有バージョンのシステム提供のライブラリとリンクする必要があるため、カーネルインタフェースが変更されると、アプリケーションが動作しなくなることがあります。
降格されたシンボルまたは非推奨のシンボル - 非推奨のシンボルの使用は中止してください。
バインディングが見つかりません - バイナリオブジェクトが自身が依存するすべてのライブラリを見つけられるように、LD_LIBRARY_PATH などの環境変数をチェックして正しく設定されていることを確認します。バインドされていないシンボルが生じる可能性のある問題への対処方法については、対応する API のマニュアルページを参照してください。
廃止されたライブラリの使用 - 実施可能になりしだい、これらのシンボルの使用を中止します。
Preflight Checker のインストールフェーズ、または解析の開始時にカスタム情報を入力しない場合、このツールは次のデフォルト値を使用します。
LD_LIBRARY_PATH = ""
レポート = tool-install-dir/reports
レポートの形式 = html
PATH
SPARC の場合、PATH = "/sbin:/bin:/usr/bin:/usr/bin/sparcv9:/bin/sparcv9"
x64 の場合、PATH = "/sbin:/bin:/usr/bin:/usr/bin/amd64:/bin/amd64"
定義されているマクロ = ""
システムのインクルードディレクトリ = "/usr/include"
Preflight Checker は、Oracle Solaris 10 以降のシステムでインストールおよび実行できます。