自宅に常時稼働する小さなLinuxサーバが必要になったのでこれを機にRaspberry Piに手を出してみる。
Raspberry PiをWi-Fi環境下でSSH接続できるようになるところまでのメモ。
購入
amazonからRaspberry Pi3 Model Bと電源セットを購入。
- Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)
- Raspberry Pi用電源セット(5V 3.0A)-Pi3フル負荷検証済
Micro SDカードとカードリーダも持っていないので一緒に購入。
Raspberry Piの起動SDカード作成
MacBook上でRaspberry Piの起動SDカードを作成する。
OSイメージのダウンロード
Raspberry Pi公式サイトのダウンロードページからインストールするOSをダウンロードする。
Raspberry Pi用のOSには 公式の RASPBIAN
や、サードパーティ製である UBUNTU MATE
、WINDOWS10 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 Locale で ja_JP.UTF-8 UTF-8 を追加。
デフォルトを ja_JP.UTF-8 UTF-8 に設定。
Internationalisation Options I2 Change Timezone で Asia 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環境下でサーバとして利用する準備完了。