2014年2月4日火曜日

smartでスマートに?

パッケージをいろいろと出し入れしていると、
そのうちひとつづつコピーしてはインストールして、、、
という作業がめんどくさくなってきます。
依存関係を手動で解決するのもめんどくさいですし。
そこで、パッケージ管理ツールを導入したくなるのが順当かと思います。

Yoctoでは、パッケージ管理としてsmartが標準ということになっているようです。
これは、pythonのフロントエンドで、パッケージ自体はRPMでもIPKでもいいようです。
デフォルトのlocal.confではRPMになっていますので、
(個人的にもRPMのほうが慣れているので)
RPMで進めていきます。

まずは、ビルドマシンで作成したパッケージ群をターゲットからアクセスできるようにします。
Apache2で公開するには、下記のようにすればOKです。
$ sudo vi /etc/apache2/sites-available/default
...
     Alias /repo_raspi/ "/home/knishimu/workplace/yocto/build_raspi_hf/tmp/deploy/rpm/"
     <Directory "/home/knishimu/workplace/yocto/build_raspi_hf/tmp/deploy/rpm/">
         Options Indexes MultiViews FollowSymLinks
         AllowOverride None
         Order deny,allow
         Allow from all
     </Directory>
...
apache2の細かい設定やらは、グーグル先生に聞いて下さい。

んで、下記のようにターゲットからアクセスすれば、ネットワーク越しにインストールができます。
root@raspberrypi:~# smart install http://hostname/repo_raspi/arm1176jzfshf_vfp/bootchart-1.16-r1.arm1176jzfshf_vfp.rpm


Fetching packages...
-> http://hostname/repo_raspi/.../bootchart-1.16-r1.arm1176jzfshf_vfp.rpm
bootchart-1.16-r1.arm1176jzfs.. ######################################## [100%]

Loading cache...
Updating cache...               ######################################## [100%]

Computing transaction...
Saving cache...

root@raspberrypi:~#
とりあえず、アクセスできましたが、まだあまり改善されてないですよね。
ということで、リポジトリ内のパッケージ検索とかをできるようにします。
ビルドしたディレクトリはパッケージのアーキテクチャ依存によって、
all/arm1176jzfshf/raspberrypiのように3つにわかれていると思いますので
下記のように3つのチャンネルを登録します。
root@raspberrypi:~# smart channel --add all type=rpm-md baseurl="http://hostname/repo_raspi/all"

Alias: all
Type: rpm-md
Base URL: http://hostname/repo_raspi/all

Include this channel? (y/N): y


root@raspberrypi:~# smart channel --add arm1176jzfshf_vfp type=rpm-md baseurl="http://hostname/repo_raspi/arm1176jzfshf_vfp"

Alias: arm1176jzfshf_vfp
Type: rpm-md
Base URL: http://hostname/repo_raspi/arm1176jzfshf_vfp

Include this channel? (y/N): y


root@raspberrypi:~# smart channel --add raspberrypi type=rpm-md baseurl="http://hostname/repo_raspi/raspberrypi"

Alias: raspberrypi
Type: rpm-md
Base URL: http://hostname/repo_raspi/raspberrypi

Include this channel? (y/N): y

そして、アップデートをかけると、repodataからパッケージ情報を拾ってきます。
root@raspberrypi:~# smart update
Updating cache...               ######################################## [100%]

Fetching information for 'raspberrypi'...
-> http://hostname/repo_raspi/raspberrypi/repodata/repomd.xml
repomd.xml                      ######################################## [ 16%]
-> http://hostname/repo_raspi/raspberrypi/repodata/primary.xml.gz
primary.xml.gz                  ######################################## [ 25%]
-> http://hostname/repo_raspi/raspberrypi/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 33%]

Fetching information for 'arm1176jzfshf_vfp'...
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/repomd.xml
repomd.xml                      ######################################## [ 50%]
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/primary.xml.gz
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 58%]
primary.xml.gz                  ######################################## [ 66%]

Fetching information for 'all'...
-> http://hostname/repo_raspi/all/repodata/repomd.xml
repomd.xml                      ######################################## [ 83%]
-> http://hostname/repo_raspi/all/repodata/primary.xml.gz
primary.xml.gz                  ######################################## [ 91%]
-> http://hostname/repo_raspi/all/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [100%]

Updating cache...               ######################################## [100%]

Channels have 4772 new packages.
Saving cache...

root@raspberrypi:~#
ここで、試しにcurlをインストールしてみたいと思います。
rpmコマンドで確認してみると、まだターゲットのroot fsにはないようです。
root@raspberrypi:~# rpm -qa|grep curl
root@raspberrypi:~#

smartでリポジトリを検索してみると、見つかります。
root@raspberrypi:~# smart search curl
Loading cache...
Updating cache...               ######################################## [100%]

curl - Command line tool and library for client-side URL transfers
curl-dbg - Command line tool and library for client-side URL transfers - Debugging files
curl-dev - Command line tool and library for client-side URL transfers - Development files
curl-doc - Command line tool and library for client-side URL transfers - Documentation files
gst-plugins-bad-curl - GStreamer plugin for curl
gst-plugins-bad-curl-dev - GStreamer plugin for curl (development files)
libcurl-dev - Command line tool and library for client-side URL transfers
libcurl-doc - Command line tool and library for client-side URL transfers
libcurl-staticdev - Command line tool and library for client-side URL transfers
libcurl5 - Command line tool and library for client-side URL transfers


root@raspberrypi:~#
これをインストールします。
root@raspberrypi:~# smart install curl
Loading cache...
Updating cache...               ######################################## [100%]

Computing transaction...

Installing packages (2):
  curl-7.34.0-r0@arm1176jzfshf_vfp       libcurl5-7.34.0-r0@arm1176jzfshf_vfp

248.9kB of package files are needed. 423.8kB will be used.

Confirm changes? (Y/n): Y

Fetching packages...
-> http://hostname/repo_raspi/.../curl-7.34.0-r0.arm1176jzfshf_vfp.rpm
curl-7.34.0-r0.arm1176jzfshf_.. ######################################## [ 50%]
-> http://hostname/repo_raspi/.../libcurl5-7.34.0-r0.arm1176jzfshf_vfp.rpm
libcurl5-7.34.0-r0.arm1176jzf.. ######################################## [100%]


Committing transaction...
Preparing...                    ######################################## [  0%]
   1:Installing libcurl5        ######################################## [ 50%]
   2:Installing curl            ######################################## [100%]


root@raspberrypi:~#
依存関係にあるlibcurl5も同時にインストールされました。
念の為にRPMコマンドで確認してみると、見つかりました。
root@raspberrypi:~# rpm -qa|grep curl
libcurl5-7.34.0-r0.arm1176jzfshf_vfp
curl-7.34.0-r0.arm1176jzfshf_vfp
root@raspberrypi:~#
次に、新しいパッケージをビルドして、追加してみます。
あまり依存関係のないiozone3あたりで試します。
ビルドしてから、パッケージを確認してみると、、、
root@raspberrypi:~# bitbake iozone3
...
root@raspberrypi:~# smart search iozone3
Loading cache...
Updating cache...               ######################################## [100%]



root@raspberrypi:~#
見つかりません。
これは、リポジトリのrepodataが更新されていないためです。
yoctoでは、rootfsをビルドするときにrepodataも更新しているのですが、
新しいパッケージをテストするためにビルドするたびに
いちいちrootfsをビルドしていてはたまらないですね。

repodataだけなら、ホストのコマンド(createrepo)でアップデートできます。
sysrootにもありますが、apt-get等でホストにインストールしてしまってもいいです。
# sudo apt-get isntall createrepo
...
# createrepo --update tmp/deploy/rpm/arm1176jzfshf_vfp
これで、repodataが更新されましたので、ターゲット側でもデータベースを更新すれば
パッケージが見つかるようになります。
root@raspberrypi:~# smart update
Loading cache...
Updating cache...               ######################################## [100%]

Fetching information for 'raspberrypi'...
-> http://hostname/repo_raspi/raspberrypi/repodata/repomd.xml
repomd.xml                      ######################################## [ 16%]

Fetching information for 'arm1176jzfshf_vfp'...
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/repomd.xml
repomd.xml                      ######################################## [ 41%]
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/primary.xml.gz
-> http://hostname/repo_raspi/arm1176jzfshf_vfp/repodata/filelists.xml.gz
filelists.xml.gz                ######################################## [ 50%]
primary.xml.gz                  ######################################## [ 58%]

Fetching information for 'all'...
-> http://hostname/repo_raspi/all/repodata/repomd.xml
repomd.xml                      ######################################## [ 75%]

Updating cache...               ######################################## [100%]

Channels have 13 new packages.
Saving cache...

root@raspberrypi:~#
root@raspberrypi:~# smart search iozone3
Loading cache...
Updating cache...               ######################################## [100%]

iozone3 - iozone3 version 263-r0
iozone3-dbg - iozone3 version 263-r0 - Debugging files
iozone3-dev - iozone3 version 263-r0 - Development files
iozone3-doc - iozone3 version 263-r0 - Documentation files


root@raspberrypi:~#
スマートですか?スマートじゃないですか?
ま、パッケージマネージャ周りは論争が絶えないところですから、
いろんなご意見があるのは、やむをえないかなぁと思います。

参考:

0 件のコメント :

コメントを投稿