Raspberry Piのヘッドレスインストール(macOS)

以前よりも格段にセットアップしやすくなったのでメモ。macOS母艦、Raspberry Pi Zero W前提。

インストール〜SSH接続まで

SDカードにOSイメージを書き込む

公式からOSイメージ(RASPBIAN STRETCH LITE)をダウンロードして解凍してSDカードに書き込む。

// SDカードの場所を確認
$ diskutil list
// SDをアンマウント
$ sudo diskutil umount /dev/disk2s1
// OSイメージを書き込み
$ sudo dd bs=1m if=OSイメージのパス of=/dev/disk2

参考: Raspberry PiにRaspbianをインストールする for Mac OSX – Qiita

SSHの有効化とWifi接続の設定

SSH接続をデフォルトで有効にするためSDカードのルートディレクリにsshという空のファイルを作成。

$ touch /Volumes/boot/ssh

続けてルートディレクトリにWifi接続情報をwpa_supplicant.confに記述する。ルートディレクトリに配置すると、起動時に/etc/wpa_supplicant/wpa_supplicant.confを更新する。Raspberry Piの対応している周波数に注意。(Zero Wは2.4GHzのみ)


country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="ssid"
    psk="password"
}

参考: Raspberry Piの無線LANをmicroSDで設定する – Qiita

macOSのターミナルの設定

2018/11/02追記:この項目のやり方ではMacのターミナル上の日本語入力・表示がややこしくなるので、ターミナルの起動時のロケール環境変数チェックはそのままでMac側で/etc/ssh/ssh_config/に記述されているSendEnv LANG LC_*をコメントアウトするほうがベターだった。(追記終わり)

macOSのターミナルにはローカルで使用している言語の環境変数をSSH接続先のLinuxでも維持してくれるというお節介機能があるので日本語が文字化けする可能性があるのでチェックを外しておく。

Terminal > Preference > Profiles > Advanced > Set locale environment variables on startupのチェックを外す。

参考: MacからSSHしたLinuxで日本語が文字化けする際に確認したいTerminalの設定

Raspberry PiにSSH接続

microSDカードをRaspberry Piに挿して電源につなぐ。いつのまにかAvahiが標準で使えるっぽいのでMacならIPアドレスを調べなくても簡単に接続できる。初期パスワードはraspberry

$ ssh pi@raspberrypi.local

インストール後の各種設定

パッケージ更新

パッケージ管理のアップデートとvimをインストールしておく。

$pi@raspberrypi:~ $ sudo apt-get update
$pi@raspberrypi:~ $ sudo apt-get upgrade
$pi@raspberrypi:~ $ sudo apt-get vim

ログインを公開鍵認証に限定する

ひとまずpiとrootのパスワードを変更。

$pi@raspberrypi:~ $ passwd
$pi@raspberrypi:~ $ sudo passwd root

macOSに戻り、SSHの公開鍵をraspberry piに転送する。ssh-copy-idを使うと楽。

$ ssh-copy-id pi@$raspberrypi.local

再びRaspberry piへ。公開鍵認証でログインできるので/etc/ssh/sshd.configを編集してパスワードログインとrootログインを禁止する。(コメントアウトして書かれているので外して値を変えるなり。)

PasswordAuthentication no
PermitRootLogin no

よりセキュアにするならpiユーザーを削除したり、portを変えるとか適当に。sshd設定を変えたらrestartを忘れずに。

$pi@raspberrypi:~ $ sudo /etc/init.d/sshd restart

Raspberry Piのホスト名を変更しておく

Zeroconfによる接続だとホスト名が衝突しそうなのでホスト名をユニークなものに変更しておきます。/etc/hostnameを変更する。

これでssh ユーザー名@設定したホスト名.localで接続できる。

Mac側で.ssh/configでSSH接続簡略化

さらに接続を簡略化するならmacOSの~/.ssh/configに記述する。ここに接続名と引数を書いておけばssh 任意の接続名だけで接続できるようになるので便利。

Host 任意の接続名
    HostName ラズパイのホスト名.local
    port 22
    User ユーザー名
    Protocol 2
    IdentityFile ~/.ssh/id_rsa