Linux
yocto
dnf

Yoctoでdnfを使う方法

More than 1 year has passed since last update.

Yocto 2.3 で、パッケージマネージャがsmartからdnfに変更されました。
dnfそのもののドキュメントは存在しますが、Yoctoで使う方法は情報が皆無に等しい状況です。
本稿は、あれこれ試した結果を忘れないようにメモ書きしたものです。

dnfとは?

Fedoraで採用されている、yumの後継パッケージマネージャ。
オフィシャルドキュメントは以下にある
http://dnf.readthedocs.io/en/latest/

dnfそのものの解説はあえて書くまでもないので、以下を参照
https://ja.wikipedia.org/wiki/DNF_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)

Yocto2.3の「New Features / Enhancements」に以下のような一言が書かれており、変更されたことがわかる。
* Replaced smart+rpm5 with dnf+rpm4 for more standard and widely-supported RPM functionality

Yoctoでdnfを使う方法

Yocto Project Reference Manual の5.18.4. Using Runtime Package Managementに使い方が書かれている。
http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html

パッケージ方式にrpmを採用した場合に、ビルドするPCからターゲットボードにinstallできるようにする方法を以下に記す。(マニュアルの内容を見る限りipkも同じ方法でできそう)

  1. local.confもしくは、イメージレシピに以下の1行を追加して、パッケージマネージメント関連のファイルがインストールされるようにする
    IMAGE_FEATURES += " package-management "

  2. ビルドディレクトリのrpmディレクトリ(例:build\tmp\deploy\rpm)をhttpで公開する。

  3. rpmディレクトリで createrepo . を実行しておく。本来の使い方とは異なるが、いちいちリポジトリデータを作り直すのは面倒なので、ひとつ上のディレクトリで作ってしまう。

  4. ターゲットボードを起動し、
     mkdir yum.repos.d
    で、ディレクトリを作成し、次のように記述したyocto.repoファイルを格納する
     [yocto]
     baseurl=http://yourserver/rpm
     gpgcheck=0
     この方法では、リポジトリの検証用のgpgkeyを無効にしているが、ローカル接続であれば問題ない。外部公開の場合は適切に設定すること。

  5. 以下の順番でコマンドを実行する
    dnf makecache
    dnf update
    dnf install インストールしたいパッケージ名

smartから移行する場合は、4の手順が変わっているところなので、そこに注意すれば比較的すんなり使えます。