FreeBSD/armが安定しなかったので,NetBSD/evbarmを入れることにした.出戻り.
今回は,http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/ からスナップショットのSDイメージを持ってきてさくっとインストール.アップデートもここからユーザーランドを持ってこれるので自ビルドする必要はなさそう.
sshdをインターネットにさらそうと思っているので,sshguardを入れるべく,pfを使えるようにする.そのためにはカーネルを作り直さないとダメみたいなので,FreeBSDの母艦PCでクロスビルドする.
1. ソースの取得
ここと同じ.今回は /home/netbsd/current/src に展開.
2. kernel config
/src/sys/arch/evbarm/conf/RPI の末尾を見ると,
% tail RPI # data mover pseudo-devices #pseudo-device swdmover # software dmover(9) back-end #pseudo-device dmoverio # /dev/dmover dmover(9) interface # userland interface to drivers, including autoconf and properties retrieval pseudo-device drvctl # local configuration cinclude "arch/evbarm/conf/RPI.local"
とあるので,RPI.localを作っていろいろ追加していけばよさそう.ということで,こんなRPI.localにした.
% cat RPI.local file-system UNION # union file system pseudo-device pf # PF packet filter pseudo-device pflog # PF log if pseudo-device vlan # IEEE 802.1q encapsulation
※ついでに使うかわからないけど,union file systemとvlanも入れておいた.
3. クロス環境の構築
基本的にはここと同じだが,archとしてearmhf を指定することと,FreeBSD/amd64のclangでコンパイルできなかったので,gccを使うことに注意.
まず,gccを入れてなかったのでインストールから.
# pkg install gcc
gcc-4.7.1がgcc47として入るので,クロス環境の構築時に指定してあげる.earmhfも指定する.
% cd /home/netbsd/current/src % HOST_CC=gcc47 HOST_CXX=g++47 ./build.sh -O ../objarm -m evbarm -a earmhf -U tools
4. カーネル構築
クロス環境の構築に引き続きカーネルを構築.コマンドはほとんど同じ.
HOST_CC=gcc47 HOST_CXX=g++47 ./build.sh -O ../objarm -m evbarm -a earmhf -U kernel=RPI
基本的にクロスコンパイラーを使うのでHOST_CCとか指定する必要はなさそうだが,一応入れておいた.
5. カーネルの入れ替え
objarm/sys/arch/evbarm/compile/RPI/netbsd.binをコピーして,NetBSD on Raspberry pi の /boot/kernel.img としておいて再起動.
カーネルはSDカード先頭のFATパーティションに置くことになっているが,/bootにマウントされているので,動作中に置き換え出来る.