アプリのポータビリティを調査
Linux上のアプリケーションがあれば、最初にやるべきことは、アプリケーションの現在の状態 - 特にそのポータビリティレベル - を知ることです。
この用途のために、LDNはLinux Application Checkerという素晴らしいツールを用意しています。このツールを使用すれば、アプリケーションのポータビリティの現状だけでなく、LSB標準にどの程度近づいたかまで確認することができます。
「Linux Application Checkerのすべて」のセクションで、この新しいツールの主な特長を説明します。このツールは、Linux Foundationが、ロシア科学アカデミー(Russian Academy of Sciences)と協力して開発したもので、LSBワークグループの活動を通してLinux用ソフト開発者を支援することを目指しています。
「Linux Application Checker使用方法」のセクションでは、このツールのインストールの方法、このツールを使ってのポータビリティのチェック実施、そして、アプリケーションソースコードへのポータビリティの実現について解説します。
Linux Application Checkerのすべて
Linux Application Checker(またはAppChecker)は、Linux向けソフト開発支援のために設計された強力な最新ツールです。本ツールの広範なテスト機能は、LSBワークグループの支援と相まって、ポータビリティ実現を効果的にサポートします。
形式的な説明はさておき、Linux用アプリケーションを書こうとしている開発技術者にとって、このツールの機能は具体的にどんな意味を持つのか、もっと直截的に言えば、ポータビリティ実現をどれほど容易にするのか、という実際的な疑問にお答えします。
従来は、LSBモデルに可能な限り厳密に従って開発することが、Linuxアプリケーションをポータブルにする最良の方法でした。この方法は現在も有効ですが、問題は、アプリケーションベンダーは、通常、特定のディストリビューションのみを想定して開発を進めことです。
そこで、アプリケーションのLSB認証の意図の有無に関わらず、便利なツールとしてAppCheckerを開発しました。本ツールは、LSBの範囲を越えてアプリケーションが使用しているシンボルやライブラリを分析し、対策をガンダンスします。
AppCheckerの使いやすさは、このツールに最初に出会った瞬間から顕著に感じられるはずです。ターゲットとするアーキテクチャーに対応したバージョンをダウンロードしたら、tarballファイルを格納フォルダ上で解凍・保存するだけで実行可能になります。用意されたWebサーバには、あらゆるアーキテクチャーに対応した広範なインターフェースに対応し備わっています。
テストしたいアプリケーションのバイナリにAppCheckerをポイントすると、アプリケーションが使用しているインターフェースとライブラリのシンボルテーブルが、LSBに準拠したディストリビューション(総数30)の既知情報と自動的に比較されます。比較完了後には、そのアプリケーションはどのディストリビューション上で動作させるべきかの詳細なレポートが表示されます。つまり、多少の追加テストや修正を行えば、そのアプリケーションが実行可能になる全ディストリビューションの情報を得ることができます。
このマッチングテストで肯定的な結果が出たからといって、そのアプリケーションがあらゆるディストリビューション上でそのまま使用できるという保証にはなりません。しかし、ポータビリティ向上に向けて進むべき道は示されますし、ひいては移植費用の削減も可能になります。そして、開発者は、リスクや負担の少ないやり方で、より大きなマーケットを対象に、より多くの選択肢をユーザーに提供できるようになります。
AppCheckerが本領を発揮するのはミスマッチが検出された場合です。特定のディストリビューションに問題が存在するかだけでなく、ディストリビューションに欠けているインターフェース、互換性のないインターフェースを特定し、それらのインターフェースからのリンクとして、ポータビリティ改善のための的確な対応策(インターフェースの修正または置換の方法)の検討まで可能にします。
もちろん、AppChecker本来の機能として、LSB準拠までの到達度も確認できますので、認証取得を目的にしている場合には必須のツールです。
Linux Application Checkerの技術的特長
主な機能は以下の通りです。
- アプリケーションの各Linuxディストリビューションへのポータビリティをチェックし、そのディストリビューション上でどの程度動作するかを解りやすく表示します。
- ポータビリティ改善方法に関するガイダンスを行います。
- LSB認証にどこまで近づいているかを解りやすく表示します。
Appcheckerは以下の5ツのテストツールで構成されています。
- bin/lsbappchk - LSB tests for ELF binaries.
- bin/lsbpkgchk - LSB tests for RPM packages.
- bin/lsbappchk.pl - LSB tests for Perl scripts.
- bin/lsbappchk.py' - LSB tests for Python scripts.
- bin/lsbappchk-sh.pl - LSB tests for Shell scripts.
AppChecker(lsbappchk)は、C/C++シンボル(主としてグローバル変数を含む関数)と、アプリケーションが必要とし、ディストリビューションが提供するダイナミックリンクライブラリに存在するライブラリを解析することによって動作します。殆どの実行ファイルはデバッグ機能を含まないので、アプリケーションが期待するタイプ情報がディストリビューションのライブラリが供給するオブジェクトのタイプと合致するかどうか確認するのは不可能です。
例えば、データ構造の配置が変わっている可能性もありますし、関数パラメータが32ビット整数から64ビット整数に変化している場合もあります。関数の動作詳細がバージョン間で変化している場合も、AppCheckerでは検出できません。
ディストリビューションのLSB認証は、これらの問題を防止します。各ライブラリインターフェースのタイプ情報と動作を細かく規定して文書化しているだけでなく、LSBインターフェースの動作確認テストも行うからです。このテストは、LSB認証ディストリビューションがLSBで規定されている全てのインターフェースを装備していること、これらのインターフェースの背後にある関数が正しいタイプシグネチャを持ち、正しく動作していることを検証するために行います。
今までの説明でLinux Application Checkerに関する知識は十分と思いますので、「使用方法」のページに移り、実際に使ってみましょう。
Linux Application Checker使用方法
Linux Application Checker (AppChecker)でできることは既に学習しましたので、ここでは実際に使ってみましょう。インストールから実行、得られた結果の解釈まで、一般的な手順をご紹介します。AppCheckerのインストール、Webインターフェースの使い方、コマンドラインインターフェースの使い方、テスト結果リポジトリの管理、および、AppChecker終了・削除について説明していきます。
AppCheckerのインストール
Linux Application Checkerのダウンロードページから、Linux Application Checker tarball(tar.gz)パッケージをダウンロードしてください。
AppCheckerは、ノンインストールPerlスクリプトとして動作するので、非rootユーザーとしてこれを実行することができます。以下にその手順を示します。
1.コマンドラインに下記を入力してパッケージを解凍します。
tar xzf Linux-app-checker-local-<version>.<architecture>.tar.gz
./app-checker/bin/app-checker-start.pl [port-number]
Webインターフェースの使い方
Linux Application Checker開始後、Webベースのアプリケーションのメインページは、デフォルトWebブラウザに表示されます。最初のテストを行う手順は以下の通りです。
1. Application Checkリンクをクリックして、Application Checkページを開きます。
2. Name欄にテストレポートの名前をタイプします。
3. チェックしたいアプリケーションへのファイルパスをComponents欄に入力します。 注:Componentsの欄には、アプリケーションの全コンポーネント名を入力してください。
- 個々のファイル
- 全ディレクトリ
- インストールしたRPMパッケージ(pkg:で始まるもの)
- RPMおよびでdeb パッケージファイル
- TAR.GZ およびTAR.BZ2 アーカイブ
アーカイブは自動的に解凍されます。
テストされるのは、以下のタイプのファイルです。
ELF (実行ファイルと共有オブジェクト)
Perlスクリプト
Pythonスクリプト
シェルスクリプト
4.コンポーネントを簡単に入力したい場合はSelect Application Componentsボタンをクリックして、Web上のApplication Components Selection ダイアログを開けます。
5. ディレクトリ名をクリックして、アプリケーションコンポーネントがある場所へと移動します。
6. 希望するコンポーネントのチェックボックスをクリックして選択します。
7. Finishをクリックしてダイアログを閉じます。Components欄に、選択したコンポーネントへのファイルパスが表示されます。
8.Additional Optionsアイコンをクリックすると追加オプションが表示されます。
9. LSB Versionを選択します。
10. LSB Profileを選択します。
11.このテストを再度行う予定がある場合は、テストプロファイルの名前をUser Profile Management欄に打ち込んで、Saveをクリックしてください。
12. テストを開始するには、Run the Testボタンをクリックします。テストは自動的に進行し、終了すると結果がTest Reportページに表示されます。
注:テストを実行するにはいくつかの必要条件があります。(READMEファイルを参照。)これらの条件が満足されていない状態でテストを実行すると、ページの上部にエラーメッセージが表示されます。この場合、問題解決後に再度テストを実行してください。
-
Distribution Compatibility:アプリケーションと、Linux Foundationによる分析が完了しているディストリビューションとの間の互換状態。 -
Required Libraries:アプリケーションが必要とする外部ライブラリのリスト(DT_NEEDED ELF セクションに依拠)。 -
Required Interfaces:アプリケーションが必要とする外部インターフェースのリスト(ELF シンボルに依拠)。 -
LSB Certification:互換性に関して問題がない場合は、テストしたアプリケーションの認証手続きを開始できます。Apply for Certificationリンクをクリックすると、認証システムにリンクされます。
コマンドラインインターフェースの使い方
Application Checkerによるテストは、コマンドラインを使っても実行できます。最初のテストを開始する場合は以下の手順に従ってください。
1. ./linux-app-checker/utilsに移動します。
2. 下記コマンドを実行します。
./run_tests.pl --paths=<paths-list>
ただし、 <paths-list>は、テストするファイルやディレクトリをコロンで区切ったリスト(WebインターフェースのFiles and Directoriesテキストボックスに相当)とします。
3. インストールされているパッケージをテストするには。下記コマンドを使用します。
./run_tests.pl --packages=<packages-list>
ただし、<packages-list>
下記オプションも有効にお使い頂けます。
-n :アプリケーション名
./run_tests.pl --help
テスト結果リポジトリの管理
実行したテストの結果が保存されるディレクトリは./linux-app-checker/resultsです。テスト結果はそれぞれサブディレクトリ
AppCheckerの終了・削除
Webサーバを終了するには、WebインターフェースのAdministrationページに進んで、Stop Serverボタンをクリックします。下記スクリプトを実行しても終了できます。
<linux-app-checker dir>/bin/app-checker-stop.pl [port-number]
LSB Database Navigator
LSB Database Navigatorは、LSB DatabaseのWebフロントです。アプリケーション開発者はデータベースを検索して、アプリケーション開発に活用することができます。



