"HELLO MOBLIN"

投稿者: Elliot Smith、更新日: 2010年1月29日

対象: Moblin Core Netbook MID IVI

このチュートリアルでは、Anjuta IDEの中でMoblin Cアプリケーションを編集するときに従うワークフローについて説明します。

次の手順について説明します。

  1. Linux Project Generatorを使ってプロジェクトを作成する
  2. Anjutaの中でプロジェクトを設定する
  3. Anjutaの中でプロジェクトを編集する
  4. プロジェクトからアプリケーションをビルドする
  5. アプリケーションをネットブックにデプロイする
  6. ネットブック上でアプリケーションを実行する

できあがったアプリケーションはウィンドウの中にボタンが1つあるだけの小さなものですが、 すべてのMoblinプロジェクトに当てはまる基本的な原則を示しています。

このチュートリアルでは、グラフィカルなツールを使った開発について説明します。 コマンドラインを使うと、一部の手順(Moblin Package Creatorを使った手順など)が想定どおりに動作しないことがあります。 そのため、コマンドラインを使ってプロジェクトをビルドする場合、まずMoblin SDKのenvsetup.shスクリプトを使って環境を正しく設定する必要があります。 詳細についてはこちら(英文)を参照してください。

前提条件

このチュートリアルでは、開発用およびデプロイ先マシンを設定するための手順(英文)に示された各コンポーネントがインストール済みであることを前提とします。


プロジェクトの作成

Linux Project Generatorを使って、アプリケーションの基本スケルトンを作成します。 次を入力して、コマンドラインからLinux Project Generatorを起動します。

$ projgen

次のようなウィンドウが表示されます。

[Code Language]のドロップダウンボックスは[C]のままでかまいません。

空のテキストフィールドに、自身と所属組織について当てはまる設定を入力します(上図は一例です)。
フィールドにマウスポインターを載せると、フィールドの目的と制約条件が表示されます。

できあがったプロジェクトへのパスは、このタブの設定に基づいて、<[Path]>/<[Short name]>となります。

次に、[Structure]タブで、プロジェクトがアプリケーションバイナリーから構成されるか、 ライブラリから構成されるか、またはその両方から構成されるかを指定できます。

デフォルト設定のままにします([Single Application])。

[Code]タブを使って、プロジェクトに格納されるコードのタイプを定義します。

この設定によって、生成されるプロジェクトに定型コードが追加され、 コマンドライン引数の読み込み/出力([Simple (console)])や 「Hello World」メッセージのアニメーション表示([Basic Clutter Application])が可能になります。

このチュートリアルの目的上、ここでは[Simple (console)]を選択します。

[Build]タブでは、autoconfおよびautomakeファイルに追加されるパラメーターを設定できます。

ここではデフォルトのままにします(詳しい設定内容がわからない場合はデフォルトのままにしてください)。

最後に、[License]タブで、プロジェクトをリリースするライセンスを指定できます。

ここでライセンスを選択すると、ライセンスが格納されたCOPYINGファイルがプロジェクトのルートディレクトリに作成され、 生成されるすべてのソースファイルにライセンス文が追加されるようになります。

ただし、プロジェクトをオープンソースにするつもりがない場合、ここでライセンスを選択したからといって、 将来必ずオープンソースでリリースしなければならないというわけではないことに注意してください。 必要に応じて、COPYINGファイルと、ソースファイルの中で対応する文を削除することも可能です。

プロジェクトの設定が終わったら、[Create]ボタンをクリックして生成します。 プロジェクトの作成に成功すると、次のダイアログボックスが表示されます。

ダイアログボックスを閉じます。


生成されたプロジェクトの構造

ファイルブラウザを使って、生成されたプロジェクトに移動すると、相当な数のファイルが表示されます。

  • GNUソフトウェアをインストールしたことがある方は、ChangeLog、AUTHORS、COPYING、INSTALL、NEWS、READMEについてはご存知でしょう。 これらは、プロジェクトの基本的なドキュメントを構成するものです。 これらのファイルを保守する・しないは任意ですが、保守すべき理由については、GNUコーディング規約(GNU Coding Standards(英文))に記載されています。
  • autogen.sh、configure.ac、Makefile.amは、GNU autotoolによって使われるコンフィギュレーションファイルです。 これらのファイルはしばらくそのままにしておいてかまいませんが、たまに編集が必要になる可能性もあります。
  • srcディレクトリは非常に重要です。 ここには、編集する必要のあるもう1つのMakefile.amファイルが、プロジェクトのCソースファイルやその他の資産とともに格納されています。

これらのファイルがどのように使われるかを確認するには、コマンドラインでプロジェクトディレクトリに移動し、次のコマンドを実行します。

$ ./autogen.sh

configure.acおよびMakefile.amファイルが適用され、従来のconfigureおよびMakefileファイルがプロジェクトに生成されます。 これらのファイルを実際に使って、プロジェクトをビルドできます。

autogen.shスクリプトを実行したら、次のコマンドでプロジェクトソースをコンパイルできます。

make

ソースコードのあるディレクトリにバイナリーファイルが出力されます(アプリケーションが恒久的にインストールされるわけではありません)。 これで、アプリケーションを実行して次のような出力を確認できるようになりました。

$ cd src
$ ./hellomoblin

Program: hellomoblin

Hello!

Press <Enter> to exit hellomoblin

ただし、このようにしてコンパイルされたアプリケーションが、必ずしもMoblinマシンで実行できるわけではないことに注意してください。 コードのコンパイルに使うマシンには、コードをコンパイルするためのライブラリとヘッダーファイルの一式がありますが、 これらのライブラリがMoblinマシンにあるライブラリとまったく同じである可能性は低く、バージョンも同じとは限りません。 そのため、たとえアプリケーションがMoblinマシン上で動作したとしても、信頼性と一貫性が備わっているとは言えません。

次のセクションでは、Moblinツールチェーンを使って、正しいライブラリでアプリケーションをコンパイルする方法について確認しましょう。


Anjutaでのプロジェクトの設定

このプロジェクトのコーディングにはAnjutaを使います。 (Gnomeでは[Programming]の下にある)メニューから、あるいは次を入力して、コマンドラインからAnjutaを起動します。

$ anjuta

Anjutaが起動したら、[File]メニューで[New] > [Project from Existing Sources]を選択します。

プロジェクト名を入力します。 このとき、プロジェクト名にはLinux Project Generatorで使ったものと同じ短い名前を使います(hellomoblin)。 [Import from folder]ラジオボタンを選択し、ドロップダウンボックスを使って、プロジェクトが格納されているディレクトリに移動して選択します。 最後に、[Create]をクリックしてプロジェクトを作成します。

次に、Moblin SDKプラグインを使うようにプロジェクトを設定します。[Edit] > [Preferences]に移動し、[Installed plugins]タブをクリックします。 リストをスクロールして[Moblin SDK plugin]を表示し、隣にあるチェックボックスをチェックします。

これでプラグインが有効になりました。 [Preferences]ダイアログの左側にあるプラグインのリストを下にスクロールして、[Moblin SDK]の項目をクリックします。 フィールドに次のように入力します。

  • [Cross-compiler options]: [Use an external toolchain]を選択し、 (SDKをインストールしたディレクトリの中にある) moblin-cross-toolchainディレクトリに移動します。 [Toolchain triplet]をi586-moblin-linuxに設定します。
  • [Target options]: [Use an external device]を選択し、 IPアドレスをデプロイ先マシンのIPアドレスに設定します(デプロイ先マシンのIPアドレスがわからない場合、マシンでターミナルを開き、
    /sbin/ifconfig
    を使ってネットワーク設定を表示します)。

完了した設定は次のようになります。

これらの手順が完了したら、[Close]をクリックします。


コーディング

プロジェクトのソースファイルはsrcディレクトリにあります。ここでは、ソースファイルは「main.c」1つだけです。 このファイルを開き、ライセンス宣言の下にあるコードを次のコードで置き換えます。

#include <nbtk/nbtk.h>

/**
*
* Displays a window with a "Hello Moblin" button
*
*/
int
main(int argc, char* argv[])
{
 ClutterActor *stage;
 NbtkWidget *button;

 clutter_init (&argc, &argv);

 stage = clutter_stage_get_default ();

 button = nbtk_button_new_with_label ("Hello Moblin");

 clutter_container_add_actor (CLUTTER_CONTAINER (stage),
                               CLUTTER_ACTOR (button));

 clutter_actor_show (stage);

 clutter_main ();

 return 0;
}

1行目でnbtk.hヘッダーファイルを読み込み、MoblinのUI要素を作成するためのClutter とNetbook Toolkitを使えるようにします。 ただし、開発用のマシンにこのライブラリがインストールされている可能性は低いため、ローカルライブラリを使ってこのプロジェクトをビルドすると、 おそらく失敗します。

そこで、nbtkライブラリをプロジェクトのビルドで使えるようにするには、 プロジェクトのルートディレクトリにあるビルドコンフィギュレーションファイルconfigure.acを修正する必要があります。

Anjutaでconfigure.acを開き、次の行を

PKG_CHECK_MODULES(HELLOMOBLIN, glib-2.0)

次のように変更します。

PKG_CHECK_MODULES(HELLOMOBLIN, [glib-2.0 nbtk-1.2])

これにより、コードをコンパイルするときに、コンパイラーがnbtk-1.2ライブラリをリンクできるようになります。

これでプロジェクトをビルドできるようになりました。 [Build]メニューでプロジェクトを選択し、[Configure Project]を選択すると、次のダイアログボックスが表示されます。

[Regenerate project]チェックボックスをチェックしてから[Execute]ボタンをクリックします。[Configure options]には次のような効果があります。

  • --enable-maintainer-mode
    configure.acおよびMakefile.amファイルへのすべての変更が、必ずビルド中に読み込まれるようにします。 たとえば、スクリプトに関連するファイルが変更された場合、これらのスクリプトが必ず更新されます。
  • --prefix=/usr
    ビルドのインストール接頭辞を設定します。この場合、デプロイ先マシンにファイルをインストールすると、 /usrディレクトリに展開されるようにファイルをパッケージします。

configure.acまたはMakefile.amを変更した場合、[Build] > [Configure Project]を選択し、[Regenerate project]をチェックして、 ビルドスクリプトをもう一度再生成します。

最後に、[Build]メニューから[Build Project]を選択して、プロジェクトをコンパイルします。 こうすると、プロジェクトのソースに対するmakeコマンドが実行されます。 なお、プロジェクトがMoblinツールチェーンを使ってコンパイルされているかどうかを目視確認するには、 コンソール出力からmoblin-cross-toolchainを探すことをお奨めします。次にその例を示します。

i586-moblin-linux-gcc -DHAVE_CONFIG_H -I. -I..    -pthread -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/glib-2.0 -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/lib/glib-2.0/include -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/nbtk-1.2 -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/clutter-1.0 -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/cairo -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/pango-1.0 -I/home/demo/moblin-sdk-0.8/moblin-cross-toolchain/i586-moblin-linux/sys-root/usr/include/gtk-2.0   -Wall -Werror -g3 -O0 -ggdb -DPKGDATADIR="\"/usr/local/share/hellomoblin\"" -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c

アプリケーションのデプロイ

アプリケーションがコンパイルされたら、Moblinが実行されているマシンへのデプロイが可能になります。これには2つの方法があります。

  • 1.コンパイル済みのコードを、ファイルシステム間で直接コピーします(これはAnjutaのプラグインによって可能)。この方法は、すばやくデプロイできる点では便利ですが、ファイルシステム上に孤立したファイルが散らかることがあります。
  • 2.パッケージを作成して、Moblinのパッケージマネージャーを使ってインストールします。Moblin Package Creatorを使ってRPMパッケージを作成し、デプロイ先マシンにコピーして、次のコマンドを使ってインストールできます。
    yum
    これは最も優れた(アンインストールしやすい)方法ですが、直接コピーに比べて時間と手間がかかります。

いずれの方法を選択したとしても、まずデプロイ先マシンでリモートアクセスができるように設定する(英文)必要があります。


Anjutaからのデプロイ

(Moblin SDKプラグインが設定された) Anjutaで[Tools]メニューに移動し、[Deploy]を選択します。デプロイ先マシンのrootのパスワードを要求するプロンプトが表示されます。

パスワードを入力して[OK]をクリックします。コンソールには、SSHによってファイルがデプロイ先マシンにコピーされる様子が次のように表示されます。

ファイルがデプロイ先マシンの/usrディレクトリにコピーされました(コピー先のディレクトリは、プロジェクトの設定時に渡された--prefixオプションによって設定されます)。なお、ファイルをクリーンアップしなければならない場合、コピーされたファイルとそのコピー先を分析する必要があります。

再デプロイするには、リビルドしてから[Tools] > [Deploy]をもう一度実行します。


RPMの作成とデプロイ

このアプローチでは、RPMパッケージの生成にMoblin Package Creator (MPC)を使います。手順はより複雑になりますが、配布可能なパッケージが生成され、複数の異なるMoblinマシンにインストールできるようになります。

MPCを使ってパッケージの作成を試みる際には、必ず事前にAnjutaでプロジェクトのconfigureとbuildを完了してください。

コマンドラインを開き、プロジェクトディレクトリに移動します。その後、MPCを起動します。

$ cd /home/demo/hellomoblin
$ moblin-package-creator

次に、MPCの[Main]タブに、プロジェクトに適した値を入力します。次にその例を示します。

[Project root path]設定がプロジェクトのルートディレクトリを指すようにする必要があります。

また、[Requires]もユーザにとってわかりにくいと思われるフィールドですが、このフィールドでは、アプリケーションが実行時に必要とするライブラリを指定します。このアプリケーションの場合、アプリケーションでMoblin 2.1同梱のバージョン(つまりバージョン1.1.13)以上のnbtkを必要とすることを指定します(実際には、このアプリケーションはこれよりも古いバージョンのnbtk APIでも動作しますが、ここではデモのためにこのバージョンを指定します)。なお、[BuildRequires]はdebファイル作成専用であるため、ここでは使いません。

次に、[Build Control]タブに入力します。

[SDK path]をSDKインストールのルートディレクトリに移動することで設定します。[Output]ディレクトリはプロジェクトのディレクトリに設定でき、、[RPM (.rpm)]以外のすべてのチェックボックスのチェックを外すことができます。

次に、[License Details]タブに入力します。

プロジェクトの生成時に選択したライセンスタイプと同じものを選択し、その他の詳細を適切に入力します。(他の人のコードをパッケージするのではなく)自身のコードを配布する場合、上流(Upstream)のオプションには、自身の名前とWebサイトを使うことができます。

最後に、[Create]をクリックします。ターミナルウィンドウが開き、パッケージのビルドから出力が表示されます。この出力の末尾は次のようになります。

*****************************************************

Done. The new package has been saved to

./hellomoblin-0.1.0-1.i386.rpm
You can install it in your system anytime using:

      rpm -i hellomoblin-0.1.0-1.i386.rpm

*****************************************************

また、次のようなプロンプトも表示されます。

Package created successfully in <project directory>.

失敗した場合、Anjutaでプロジェクトの再設定とリビルドを試み、もう一度これらの手順をやり直してください。

ビルドが成功したら、[Quit]をクリックしてMPCを閉じます。

できあがったRPMファイルをお好みの方法でデプロイ先マシンにコピーします。たとえば、SCPを使って開発用マシンからデプロイ先マシンにRPMファイルをコピーすることもできます。

$ scp hellomoblin-0.1.0-1.i386.rpm demo@10.0.5.4:~/Download
demo@10.0.5.4's password:
hellomoblin-0.1.0-1.i386.rpm               100% 8056     7.9KB/s   00:00

(~/Downloadは、デプロイ先マシンの有効なディレクトリを示します)。

ファイルのコピーが終わったら、デプロイ先マシンのコマンドラインに切り替え、次のコマンドを入力してRPMをインストールします。

$ cd ~/Download
$ sudo rpm -i hellomoblin-0.1.0-1.i386.rpm
$ [sudo] password for demo:

RPMを削除するには、次を入力します(再デプロイする必要がある場合など)。

$ sudo rpm -e hellomoblin


アプリケーションの実行

最後に、アプリケーションをネットブック上で実行してみましょう。

Linux Project Generatorによってメニュー項目とアイコンファイルが用意されるため、ネットブック上にインストールすると、[applications]ゾーンに自動的に表示され、すぐに実行できるようになります。[applications]ゾーンの[Other]カテゴリーをクリックすると、アプリケーションのアイコンが表示されます(ただし、表示されない場合もあります)。

アイコンをクリックしてアプリケーションを起動すると、次の画面が表示されます。

これで、初めてのMoblinアプリケーションが完成しました(この時点ではボタンに機能はありません)。