Raspberry Pi のセットアップ時に準備しておくべきもの(1)
前提
この話の前提にあるのは、基本的に手許にあるのは Windows PC だけで、 Linux が動くマシンをほかに用意しているとかそういうことはない、というところにあります。
セットアップ時に必要になるもの・あると便利なもの
- SSH クライアント
Windows PC の上で動作する SSH クライアントであれば基本的になんでもいいです。
- Raspbian のディスクイメージ
Raspbian のディスクイメージは、ダウンロードにかなり時間がかかります。Raspberry Pi を注文したり買いに行く前にダウンロードしておいたほうがいいです。最低でも 1~2 時間くらいは見ておいたほうがいいでしょう。(イメージファイルは zip で圧縮されていますがそれでも 1GB 弱あります。それで 1Mbps 出るか出ないか程度の速度。)
- SD カードリーダー(または microSD カードリーダー)
PC に内蔵されている場合はそれでいいですが、ない場合は用意しておいてください。
- SD カード フォーマッター
SD/SDHC/SDXC用 SDフォーマッター4.0 - SD Association
なくてもいいですが、場合によっては必要になることがあります。あらかじめダウンロードしておいてください。(これもダウンロードに意外に時間が掛かります。)
特に、一度 Raspberry Pi で使った SD カードを他の用途に用いる際、このフォーマッターで初期化する必要があります。(SD カードに複数のパーティションを切った場合、たとえば Windows は先頭パーティションしか認識できない仕様のため)
- Win32 Disk Imager
Win32 Disk Imager プロジェクト日本語トップページ - SourceForge.JP
Raspbian のイメージファイルを SD カードに書き込む際に使います。ダウンロードしたイメージファイルをそのまま SD カードに書き込んでも、 Raspberry Pi は起動してくれません。Win32 Disk Imager で書き込んでください。
- 電源とケース
Raspberry Pi には電源も電源ケーブルも付属してこないので、自分で用意しましょう。あとケースも特に付属しません。ケース使わず剥き身で使う人もいますが、最低でも足(スペーサー)は付けておいたほうがいいと思います…(Type B と Type B+ で基板形状が全然違うので、ケースもそれぞれ異なる点に留意してください)
Raspberry Pi は、 MicroUSB 端子から電源を供給します(MicroUSB 端子自体は電源専用)。最低でも 5V/700mA を安定して供給できる必要があります。個人的には 5V/1A 以上を推奨。
一番手っ取り早いのは、近くのドコモショップか au ショップへ行って「共通ACアダプタ04ください」と店頭で頼むことです。基本的に在庫はあるはずですし、1600円くらいで買えます。下手に安物買うより、これ買った方がいいです。ド安定。(共通ACアダプタ05でもいいですが、あえてこれを買うメリットは特にないです)
安物を買うと、特にケーブルが安物の場合 5W 程度で電圧降下を起こして Raspberry Pi が fault することがあるので注意してください。100均の USB ケーブルとかほんとやめたほうがいいです。大丈夫なやつも結構あるんですが、ハズレかどうかは見た目ではわからないものなので…
- Ethernet ケーブル
Category 5 以上のものなら基本的には何でもいいです。
用意しておくものはそれくらいですかね…
お好みで
- 電動ドライバー・ドリル
たとえばこんなやつ。
Amazon.co.jp | BLACK&DECKER 【かわいいカラーとコンパクトなデザイン】ホームドライバー ピンク/ブラック CSD300TP | DIY・工具 通販
ケースを加工する場合にハンドドリル(手回し)だと正直かなりつらいんで、この手の小型の電動ドライバー・電動ドリルがあるとすごく楽です。ピンバイスとヤスリでひたすら穴を開けていくという手もありますし出来ますが、かなり辛いんでお勧めしません…
なんでこんなことを書いているかというと、Raspberry Pi の放熱対策というものを今後考えるためです。CPU も Ethernet/USB コントローラも結構な熱を持つので。
Raspberry Pi と iptables (2)
いま自分の /etc/iptables/rules.v4 は今こんな感じになっています。SSH は 8022/tcp を使う、OpenVPN を使う、Fusion IP-Phone Smart に Asterisk から接続する、という前提でのフィルタルールです。
*filter :INPUT ACCEPT [4652:603240] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [509:67851] # BASIC -A INPUT -i lo -j ACCEPT -A INPUT -p icmp --icmp-type any -j ACCEPT -A INPUT -p 50 -j ACCEPT -A INPUT -p 51 -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # NetBIOS DROP without LOG -A INPUT -p tcp -m multiport --dports 135,137,138,139,445 -j DROP -A INPUT -p udp -m multiport --dports 135,137,138,139,445 -j DROP -A OUTPUT -p tcp -m multiport --sports 135,137,138,139,445 -j DROP -A OUTPUT -p udp -m multiport --sports 135,137,138,139,445 -j DROP # Dropbox DROP without log -A INPUT -p udp --dport 17500 -j DROP # BOOTP -A INPUT -i eth0 -p udp --sport bootpc --dport bootps -j ACCEPT # Service -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 433 -j ACCEPT # -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8022 -j ACCEPT -A INPUT -p udp --dport 1194 -j ACCEPT # Asterisk -A INPUT -p tcp -s 61.213.230.153 --dport 5060 -j ACCEPT -A INPUT -p udp -s 61.213.230.153 --dport 5060 -j ACCEPT -A INPUT -p udp -s 61.213.230.153 --dport 50600:50900 -j ACCEPT # DROP AND LOG -A INPUT -j LOG --log-level info --log-prefix iptables:DROP: ! -i lo -p tcp -A INPUT -j DROP ! -i lo -p tcp -A INPUT -j LOG --log-level info --log-prefix iptables:DROP: ! -i lo -p udp -A INPUT -j DROP ! -i lo -p udp # REJECT -A INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT *nat :PREROUTING ACCEPT [2394:272073] :INPUT ACCEPT [1625:233719] :OUTPUT ACCEPT [131:9942] :POSTROUTING ACCEPT [131:9942] -A POSTROUTING -o eth0 -s 192.168.253.0/24 -j MASQUERADE #-A POSTROUTING -s 192.168.253.0/24 -o eth0 -j SNAT --to-source 192.168.0.XXX COMMIT
(192.168.0.XXX は、Raspberry Pi 自体の IP アドレス(LAN内)です)
- iptables の DROP ログ
このフィルタルールでは、 DROP の記録をそのまま /var/log/messsage に書くことになります。(--log-level info にした場合、kern.info の扱いになるため)
DROP ログをほかのファイルに出力したい場合は、 /etc/rsyslog.conf を編集してください。別ファイルにした場合はローテートの設定をお忘れなく。
- 「NetBIOS DROP without LOG」節
NetBIOS の内向き・外向き両方向のパケットを drop し、なおかつログに残さない設定です。LAN 内に Windows PC がある場合、NetBIOS 関連のパケットがよく飛んできて /var/log/messages を埋めかねないので、ここではそうしています。実際に設定するかはお好みでどうぞ。
- 「Dropbox DROP without log」節
Dropbox が動作している PC が LAN 内にいる場合、同じく大量のパケットが飛んでくるので、ログに残さず Drop しています。Dropbox 側の設定で Dropbox の「基本設定」→「バンド幅」→「LAN 同期を有効にする」*1をオフにしておけば LAN 内にパケットをばらまくことはなくなりますが、LAN 同期を無効にできない環境の場合は必要になるでしょう。
- OpenVPN を使う場合
NAT の 「-A POSTROUTING -o eth0 -s 192.168.253.0/24 -j MASQUERADE」で、IPマスカレードをやっています。ただし、フィルタ側にも「-A INPUT -p udp --dport 1194 -j ACCEPT」を書いておかないと外から 1194/udp の接続が通らないので忘れないようにしてください。
Raspbian の場合は SNAT でも MASQUERADE でもどちらも使えます。MASQUERADE のほうが一般的なので、そちらを使ったほうがよいでしょう。
- Asterisk を使う場合
61.213.230.153 に対してフィルタを開けているのは、これは Fusion IP-Phone Smart を使うことを前提としています。必ず相手先の SIP サーバに限定してフィルタを開けてください。最近は SIP を狙った不正なアクセスが大変多いので、これをやっておかないとかなり面倒なことになります。
- SSH のポートについて
上記の例では SSH 用に 8022/tcp を使っています。22/tcp は気が遠くなるくらいに不正アクセスの試行が多いので、もはや外に向けて 22/tcp を開けておく必然性はないと思ったほうがいいです。可能であれば、もはや SSH のポートを直接外にさらすのはやめて、 OpenVPN を介するくらいのほうがちょうどいいのかもしれません。
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 を長く使い続ける方のご参考になれば幸いです。