YRPの様子を見てきた.
4月に見たときはこんな感じでした.
なんだかさみしい感じ.バス停の名前もそのうち変わるのかな.
FreeBSD機 (Core2 duo),NetBSD機 (Raspberry pi)に同じpf.confを入れたが,FreeBSDでは動いて,NetBSDでは動かず.
具体的には,以下のルールがNetBSDでは弾かれる.icmp6は知らん,と.
pass inet6 proto icmp6 all
man pf.confを見るとicmp6って書いてあるが,その下に/etc/protocolsを見るとも書いてある.
proto <protocol> This rule applies only to packets of this protocol. Common protocols are icmp(4), icmp6(4), tcp(4), and udp(4). For a list of all the protocol name to number mappings used by pfctl(8), see the file /etc/protocols.
念のため,FreeBSDとNetBSDでicmp6がどう載っているか比べてみた.
FreeBSD
ipv6-icmp 58 IPV6-ICMP icmp6 # ICMP for IPv6
NetBSD
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6 [RFC2460]
NetBSDにはicmp6が入っていなかった.NetBSD,FreeBSDどちらもipv6-icmpなら載っているので,pf.confにはipv6-icmpと書くことにした.
pass inet6 proto ipv6-icmp all
FreeBSD/armが安定しなかったので,NetBSD/evbarmを入れることにした.出戻り.
今回は,http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/ からスナップショットのSDイメージを持ってきてさくっとインストール.アップデートもここからユーザーランドを持ってこれるので自ビルドする必要はなさそう.
sshdをインターネットにさらそうと思っているので,sshguardを入れるべく,pfを使えるようにする.そのためにはカーネルを作り直さないとダメみたいなので,FreeBSDの母艦PCでクロスビルドする.
ここと同じ.今回は /home/netbsd/current/src に展開.
/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も入れておいた.
基本的にはここと同じだが,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
クロス環境の構築に引き続きカーネルを構築.コマンドはほとんど同じ.
HOST_CC=gcc47 HOST_CXX=g++47 ./build.sh -O ../objarm -m evbarm -a earmhf -U kernel=RPI
基本的にクロスコンパイラーを使うのでHOST_CCとか指定する必要はなさそうだが,一応入れておいた.
objarm/sys/arch/evbarm/compile/RPI/netbsd.binをコピーして,NetBSD on Raspberry pi の /boot/kernel.img としておいて再起動.
カーネルはSDカード先頭のFATパーティションに置くことになっているが,/bootにマウントされているので,動作中に置き換え出来る.
FreeBSD 10-STABLE / arm のビルドメモ.
10-STABLE用のフォルダをzfsで用意して,svnで持ってくる.
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/usr/src_stable10 # cd /usr # svn co https://svn0.us-west.freebsd.org/base/stable/10 src_stable10
crochet-freebsdというFreeBSD/armのブートイメージを作成するためのスクリプトが用意されているので,それを持ってくる.また,展開したフォルダにu-bootのソースも置いておく必要があり,合わせて取得.
# cd /usr/local # git clone https://github.com/kientzle/crochet-freebsd.git # cd crochet-freebsd # git clone https://github.com/gonzoua/u-boot-pi.git u-boot-rpi
crochet-freebsdのconfig.sh.sampleをコピーして編集する.
# diff -uN config.sh.sample config.sh --- config.sh.sample 2014-05-14 00:09:50.436616000 +0900 +++ config.sh 2014-05-14 00:15:05.937593000 +0900 @@ -25,7 +25,7 @@ #board_setup GenericI386 #board_setup PandaBoard #board_setup Soekris -#board_setup RaspberryPi +board_setup RaspberryPi #board_setup VersatilePB #board_setup ZedBoard #board_setup Wandboard @@ -45,7 +45,7 @@ # Suggested: option ImageSize #option ImageSize 100mb # for kernel-only images #option ImageSize 1950mb # for 2 Gigabyte card -#option ImageSize 3900mb # for 4 Gigabyte card +option ImageSize 3900mb # for 4 Gigabyte card # # How to Customize Your Build @@ -85,7 +85,7 @@ # couple of extra reboots, which can make this occasionally perplexing # to use. # -#option AutoSize +option AutoSize # Enable emailed status notifications. # This can also be enabled via the -e command-line flag. @@ -147,7 +147,7 @@ # it will tell you how to get appropriate sources into this directory. # (I find FREEBSD_SRC=${TOPDIR}/src to be useful.) # -#FREEBSD_SRC=/usr/src +FREEBSD_SRC=/usr/src_stable10 # You will probably never override this, but you may need to # understand it: WORKDIR holds all of the created and temporary files
crochet-freebsdのフォルダでスクリプトを実行し,しばし待つ.
# sh crochet.sh -c config.sh
出来上がったイメージをSDに焼いてブート.イメージは work/FreeBSD-armv6-10.0-RPI-B-r.img として出来上がる.
Raspberry pi をちょっとしたサーバー(ntpdとかリゾルバとか)にしようと思って、FreeBSD 10-STABLE を自前ビルドして、ここ数日動かしてみた。
が、どうにも安定しない。sshdが突然signal 11で落ちる。これじゃ、使いものにならない。
SDカードが壊れてるのかなぁとも思ったけど、色々試す気力もなく、再びNetBSDに戻ってみることにする。
FreeBSD/armのビルドは追々まとめようと思う。
ここのつづき.
rtcの設定を/etc/rc.localに書いてあったけど,起動時の処理が
とntpdateが動いてRTCの意味がない感じがするので,最初の方でhwclock.shが走るように改造した.
まずはhwclock.shの改造.I2Cバス上のRTCを認識させて時刻をとれるようにする.
root@raspberry:/etc/init.d# diff -u hwclock.sh.orig hwclock.sh --- hwclock.sh.orig 2014-05-10 09:41:36.171639671 +0900 +++ hwclock.sh 2014-05-10 10:31:32.134145549 +0900 @@ -61,8 +61,15 @@ printf "0.0 0 0.0\n0\nUTC" > /etc/adjtime fi - if [ -d /run/udev ] || [ -d /dev/.udev ]; then - return 0 + #load i2c and RTC kernel modules + modprobe rtc-m41t80 + echo m41t62 0x68 > /sys/class/i2c-adapter/i2c-1/new_device + + if [ -e /dev/$HCTOSYS_DEVICE ] + then + log_action_msg "RTC device found" + else + echo 0x68 > /sys/class/i2c-adapter/i2c-1/delete_device fi if [ "$HWCLOCKACCESS" != no ]; then
hwclock.shを有効化
# update-rc.d hwclock.sh enable
ついでに,ntpdateのパッケージを削除してこんな感じにした.
あとはfirewallを入れれば,常時起動のサーバーとして使えそうなのでもう少し試験したら1台買い増そうかな.
家庭内LANのDHCPサーバー(IPv4)の設定を変更した.
DHCPサーバーはRTX810で動いているのでRTX810の設定.
これまでは,192.168.100.0/24 の範囲でMACアドレス指定で固定的に割り当てていたが,その範囲を有線・無線・機種等で分けて,ついでに,既知の端末と未知の端末(ゲスト)でサブネットを分けて,ゲスト用サブネットからLAN内の他のサブネットへの通信を遮断するようにした.
subnet-1 [192.168.100.0/24]:既知の端末用のネットワーク
subnet-2 [192.168.1.0/24]:ひかり電話ルーター配下のサブネット (SIP用)
subnet-3 [192.168.255.0/24]:ゲスト用ネットワーク
configはこんな感じ.
※100003を入れ忘れてLANからRTX810に入れなくなり,途中からシリアルコンソールで設定.
※あとからIPv6でつなげば設定できることを思い出した...
ip lan1 address 192.168.100.1/24 ip lan1 secondary address 192.168.255.1/24 ip lan2 address 192.168.1.254/24 ip filter 100001 reject-nolog 192.168.255.0/24 192.168.100.0/24 * * * ip filter 100002 reject-nolog 192.168.255.0/24 192.168.1.0/24 * * * ip filter 100003 pass * * * * * ip lan1 secure filter in 100001 100002 100003 dhcp scope lease type 1 bind-only fallback=2 dhcp scope 1 192.168.100.33-192.168.100.254/24 dhcp scope bind 1 192.168.100.33 XX:XX:XX:XX:XX:XX : (略) dhcp scope bind 1 192.168.100.254 XX:XX:XX:XX:XX:XX dhcp scope 2 192.168.255.33-192.168.255.254/24
ipv4はこれでいいが,ipv6はブロードキャストされているraを拾って設定するので通信できてしまって,なんかすっきりしない.少し考えてみるか.VLAN使うしかないかな.
先日秋葉原で衝動買いした,M41T62が載ったRTCボードをRaspberry piにつないでみた.
データシートを見るとレジスタの仕様がDS1307と違っていてどうしたものかと思ったが,カーネルモジュールのリストを眺めてみたらm41txxが使えそう.
% ls /lib/modules/3.10.25+/kernel/drivers/rtc rtc-bq32k.ko rtc-ds3232.ko rtc-m41t80.ko rtc-pcf8523.ko rtc-rv3029c2.ko rtc-ds1305.ko rtc-ds3234.ko rtc-m41t93.ko rtc-pcf8563.ko rtc-rx4581.ko rtc-ds1307.ko rtc-em3027.ko rtc-m41t94.ko rtc-pcf8583.ko rtc-rx8025.ko rtc-ds1374.ko rtc-fm3130.ko rtc-max6900.ko rtc-r9701.ko rtc-rx8581.ko rtc-ds1390.ko rtc-isl12022.ko rtc-max6902.ko rtc-rs5c348.ko rtc-s35390a.ko rtc-ds1672.ko rtc-isl1208.ko rtc-pcf2123.ko rtc-rs5c372.ko rtc-x1205.ko
データシートを見ると,M41T93とM41T94はSPIで,M41T80はI2CでM41T62と時刻レジスタの仕様はほぼ同じ.
で,rtc-m41t80.koのソースコードを見るとM41T62もサポートされているようなので,さくっと使えそう.
72 static const struct i2c_device_id m41t80_id[] = {
73 { "m41t62", M41T80_FEATURE_SQ | M41T80_FEATURE_SQ_ALT },
74 { "m41t65", M41T80_FEATURE_HT | M41T80_FEATURE_WD },
75 { "m41t80", M41T80_FEATURE_SQ },
76 { "m41t81", M41T80_FEATURE_HT | M41T80_FEATURE_SQ},
77 { "m41t81s", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
78 { "m41t82", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
79 { "m41t83", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
80 { "m41st84", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
81 { "m41st85", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
82 { "m41st87", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ },
83 { }
84 };
早速やってみた.
% sudo su # modprobe rtc-m41t80 # echo m41t62 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
これでM41T62が認識されてdmesgにログが出力される.
% dmesg | tail
[ 13.109501] i2c /dev entries driver
[ 13.378915] Driver for 1-wire Dallas network protocol.
[ 21.233753] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[ 21.234343] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 22.855768] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 22.857117] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
[ 35.406699] Adding 102396k swap on /var/swap. Priority:-1 extents:1 across:102396k SSFS
[ 36.812102] rtc-m41t80 1-0068: chip found, driver version 0.05
[ 36.813680] rtc-m41t80 1-0068: rtc core: registered m41t62 as rtc0
[ 36.814748] i2c i2c-1: new_device: Instantiated device m41t62 at 0x68
時刻もしっかりとれる.
# hwclock -r; date Tue 06 May 2014 08:11:49 AM JST -0.906676 seconds Tue May 6 08:11:49 JST 2014