2台目の設定

とりあえず今まで使ってた Raspberry Pi はサーバ用途に使うとして、2台目をセットアップしてみる。
近所で電器屋がオープンして Gigastone の 32GB MicroSDHC カード CLASS 10 が \1,280 (税別)だったので、3枚買っておく。
今回は MicroSD カードを初期化せず NOOBS をコピーし、そのまま Raspberry Pi へ差して電源オン。
インターネットに公開する気はさらさら無いので、ユーザはデフォルトのまま。

やったことのまとめ

  • 1台目とほぼ同じ初期設定
  • ネットワークのボンディング


ボンディングは、オンボードNIC と USB 接続した NIC で実施。
目的は、LANケーブルを差しても、USB - NIC でも、きちんと接続できるようにするためであって、冗長性の確保ではないことに注意。
そもそも、Raspberry pi の USB と NIC ってば、回路が同じところから出てたはずで、NIC が壊れた場合には USB も同時に壊れるということなので、冗長化構成としてはあまり意味がない。

Raspberry Pi のアップデートとアップグレード

1台目と同じ。
http://d.hatena.ne.jp/KuroNeko666/20150307


ちなみに1台目もやってみたけど、アップグレード対象があった。

Location

1台目と同じ。
http://d.hatena.ne.jp/KuroNeko666/20150307

NTP

今回は1台目に合わせるので、多少設定を変更する。

pi@raspberrypi ~ $ sudo cp -p /etc/ntp.conf /etc/ntp.conf.`date '+%Y%m%d'`
pi@raspberrypi ~ $ sudo vi /etc/ntp.conf
:%s/^server/#server/g
server 192.168.1.101 iburst
pi@raspberrypi ~ $
pi@raspberrypi ~ $ diff /etc/ntp.conf /etc/ntp.conf.`date '+%Y%m%d'`
21,25c21,24
< #server 0.debian.pool.ntp.org iburst
< #server 1.debian.pool.ntp.org iburst
< #server 2.debian.pool.ntp.org iburst
< #server 3.debian.pool.ntp.org iburst
< server 192.168.1.101 iburst
---
> server 0.debian.pool.ntp.org iburst
> server 1.debian.pool.ntp.org iburst
> server 2.debian.pool.ntp.org iburst
> server 3.debian.pool.ntp.org iburst
pi@raspberrypi ~ $
pi@raspberrypi ~ $ sudo service ntp restart
[ ok ] Stopping NTP server: ntpd.
[ ok ] Starting NTP server: ntpd.
pi@raspberrypi ~ $ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.1.101   133.243.238.243  2 u    1   64    1    0.588   -2.394   0.163
pi@raspberrypi ~ $

もうね、自宅LAN内のサーバだから iburst しようが誰にも迷惑が掛からない。
素晴らしい。
あ、本来なら (RFCに従うなら) NTPサーバを FQDN にしなきゃならないんだけど、現時点で named を立ち上げてないので放置。


でも、気にかかる部分がないわけじゃない。
Raspberry Pi の NTP ログは /var/log/syslog に吐かれるんだけど…

pi@raspberrypi ~ $ grep ntp /var/log/syslog
Feb 16 14:02:43 raspberrypi kernel: [    0.002382] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
Feb 16 14:02:43 raspberrypi ntpd[2173]: ntpd 4.2.6p5@1.2349-o Mon Feb  9 03:34:42 UTC 2015 (1)
Feb 16 14:02:43 raspberrypi ntpd[2189]: proto: precision = 2.760 usec
Feb 16 14:02:43 raspberrypi ntpd[2189]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
Feb 16 14:02:43 raspberrypi ntpd[2189]: Listen normally on 1 lo 127.0.0.1 UDP 123
Feb 16 14:02:43 raspberrypi ntpd[2189]: Listen normally on 2 eth0 192.168.1.3 UDP 123
Feb 16 14:02:43 raspberrypi ntpd[2189]: peers refreshed
Feb 16 14:02:43 raspberrypi ntpd[2189]: Listening on routing socket on fd #19 for interface updates
Feb 16 14:02:43 raspberrypi ntpd[2189]: restrict: error in address '::' on line 38. Ignoring...
Feb 16 14:02:43 raspberrypi ntpd[2189]: restrict: error in address '::1' on line 42. Ignoring...
Mar 23 12:04:04 raspberrypi ntpd[2189]: ntpd exiting on signal 15
Mar 23 12:04:06 raspberrypi ntpd[8113]: ntpd 4.2.6p5@1.2349-o Mon Feb  9 03:34:42 UTC 2015 (1)
Mar 23 12:04:06 raspberrypi ntpd[8114]: proto: precision = 1.198 usec
Mar 23 12:04:07 raspberrypi ntpd[8114]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
Mar 23 12:04:07 raspberrypi ntpd[8114]: Listen normally on 1 lo 127.0.0.1 UDP 123
Mar 23 12:04:07 raspberrypi ntpd[8114]: Listen normally on 2 eth0 192.168.1.3 UDP 123
Mar 23 12:04:07 raspberrypi ntpd[8114]: peers refreshed
Mar 23 12:04:07 raspberrypi ntpd[8114]: Listening on routing socket on fd #19 for interface updates
Mar 23 12:04:07 raspberrypi ntpd[8114]: restrict: error in address '::' on line 39. Ignoring...
Mar 23 12:04:07 raspberrypi ntpd[8114]: restrict: error in address '::1' on line 43. Ignoring...

デフォルトの ntp 設定をそのまま使ってるにもかかわらず、エラーが出てるのって不思議すぎる。
タイムスタンプが UTC のままなのは、たぶん syslogd を再起動してないからだろうなぁなんて。

alias

1台目と同じ。
http://d.hatena.ne.jp/KuroNeko666/20150307

pi@raspberrypi ~ $ pwd
/home/pi
pi@raspberrypi ~ $ vi .bashrc
pi@raspberrypi ~ $ diff .bashrc /etc/skel/.bashrc
85c85
< alias ll='ls -l'
---
> #alias ll='ls -l'
pi@raspberrypi ~ $ alias ll='ls -l'

sl

1台目と同じ。
http://d.hatena.ne.jp/KuroNeko666/20150307
やっぱり sl コマンドは入れておく。


静的IPアドレス設定(ボンディング設定)

おもちゃ用途で使うと決めたんだけど、IPアドレスは固定した方が使いやすい気がする。
かつ、リモートで扱えるようにもしておきたい。
普段はワイヤレスで、なにか問題が起きたらケーブルを繋いで試すようなイメージ。
LANケーブルがあるだけで、自由度が極端に減る感じ。


っということで、ボンディングにチャレンジ。
なんでサーバ用途の Raspberry Pi でボンディングしないかっていうと、単にまだそこまで重要じゃないから。
動かしてるサービスも NTP と DLNA くらい?


現状は2台目に DHCP で割り振られた IP アドレスへ ssh 接続で操作しているので、下手に USB LAN を差すとループしそうな感じ。


USB NIC (PLANEX 無線LAN子機 (USBアダプター型) ハイパワーアンテナモデル 11n/g/b 300Mbps GW-300S KATANA 刀2.4 ←僕じゃダメだった)


USB NIC (BUFFALO 無線LAN子機 コンパクトモデル 11n技術・11g/b対応 WLI-UC-GNM)


ボンディングは、bond0 という仮想的な NIC を作って、物理 NIC を割り当てるイメージ。

pi@raspberrypi ~ $ sudo apt-get install ifenslave
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'ifenslave' の代わりに 'ifenslave-2.6' を選択しています
以下のパッケージが新たにインストールされます:
  ifenslave-2.6
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
20.9 kB のアーカイブを取得する必要があります。
この操作後に追加で 98.3 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main ifenslave-2.6 armhf 1.1.0-20 [20.9 kB]
20.9 kB を 1秒 で取得しました (19.8 kB/s)
以前に未選択のパッケージ ifenslave-2.6 を選択しています。
(データベースを読み込んでいます ... 現在 76969 個のファイルとディレクトリがインストールされています。)
(.../ifenslave-2.6_1.1.0-20_armhf.deb から) ifenslave-2.6 を展開しています...
man-db のトリガを処理しています ...
ifenslave-2.6 (1.1.0-20) を設定しています ...
update-alternatives: /sbin/ifenslave (ifenslave) を提供するために 自動モード で /sbin/ifenslave-2.6 を使います
pi@raspberrypi ~ $
pi@raspberrypi ~ $ sudo cp -p /etc/network/interfaces /etc/network/interfaces.$(date +'%Y%m%d')
pi@raspberrypi ~ $ ll /etc/network/interfaces*
-rw-r--r-- 1 root root 171  216 22:10 /etc/network/interfaces
-rw-r--r-- 1 root root 171  216 22:10 /etc/network/interfaces.20150323
pi@raspberrypi ~ $ sudo vi /etc/network/interfaces
pi@raspberrypi ~ $ cat /etc/network/interfaces
# Loopback network interface
auto lo
iface lo inet loopback

# Primary network interface
auto eth0
iface eth0 inet manual
 bond-master bond0

# Wi-Fi network interface
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 bond-master bond0
 bond-give-a-chance 10

# bonding network interface
auto bond0
iface bond0 inet static
 address 192.168.1.102
 netmask 255.255.255.0
 gateway 192.168.1.1
 bond-mode 0
 bond-miimon 100

pi@raspberrypi ~ $ sudo /etc/init.d/networking restart
[warn] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfaces ... (warning).
[....] Reconfiguring network interfaces...ifup: interface eth0 already configured
Failed to enslave wlan0 to bond0. Is bond0 ready and a bonding interface ?
wpa_supplicant: /sbin/wpa_supplicant daemon failed to start
run-parts: /etc/network/if-pre-up.d/wpasupplicant exited with return code 1
/etc/network/if-up.d/ifenslave: 30: /etc/network/if-up.d/ifenslave: cannot open /sys/class/net/wlan0/master/bonding/primary: No such file
/etc/network/if-up.d/ifenslave: 11: /etc/network/if-up.d/ifenslave: cannot create /sys/class/net/wlan0/master/bonding/primary: Directory nonexistent
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
Device "wlan0" does not exist.
done.
pi@raspberrypi ~ $


…あれ?
なんでセッションが切れない?
とりあえず、今度は USB-NIC を差してチャレンジ。

pi@raspberrypi ~ $ sudo /etc/init.d/networking restart
[....] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfaces ...[warn (warning).
[....] Reconfiguring network interfaces...

今度は切れた。
コマンドプロンプトping 192.168.1.102 を実行してみると、きちんと応答が返る。
TeraTerm でアクセスすると、きちんとログインできたけど…さて。

pi@raspberrypi ~ $ ifconfig
bond0     Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.1.102 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  メトリック:1
          RXパケット:1241 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:151 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:64355 (62.8 KiB)  TXバイト:27523 (26.8 KiB)

eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  メトリック:1
          RXパケット:42716 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7271 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:33283873 (31.7 MiB)  TXバイト:941519 (919.4 KiB)

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1 マスク:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  メトリック:1
          RXパケット:33 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:33 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:6340 (6.1 KiB)  TXバイト:6340 (6.1 KiB)

pi@raspberrypi ~ $


service networking reload でも良いかもしれないけど、一応再起動しておいた。
コマンドプロンプトping を叩き続け、応答があったところで TeraTerm によるアクセスを行う。
うん、無事にログインできた。


でも /var/log/messages には bond0: interface wlan0 does not exist! と出てた。
無線 LAN は認識されてない…
ここから wlan0 の設定を見直していく。


結論から言うと、別な USB-NIC を使って接続することにした。

  1. ドライバがどうやら NG なようだと見切りをつけて
  2. 差替えて、
  3. startx した GUI から Wi-Fi を認識させて、
  4. 設定を最初からやり直して、
  5. Bonding した。


なんと、夢中になってしまったおかげでメモを取ってないときた。

pi@raspberrypi ~ $ ifconfig
bond0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:192.168.1.102  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:161726 errors:0 dropped:1564 overruns:0 frame:0
          TX packets:39054 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:35961932 (34.2 MiB)  TX bytes:4269285 (4.0 MiB)

eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:3028 errors:0 dropped:0 overruns:0 frame:0
          TX packets:131 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:144235 (140.8 KiB)  TX bytes:18358 (17.9 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1409 (1.3 KiB)  TX bytes:1409 (1.3 KiB)

wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:158712 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38937 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:35820017 (34.1 MiB)  TX bytes:4252895 (4.0 MiB)

pi@raspberrypi ~ $

で、実際にボンディングされたことを確認する。
コマンドプロンプトping を打ちながら、LANケーブルを抜くと…
ping に応答しなくなる。
ゲッと思っていると、応答が返ってくる感じ。
タイムラグはあるみたい。
TeraTerm も、3秒くらい無応答な時間のあとに、思い出したように続く感じ。


bonding 状況も、きちんと認識されてる。


これは両方接続した状態。

pi@raspberrypi ~ $ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0

Slave Interface: eth0
MII Status: up
Speed: 10 Mbps
Duplex: half
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
pi@raspberrypi ~ $


こちらは LAN ケーブルを抜いた状態…と書こうとして、LANケーブルをおもむろに抜いたところ、なんと接続断。
TeraTerm が落ちちゃった…
ping -t 192.168.1.102 してた状況は、こんな感じ



1回目は成功したんだけどなぁ…
復旧はしたものの、切り替えに結構時間がかかるもんだと覚えておかなきゃなぁ


気を取り直して、Wi-Fi から接続して確認。

pi@raspberrypi ~ $ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
pi@raspberrypi ~ $

ちょっとズッコケた部分はあったけど、きちんと切り替えが出来てたから…まぁ…よしとするぅ?



そうそう、やりたかったことは出来たから、ヨシ。完全には出来てない
電源だけ何とかすれば、あとはどう配置してもイイっていうのは、煩わしさから解放された気分。
ブレッドボードの配置とか、すごく楽。




…ここからちょっと追記(2015.3.26)。
この日記に書いてある bond-mode 0 だけど、これってラウンドロビン設定なんだね。


なんでインターネットに公開されてる Raspberry Pi のボンディング設定は、ラウンドロビンばかりなんだろう?
Raspberry Pi の USB ポートは、LAN カードの内蔵ハブを使ってるから、多重化したところで速度なんて変わらないのに。



僕がやりたいのは active-backup なので、設定自体が目的に沿わない。
つまり bond-mode 1 がやりたいことなので、あとで書き直すつもり。


なかなか active-backup モードになってくれなくて、試行錯誤、暗中模索、五里霧中な進捗具合。
Raspberry Pi 設定としては active-backup モードな記事が見当たらなくて、debian の設定方法まで探してトライアンドエラー


あと、現状の設定だと Raspberry Pi を再起動した瞬間に、家庭内ネットワークの arp テーブルから消えちゃって、Raspberry Pi はインターネットに繋がる(デフォルトゲートウェイとは繋がっている)のに、Windowsから ping を送っても応答がないとか来てる。
一度コンソールで Raspberry Pi にログインして Windows 端末に向かって ping を打つと、ようやく Windows から ssh でログインできるという、意味のわからない環境になってしまっている。
その ping を打った時点で arp コマンドに Windows 端末の IP アドレスが載るんだよねぇ…。


心が折れそう。