ラズパイのヘッドレス運用手順

ラズパイ4Bも3A+も国内版が出回り始めた。みんな買った?

あらためてラズパイってなに?っていうと、パソコンです。
従来のいわゆるパソコンと比較すると、スマホとかの構造に近いですが、つまるところパソコン。
Linux 動いてパソコンとして利用可能。
3とか4とかだとWebを見るぐらいは全然困らない。
入門用にそっちの売り込みが多いが、みんなパソコンもスマホもあるから別にニーズはない。
うごいたーで終わりだ。

使ってる人はなにがそんなにいいのか。
GPIO という信号端子があるので、ローレベルな各種センサーの類を接続してアレコレできる。
SPIとかI2CとかPWMとかUARTとか。
もちろん USB も音声出力もあるし、さりげなくコンポジットビデオも出力できる。
加えて 5v電源で動く省電力設計(3とか4は要求大きいけど)なので、IoT機器に向いている。

ラズパイ入門書とか見ると、キーボードにマウス、モニタ準備して・・これがデスクトップです!となってる。
あれみんなやっているのか。あれはつらくないか。そこから先に進むのか。
ssh でつないで、使い慣れた端末からパクったコードをコピペが便利なのでないか。
ということで、導入部分長かったが、基本的なヘッドレス(モニタなし)運用を行う手順を書いてみる。

■ブートイメージの準備
ラズパイは MicroSDHC がハードディスクがわりとなっている。
ファミコンカセットのような要領で、複数のOSイメージを挿し替えして使うこともできる。
起動できる MicroSDHC はどうやって作るかというと、ディスクイメージを焼くことでできる。
各種プラットフォームが充実の Etcher がいいです。
https://www.balena.io/etcher/
察しのいい人は気づくと思いますが、焼付や取込ができるので、バックアップやコピーが簡単にできます。
IoT機器は数がモノを言う時あるので覚えておこう。
なお取り込む時に MicroSDHC のサイズそのままになるので、開発時は容量小さいのが便利。
パーテーションテーブルをイジって小さくすることもできるのだけど、都度やるのはめんどくさい。
4GB もあれば十分だが、8GB ぐらいが手に入る限界ですかね。
なお小さいイメージを、容量にあわせてデカくするのは簡単にできる。

焼き付けるディスクイメージはコチラ。
https://www.raspberrypi.org/downloads/raspbian/
Rasbian という Linux を使います。
Rasbian はたくさんある Linux ディストリのうちの Debian という系列になります。
同じ系列には ubuntu もあるので、Debian や ubuntu の記事も参考にしてよい。
ラズパイ向けにいろいろ調整されているのが Rasbian です。無難。
コチラの中で一番小さい「Raspbian Buster Lite」を「Download zip」しましょう。
他のは GUI ベースのリッチな環境です。

■起動前の細工
zip を解凍して Etcher 使って焼き付けて。
これをラズパイに挿して起動・・・だが、ちょっと待った!
ヘッドレス運用するために、ブートイメージに細工します。
イメージを焼き付けた MicroSDHC を PC につなぐと、2つのドライブになります。
FAT32 と ext4 です。FAT32はおなじみのやつですね。
ext4 は Linux で使われるもので、Windows などからは覗けません。
今回は「あるんだなー」ぐらいでよいです。
この FAT32 のドライブに2つほど細工をします。

まず「ssh」というフォルダを作ります。
これによって起動時から sshd が動くので、すぐsshクライアントで接続できるようになります。
これをやらないと起動後に「raspi-config」して設定が必要になる。

次に WiFi に参加する設定をします。
有線LANだとこの細工は必要ないです。
USB接続の NIC を使えば Zero系でもいけます。
でも LAN ケーブル準備するのもめんどいよね。
先程の FAT32ボリュームに「wpa_supplicant.conf」という WiFi 設定のファイルを置きます。
注意点としては「改行コード LF」で記述してください。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1120764.html
下記は2つのAPを設定した場合です。
SSIDとパスワード、その他暗号方法は各自の環境にあわせてください。

////ここから

ctrl_interface=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

# おうちSSID
network={
ssid=”HomeSSID”
psk=”HOMEPASS”
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
group=CCMP
priority=2
scan_ssid=1
}

# WiFiルータSSID(出先用)
network={
ssid=”WiFiAP”
psk=”APPASS”
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
group=CCMP
priority=2
scan_ssid=1
}

///ここまで

この方法だとパスワードが平文で見ただけでわかる方法。
気にする人は wpa_passphrase でハッシュ化されたのを入れましょう。
ちなみにファイルは「/etc/wpa_supplicant/wpa_supplicant.conf」にある。
後日書き換えも可能。

さあコレで起動の準備が完了です。
MicroSDHC をラズパイに挿して電源を投入しましょう。
なお上記の設定は初回起動時のみ有効。
一発目に失敗したらあきらめてキーボードつないでプチプチやりましょう。

■IPアドレスを特定する
起動してどうやってイジるか。
これは ssh クライアントを使って他の PC からイジります。
ssh クライアントはいろいろありますが、chrome拡張の「Secure Shell」がすごく便利です。
動かしてみるとなんとなくわかると思う。
選んでコピー、右クリックでペースト、とだけ覚えておけばよい。
なお ssh クライアントの接続には、ラズパイに割り当てられた IPアドレスが必要。
どうやって確認するのか、という方法です。

1.HDMIモニタを接続する
これが一番簡単。
WiFi とかの設定に失敗していることもあるので、ブートのログが見えるのはよい。
起動時に IPアドレスを表示するスクリプト組まれているので、最後に表示されます。
トラブル解決時にも有効なので、持って歩けるなんらかの手段を持っておくとよい。
USB電源で動く小型レーザープロジェクタは緊急時に重宝している。
https://papalagi.org/blog/archives/94
ただヘッドレスでという企画に、毎回 HDMI をつなぐのはいかがなものか。

2.Bonjour を使う
Mac/iPhoneに標準装備のネットワーク設定自動化機能。
ラズパイに avahi が組んであるので使える。
IPアドレスのかわりに「raspberrypi」と入れればよい。
簡単だけど、Windows の場合は itunes をインストールしないと使えない。
利用範囲や多頭飼育時に問題になり、結果めんどうになるのであまり好きではない。

3.arp-scanを使って探す
MACアドレスの「b8:27:eb」で始まるのがラズパイ。
arp -a で grep して探す。多頭飼育になって複数あると悩む。
あれ?Windows使えたっけ・・と思ったら PowerShell で使えました。
当然ですが USB-NIC を使った場合は別の MAC アドレスなので注意。

4.小型モニタつけちゃう
http://akizukidenshi.com/catalog/g/gP-12031/
OLEDをつけて IPアドレスを表示させる。アレコレ悩まないで済む。
実験はコレつけた古い2B+を未だに使っている。
インターフェースが多いのと電源選ばないあたりがよい。

5.その他
netdiscover で監視しておいて増えたのを確認するとかルータを見るとか。
slackとかにボットでプッシュさせるとか。

■さいごに
これでようやくつながってラズパイをイジれるようになるのだ。
初心者の人にとっては「だからなんだ」という段階のような気もする。
どっとはらい。