IVI/Step by step constructing your build environment for Tizen IVI - ビルド環境構築手順

From Tizen Wiki
< IVI
Jump to: navigation, search

Contents

はじめに

概要

本書は、TizenIVI (3.0)をビルドする上で必要となる前提知識、および実際にビルドし動かすまでの手順について説明する資料である。

関連資料

[1] Tizen Developer Guide
[2] Tizen IVI 3.0 M2 EOY (リリースノートに相当)

参考文献

[1] How to contribute to Tizen IVI (3.0 M2 EOY向け.gbs.confの書き方の記載あり)


Tizen 環境ビルドの基本原理

Tizen環境のビルドの基本原理を説明する。

ツール説明

MIC (MeeGo Image Creator)

MeeGoに由来するイメージ生成のツールであり、USBメモリ用イメージ、ライブCD、RAWデータ形式など、様々な形式の起動イメージを生成することができる。Tizenでは、ビルド済みのRPMを集めて起動イメージを生成するフェーズで使う。なお、Tizen環境ではMICを直接呼び出すことはなく、GBSのサブコマンドとして呼び出すことになる。

GBS (Git Build System)

Gitを使った統合ビルドのツールであり、Gitからのソースダウンロード、tarファイルの生成、ビルド、ビルド生成物の格納までを行なう。Tizenでは、repoコマンドで取得したGitのミラーからソースを取得し、ビルド、およびビルド生成物(RPMパッケージ)をローカルのレポジトリに格納するまでの処理を担う。

repoコマンド

Androidに由来するレポジトリ管理のツールであり、複数のGitに格納されたコードから、指定されたブランチのものをダウンロードするツールである。Tizenでは、TizenのGitに格納されたコードのダウンロードに使う。

ここまでのツールの関係を模式したものが下の図である。

ツールの関係


ソースのダウンロードの基本原理

repoコマンドによるソースのダウンロードの原理とその内容について説明する。 Tizen DeveloperのWebサイトにあるとおり、repo initコマンドでマニフェストファイルの取得を行なう。マニフェストファイルにはGitの名称が記載されており、さらに開発ターゲット(Generic / Mobile / IVI)の設定ファイルに記載されているGit上のタグ名をもとにして、ソースをダウンロードする。

マニフェストファイル例

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      ~~中略~~
    <project name="profile/ivi/GSSDP" path="profile/ivi/GSSDP" groups="ivi"/>
      <project name="profile/ivi/GUPnP" path="profile/ivi/GUPnP" groups="ivi"/>
      <project name="profile/ivi/GUPnP-AV" path="profile/ivi/GUPnP-AV" groups="ivi"/>
      <project name="profile/ivi/GUPnP-DLNA" path="profile/ivi/GUPnP-DLNA" groups="ivi"/>
      <project name="profile/ivi/GhostCluster" path="profile/ivi/GhostCluster" groups="ivi"/>
      <project name="profile/ivi/MediaPlayer" path="profile/ivi/MediaPlayer" groups="ivi"/>
      ~~以下略~~
     

開発ターゲットの設定 (ここではivi.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
    これによって、各Gitの"accepted/tizen_ivi"のタグを
    取得することが指示される
     
    <include name="_remote.xml" />
    <default revision="accepted/tizen_ivi"
               remote="tizen-gerrit"
               sync-j="4" />
      <include name="ivi/metadata.xml" />
      <include name="ivi/prebuilt.xml" />
      <include name="ivi/projects.xml" />
    </manifest>

GBSによるビルドの基本原理

GBSによるビルドの基本原理について説明する。 ソースをダウンロードした箇所にある「.gbs.conf」にビルドの設定が格納されている。 注意:「.gbs.conf」の名前から、ユーザのホームディレクトリに格納されるファイルと推測できるが、実際にはソースの格納箇所それぞれに配置されるファイルである。 ここに、ビルド対象とする環境の設定を記載するが、基本的にはデフォルトのままでよい。

.gbs.conf例 (デフォルト設定)

    [general]
    tmpdir=/var/tmp/
    profile = profile.tizen3.0_ivi
    work_dir=.
    
    [repo.tizen3.0_x86]
    url=${work_dir}/pre-built/toolchain-x86/

    [profile.tizen3.0_ivi]
    repos=repo.tizen3.0_x86
    buildconf=${work_dir}/scm/meta/build-config/build.conf

GBSでビルドを行い、その生成物としてRPM等が格納されるまでの流れは次のとおりである。

ビルドの流れ

なお、ソースの格納場所は任意であるが、デフォルトではローカルレポジトリは /home/user/GBS-ROOT である。または.gbs.confへbuildrootの記載を加えることで任意の場所に変更することが可能である。

MICによるイメージ生成の基本原理

MICによる起動イメージ生成の基本原理について説明する。 MICは、GBSでビルドしたバイナリのRPMパッケージを展開し、ライブCDやRAWイメージの形にする。なお、TizenではRAWイメージを使っているので、ユーザは「dd」でイメージを書き込むことになる。 MICでのイメージ生成には、「KickStartファイル」(拡張子 .ks)を引数として与える。KickStartファイルには、ビルド対象の設定が記載されており、パーティションサイズやデフォルトの言語、インストールするパッケージのリスト、イメージ生成中に実行したいコマンドなどが列挙されており、GBSおよびMICはこれらの設定に基づいて起動イメージを生成する。

KickStartファイルの例 (要点のみ抜粋)

    lang en_US.UTF-8
    keyboard us
    timezone --utc America/Los_Angeles
    part /boot --size 64 --ondisk sdb --fstype=ext4 --label boot --active --align 1024 --fsoptions=noatime
    part / --size 3748 --ondisk sdb --fstype=ext4 --label platform --align 1024 --fsoptions=noatime

    ~~中略~~
    repo --name=ivi --baseurl=https://download.tizen.org/snapshots/tizen/ivi/ivi/@BUILD_ID@/repos/ivi/ia32/packages/ 

    %packages

    @Base System
    @IVI Adaptation
    @IVI Packaging
    @IVI Middleware
    @Wayland
    @IVI UX Weston
    @Console Tools
    @IVI Applications

    kernel-x86-ivi

    ivi-repos
    setup-extlinux
    setup-ivi-clone
    %end

    %post
    # base-general.post
    ln -sf /proc/self/mounts /etc/mtab
    rm -rf /root/.zypp

    #Hack to temporarily disable net-config, which collides with settingsd. Related to TIVI-2569
    rm /usr/lib/systemd/system/multi-user.target.wants/net-config.service

    ~~中略~~

    # Add over-riding environment to enable the web runtime to
    # run on an IVI image as a different user then the tizen user
    # Some notes on some of the variables:
    #  - ELM_THEME is needed in order for the wrt to have visible content
    #  - WRT_PROCESS_POOL_DISABLE is a work around for TIVI-2062
    cat > /etc/sysconfig/wrt <<EOF
    DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket
    XDG_RUNTIME_DIR=/run/user/5000
    ELM_ENGINE=wayland_egl
    ECORE_EVAS_ENGINE=wayland_egl
    ELM_THEME=tizen-HD-light
    WRT_PROCESS_POOL_DISABLE=1
    EOF

    ~~中略~~
    %end

また、KickStartファイルの中にある「repo」のエントリが、ビルド済みRPMが格納されているレポジトリの場所である。あらかじめオンラインのレポジトリの場所が記載されているが、独自にRPMをビルドし、ローカルのレポジトリにRPMが格納されている場合には、このrepoエントリを追加することで、ローカルのレポジトリを参照するようになる。なお、この手順はTizen DeveloperのWebサイトにも記載例がある。

https://source.tizen.org/ja/documentation/developer-guide/creating-tizen-image

    repo --name=Tizen-main --baseurl=http://download.tizen.org/releases/2.2/tizen-2.2/repos/tizen-main/ia32/packages/ --save --ssl_verify=no --priority=99
    repo --name=Tizen-base --baseurl=http://download.tizen.org/releases/2.2/tizen-2.2/repos/tizen-base/ia32/packages/ --save --ssl_verify=no --priority=99
    repo --name=local --baseurl=file:///home/<User>/GBS-ROOT/local/repos/tizen2.1/i586/ --priority=1
    repo --name=local-toolchain --baseurl=file:///<Tizen_Project>/pre-built/toolchain-x86/ --priority=2

ビルド環境の構築手順

ここからは、実際にビルドを行なうのに必要な環境整備の手順について説明する。 設定については、Tizen DeveloperのWebサイトも参考にすること。
https://source.tizen.org/ja/documentation/developer-guide/environment-setup
https://source.tizen.org/ja/documentation/articles/installing-development-tools

なおここでは、Tizen DeveloperのWebサイトに従い一般的な手順を説明するが、マイルストーン版(20140115: Tizen IVI 3.0 M2 EOY)に特化した具体的なビルド手順については9章に詳しく説明してあるのでそちらを参照のこと。

Tizen Gitのアカウント取得

Tizenのソースの取得には、TizenのGitにアクセスするためのアカウントが必要である。 事前にhttps://review.tizen.org にアクセスし、アカウントの取得を行なうこと。

ツールのインストール

続いて、作業環境にツールをインストールする。 https://source.tizen.org/ja/documentation/articles/installing-development-tools Tizen DeveloperのWebサイトにある例に従い、GBSとMICをインストールする。

/etc/apt/sources.list に以下の1行を追加

    deb http://download.tizen.org/tools/latest-release/Ubuntu_12.10 /

続けて、apt-getを使ってツールをインストールする。

    $ sudo apt-get update
    $ sudo apt-get install gbs mic

また、Proxyサーバを使っている環境では、corkscrewもインストールしておくこと。

    $ sudo apt-get install corkscrew

repoコマンドはスクリプトになっているので、次の手順でダウンロードする。

    $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > repo

ダウンロードしたrepoスクリプトは任意の場所に移動し、実行権限をつけておくこと。

ネットワーク(Proxy)の設定

ネットワーク(Proxy)の設定についてはTizen Developerのサイトでも説明が少ないので、詳しく説明する。 以下では、ID:PASSWORDは、Proxyサーバの認証IDとパスワードに置き換えること。また、サーバの名称やポート番号も適切なものを設定すること。

.bashrc (環境変数)

    export http_proxy=http://ID:PASSWORD@Proxyサーバのアドレス:ポート番号/
    export https_proxy=https://ID:PASSWORD@Proxyサーバのアドレス:ポート番号/
    export ftp_proxy=ftp://ID:PASSWORD@Proxyサーバのアドレス:ポート番号/
    export GIT_PROXY_COMMAND=/usr/local/bin/git-proxy
    export GIT_SSL_NO_VERIFY=1

/usr/local/bin/git-proxy (新規作成)

    #!/bin/sh
    exec /usr/bin/corkscrew Proxyサーバのアドレス ポート番号 $1 $2 ~/.proxy_auth

~/.proxy_auth (新規作成)

    ID:PASSWORD

/etc/mic/mic.conf

    ~~中略~~
    # to set global proxy for repos
    #proxy = http://proxy.yourcompany.com:8080/
    #no_proxy = localhost,127.0.0.0/8,.yourcompany.com
    proxy = http://ID:PASSWORD@Proxyサーバのアドレス:ポート番号/

Gitの初期設定

ユーザ名とメールアドレスを設定しておく。 https://source.tizen.org/ja/documentation/developer-guide/environment-setup

    $ git config --global user.name "FIRST LAST"
    $ git config --global user.email "name@somewhere.com"

ソースの取得手順

ここからは、ソースを取得し、ビルドを開始できるようにするまでの設定を説明する。 ここではHTTPSによる取得を例とするので、SSHでの取得方法については説明しない。別途Tizen DeveloerのWebサイトを参考にすること。

repoコマンドによるソースの取得

Tizen Developerのサイトの例に従いrepoコマンドを実行する。 https://source.tizen.org/ja/documentation/developer-guide/cloning-tizen-source

このとき、TizenのGerritにアクセスするためのパスワードが必要となるが、HTTPアクセスのパスワードと、TizenのGerritにアクセスするパスワードは別扱いであるので、事前に自分の設定画面で確認しておくこと。 https://review.tizen.org/gerrit/#/settings/http-password


パスワードの確認をしたうえで、以下のコマンドを実行し、repoコマンドの初期設定を行なう。

    $ repo init -u https://<Username>:<HTTPS_Password>@review.tizen.org/gerrit/p/scm/manifest -b tizen -m ivi.xml

HTTPSによるダウンロードの場合には、マニフェストファイルにあるサーバのURLを変更する。

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      <remote name="tizen-gerrit"
              fetch="https://ID:PASSWORD @review.tizen.org/gerrit/p"
              review="https://review.tizen.org/gerrit"/>
    </manifest>

Snapshot版を取得したい場合

IVIのデフォルトのブランチではなく、Snapshot版を使用したい場合は次の手順を実行すること。

    $ cd .repo/manifests/
    $ wget https://download.tizen.org/<Snapshotへのパス>//builddata/manifest/tizen_<日付>_ia32.xml

ダウンロードしたファイルから、次の2行を削除する。

    <remote fetch="ssh://review.tizen.org" name="tizen-gerrit" review="https://review.tizen.org/gerrit"/>
    <default remote="tizen-gerrit"/>

ターゲットの設定ファイルに上書きし、その変更をコミットする。

    $ cp tizen_<日付>_ia32.xml ivi/projects.xml
    $ git commit -a -m "Replaced default IVI manifest with snapshot manifest"

なお、Snapshot版のマニフェストファイルの一部は、現在のGitのディレクトリ構造と不一致になっているものがあるため、ダウンロードが完了しないものがあるので注意のこと。

ダウンロードを開始する

以下のコマンドでダウンロードを開始する。

    repo sync

※デフォルトでダウンロードの並列化(-j4)が有効になっている。

なお、このときサーバから切断される現象が発生することがある。特にその症状が出やすいのが、webkit-eflであり、総量5.1GBあるが、1.0GBになったところで切断することが特に多い。これはサーバ側の能力に起因するものでありクライアント側では対処ができないため、リトライを繰り返す以外にない。

ビルドの手順

続いて、実際にビルドを行なう手順を説明する。

.gbs.confの確認

ビルドの設定を行なう.gbs.confの内容を確認する。基本的にはデフォルトのままで問題ないが、必要に応じて設定を変えること。 https://source.tizen.org/ja/documentation/reference/git-build-system/configuration-file

.gbs.conf 変更例

    [general]
    tmpdir=/var/tmp/
    profile = profile.tizen3.0_ivi
    work_dir=.
    buildroot = ~/GBS-ROOT-TIZEN-IVI-3.0/ ★生成済みRPMの格納先(ローカルレポジトリ)を変更する場合

    [repo.tizen3.0_x86]
    url=${work_dir}/pre-built/toolchain-x86/

    [profile.tizen3.0_ivi]
    repos=repo.tizen3.0_x86
    buildconf=${work_dir}/scm/meta/build-config/build.conf

ビルド開始

.gbs.confの設定が完了したら、ビルドを開始する。 Tizen DeveloperのWebサイトにビルドのコマンド例があるが、このコマンドではビルドが通らなかった。その確認の結果、以下のような課題が明らかとなった。

  • パッケージ間の依存関係がおかしい (循環参照になっており前後関係を解決できずビルド不能)
  • 依存関係を無視してビルドが進んでしまいビルドエラー
  • パッケージ単体でビルドが通らない


コミュニティのMLによると、ビルドが通らないことは決して珍しいことではないとの説明もある。
一例:https://www.mail-archive.com/ivi@lists.tizen.org/msg00822.html

    >> You've done well to get so far!  If you look at the history of this list
    >> (search for my name...) you'll find that we set out to do the same; a few
    >> weeks ago we got to almost where you are before I got distracted onto other
    >> tasks...
    >> 
    >> Things seem much better than they were, at least last time I tried.  I
    >> looked at yesterday's release and noticed that there are still a handful of
    >> packages with errors--I wonder if it's necessary to be perfect to build a
    >> runable  image (obviously not!)

よって、ビルドの通らないものについてはオンライン上のビルド済みRPMを使うこととし、ここでのビルド対象から外す(--exclude)こととした。その結果確定したビルドのコマンドは以下のとおり。

    $ gbs build -A i586 --threads=8 --clean-once --exclude=libtool,aul,libmm-sound,gcc,cmake,filesystem,libtool,gettext,gstreamer,build-initvm,\
       gst-libav,gst-plugins-bad,gst-plugins-base,gst-plugins-good,gst-plugins-ugly,gstreamer-vaapi,libffi48,util-linux,gst-omx,libhangul,libgcj48, \
       gcc48-testresults,cross-i386-gcc48-icecream-backend

また、このコマンドを使っても、1回ではビルドが完了しない。これは、依存関係を無視してビルドが進んでしまうことに起因するため、何度かビルドのリトライを繰り返してビルドを通す。 以下のようなメッセージでビルドが終了すれば成功である。

    === Total succeeded built packages: (XXX) ===
    info: generated html format report:
         /home/user/GBS-ROOT/local/repos/tizen3.0_ivi/i586/index.html
    info: generated RPM packages can be found from local repo:
         /home/user/GBS-ROOT/local/repos/tizen3.0_ivi/i586/RPMS
    info: generated source RPM packages can be found from local repo:
         /home/user/GBS-ROOT/local/repos/tizen3.0_ivi/i586/SRPMS
    info: build logs can be found in:
         /home/user/GBS-ROOT/local/repos/tizen3.0_ivi/i586/logs
    info: build roots located in:
         /home/user/GBS-ROOT/local/BUILD-ROOTS/scratch.i586.*
    info: Done

ビルド結果の確認

ビルドが完了すると、ローカルレポジトリに次のようなディレクトリ構造が出来上がる。

    GBS-ROOT
    +-- local
    |   `-- BUILD-ROOTS                              ビルド用の作業ディレクトリであり、ビルド時に設定したスレッドの数だけ存在する
    |       `-- <ビルド用の作業ディレクトリ>
    +-- cache (省略)
    +-- order (省略)
    +-- repos
    |   `-- tizen3.0_ivi
    |       `-- i586
    |           +-- logs
    |           |    +-- fail                           ビルドに失敗したOSSのビルドログ
    |           |    +-- success                        ビルドに成功したOSSのビルドログ
    |           +-- repodata
    |           +-- RPMS                            ビルド済みRPM
    |           +-- SRPMS                              ビルド可能なSRPM
    |           `-- index.html                              ビルドレポート (HTML形式)
    `-- sources
       `-- tizen3.0_ivi                              各OSSのtarボール、specファイルなど
            `-- <各OSSのディレクトリ>

ローカルレポジトリの中核となるのは、GBS-ROOT/reposディレクトリである。 なお、ビルドエラーとなったものの解析には、"fail"ディレクトリにあるログが活用できる。

注意:ビルドレポートのindex.htmlファイルは、ビルドするたびに上書きされる。前の節でビルドのリトライが必要であると説明したが、これによりindex.htmlファイルが上書きされる。その結果、リトライ対象となったパッケージのレポートしか出力されなくなるので注意のこと。必要ならば、リトライ前にindex.htmlファイルを保存しておくとよい。

実行イメージの生成

次に、MICを使って実行イメージを生成する手順を説明する。

KickStartファイルの用意

実行環境の設定が記載されているKickStartファイルを用意する。このとき、ビルド環境と設定内容の整合がとれている必要があるため、適当なものをもってくるとエラーになる。よって、ソースをダウンロードしたときのマニフェストとおなじ場所から入手するのが安全である。

Release Milestoneの場合の例

    http://download.tizen.org/releases/milestone/tizen/ivi/latest/builddata/image-configs/

Snapshotの場合の例

    http://download.tizen.org/snapshots/tizen/ivi/ivi/latest/builddata/image-configs/

ここでは、x86-PC用の設定ファイル (ivi-mbr-i586.ks) を使うこととする。

ローカルレポジトリの追加

ローカルでビルドしたRPMを使うようレポジトリを追加する。

    $ repo --name=ivi --baseurl=http://download.tizen.org/snapshots/tizen/ivi/ivi-release/@BUILD_ID@/repos/ivi/ia32/packages/ \
       --ssl_verify=no --proxy=http://ID:PASSWORD@Proxyサーバのアドレス:ポート番号
    $ repo --name=local --baseurl=file:///home/user/GBS-ROOT/local/repos/tizen3.0_ivi/i586/ --priority=1
    $ repo --name=local-toolchain --baseurl=file:///path/to/TizenSrc/pre-built/toolchain-x86/ --priority=2

この中で、リモートのレポジトリにアクセスするときにProxyを経由する場合にはProxyの設定を追加しておくこと。また、ツールチェーンの格納場所(/path/to/TizenSrc)については適切な場所を設定のこと。

イメージ生成時に発生した不具合

イメージ生成を行なったところ、次のようなエラーメッセージが出力され、イメージ生成のできないケースがあった。

    Declined for Tizen:IVI: Breaks image creation: file /usr/lib/libGL.so.1.2.0 conflicts between attempted installs of 
    mesa-libGL-9.2.1-7.10.i686 and emulator-yagl-1.0-18.1.i686

これは、mesa-libGLとemulator-yaglの両方に/usr/lib/libGL.soが含まれており、衝突しているためイメージ生成ができないというエラーである。この不具合はTizenコミュニティにすでに報告されているものであるが、2014年3月時点でまだ改修されていない。
https://lists.tizen.org/pipermail/tizen-submit/2013-December/023458.html

そこで、KickStartファイル内の %package の箇所に次の記述(赤字)を追加して、libGLの重複を回避する。

    %package
    -emulator-yagl
    mesa-libEGL
    libgbm
    mesa-libGLESv2
    libwayland-egl

イメージの生成

設定したKickStartファイルを使ってイメージを生成する。

    gbs createimage --ks-file=<KickStartファイル>

次のようなメッセージが出力されればイメージの生成完了である。

    INFO: copy kernel file vmlinuz-<バージョン>-x86-ivi as /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>-vmlinuz-<バージョン>-x86-ivi
    INFO: Generating the map file(s)
    INFO: Compressing image ivi-mbr-i586-<日付>-sdb.raw
    INFO: The new image can be found here:
     /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>-sdb.bmap
      /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>-sdb.raw.bz2
     /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>.packages
      /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>.xml
      /path/to/TizenSrc/mic-output/ivi-mbr-i586-<日付>-vmlinuz-<バージョン>-x86-ivi

    INFO: Finished.
    info: Done

イメージの生成が完了すると、mic-outputディレクトリの下に次のような生成物が格納されている。 ※ここでは、KickStartファイルの名称が「ivi-mbr-i586.ks」である場合の出力結果を例とする。

    ivi-mbr-i586-<日付>.packages     イメージに格納したOSSのパッケージ一覧
    ivi-mbr-i586-<日付>.xml     イメージ生成時のパーティション設定
    ivi-mbr-i586-<日付>-sdb.bmap     イメージ生成時のパーティション設定
    ivi-mbr-i586-<日付>-sdb.raw.bz2     イメージファイル (raw形式、BZIP2圧縮)
    ivi-mbr-i586-<日付>-vmlinuz-<バージョン>-x86-ivi     カーネルイメージ

最終的にターゲットで動かすイメージは、.raw.bz2のファイルである。

イメージの書き込みと実行

生成した実行イメージを書き込んで動かす手順を説明する。

イメージの書き込み

生成済みのイメージファイルを対象に、次のコマンドでイメージファイルをUSBメモリに書き込む。 (USBメモリへの書き込みのため、あらかじめrootに切り替えておくこと)

    $ bzcat tizen_<日付>_ivi-mbr-i586-sdb.raw.bz2 | dd bs=100M of=/dev/sdX

※書き込み時間短縮のため、BlockSize=100Mを設定している。

起動手順

書き込みが完了したらターゲットにUSBメモリを挿入して起動すれば、TizenIVI環境が立ち上がる。
注意:NDIS-166はHDDを内蔵しているので、予期せずHDDから起動してしまうことがある。この場合は、BIOS上で起動順序を変更してUSBメモリを優先するようにするか、内蔵SATAコントローラを停止してHDDにアクセスできないようにしておくと確実にUSBメモリから起動できるようになる。
通常は自動的にWaylandが起動し、ターミナルを開くなどの操作が可能になる。また、仮想コンソールも使えるので、Ctrl+Alt+(F1~F6)でコンソール切り替えが可能である。デフォルトのログインIDは"tizen"、パスワードも"tizen"である。また、rootのパスワードも"tizen"となっている。また、バックグランドでSSHによる接続も可能である。

Webアプリの起動

Tizen環境にあらかじめ搭載されているWebアプリを起動する手順を説明する。

まず、次のコマンドで搭載されているWebアプリの一覧を出すことができる。

    $ wrt-launcher -l
     No          Name Version                           GUID  Package ID                   App ID
     --            --   ----                         -------       -----                    -----
      1       saythis  1.0.0       http://yourdomain/sayThis  lYjFlj49Q4       lYjFlj49Q4.saythis
      2      Settings  1.0.0      http://yourdomain/Settings  ODBQpKvkS1      ODBQpKvkS1.Settings
      3  GhostCluster  1.0.0  http://yourdomain/GhostCluster  GV3ySIINq7  GV3ySIINq7.GhostCluster
      4   MediaPlayer  1.0.0   http://yourdomain/MediaPlayer  t8j6HTRpuz   t8j6HTRpuz.MediaPlayer

もしこのとき、Webアプリの一覧が出力されない場合には、root権限で次のコマンドを実行し、Webアプリのデータベースを初期化する。

    $ wrt_reset_all.sh

データベースを初期化したら、Webアプリを再登録する。(こちらもroot権限が必要)

    $ cd /opt/usr/app/.preinstallWidgets
    $ wrt-installer -i GhostCluster.wgt
    $ wrt-installer -i MediaPlayer.wgt
    $ wrt-installer -i Settings.wgt
    $ wrt-installer -i saythis.wgt

インストールができたら、一般ユーザに戻りあらためてWebアプリの一覧を確認する。 この一覧をもとに、動かしたいWebアプリを次のコマンドのようにして実行する。

    $ wrt-launcher -s <WebアプリのID>
    例:wrt-launch -s GV3ySIINq7.GhostCluster
  • 実行結果
Ghostcluster.png

または、smartDeviceLinkCoreというアプリも試すことができる。

  • smartDeviceLinkCore
Smartdevicelinkcore.png


ビルド試験の結果

今回、TizenIVIのビルドを行なったところ、3章で説明したとおりビルドが通らなかったため、ビルドコマンドでパッケージを除外する対応をとった。そこで、メインストリームだけでなく、マイルストーン版、スナップショット版のマニフェスト情報を使ってのビルドを試みたので、その結果を報告する。

版名 ダウンロードとソースからのビルド ローカルで生成したRPMからイメージ生成 生成したイメージの起動結果
メインストリーム(ivi.xmlデフォルト) NG ⇒ エラーメッセージ1。依存関係の解決ができずビルドできない。.gbs.confでbuildconfをTizen:IVI.build.confにすればビルドが進む N/A N/A
Release/Milestone 20130829.9 (IVI-M2) OK (--excludeによる除外指定が必須) libGLが衝突する。6.3の処置をすればOK ⇒ エラーメッセージ2 6.3の処置をすればOK。Webアプリ起動もOK
Snapshot/ivi-genivi 20140310.26 OK (--excludeによる除外指定が必須) NG ⇒ エラーメッセージ3。(KiskStartファイルのivi-reposをコメントアウトすればOK) N/A (左記の処置をした環境で起動させたがWayland起動せず)
Release/Milestone 20140115.4 (3.0 EOY M2) NG ⇒ 例1。Gitとマニフェストファイルの間でディレクトリ構造が一致しないためダウンロードできない。※改修してビルドを通す方法を9章で説明する。 N/A N/A


【エラーメッセージ1】

    === the following packages failed to build because export source files to build environment failed (7) ===
    <Qt5関係7つが提示される>
    === the following packages failed to build due to missing build dependencies (578) ===
    <ほとんどのパッケージが列挙され依存関係が解決できない旨が表示される。>
    ⇒578個もあるので --exclude での除外では対処しきれない

【エラーメッセージ2】

    Declined for Tizen:IVI: Breaks image creation: file /usr/lib/libGL.so.1.2.0 conflicts between attempted installs of mesa-libGL-9.2.1-7.10.i686 and emulator-yagl-1.0-18.1.i686

【エラーメッセージ3】

    ERROR: Unable to find package: ivi-repos
    error: <gbs>failed to create image

【例1】

    Git上:framework/system/smartcard-service.git
    Manifest上: platform/core/system/smartcard-service

Snapshot版は、開発途上のバージョンであるのでビルドが通る保障がない。また日々更新が入っているのでこれ以上の解析は保留とした。一方のMilestone版は、エラーが出るものの、調査・改修を行なってビルドできるようにしたので、その詳細を9章に説明する。

Tizen IVI 3.0 M2 EOY版のビルド手順

関連資料[2]より、Tizen IVI 3.0 M2 EOY版は、Tizen 3.0のコードベースで作られたプレビュー版(α版)という位置づけになっており、IVI向けとしてGENIVIコンポーネントの導入をはじめとして、様々な機能追加と拡張が行なわれているものである。
ここからは、このTizen IVI 3.0 M2 EOY版を対象として、ビルド手順とビルド結果の確認を行なったので、その手順を説明する。また、以下の作業において必要な設定ファイル類は、Tizenのダウンロードサイト (http://download.tizen.org/releases/milestone/tizen/ivi/tizen_20140115.4/) にあるのでそちらから入手のこと。

ビルド手順

8章で、このバージョンはマニフェストファイルの不具合により、ダウンロードができない旨を報告した。ここでは、その不具合を改修してダウンロードできるようにし、ビルド~動作確認までを行なったので一連の内容について報告する。
ビルドのおおまかな手順は4章以降のビルド手順と大差はないが、いくつか修正が必要なので以下に説明する。

manifestファイルの修正

まず、マニフェストファイルに記載されているディレクトリ名と、Git上のディレクトリ名が不一致になっており、repo syncによるダウンロードができないのでこれを修正する。
以下の3行について修正を行なうこと。

  • マニフェストファイル
    /builddata/manifest/tizen_20140115.4_ia32.xml
    -  <project name="platform/core/system/smartcard-plugin-nfc" path="platform/core/system/...
    -  <project name="platform/core/system/smartcard-plugin-uicc" path="platform/core/system/...
    -  <project name="platform/core/system/smartcard-service" path="platform/core/system/...
    +  <project name="platform/core/connectivity/smartcard-plugin-nfc" path="platform/core/system/..
    +  <project name="platform/core/connectivity/smartcard-plugin-uicc" path="platform/core/system/..
    +  <project name="platform/core/connectivity/smartcard-service" path="platform/core/system/...
    ※1行の記述が長いので右端は省略。

build.confファイルの修正

.gbs.conf内に記載するbuild.confファイルについては、デフォルトのものを使うのではなく、ダウンロードサイトから入手する。 http://download.tizen.org/releases/milestone/tizen/ivi/tizen_20140115.4/builddata/8caeb77a1698141bb345e6dbcacdf490578413d3bfd27a45baabca8907a6adc7-build.conf

なおデフォルトのbuild.confとの差異は、エミュレータ関連とNFC対応のみであるので、特に影響はない。

  • .gbs.confファイルの修正

.gbs.confファイルについては、参考文献[1]のWiki上の例を参考にし、以下の設定とした。

    [general]
    tmpdir=/var/tmp/
    profile = profile.3.0-m2-eoy
    work_dir=.
    buildroot=~/GBS-ROOT-3.0EOY

     [repo.tizen-3.0-m2-eoy]
    url = http://download.tizen.org/releases/milestone/tizen/ivi/tizen_20140115.4/repos/ivi/ia32/packages/

    [profile.3.0-m2-eoy]
    repos = repo.tizen-3.0-m2-eoy
    buildconf=/path/to/build.conf

    build.confのディレクトリ名 (/path/to) については、9.1.2でダウンロードしたbuild.confのパスを指定すること。

ビルド

ビルドコマンドは以下とする。

    $ gbs build -A i586 --threads=4 --clean-once --exclude=libtool

※このコマンドでビルドするとエラーとなるものが多数存在するが、ローカルレポジトリ内にRPMは生成されるので、不足するパッケージのみオンラインから入手すれば起動イメージの生成はできる。よってこれをビルドコマンドとして採用する。

ビルド結果の分析

ビルドの結果明らかとなった、Tizen 3.0 M2 EOY版の問題点を以下に列挙する。総括して、このTizen IVI 3.0 M2 EOY版はα版という位置づけであるので、最新版への追従、各OSS間のバージョン整合、新規に導入したパッケージについてのメンテナンスなどが十分ではないと思われる。

バージョンが極端に古い

マニフェストファイルの日付を確認すると分かるが、全体的に日付が古い。3.0 M2 EOY版は2014年1月15日にリリースされているものであるが、2013年6月~10月頃のタグがほとんどである。なお、Git上を確認すると、パッケージはそれぞれアップデートされているので、マニフェストファイル上の記述が最新のソースに追従していない。

バージョンが不整合になっている

9.2.1に関連して、tizen 2.1版を参照しているもの (gst-omx, gst-libav) がある。このとき、本体はGStreamer-1.0.7であるのに対し、これらのプラグインがGStreamer-0.10を要求しているため、バージョン不整合の状態にある。(ただしこれらは9.2.3の理由でビルドエラーになっている)

コピーしたGitツリーからソースアーカイブの生成などができない

ビルドの過程で、repoコマンドで取得したソースからアーカイブの生成、パッチの生成などを行なうが、この処理ができないものがある。例として、以下のようなエラーメッセージが出力される。

  • 例1:Qt5
    info: Generating patches from git (upstream/5.2.1..HEAD)
    error: Start commit 'upstream/5.2.1' not an ancestor of end commit 'HEAD'
    error: Generating upstream tarball and/or generating patches failed. GBS tried this as you have upstream branch in you git tree. Fix the problem by either:
    1. Update your upstream branch and/or fix the spec file. Also, check the upstream tag format.
    2. Remove or rename the upstream branch (change the package to native)
    See https://source.tizen.org/documentation/reference/git-build-system/upstream-package for more details.
    error: Failed to export packaging files from git tree

この例では、コピーしたGitツリーの親子関係(ancestor)に問題があることが示されている。

  • 例2:libhangul
    error: Invalid upstream treeish upstream/0.1.0
    error: Generating upstream tarball and/or generating patches failed. GBS tried this as you have upstream branch in you git tree. Fix the problem by either:
    1. Update your upstream branch and/or fix the spec file. Also, check the upstream tag format.
    2. Remove or rename the upstream branch (change the package to native)
    See https://source.tizen.org/documentation/reference/git-build-system/upstream-package for more details.
    error: Failed to export packaging files from git tree

この例では、アップストリームのツリーに問題があることが示されている。

libGL.soの衝突不具合

6.3で報告したlibGL.soの衝突不具合は直っており、KickStartファイルを改修しなくてもイメージ生成できることを確認した。

ビルドレポート抜粋

ビルドレポート (index.html) よりエラーになっているものを抜粋する。

  • Export error details
Package name Package path Export error
gst-ffmpeg0.10-0.10.11-19 Tizen3.0/platform/upstream/gst-libav error: Invalid upstream treeish upstream/0.10.11

error: Failed to export packaging files from git tree

qtchooser-39-0 Tizen3.0/platform/upstream/qtchooser error: Start commit 'upstream/39' not an ancestor of end commit 'HEAD'

error: Failed to export packaging files from git tree

gst-openmax0.10-0.10.1-7 Tizen3.0/platform/upstream/gst-omx error: Invalid upstream treeish upstream/0.10.1

error: Failed to export packaging files from git tree

qt5-5.2.1-0 Tizen3.0/platform/upstream/qtbase error: Start commit 'upstream/5.2.1' not an ancestor of end commit 'HEAD'

error: Failed to export packaging files from git tree

qt5-qtwayland-5.2.1-0 Tizen3.0/platform/upstream/qtwayland error: Start commit 'upstream/5.2.1' not an ancestor of end commit 'HEAD'

error: Failed to export packaging files from git tree

libhangul-0.1.0-1 Tizen3.0/platform/core/uifw/libhangul error: Invalid upstream treeish upstream/0.1.0

error: Failed to export packaging files from git tree

  • Expansion error details
Package name Package path Expansion error
cross-i386-gcc48-icecream-backend Tizen3.0/platform/upstream/gcc48 nothing provides cross-i386-binutils
gcc48-testresults Tizen3.0/platform/upstream/gcc48 nothing provides fastjar

nothing provides dejagnu

libgcj48 Tizen3.0/platform/upstream/gcc48 nothing provides fastjar
  • Build status details (Failedのもののみ抜粋)
Package name Package path Build status
build-initvm Tizen3.0/platform/upstream/build Failed
libffi48 Tizen3.0/platform/upstream/gcc48 Failed
wrt-setting Tizen3.0/apps/core/preloaded/wrt-setting Failed


オンラインからダウンロードされたパッケージ

イメージ生成時にオンラインからダウンロードされたパッケージは次の2つだった。

    model-config-ivi-0.0.1-1.1.noarch.rpm
    gst-libav-1.2.0-1.4.i686.rpm

このことから、エラーになっているパッケージのほとんどは、イメージ生成において必ずしも必要なものではないことが分かる。

イメージ生成

イメージ生成の手順は6章と同じである。なお、libGLの衝突不具合は改修されているので、6.3の処置は不要である。