みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

raspberrypiでメディアサーバ(完結編)

raspberrypi+yoctoでNAS+メディアサーバを構築した話(その1その2その3)の続き。 その際にハマった点や修正方法を記述する。 最終的には採用しなかった修正なども含まれるが、その際は採用しなかった旨を記述する。

なぜyoctoか? yoctoprojectがどういうものであるか?などについては一切触れない。

詳しい情報はhttp://www.yoctoproject.orgをみたりgoogle先生に聞いたりすると 正確な情報が手に入る。

USB HDDの接続

NAS機能の要であるUSB HDDを接続し、sambaで共有する。

レシピの修正

これも起動時にマウントできるようにレシピを修正する。

方針としては以下。

  1. HDDは/dev/sda1として認識される(はず)
  2. HDDの第一パーティションext4でフォーマットされている。
  3. /home/smbuser/smbdataにマウントする。
  4. 起動時にマウントされるように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

おわりに

ここまでの作業で当初予定していた以下の機能は実現できた。

  • sshでサーバにログイン
    • sshserver
  • USB HDDを接続しNASとして利用
  • DLNAサーバでHDD内の音楽ファイルを自宅内で再生
    • mediatomb

今回おこなった手順では、以下の3箇所に修正が集約されるため、 実は再利用することが容易であったりする。

  • build/conf/local.conf
  • build/conf/bblayers.conf
  • poky/meta-local

ここまでの手順で作成したOSは、 何かを変更したい場合に毎回レシピを修正しなくてはならないわけではなく、 OSをインストールしたあとに設定ファイルを修正したり、 何かのアプリケーションをインストールしたりすることも可能である。^1

yoctoを利用すると、OSのインテグレーションを体験でき、 既存のOSイメージをインストールしてからカスタマイズするのとは また一味違う面白さがあると思う。