OpenBlocks 600 のCFをbtrfsのみの1 partitionにして、これをroot fsとしてDebian Linuxを稼働させてみました。
btrfsではkernel 2.6.34以降がおすすめらしいので2.6.34にしてみました。
- 使用したssdlinux: 0.5-20100520
- CF: A-DATA 533倍速 コンパクトフラッシュ 16GB
kernelのコンパイル
まずは素のssdlinuxが入っているOpenBlocks 600上でkernelを作成します。
https://btrfs.wiki.kernel.org/index.php/Btrfs_source_repositories
によるとbtrfsを使用するためには2.6.34以降が望ましいようなので2.6.34をインストールすることにします。
2.6.34用のパッチがないようなので2.6.33のものをコピーします。
ssdlinux# cd /usr/src/mkdist/kernel
ssdlinux# cp -pr 2.6.33 2.6.34
ssdlinux# cp -pr /usr/src/mkdist/kernel/2.6.34/dot.config.powerpc-obs600 /usr/src/my-dotconfig
/etc/mk.conf は以下のように設定しておきます。
OPENBLOCKS?=obs600
HOSTTYPE=powerpc
KERNEL_PATCHLEVEL=34
KERNEL_CONFIG=/usr/src/my-dotconfig
以下のようにしてkernelをダウンロードします。
# cd /usr/src/mkdist/kernel
ssdlinux# bmake
configを編集します。
ssdlinux# cd /usr/src
ssdlinux# bmake menuconfig
(config編集します)
FSでbtrfsを有効にします。
ssdlinux# cp linux/.config /usr/src/my-dotconfig
buildします。
ssdlinux# bmake build_kernel
ssdlinux# bmake install_kernel
kernel image をつくりflashにコピーします。
ssdlinux# cd /usr/src/distrib/utils
ssdlinux# bmake
ssdlinux# cd /usr/src/distrib/powerpc-obs600/cfboot
ssdlinux# bmake
ssdlinux# flashcfg -f treeboot/uImage.initrd-cfboot
rebootして起動できることを確認します。
ssdlinux# reboot
ファイルシステムの作成〜debianのコピー
ssdlinuxにはbtrfs-toolsがないので他のマシン(amd64 ubuntu 9.04)で新しいCFをformatします。
ubuntu# mkfs.btrfs /dev/sdc1
このCFをUSB経由でOBS600に接続すると、/dev/sdb1として認識されました。
btrfsを有効にしたkernel 2.6.34だとbtrfsがmountできるようになるのでmountします。
http://openblocks.plathome.co.jp/support/documentation/other_os.html
にあるdebian のイメージをこのfsに展開します。
ssdlinux# mkdir /mnt2
ssdlinux# mount /dev/sdb1 /mnt2
ssdlinux# cd /mnt2
ssdlinux# tar --numeric-owner -zxvf /tmp/lenny-powerpc-obs600-20100119-00.tar.gz
ssdlinux# vi /mnt2/etc/network/interfaces
ssdlinux# vi /mnt2/etc/resolv.conf
ssdlinux# vi /mnt2/etc/fstab
/dev/sda1 / btrfs defaults,noatime,ssd 1 1
none /proc proc defaults 0 0
ssdlinux# mkdir /mnt2/initrd
ssdlinux# cd /lib
ssdlinux# tar cf - firmware | ( cd /mnt2/lib; tar xvBpf -)
ssdlinux# cd /lib/modules
ssdlinux# tar cf - 2.6.34 | ( cd /mnt2/lib/modules; tar xvBpf -)
ssdlinux# find /mnt2/lib/modules -type f -name "*.ko.gz" | xargs gzip -d
CF交換とdebian起動
rebootしてu-bootで止めてrootdeviceを変更します。
> setenv rootdev /dev/sda1
> saveenv
ちなみに、もとにもどすには
> setenv rootdev LABEL=/
とするようです。
OBS600を分解してオリジナルのCFとbtrfs上にdebianイメージを展開したCFを交換します。
これでbtrfsをrootデバイスとしてdebianが起動できました。
各種設定等
https://btrfs.wiki.kernel.org/index.php/Btrfs_source_repositories
によると、dpkgにバグがあるようなので最新版に更新します。
unstableからinstallできるようにします。ただしデフォルトはstableにします。
/etc/apt/sources.list に以下を追加します。
deb http://ftp2.jp.debian.org/debian/ unstable main non-free contrib
/etc/apt/apt.conf.d/99target に以下を記述します。
APT::Default-Release "stable";
debian# aptitude update
debian# aptitude dist-upgrade
debian# aptitude install dpkg/unstable
debian# aptitude install btrfs-tools/unstable
debian# cd /sbin
debian# ln -s btrfsck fsck.btrfs
通常使用するものをインストールします。
debian# aptitude install gcc-4.3
debian# aptitude install gcc
debian# aptitude install openntpd
debian# aptitude install bonnie++
debian# aptitude install iozone3
debian# aptitude install less
debian# aptitude install emacs23-nox/unstable
openntpdの設定をします。
/etc/openntpd/ntp.conf
servers ntp.nict.jp
(round robin で返す場合はservers, そうじゃない場合はserverで指定する)
これでopenntpが起動できない(serverにすると起動できました)
/var/log/daemon.logに下記のエラーがでていました
ntp engine ready
fatal: client_query socket: Address family not supported by protocol
検索の結果openntpdのバグ(?)のようです。unstable版では修正されているようなのでopenntpdをunstable版にしてみます。
debian# aptitude install openntpd/unstable
これでopenntpdが起動できるようになりました。
client_query socket: Address family not supported by protocol
こんなエラーはでますが、おそらくIPv6サポートしていないためだと思われますので
IPv4 onlyの場合はとくに問題にならなそうです。