このブログでは書いていませんでしたが、先月Raspberry Piを購入し、すでにディスプレイ、キーボード、マウスを繋いでNOOBS使ってOS入れたり、ちょこっと仕事に使ったりしていました。
ですが、ちょっとした作業のたびにモニタをラズパイに専有されるのがイヤだな〜(Macでメインに使っているし〜)と思っていたのです。
その解決方法が見つかったので、試してみました!
しかも、SDカードへのOSのインストールから、ディスプレイ、モニタ、マウス無しでやってみます。
最終形と問題点
まず最初に、今回のエントリの最終形を図にしておきます。これで分かる人はこの後続く長いエントリは読まなくてOK!

接続の方法としては、Macの有線LANポートを作り、そこにインターネット共有を設定し、Raspberry Piに有線LANで繋いで、SSHで入る、という形になります。これならMacがWi-Fiでインターネットにつながっていたら(普通つながっていますよね?)、MacもRaspberry Piも外のインターネットに繋がるという幸せな状態です!
基本的にはこれでOKなのですが、「ディスプレイ、キーボード、マウスを一度も繋がない」となると問題点が2つ出てきます。
1. SDカードへのOSインストールにNOOBSを使えない
2. RaspberryPiに振られたIPアドレスがわからない
これらへの対応がメインとなります。
SDカードにOSイメージを焼く
まずはMacのブラウザで下記URLにアクセスし、適当なOSイメージをダウンロードします。
・Downloads | Raspberry Pi
迷ったら、Raspbianでいいと思います。
ダウンロードが終わったら、展開すると、.imgという拡張子のファイルが出てきます。
次は、ターミナルを開いて、このファイルがある場所に移動します。
$ sudo dd bs=1ms if=2014-06-20-wheezy-raspbian.img of=/dev/disk1 |
$ sudo dd bs=1ms if=2014-06-20-wheezy-raspbian.img of=/dev/disk1
という感じのコマンドでイメージを焼くのですが、作業環境によってもちろん引数は変わります。
ディスクイメージのところはダウンロードして焼きたいOSイメージを指定します。
最後のofに与える引数はSDカードのデバイス名を与えるわけですが、これは diskutil list というコマンドで確認できます。

例えば、上図のようになっていると思いますが、この場合、/dev/disk1 を指定するわけです。
/dev/disk1 を指定したい場合に、of=/dev/rdisk1 と”r”をつけて指定すると、アンバッファモードでの転送になり転送が高速(約20倍!)になります(2016/08/14 追記。ななしさん、ありがとうございました!)
ddコマンドを実行した時、デバイスがbusyである、というようなエラーが出ることがあります。この場合、マウントを外す必要があるので、「ディスクユーティリティ」アプリ (/Applications/Utilities/Disk\ Utility.app) を起動して、「マウント解除」を行います。(「ディスクを取り出す」ではないので注意!)

されて、これで上記のddコマンドを実行完了したらSDカード作成は完了なのですが、、実は、かなり時間がかかります!
Raspbianをmicro SDカードにコピーしたら、大体1時間ちょっとかかりました。
正直、NOOBSからOSインストールをしたほうが良かったかなー、と若干後悔するレベルです。
しかも、このddコマンド後、進捗状態が表示されません!
(実は、完全にフリーズしたかと思い、キャンセルしたりしてしまいました…)
でも、ご安心を!!
Control+Tを押すと、その時点での転送完了バイト数や平均転送速度が表示されます!
処理が完了すると、特にメッセージもなく、シェルがコマンド待ち状態に戻ります。
(インストール完了後にcheers!的なアイコンを表示する最近のパッケージとは大違いw)
しかし!!何はともあれ、今はモニタとか無しで環境を作るのが第一義にあります!
インターネット共有
ここで、Mac側のインターネット共有の準備をしておきます。
最近のMacBookには有線LANポートがないので、ThunderBoltなどの変換器を用意します。
アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。
最近はUSBハブも付いたものがありますので、これも良さそうです!
アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。
システム環境設定>共有>インターネット共有を選択します。
『共有する接続経路』には外に出ていく経路(今回はWi-Fi)、『相手のコンピュータが使用するポート』にはRaspberry Piがつながるポートを指定します。

最後に、左側の「インターネット共有」の「入」にチェックを入れて完了です。
Raspberry Piを起動、IP探し
さぁ、いよいよ起動です!
SDカードをMacから外して、Raspberry Piに挿します。
LANコネクタにLANケーブルを接続します。
そして電源USBを挿すと、Raspberry Piの起動です!
ACTのLEDがチカチカしはじめます。Raspberry PiがTypeB+ならLANコネクタのLEDも点滅します!
さて、SSHで接続するわけですが、ここでRaspberry Piに振られたIPがわからない、という2つ目の問題にぶち当たります。
これはとりあえず、地道に調べるしかないようです。
まずはifconfig。
ズラズラーっと出ますが、私の環境では下記のような箇所があります。これがThunderboltに挿したLANコネクタのブリッジしているところだと思われます。
$ ifconfig
(略)
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether 3e:1e:33:3e:e9:33
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en4 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 7 priority 0 path cost 0
media: autoselect
status: active |
$ ifconfig
(略)
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether 3e:1e:33:3e:e9:33
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en4 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 7 priority 0 path cost 0
media: autoselect
status: active
192.168.2.1というのがあり、ここから192.168.2.255までがおそらく、割り当てられているわけで、
ここの辺だと当たりをつけます。
さらにもうひとつ、arpというコマンドを使うと良いらしいので試してみると次のような結果が出ました。
$ arp -a
? (169.254.255.255) at ff:ff:ff:ff:ff:ff on en4 [ethernet]
? (192.168.1.1) at 8:21:bb:a7:83:11 on en0 ifscope [ethernet]
? (192.168.1.101) at 2c:bb:e1:23:71:a3 on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (192.168.2.1) at 2e:15:bb:1d:d9:13 on bridge100 ifscope permanent [bridge]
? (192.168.2.2) at 28:17:bb:1f:b6:13 on bridge100 ifscope [bridge]
? (192.168.2.255) at ff:ff:ff:ff:ff:ff on bridge100 ifscope [bridge] |
$ arp -a
? (169.254.255.255) at ff:ff:ff:ff:ff:ff on en4 [ethernet]
? (192.168.1.1) at 8:21:bb:a7:83:11 on en0 ifscope [ethernet]
? (192.168.1.101) at 2c:bb:e1:23:71:a3 on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (192.168.2.1) at 2e:15:bb:1d:d9:13 on bridge100 ifscope permanent [bridge]
? (192.168.2.2) at 28:17:bb:1f:b6:13 on bridge100 ifscope [bridge]
? (192.168.2.255) at ff:ff:ff:ff:ff:ff on bridge100 ifscope [bridge]
これを見ると、どうやら、192.168.2.2っぽいなー、と絞り込めるわけです。
SSHでログインしてみます。Raspbianの初期アカウントとパスワードはpi/raspberryなので、そのとおりに指定ます。
$ ssh pi@192.168.2.2
pi@192.168.2.2's password: <ここでパスワードを入力>
Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l
(略) |
$ ssh pi@192.168.2.2
pi@192.168.2.2's password: <ここでパスワードを入力>
Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l
(略)
無事ログインできました!
抜けるときにはexitします。
電源を切る時には、USBを抜いてもいいし、sudo haltしてもOKです。
SSHで怒られた時
OSを入れなおしたりしてIPアドレスが変わらない場合にはSSHでログインしようとしたときに「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」等の警告文が出ることがあります。
一度保存した鍵が合わなくて、サーバがクラックされているのでは?という親切なメッセージです。
適当なエディタ(emacsでもvimでも)で、Mac上のknown_hostsファイルを編集することで対応出来ます。
$ emacs ~/.ssh/known_hosts |
$ emacs ~/.ssh/known_hosts
今接続しようとしたIPが先頭にある行を探し、その行を削除することで対応は完了です。
もう一度SSHを試してみましよう。
以上!
これで、Raspberry Piを始めるのに、モニタやマウスやキーボードを用意する必要はありません!と言い切れるようになりました!
しかも、持ち歩き時の荷物も減ったので、カフェでラズベリーパイを食べながらRaspberry Piをいじる、なんてこともできますね!
アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。
アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。