2014年4月17日木曜日

OpenBlocks Aシリーズ rootfs変更方法 (FlashROMブート) [debian Wheezy][AX3][A7][A6]

OpenBlocks AシリーズにおいてrootfsをSSDに変更する手順を記述します。

OpenBlocks Aシリーズでは、ディスクレス運用のためのRAMディスクモードと、ストレージ併用モードを標準的にサポートしています。
(それぞれのモードについては、以下の記事を参照してください。)

OpenBlocksの動作モードについて

ストレージ併用モードにおいて、SSDなどのストレージデバイスはaufs(squeezeベースまではunion)によるマウントを行っていますが、aufsによる共有モードではなく、SSDに構築したrootfsを直接マウントして使用することも可能です。

また、カーネル自体も、フラッシュROMからだけでなく、SSDなどのストレージデバイスからの起動も行えます。

今回は、フラッシュROMから起動し、SSD側で用意したrootfsをマウントする方法について解説します。

rootfsはDebian, Fedora, Ubuntuなど好きなものをあらかじめ作成して使用しますが、今回は、debootstarapを用いてDebian wheezyパッケージを作成し、OpenBlocks独自のハードウェア制御を追加した、標準のファームウェアパッケージと同等の機能を持つものを作成しました。

本機能は、OpenBlocksの機能の一部として実装されているものですが、当社の提供する標準のパッケージ構成ではないため、動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (もしくは、SSD搭載モデル)

1. SSDの準備


SSDを用意します。もし、標準構成でDEBIANのラベルを設定済みでしたら、ラベルを削除し、本体を再起動してください。

# e2label /dev/sda1 ""

再起動後、ラベルを/に変更します。
を再起動してください。

# e2label /dev/sda1 /

ファイルシステムは、現在のAシリーズはすべてext4を採用しています。
もし、新たにフォーマットする場合は、以下のコマンドをご使用下さい。

# mkfs.ext4 -L "/" /dev/sda1

2. debootstrapによるrootfsの作成と修正


SSDを/mntにマウントして、rootfsを作成しますが、標準のファームウェアパッケージにはdebootstrapが含まれていたいため、debootstrapをインストールする必要があります。
なお、ファームウェアをRAMディスクモードで起動した後、ネットワークの設定を行う必要があります。

# aptitude update
# aptitude install debootstrap 

インストールしたパッケージを保存する場合は、以下のflashcfgコマンドにて行ってください。

# flashcfg -S 

SSDを/mntにmountします。

# mount /dev/sda1 /mnt

debootstrapにより、rootfsを作成します。

# debootstrap --exclude=ed,nano --arch armel wheezy /mnt http://ftp.jp.debian.org/debian

/mnt/etc/inittabのT0のパラメータを修正します。

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

chrootしてrootパスワードを変更します。

# chroot /mnt
# passwd root
# exit 

ファームウェアから必要なファイルをコピーし、モジュール構成を更新します。

# cp -R /lib/modules /mnt/lib
# cp /usr/sbin/runled /mnt/usr/sbin
# cp /usr/sbin/pshd /mnt/usr/sbin
# depmod -a


fstabを編集します。
ext4の場合は、以下の通り。ext3の場合はdiscardは不要です。

# vi /mnt/etc/fstab

/dev/sda1       /               ext3    defaults        notime, discard
proc            /proc           proc    defaults        0 0
#none           /tmp            tmpfs   size=64m        0 0
#cgroup         /sys/fs/cgroup  cgroup  defaults        0 0

/etcの下のinit関連のファイルをコピーします。
 
# cp /etc/init.d/pshd /mnt/etc/init.d
# cp /etc/init.d/runled /mnt/etc/init.d

# cd /mnt/etc/rc0.d
# ln -s ../init.d/pshd K01pshd
# ln -s ../init.d/runled K01runled

# cd /mnt/etc/rc2.d
# ln -s ../init.d/pshd S99pshd
# ln -s ../init.d/runled S99runled

# cd /mnt/etc/rc6.d
# ln -s ../init.d/pshd K01pshd
# ln -s ../init.d/runled K01runled

# cp /etc/init.d/.depend.start /mnt/etc/init.d
# cp /etc/init.d/.depend.stop /mnt/etc/init.d

/etc/apt/sources.listをコピーします。

# cp /etc/apt/sources.lst /mnt/etc/apt

3. ubootのパラメータ変更と起動


OpenBlocks本体を再起動します。
起動時にコンソール上でキーボードを押すとubootのプロンプトが表示されます。

openblocks> printenv root
root=/dev/ram
openblocks> setenv root /dev/sda1
openblocks> saveenv
Saving Environment to Flash...

電源を入れ直すか、bootと入力して起動してください。

なお、rootfsをUSBストレージなどで構築した場合、 USBストレージの初期化の時間の関係で、マウントエラーが起きます。その場合は、rootdelayパラメータで調整してください。

システムを元に戻す場合は、rootに/dev/ramを設定します。

openblocks> setenv root /dev/ram
openblocks> saveenv
Saving Environment to Flash...


0 件のコメント:

コメントを投稿