十二月
3
日曜日

Raspberry Pi3 Model Bセットアップ

自宅に常時稼働する小さなLinuxサーバが必要になったのでこれを機にRaspberry Piに手を出してみる。
Raspberry PiをWi-Fi環境下でSSH接続できるようになるところまでのメモ。


購入

amazonからRaspberry Pi3 Model Bと電源セットを購入。

Micro SDカードとカードリーダも持っていないので一緒に購入。

Raspberry Piの起動SDカード作成

MacBook上でRaspberry Piの起動SDカードを作成する。

OSイメージのダウンロード

Raspberry Pi公式サイトダウンロードページからインストールするOSをダウンロードする。

Raspberry Pi用のOSには 公式の RASPBIAN や、サードパーティ製である UBUNTU MATEWINDOWS10 IOT CORE 等がある。
また NOOBS はOSではなくOSのインストーラ。Raspberry Piの起動時にGUIで使ってOSを選択しインストール際に使用する。

今回は RASPBIAN を選択。
GUIは不要なので RASPBIAN STRETCH LITE をダウンロード。

ダウンロード後はzipを解凍しOSイメージファイルを取得する。

2017-11-29-raspbian-stretch-lite.img

OSイメージから起動SDカードを作成する

公式ドキュメントの Installing operating system images on Mac OS を参考に起動SDカードを作成する。

現在のストレージデバイスの確認

まずはMicro SDカードをMacBookに差していない状態でターミナルから diskutil で現状を確認する。

$ diskutil list

/dev/disk0 (internal):
   〜省略〜
   
/dev/disk1 (synthesized):
   〜省略〜

SDカードのストレージデバイスを特定

MicroSDカードリーダーにMicro SDカードをセット。MacBookへ接続。
もう一度 diskutil を実行しSDカードのストレージデバイスを特定する。

/dev/disk0 (internal):
   〜省略〜
   
/dev/disk1 (synthesized):
   〜省略〜

/dev/disk2 (external, physical):
   〜省略〜

自環境では /dev/disk2 が追加されており、サイズもSDカードのサイズと一致しているため /dev/disk2 がSDカードのストレージデバイスと特定。

誤ったストレージデバイスにOSイメージを書き込む事故を起こさないようにデバイスの特定には注意を払う
以降の説明ではSDカードのデバイスは /dev/diskN と表記。

RAWデバイス経由でOSイメージを書き込む

一旦SDカードのストレージデバイスをアンマウントしてから、

$ diskutil unmountDisk /dev/diskN
Unmount of all volumes on diskN was successful

RAWデバイス経由でディスクに書き込む。
RAWデバイス経由であるためデバイスは diskN の先頭に rがついた /dev/rdiskN となる。

sudo dd bs=1M if=<ダウンロードしたOSイメージファイルのパス> of=/dev/rdiskN conv=sync status=progress

自環境では2分ほどで書き込み完了。

Finderから確認すると boot という名前で参照できるようになっている。

Raspberry Piの起動

Raspberry Pi3にSDカード、HDMIディスプレイ、USBキーボード、電源を接続する。
(なおHDMIディスプレイ、USBキーボードが用意できない場合は初回起動時からSSHを有効化しSSH経由で初期設定を行うSSH on a headless Raspberry Pi という方法もある。)

電源を接続するとランプが点灯しRaspberry Piが起動する。

ところが起動中、以下のログが出るあたりでハングアップしてしまう。

 random: crng init done

原因は分からなかったがSDカードへ再度OSイメージを書き直したところ解消。正常に起動できるようになった。

デフォルトユーザでログイン。

ユーザ パスワード
pi raspberry

初期設定

piユーザでログイン後に以下の初期設定を行う。

  • ルートパーティションの拡張
  • デフォルトユーザのパスワード変更
  • ホスト名設定
  • Wi-Fi接続設定
  • 起動時にネットワーク接続完了まで待つようにする
  • ロケールとタイムゾーンの設定
  • SSHサーバを有効化

初期設定は raspi-config コマンドで行う。

$ sudo raspi-config

ルートパーティションの拡張

Raspberry PiのOSイメージはルートパーティションのサイズが小さめになっており、SDカードの容量を使い切ることができていない状態となっている。

Advanced Options A1 Expand Filesystem からルートパーティションのサイズを拡張することができるのだが、自分の利用したOSイメージのバージョン 2017-11-29-raspbian-stretch-lite.img では、

初回ブート時に、

Root partition has been resized.

とメッセージが表示され、特に何もせずともルートパーティションの拡張が行われた状態となった。

デフォルトユーザのパスワード変更

Change User Password から デフォルトユーザ(pi)のパスワードを変更しておく。

ホスト名の設定

Network Options N1 Hostname からホスト名を設定する。

Wi-Fi接続設定

Network Options N2 Wi-fi から 接続するSSIDとパスワードを設定する。

Internationalisation Options I4 Change Wi-fi Country から JP Japan を選択し利用可能なチャネル帯を明示する。

起動時にネットワーク接続完了まで待つようにする

Network Options B2 Wait for Network at Boot を有効にする。

ロケールとタイムゾーンの設定

Internationalisation Options I1 Change Localeja_JP.UTF-8 UTF-8 を追加。
デフォルトを ja_JP.UTF-8 UTF-8 に設定。

Internationalisation Options I2 Change TimezoneAsia Tokyo を設定。

SSHサーバを有効化

Interfacing Options P2 SSH を有効にする。

SSH接続

IPアドレスの固定化

ifconfigで起動したRaspberry PiのIPアドレスとMACアドレスを確認。
自宅のWi-FiルータからこのMACアドレスのIPを固定化する。

この状態で既にRaspberry Piへsshできるようになっているので確認する。

$ ssh pi@<Raspberry PiのIPアドレス>

公開鍵認証を利用する

公式ドキュメントのPASSWORDLESS SSH ACCESSを参考に設定。

Raspberry Pi上で .ssh ディレクトリを作成。

$ cd ~
$ install -d -m 700 ~/.ssh

Macbook側から自分の公開鍵をRaspberry Pi上のデフォルトユーザの.ssh/authorized_keysに追加する。

$ cat ~/.ssh/id_xxx.pub | ssh pi@<Raspberry PiのIPアドレス> 'cat >> .ssh/authorized_keys'

以上でパスワード無しでssh接続ができるようになる。

$ ssh pi@<Raspberry PiのIPアドレス>

SSH経由のパスワード認証を無効化

公開鍵認証ができるようになったので、パスワードによるSSH接続を禁止する。

Raspberry Pi上で /etc/ssh/sshd_config を編集。

$ sudo /etc/ssh/sshd_config

パスワード認証を無効化する。

PasswordAuthentication no

sshdを再起動。

$ sudo systemctl restart ssh.service

以上でRaspberry PiをWi-Fi環境下でサーバとして利用する準備完了。