Aptpod Advent Calendar 10日目の担当、矢部です。
Aptpod入社してまだ日が浅い私ですがいろいろと新しく知ることが多く、その中にYoctoがあります。
今回はYoctoで作成したLinuxパッケージをアップデートするための方法の一つである、パッケージマネージャの利用について説明します。
手順
Yoctoでパッケージマネージャを使う方法は非常に簡単です。設定ファイルであるlocal.confに以下を追加するだけ1です。
IMAGE_FEATURES += " package-management "
PACKAGE_CLASSES ?= " package_rpm "
2行目のほうはパッケージにrpmを利用する場合で、ほかにも
- package_deb
- package_ipk
- package_tar
が設定可能です。
設定ができたらイメージのビルド。
パッケージリポジトリの公開
作成したパッケージはローカルにrpmファイルをおいてアップデートする方法もありますが、リポジトリを作成してhttp公開するのが便利です。
$ createrepo /<build_dir>/<tmp_dir>/deploy/rpm
上記で作成したリポジトリディレクトリを、ApacheやらNginxやらお好きなもので公開します。
ボード側の設定
公開したリポジトリを利用するために、ボード側には最低限以下の設定が必要です。
設定ファイル(.repo)の名前はなんでもよいです。
$ mkdir /etc/yum.repos.d
[yocto]
name=yocto
baseurl=http://<build machine>
gpgcheck=0
gpgcheckの設定については、以下の通り。
この方法では、リポジトリの検証用のgpgkeyを無効にしているが、ローカル接続であれば問題ない。外部公開の場合は適切に設定すること。
https://qiita.com/watatuki/items/4c3447a96309e19e7d5c
上記設定ができたら以下のコマンドを実行。
$ dnf makecache
正常に設定されていればリポジトリが読み込まれます。うまくいかない場合は設定ファイルや、リポジトリの公開設定などを見直してみてください。
動作確認
ここまでくれば、あとは
- パッケージのインストール
$ dnf install <package name>
- アップデート
$ dnf update
- 自分が公開したパッケージの確認
$ dnf list --available
などなど、コマンド一発でいろいろ簡単に行えるようになります。
さいごに
組込み機器に限らずアップデートの機能はちゃんと作らないと苦労します(した)が、このように簡単に実装できてしまうのはすばらしいですね。
(おまけ)バージョンを変えずにアップデートしたい
デイリービルドなどバージョンナンバーを変えずにアップデートしたいケースはあるかと思いますが、dnfでは同一バージョンの強制アップデートが(素直には)できません2。
Yoctoではレシピのリビジョン設定をする変数が用意されているため、その値を変更することでdnfに異なるバージョン(リビジョン)のSWとして認識されるようになります。
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-PR
ちなみに、自動でリビジョンを上げる方法もあるようです。
https://www.yoctoproject.org/docs/2.6/dev-manual/dev-manual.html#working-with-a-pr-service
参考
- DNF Command Reference
- Yoctoでdnfを使う方法
- Use DNF Package Manager on a Yocto-built Development System
- How do I create a repository