raspberrypi+yoctoでNAS+メディアサーバを構築した話(その1、その2、その3)の続き。 その際にハマった点や修正方法を記述する。 最終的には採用しなかった修正なども含まれるが、その際は採用しなかった旨を記述する。
なぜyoctoか? yoctoprojectがどういうものであるか?などについては一切触れない。
詳しい情報はhttp://www.yoctoproject.orgをみたりgoogle先生に聞いたりすると 正確な情報が手に入る。
USB HDDの接続
NAS機能の要であるUSB HDDを接続し、sambaで共有する。
レシピの修正
これも起動時にマウントできるようにレシピを修正する。
方針としては以下。
- HDDは/dev/sda1として認識される(はず)
- HDDの第一パーティションはext4でフォーマットされている。
- /home/smbuser/smbdataにマウントする。
- 起動時にマウントされるようにfstabを修正する。
sambaをインストールすると自動的に/home/smbuser/smbdataが共有されるようになる。
bbappendの作成
以下のコマンドで必要なディレクトリおよびファイルを作成する。
$ cd ~/raspberrypi_dylan/poky
$ mkdir -p meta-local/recipes-core/base-files/base-files
$ touch meta-local/recipes-core/base-files/base-files_3.0.14.bbappend
rootfs上のファイルが上書きされるように以下のようにする。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
${PN}だとパッケージ名 ${PN}-${PV}だとパッケージ名-バージョンとして展開される。
設定ファイルの作成
設定ファイルを作成する。
$ touch meta-local/recipes-core/base-files/base-files/fstab
内容は以下の通り。
# stock fstab for the RaspberryPi - you may want to tweak this to suit. rootfs / auto defaults,noatime 1 1 proc /proc proc defaults 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 tmpfs /var/volatile tmpfs defaults 0 0 tmpfs /dev/shm tmpfs mode=0777 0 0 tmpfs /media/ram tmpfs defaults 0 0 /dev/sda1 /home/smbuser/smbdata ext4 defaults,uid=smbuser,gid=500 0 0
ここでuid,gidを指定しないと、共有フォルダにファイルを作ることができない。
bitbake,SD作成
以下のコマンドでイメージを作成しSDを作成する。
$ cd ~/raspberrypi_dylan $ source poky/oe-init-build-env $ bitbake rpi-basic-image $ sudo dd if=./tmp/deploy/images/rpi-basic-image-raspberrypi bs=40M
おわりに
ここまでの作業で当初予定していた以下の機能は実現できた。
今回おこなった手順では、以下の3箇所に修正が集約されるため、 実は再利用することが容易であったりする。
- build/conf/local.conf
- build/conf/bblayers.conf
- poky/meta-local
ここまでの手順で作成したOSは、 何かを変更したい場合に毎回レシピを修正しなくてはならないわけではなく、 OSをインストールしたあとに設定ファイルを修正したり、 何かのアプリケーションをインストールしたりすることも可能である。^1
yoctoを利用すると、OSのインテグレーションを体験でき、 既存のOSイメージをインストールしてからカスタマイズするのとは また一味違う面白さがあると思う。