Raspberry Pi と iptables
- Raspbian には iptables は入っている
Raspbian には iptables が標準で入りますが、RHEL 系とは違って /etc/sysconfig/iptables に相当するものがありません。
起動時点で iptables のルールを設定するためには、iptables-persistent というパッケージを別途インストールする必要があります。 /etc/init.d の下に専用のスクリプトを自分で作って突っ込んでいる場合はそれはそれでいいですが…
ここでは、Debian の流儀でちゃんとやります。
まず、現在 iptables のルールが設定されているかを確認しましょう。
# sudo /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
こんな表示だったら、いま設定されているルールはありません。既にルールが設定されている場合は、どこで設定したかを思い出してください。 /etc/rc.local あたりに何か書いてあるかもしれません。
さて、まずは iptables-persistent をインストールします。
# sudo aptitude install iptables-persistent
インストール時点で「Save current IPv4 rules?」「Save current IPv6 rules?」と聞かれますが、どちらも Yes で答えてください。
あとは /etc/iptable/rule.v4 および /etc/iptables/rule.v6 を書き換えるだけです。
iptables-persistent が正常に起動しない場合
# sudo /etc/init.d/iptables-persistent restart [FAIL] Loading iptables rules... IPv4... IPv6...failed.
rules.v4 または rules.v6 のどちらかに記述エラーがあると思われます。ただ、このメッセージからは rules.v4 なのか rules.v6 なのかどちらかわかりません。
/etc/init.d/iptables-restore は、ルールの読み込みを /sbin/iptables-restore と /sbin/ip6tables-restore にやらせています。このどちらかでエラーが起きていると上記の表示が出るので、 --test と --verbose をオプションに付けてテストさせ切り分けをしましょう。
# /sbin/iptables-restore --test --verbose < /etc/iptables/rules.v4 # /sbin/ip6tables-restore --test --verbose < /etc/iptables/rules.v6
# /sbin/iptables-restore --test --verbose < /etc/iptables/rules.v4 # Generated by iptables-save v1.4.14 on Mon Dec 22 14:23:59 2014 iptables-restore: line 2 failed
--test --verbose オプションを付けると、1行ずつ実行しながらエラー時にそこで表示をしてくれます。ちなみに、読み込ませたルールファイルのコメント行も表示してきます。上記の例では、2行目に何かいるということです。このときは2行目だけ改行コードがなぜか CRLF になってしまっていて、それが原因でエラーになってしまっていました。iptables のルールファイルは、行末に CRLF がいるとエラーになるのです…
iptables は他にも「空行は許されるが、スペース文字しかない行は許されない」などもありますので、スペース文字が変なところに隠れていないか気を付けてください。
# /sbin/iptables-restore --test --verbose < /etc/iptables/rules.v4 # Generated by iptables-save v1.4.14 on Mon Dec 22 14:23:59 2014 Flushing chain `INPUT' Flushing chain `FORWARD' Flushing chain `OUTPUT' # BASIC # Service # Asterisk # LOG # DROP AND REJECT # Completed on Mon Dec 22 14:23:59 2014 # Generated by iptables-save v1.4.14 on Mon Dec 22 14:23:59 2014 Flushing chain `PREROUTING' Flushing chain `INPUT' Flushing chain `OUTPUT' Flushing chain `POSTROUTING' # Completed on Mon Dec 22 14:23:59 2014
うまくいけば、コメント行と、ルールのフラッシュ内容がこんな形で出てきます。あとはもう一度、 sudo /etc/init.d/iptables-persistent restart してあげれば大丈夫でしょう。
Raspberry Pi と NTP または RTC の話
Raspberry Pi には RTC が載っていない
意外に忘れ去られがちなのだが、実は Raspberry Pi には一貫して RTC モジュールが載っていない。標準提供されている Raspbian を使う分には ntpd が動いているのであまり気にしなくても(internet に常時接続されている環境なら)いいのだが、そうでない場合は ntpd の設定を忘れると結構悲惨なことになりかねない。
RTC モジュールを載せる場合
たまにオフラインでも使用する場合がある、という場合は、RTC モジュールを載せてしまうという手もある。
h's IT Notes: Raspberry Piにリアルタイムクロックをインストールする
GPIOポートのピンアサインは(このモジュールを使う場合においては)同じなので、 Type B、Type B+ どちらでも使用できる。
Raspberry Pi とバイパスコンデンサの話
前提
Raspberry Pi を Internet に接続する前提で Type A を常用している人はあまりいないと思うので、ここでは Type B と Type B+ の話を前提とする。
Type B
Type B にはちょっと困ったことがある。特に散々語られたのが「USBデバイスをつなげると Raspberry Pi が fault する」というやつだ。再起動すればまた動作するのだが。で、原因は「USBデバイスを接続すると、そのデバイスをつないだ途端に端子電圧が低下する」という、これまた困った現象であった。原因は、Type B は USB ポートへの給電能力がしょぼいことにある。
これまでに先人が主な対策として挙げられてきたのは、下記の2点。
- セルフパワーで動作する USB ハブを介する
- バイパスコンデンサを増強する
難易度を考えると 1. のほうがお手軽なのだが、根本的な対処を考えると 2. をやっておいたほうがいいかもしれない。(またはこの問題が起こりにくい Type B+ を使うというのも手だ。価格差もあまりない。)
Type B 買っちゃったよ! という人は、下記を参考にしてバイパスコンデンサの増設または交換をするといいかもしれない。(はんだごてを扱ったことがない人は素直に諦めて B+ を買うか、または今からはんだごての腕を磨くしかないかもしれないが)
私もRaspberry Piのコンデンサを交換してみた。 - じとめすきーの覚え書き
ただし、どちらの方法にも留意点がある。まずバイパスコンデンサの増設。既設のコンデンサを剥す必要がないので、はんだ付けに失敗する可能性は低いのだが、問題はケースに収めようとしてコンデンサの足を曲げると、その真下にあるのはLDOレギュレータなのである。LDOレギュレータは安価なのだがとにかく変換効率が悪く、おそらく四分の一程度が熱として放出されてしまっている。
http://blog.minicube.net/2013/01/raspberry-pi33vldo.html
つまり、このLDOレギュレータの熱で電解コンデンサを炙っちゃうことになるのだ。放熱対策をしっかりやる必要があるだろう。
次に既設のコンデンサを剥す場合。これはもうご紹介先のブログの記事の通り、うまくやらないとランドを剥いでしまう可能性があるので、はんだごてをうまく使える人でないとちょっとおすすめできない。ただ、この方法でやればLDOレギュレータで炙られることはないので、長期運用を考えるならこちらのほうがよい。
Type B+
Type B+ は LDOレギュレータではなくスイッチングレギュレータに変更され、そのせいか Type B で目立っていた電源の問題はかなり影をひそめた。ひとつだけ気を付けなければならないのは、USBポートへの給電能力自体はそれほど向上していないにUSBポートだけは4つへ倍増してしまったので、「つなぎ過ぎればアウト」というのはあまり変わらない。4つあってもなあ、と思うのだが…
Raspberry Pi と玄箱HG とのベンチマーク比較
この二つを比較したベンチマークがそういえばなかったな、と思い出したので UnixBench をとってみた。いや、今更玄箱HGでベンチマークとる人もいないか…
玄箱HG
HDD は Seagate ST340015A。実はこのディスク、玄箱HGと同様10年きっちり動き続けた。よく動いてるなと感心する。
======================================================================== BYTE UNIX Benchmarks (Version 5.1.2) System: kurohg: GNU/Linux OS: GNU/Linux -- 2.4.17_mvl21 -- #24 2004年 10月 19日 火曜日 17:17:03 JST Machine: ppc (unknown) Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968") CPU 0: (173.7 bogomips) 03:27:36 up 6 days, 4:06, 1 user, load average: 0.59, 0.26, 0.10; runlevel ------------------------------------------------------------------------ Benchmark Run: Thu Sep 11 2014 03:27:36 - 03:56:03 1 CPU in system; running 1 parallel copy of tests Dhrystone 2 using register variables 511136.7 lps (10.1 s, 7 samples) Double-Precision Whetstone 135.4 MWIPS (10.0 s, 7 samples) Execl Throughput 154.8 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 32450.8 KBps (30.1 s, 2 samples) File Copy 256 bufsize 500 maxblocks 11691.5 KBps (30.1 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 51555.6 KBps (30.1 s, 2 samples) Pipe Throughput 109310.8 lps (10.1 s, 7 samples) Pipe-based Context Switching 52269.0 lps (10.1 s, 7 samples) Process Creation 668.5 lps (30.1 s, 2 samples) Shell Scripts (1 concurrent) 308.1 lpm (60.4 s, 2 samples) Shell Scripts (8 concurrent) 42.5 lpm (60.8 s, 2 samples) System Call Overhead 166635.8 lps (10.1 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 511136.7 43.8 Double-Precision Whetstone 55.0 135.4 24.6 Execl Throughput 43.0 154.8 36.0 File Copy 1024 bufsize 2000 maxblocks 3960.0 32450.8 81.9 File Copy 256 bufsize 500 maxblocks 1655.0 11691.5 70.6 File Copy 4096 bufsize 8000 maxblocks 5800.0 51555.6 88.9 Pipe Throughput 12440.0 109310.8 87.9 Pipe-based Context Switching 4000.0 52269.0 130.7 Process Creation 126.0 668.5 53.1 Shell Scripts (1 concurrent) 42.4 308.1 72.7 Shell Scripts (8 concurrent) 6.0 42.5 70.8 System Call Overhead 15000.0 166635.8 111.1 ======== System Benchmarks Index Score 66.1
Raspberry Pi Type B
使っているのは KINGMAX の 8GB SDHC (一応 Class10のやつ)。おい、長期運用するんじゃないのか。これ。
======================================================================== BYTE UNIX Benchmarks (Version 5.1.2) System: raspberrypi: GNU/Linux OS: GNU/Linux -- 3.12.22+ -- #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 Machine: armv6l (unknown) Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968") CPU 0: ARMv6-compatible processor rev 7 (v6l) (0.0 bogomips) 03:22:47 up 8 min, 1 user, load average: 0.88, 0.79, 0.41; runlevel 2 ------------------------------------------------------------------------ Benchmark Run: Thu Sep 11 2014 03:22:47 - 03:51:02 1 CPU in system; running 1 parallel copy of tests Dhrystone 2 using register variables 1680433.3 lps (10.0 s, 7 samples) Double-Precision Whetstone 268.6 MWIPS (10.0 s, 7 samples) Execl Throughput 234.5 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 40456.9 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 12784.3 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 96520.2 KBps (30.0 s, 2 samples) Pipe Throughput 171084.9 lps (10.0 s, 7 samples) Pipe-based Context Switching 23291.0 lps (10.0 s, 7 samples) Process Creation 748.3 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 419.5 lpm (60.1 s, 2 samples) Shell Scripts (8 concurrent) 53.2 lpm (60.9 s, 2 samples) System Call Overhead 390523.5 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 1680433.3 144.0 Double-Precision Whetstone 55.0 268.6 48.8 Execl Throughput 43.0 234.5 54.5 File Copy 1024 bufsize 2000 maxblocks 3960.0 40456.9 102.2 File Copy 256 bufsize 500 maxblocks 1655.0 12784.3 77.2 File Copy 4096 bufsize 8000 maxblocks 5800.0 96520.2 166.4 Pipe Throughput 12440.0 171084.9 137.5 Pipe-based Context Switching 4000.0 23291.0 58.2 Process Creation 126.0 748.3 59.4 Shell Scripts (1 concurrent) 42.4 419.5 98.9 Shell Scripts (8 concurrent) 6.0 53.2 88.7 System Call Overhead 15000.0 390523.5 260.3 ======== System Benchmarks Index Score 95.1
Index Score で見れば玄箱HGの4割増し程度の性能である。性能だけを考えれば、普通にどこかの安いVPSでも借りた方がよろしい。特に Web がらみは。ただ、自分専用のメールサーバをやらせるとか簡単なスクリプトを試すとか、そういう目的であれば十分に使える。
はじめに
Raspberry Pi が発売されてからそれなりの年月が経ちましたが、もともとが教育用コンピュータであるという位置づけ、そしていろいろなことで遊ぶという用途が喧伝されたことから、Raspberry Pi を長期運用するということがあまり語られていないように思います。そもそもの用途とちゃうやろ、と言われるとそれまでなのですが。
ただ、自分は Raspberry Pi をこれまで使ってきた玄箱HG(結局10年ほど使ってきたことになります。実際にはまだ動いています)の代わりとして使いたいという気持ちがあるので、Raspberry Pi もまた長期にわたって使い続けたいと思っております。
このblogが、同じく Raspberry Pi を長く使い続ける方のご参考になれば幸いです。