Edited at

【ヘッドレス】Raspberry Pi 3 セットアップ for macOS

散々同様の記事は投稿されていますが,備忘録として書き残します.

今回は,Raspberry Piにヘッドレス(=ディスプレイなし)でセットアップします.(リンクの一部にアフェリを含みます.)


環境など


  • 作業 PC: MacBook Pro (macOS Mojave 10.14.5)

  • 本体: Raspberry Pi 3 MODEL B (Raspberry Pi 3 MODEL B+ でも同様でした)

  • SDカード: TOSHIBA EXCERIA microSDHC16GB Class10 UHS-1対応 最大読込速度48MB/s 防水/耐X線 海外パッケージ品 THN-M301R0160A4


    • 用途的に容量は少なくてよかったので,16GBを選択しました.

    • この商品は日本国内でのサポートは受けれないので注意しましょう.



  • 書き込むOS: Raspbian Buster Lite (2019-06-20)


    • Raspbian Buster with desktop and recommended software でも Raspbian Buster with desktop でも,Stretch 系でも,流れは変わりません


      • Raspbian * Lite: 最小限のイメージ.CUI 環境.

      • Raspbian * with desktop: デスクトップ付きイメージ.

      • Raspbian * with desktop and recommended software: デスクトップ付き,推奨ソフトウェア入り.






やること


  • OSのダウンロード

  • OSをSDカードに書き込む

  • SSHの有効化,Wi-Fiの設定

  • Raspberry Piの起動

  • Raspberry Piの設定


OSのダウンロード

今回は,Raspbian (Raspbian Buster Lite) をインストールする.1

Download Raspbian for Raspberry PiからRaspbian Buster LiteをDownload ZIPをクリックして,ダウンロードするか,$wget https://downloads.raspberrypi.org/raspbian_lite_latestでダウンロードしても良い.

ダウンロードは結構時間がかかるので,気長に待つ.

スクリーンショット 2019-07-11 21.00.57.png

ダウンロードが完了したら,一応ファイル破損がないか確かめる:

$ openssl sha256 2019-06-20-raspbian-buster-lite.zip

SHA256(2019-06-20-raspbian-buster-lite.zip)= 9009409a9f969b117602d85d992d90563f181a904bc3812bdd880fc493185234

一致しているので,大丈夫ですね👌.


OSをSDカードに書き込む

まずはzipファイルの解凍する:

$ unzip 2019-06-20-raspbian-buster-lite.zip

その後,純正の変換器(USB-C Digital AV Multiportアダプタ)と,サンワサプライのUSB2.0カードリーダ(ADR-ML158K)を使って,microSDHCを挿入する.

(もちろん別ので良い)

そしたら,SDカードのマウント先を確認する:

$ diskutil list

次にSDカードをFAT32でフォーマットする(今回はSDカードのマウント先が/dev/disk2という想定):

$ diskutil eraseDisk FAT32 RPI /dev/disk2

フォーマット後,ddコマンドでの書き込みのため,SDカードをアンマウントする:

$ diskutil unmountDisk /dev/disk2

最後に,ddコマンドでSDカードにOSイメージを書き込みます:

$ sudo dd bs=1m if=2019-06-20-raspbian-buster-lite.img of=/dev/rdisk2 conv=sync


SSH,Wi-Fiの設定

まずは,cdコマンドで移動:

$ cd /Volumes/boot


SSHの有効化

起動時にsshを有効にするため,書き込んだSDカードの最上位にsshという名前の空ファイルを作成する:

$ touch ssh


Wi-Fiの設定

書き込んだSDカードの最上位に,wpa_supplicant.confという名前のファイルを作成する.

このファイルは,起動時に自動でRaspbian上の/etc/wpa_supplicant/wpa_supplicant.confを上書きするようになっている.

上書き後,SDカードの最上位に作成したファイルは削除される.

Wi-Fiのパスフレーズは平文でも保存できるが,256bitのハッシュ化されたキーを保存した方が良い.

キーはWPA key calculation: From passphrase to hexのページにアクセスし,Network SSIDとWPA passphraseを入力し、Calculateボタンをクリックすると得ることができる.

WPA key calculation

bac3cdf26d42c3a61fb858ef0295a0166e94f84dbabc1088bfa090cef3cb1dcbのようなキーが得られる.

これを元にファイルを作成する:

$ nano wpa_supplicant.conf


wpa_supplicant.conf

country=JP

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="abc"
psk=bac3cdf26d42c3a61fb858ef0295a0166e94f84dbabc1088bfa090cef3cb1dcb
}


SDカードの取り外し

設定が終わったら,以下を実行したのち,SDカードを取り外す:

$ cd

$ diskutil eject /dev/rdisk2


Raspberry Piの起動

SDカードを取り外したら,Raspberry Piに挿入し,電源を接続する.

電源接続後,sshコマンドでRaspberry Piに接続する:

$ ssh pi@raspberrypi.local

ユーザpiの初期パスワードはraspberry


パスワードの設定,ユーザの追加

ログインできたら,まずはユーザpiのパスワードを変更する:

$ passwd

合わせて,ユーザrootのパスワードを設定する:

$ sudo passwd

また,可能であれば,セキュリティのため,作業用に別のユーザを作ることをオススメする.

ユーザを追加する:

$ sudo useradd --groups adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio -m yk

グループはユーザpiのグループを参考に設定した.

ユーザpiのグループの確かめ方は次の通り:

$ groups pi

追加したユーザにもパスワードを設定する:

$ sudo passwd yk

最後にユーザpiを無効化し,切断する:

$ sudo passwd --lock pi

$ exit

以降の作業は新しく追加したユーザで行う:

$ ssh yk@raspberrypi.local

流石にshでの作業は辛いのでシェルをbashに変更する:

$ sudo chsh -s /bin/bash yk

変更後は一旦切断してから接続し直す:

$ exit

$ ssh yk@raspberrypi.local


Raspberry Piの設定


初期設定

まずは,初期設定を行う:

$ sudo raspi-config


  1. 「8 Update」を選択し,ツール自体を最新にしておく.

  2. 「2 Network Options」の「N1 Hostname」を選択し,ホスト名を設定する.

  3. 「4 Localisation Options」の「I1 Change Locale」を選択し,言語の設定をする.
    ここでは,あくまで私の設定を紹介する.
    まぁ,趣味の問題なのでみなさん思い思いに設定してください.


    1. 「en_GB.UTF-8 UTF-8」でスペースキーを押し,選択解除

    2. 「en_US.UTF-8 UTF-8」でスペースキーを押し,選択

    3. 「ja_JP.UTF-8 UTF-8」でスペースキーを押し,選択

    4. Tabキーを押し,「Ok」を選択

    5. 「ja_JP.UTF-8」を選択し,「Ok」を選択




  4. 「4 Localisation Options」の「I2 Change Timezone」を選択し,タイムゾーンの設定をする.


    1. 「Asia」,「Tokyo」を選択



  5. 「4 Localisation Options」の「I4 Change Wi-fi Country」を選択し,使用する国を設定する.


    1. 「JP Japan」を選択



  6. 「4 Localisation Options」の「I3 Change Keyboard Layout」を選択し,キーボードの設定をする.(必要であれば.今回はパス.)

  7. 「Finish」を選択して初期設定は終了


アップデートの実施

とりあえず,さっさとアップデートしてしまう:

$ sudo apt update       # パッケージリストの更新

$ sudo apt upgrade # パッケージの更新
$ sudo apt dist-upgrade # OSのアップグレード
$ sudo rpi-update # ファームウェアの更新
$ sudo reboot # 反映のための再起動


SSHの設定

鍵でログインする環境にしたい人のみ実行してください。なんのことかわからない方は次のファイヤウォールの設定まで飛ばすことをお勧めします。

認証されたキーのみでログインできるように,rootではログインできないように変更する:

sudo nano /etc/ssh/sshd_config


/etc/ssh/sshd_config

- #PermitRootLogin prohibit-password

+ PermitRootLogin no


/etc/ssh/sshd_config

- #PubkeyAuthentication yes

+ PubkeyAuthentication yes


/etc/ssh/sshd_config

- #PasswordAuthentication yes

- #PermitEmptyPasswords no
+ PasswordAuthentication no
+ PermitEmptyPasswords no


/etc/ssh/sshd_config

- UsePAM yes

+ UsePAM no

そしたら,実際に公開鍵を書き込む


公開鍵を書き込む


スマートに書き込む


手元のPCの環境から

$ ssh-copy-id -i ~/.ssh/id_ed25519 yk@raspberrypi.local



大人しくシンプルに書き込む

$ mkdir ~/.ssh

$ nano ~/.ssh/authorized_keys


~/.ssh/authorized_keys

+ ssh-ed25519 xxxxxxxxx xxx@xxx.local


パーミッションを整える:

$ chmod 0700 ~/.ssh

$ chmod 0600 ~/.ssh/authorized_keys


公開鍵を登録したら…

反映のため,サービスの再起動:

$ sudo systemctl restart ssh

設定にミスがないか確認するため,新しいターミナルでログインテストする.

接続中のを切断すると,設定にミスがあった際に,ログインできず修正できなくなるので注意.


ファイヤウォールの設定

設定しないのは楽でいいですが,やはりセキュリティー的には設定するべきですので,設定します.

iptablesがいちばん有名だとは思いますが,設定がめんどくさい複雑なので,今回はufw (Uncomplicated FireWall)を使用する.

インストール:

$ sudo apt install ufw

ファイヤウォールの状態を確認:

$ sudo ufw status

Status: inactive

インストールした直後は無効になっている.

ファイヤウォールの設定の基本は,

1. 外部からの接続は受け付けない

2. 必要なポートの通信だけ許す

です.

それに従い,今回はローカルのssh接続のみ許可するように設定します:

$ sudo ufw default deny

Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
$ sudo ufw allow proto tcp from 10.0.0.0/8 to any port 22 # 我が家はクラスAにしているだけなので環境に合わせて設定してください.
Rules updated
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active

To Action From
-- ------ ----
22/tcp ALLOW 10.0.0.0/8

これで共通のセットアップは完了です.

あとは,私はzshでも入れてから,色々遊んでみます.


参考





  1. まぁ,今回の私の用途ではGUIはいらないので…