Raspbian Jessie with PIXELをRaspberry Pi 3 Model Bへセットアップ with macOS Sierra 10.12

# はじめに

所用で常時特定URLのサイト画面を表示するキオスク端末を作りたくなり、余っていたRaspberry Piの中から `Raspberry Pi 3 Model B` を引っ張り出してきて初期セットアップした備忘録です。

![image](https://qiita-image-store.s3.amazonaws.com/0/10852/2265417c-7cd0-bfb1-bb73-b46d967846db.png)

* **本記事は2017/03/04記載時点の情報です。**

# 本手順で使用するもの

* **Raspberry Pi 3 Model B 本体**
    * [RSコンポーネンツで3月末までセールやってる](http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/1225826/) 2017/03/04現在
    * 本手順は、昔大量に購入した際の余りの1台を使用
* **microSDカード**
    * Raspberry Pi 3の Raspbian Jessie with PIXEL インストール用
    * 本手順は、Transcend microSD Card 64GB Class10 TS64GUSDU1E を使用
    * 8GB程度以上のサイズが望ましい
* **HDMIディスプレイ**
    * Raspberry Pi 3画面表示用
    * 本手順は、[plus one HDMI（LCD-10000VH3）](http://www.century.co.jp/end/lcd-10000vh3.html)を使用
* **USB電源**
    * Raspberry Pi 3起動用
    * 本手順は、 Aukey PA-U32 を使用
* **USBキーボード**
    * Raspberry Pi 3操作用
    * 本手順は Lenovo ThinkPad Trackpoint Keyboard を使用
    * マウスも一体化されていて超便利
* **macOS搭載マシン**
    * OSイメージセットアップおよびRaspberry Pi 3リモート操作用
    * 本手順は、[MacBook 12 Early 2016](https://support.apple.com/kb/SP741)を使用
    ![image](https://qiita-image-store.s3.amazonaws.com/0/10852/0b658e4b-fe65-faf6-7051-0b33704ab3ec.png)
    * SDカードリーダーは[ALMIGHTY DOCK C1](http://www.tunewear.com/ja/macbook-pro/74-almighty-dock-c1-4512223683091.html)を使用

# Raspbian Jessie with PIXEL の入手

インストールするOSイメージを入手しないとはじまらないのでOSイメージを入手する

1. [公式サイトのダウンロードページへ移動](https://www.raspberrypi.org/downloads/raspbian/)
2. `Raspbian Jessie with PIXEL` の現時点の最新バージョン `March 2017` を確認
![image](https://qiita-image-store.s3.amazonaws.com/0/10852/0bb1da0f-022e-96bd-bd58-f52cda5470e4.png)
    * ついでに SHA-1 のハッシュ値が `b4c0dedd56c2cfb7913322cadb9ba81e19b6daee` である事を確認（ダウンロード後のファイルが壊れていないか確認する際に使います）
3. ZIP圧縮されたOSイメージのダウンロード
    * `Download ZIP` の場合
        * Download ZIP` を押下してダウンロード
        * 下記の様にとても時間がかかるのでお勧めしません  
        ![image](https://qiita-image-store.s3.amazonaws.com/0/10852/2971100f-bd1a-128f-c5ba-94a561a533ae.png)
        * ダウンロード元URLの `downloads.raspberrypi.org` は見た感じCDNやミラー等を使って無いのでイギリス(UK)から直接ダウンロードしてるっぽい
    * `Download Torrent` の場合
        * ZIPファイルを BiTtorrent のネットワークを使ってダウンロード出来ます
        * ZIPファイルを直接ダウンロードするよりも、こちらの方が平均的に速いです
        * `Download Torrent` を押下して `2017-03-02-raspbian-jessie.zip.torrent` ファイルを入手 
        * BiTtorrent クライアントは何でも良いですが、自分は [Transmission](https://transmissionbt.com/) を利用
        * Transmission がインストール済みなら、ダウンロードした `.torrent` ファイルをダブルクリックすれば `Downloads` フォルダへダウンロードが始まります
        ![image](https://qiita-image-store.s3.amazonaws.com/0/10852/610b582a-87f0-7aeb-07c6-5b3da34749ef.png)
        * 20分程度でダウンロード完了
4. ダウンロードしたZIP圧縮されたOSイメージファイルの確認
    * ここからはターミナル操作によるコマンド入力
    ![image](https://qiita-image-store.s3.amazonaws.com/0/10852/62103ac8-ff18-8157-6ee8-0c18d4840cb9.png)
        * 本手順は、[iTerm2](https://www.iterm2.com/)を使用
    * ダウンロードファイルを確認

    ```zsh:コマンド
    % cd ~/Downloads
    % ls -lth
    total 3075960
    -rw-r--r--@ 1 ysaotome  staff   1.5G  3  4 16:10 2017-03-02-raspbian-jessie.zip
    -rw-r--r--@ 1 ysaotome  staff    30K  3  4 14:40 2017-03-02-raspbian-jessie.zip.torrent
    ```
    * ダウンロードしたZIPファイルのハッシュ値を確認
    
    ```zsh:コマンド
    % openssl sha1 2017-03-02-raspbian-jessie.zip
    SHA1(2017-03-02-raspbian-jessie.zip)= b4c0dedd56c2cfb7913322cadb9ba81e19b6daee
    ```
    * ダウンロード画面で確認した SHA-1 のハッシュ値 `b4c0dedd56c2cfb7913322cadb9ba81e19b6daee` と上記出力が同じならダウンロードが正常に完了
5. zipファイルの解凍
    * `unzip` コマンドでZIPファイルを解凍してOSイメージを入手
    
    ```zsh:コマンド
    % unzip 2017-03-02-raspbian-jessie.zip
    Archive:  2017-03-02-raspbian-jessie.zip
      inflating: 2017-03-02-raspbian-jessie.img
    % ls -lth
    total 11657080
    -rw-r--r--@ 1 ysaotome  staff   1.5G  3  4 16:10 2017-03-02-raspbian-jessie.zip
    -rw-r--r--@ 1 ysaotome  staff    30K  3  4 14:40 2017-03-02-raspbian-jessie.zip.torrent
    -rw-r--r--@ 1 ysaotome  staff   4.1G  3  4 01:24 2017-03-02-raspbian-jessie.img
    ```
    * ZIPファイルを解凍してOSイメージ `2017-03-02-raspbian-jessie.img` を入手

# Raspbian Jessie with PIXEL のインストール(microSDカードへのOSイメージ書き込み)
1. microSDカード接続後にパスが分かる様に接続前の状態を記録
    *  `ls` コマンドでディバイスの状態を確認
    
    ```zsh:コマンド
    % ls -lt /dev/rdisk*
    crw-r-----  1 root  operator    1,   0  2 19 22:08 /dev/rdisk0
    crw-r-----  1 root  operator    1,   1  2 19 22:08 /dev/rdisk0s1
    crw-r-----  1 root  operator    1,   3  2 19 22:08 /dev/rdisk0s2
    crw-r-----  1 root  operator    1,   2  2 19 22:08 /dev/rdisk0s3
    crw-r-----  1 root  operator    1,   4  2 19 22:08 /dev/rdisk1
    ```
2. microSDカードをmacOSへ接続
3. microSDカード接続後のディバイスの状態を確認
    *  `ls` コマンドでディバイスの状態を確認
    
    ```zsh:コマンド
    % ls -lt /dev/rdisk*
    crw-r-----  1 root  operator    1,   5  3  4 17:59 /dev/rdisk2
    crw-r-----  1 root  operator    1,   7  3  4 17:59 /dev/rdisk2s1
    crw-r-----  1 root  operator    1,   6  3  4 17:59 /dev/rdisk2s2
    crw-r-----  1 root  operator    1,   0  2 19 22:08 /dev/rdisk0
    crw-r-----  1 root  operator    1,   1  2 19 22:08 /dev/rdisk0s1
    crw-r-----  1 root  operator    1,   3  2 19 22:08 /dev/rdisk0s2
    crw-r-----  1 root  operator    1,   2  2 19 22:08 /dev/rdisk0s3
    crw-r-----  1 root  operator    1,   4  2 19 22:08 /dev/rdisk1
    ```
    * microSDカード接続前後の状態確認から `/dev/rdisk2` が増えている事を確認（これが接続したmicroSDカードのディバイス名）
    * もしくは `diskutil list` コマンドで確認しても良い
    
    ```zsh:コマンド
    /dev/disk0 (internal):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                         251.0 GB   disk0
       1:                        EFI EFI                     314.6 MB   disk0s1
       2:          Apple_CoreStorage Mac                     250.0 GB   disk0s2
       3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
    
    /dev/disk1 (internal, virtual):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:                            Mac                    +249.7 GB   disk1
                                     Logical Volume on disk0s2
                                     AAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
                                     Unlocked Encrypted

    /dev/disk2 (external, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:     FDisk_partition_scheme                        *64.2 GB    disk2
       1:             Windows_FAT_32 boot                    66.1 MB    disk2s1
       2:                      Linux                         64.2 GB    disk2s2
    
    ```
4. microSDカードのフォーマット
    * `diskutil eraseDisk` コマンドでmicroSDカードをフォーマット 
    
    ```zsh:コマンド
    % sudo diskutil eraseDisk FAT32 RASPBIAN MBRFormat /dev/rdisk2
    Started erase on disk2
    Unmounting disk
    Creating the partition map
    Waiting for partitions to activate
    Formatting disk2s1 as MS-DOS (FAT32) with name RASPBIAN
512 bytes per physical sector
    /dev/rdisk2s1: 125403200 sectors in 1959425 FAT32 clusters (32768 bytes/cluster)
    bps=512 spc=64 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=2 drv=0x80 bsec=125433854 bspf=15309 rdcl=2 infs=1 bkbs=6
    Mounting disk
    Finished erase on disk2
    ```
    * `diskutil list` コマンドでフォーマット後の状態を確認
    
    ```zsh:コマンド
    % diskutil list
    /dev/disk2 (external, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:     FDisk_partition_scheme                        *64.2 GB    disk2
       1:                 DOS_FAT_32 RASPBIAN                64.2 GB    disk2s1
    ```
5. micorSDカードのアンマウント
    * `diskutil unmountDisk` コマンドでmicroSDカードをアンマウント
    
    ```zsh:コマンド
    % sudo diskutil unmountDisk /dev/rdisk2
    Unmount of all volumes on disk2 was successful
    ``` 
6. microSDカードへOSイメージの書き込み
    * `dd` コマンドを使ってmicroSDカードへOSイメージを書き込む
    
    ```zsh:コマンド
    % sudo time dd bs=1m if=2017-03-02-raspbian-jessie.img of=/dev/rdisk2
    load: 2.23  cmd: dd 73453 uninterruptible 0.01u 3.93s
    4190+0 records in
    4190+0 records out
    4393533440 bytes transferred in 216.803254 secs (20265071 bytes/sec)
      217.24 real         0.01 user         4.56 sys
    ```
    * `dd` コマンド実行中に `Ctrl + Shift + t` を押下する事で進捗を確認出来ます
    
    ```zsh:コマンド
    3843031040 bytes transferred in 189.724750 secs (20255823 bytes/sec)
    ```
    * `time` コマンドを入れる事でOSイメージ書き込みかかった時間を計っています
        * `217.24 real` なので、217.24秒＝約3.6分で書き込みました

7. micorSDカードのアンマウント
    * `diskutil unmountDisk` コマンドでmicroSDカードをアンマウント
    
    ```zsh:コマンド
    % sudo diskutil unmountDisk /dev/rdisk2
    Unmount of all volumes on disk2 was successful
    ``` 

# Raspberry Pi 3 Model B を Raspbian Jessie with PIXEL で起動
1. Raspbian Jessie with PIXEL のOSイメージ書き込み済みmicroSDカードを Raspberry Pi 3 Model B のmicroSDカードスロットに差してUSB電源を接続(この時点で起動が始まる)
![image](https://qiita-image-store.s3.amazonaws.com/0/10852/97a6a259-43ff-e7da-1f84-34812e97141a.png)
2. 自動的に初期化が実行される
![image](https://qiita-image-store.s3.amazonaws.com/0/10852/bbe37a10-29ff-0fe0-ea93-4241f8096f93.png)
3. 自動ログインしてGUIが表示されれば起動完了
![image](https://qiita-image-store.s3.amazonaws.com/0/10852/a799628a-efd3-050b-8075-1471b46ceadd.png)

# 初期設定
* ネットワークへ接続
    * 有線LANへ接続する場合は、LANケーブルへ接続すればDHCPでアドレスを取得します
    * 無線LANへ接続する場合は、GUI右上のメニューからWiFiアクセスポイントを見つけて接続すればDHCPでアドレスを取得します
        * 注意）オンボードチップでは2.4GHz帯のアクセスポイントのみ利用可能
* sshサーバの起動
    * GUI左上のメニューから `Terminal` アイコンをクリックして起動
    * Terminal上で `service` コマンドを使ってsshサーバを起動する
    
    ```zsh:コマンド
    pi@raspberrypi: $ sudo service ssh start
    pi@raspberrypi: $ sudo service ssh status     
    ● ssh.service - OpenBSD Secure Shell server
       Loaded: loaded (/lib/systemd/system/ssh.service; disabled)
       Active: active (running) since Sat 2017-03-04 09:57:35 UTC; 14min ago
 Main PID: 1398 (sshd)
       CGroup: /system.slice/ssh.service
               └─1398 /usr/sbin/sshd -D
    
    Mar 04 09:57:35 raspberrypi systemd[1]: Started OpenBSD Secure Shell server.
    Mar 04 09:57:35 raspberrypi sshd[1398]: Server listening on 0.0.0.0 port 22.
    Mar 04 09:57:35 raspberrypi sshd[1398]: Server listening on :: port 22.
    ```
* SSHサーバのfingerprint(フィンガープリント)を確認
    * Terminal上でsshサーバのフィンガープリントを確認
    
    ```zsh:コマンド
    pi@raspberrypi: $ awk '{print $2}' /etc/ssh/ssh_host_ecdsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64
    Kc9SJO0eId9JITuoIul4hY1iCZCL3XXXXXXXXXXXXXX
    ```
    * SSH接続時に接続先が合っているか確認出来る
    * 出力されたフィンガープリント `Kc9SJO0eId9JITuoIul4hY1iCZCL3XXXXXXXXXXXXXX` を覚えておく
    * 参考：[SHA256 ssh fingerprint given by the client but only md5 fingerprint known for server](http://superuser.com/questions/929566/sha256-ssh-fingerprint-given-by-the-client-but-only-md5-fingerprint-known-for-se)

* Raspberry Pi 3 Model B へ割り当てられたIPアドレスを確認 
    * Terminal上で `ifconfig` コマンドを使ってインターフェースのIPアドレスを確認
        * 有線LAN接続の場合
        
        ```zsh:コマンド
        pi@raspberrypi: $ ifconfig eth0
        eth0      Link encap:Ethernet  HWaddr b8:27:eb:aa:bb:cc
                  inet addr:10.10.10.10  Bcast:10.10.10.255  Mask:255.255.255.0
                  inet6 addr: fe80::9858:d9ee:6ccf:cccc/64 Scope:Link
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:3654 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:1433 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:432665 (422.5 KiB)  TX bytes:198914 (194.2 KiB)
        ```
        * 無線LAN接続の場合
        
        ```zsh:コマンド
        pi@raspberrypi: $ ifconfig wlan0
        wlan0     Link encap:Ethernet  HWaddr b8:27:eb:aa:bb:cc
                  inet addr:10.10.10.11  Bcast:10.10.10.255  Mask:255.255.255.0
                  inet6 addr: fe80::a77c:c3a7:a4bb:bbbb/64 Scope:Link
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:7101 errors:0 dropped:2585 overruns:0 frame:0
                  TX packets:1516 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:3552642 (3.3 MiB)  TX bytes:160748 (156.9 KiB)
        ```
* macOSからsshを経由して Raspberry Pi 3 Model B へ接続
    * macOS のターミナル上で `ssh` コマンドを使って接続する
    
    ```zsh:コマンド
    tachikoma% ssh -p 22 pi@10.10.10.10
    The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.
    ECDSA key fingerprint is SHA256:Kc9SJO0eId9JITuoIul4hY1iCZCL3XXXXXXXXXXXXXX.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.10.10.10' (ECDSA) to the list of known hosts.
    pi@10.10.10.10's password:
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
    Last login: Fri Mar  3 16:24:38 2017
    
    SSH is enabled and the default password for the 'pi' user has not been changed.
    This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
    
    pi@raspberrypi:~ $
    ```
    * 接続コマンドは `ssh -p 22 pi@[確認した有線LANもしくは無線LANに割り当てられたIPアドレス]`
        * 上記では `10.10.10.10` としている
    * 最初の接続なので、フィンガープリントの確認がある確認出来たら `yes` を押下
    * ユーザー pi のパスワードデフォルト値は `raspberry`

# まとめ

以上でセットアップ完了。
Raspberry Pi を久しぶりにセットアップしようとしたら、 `Raspbian Jessie with PIXEL` なるものがリリースされていたので備忘録として手順を確認しながらセットアップしてみました。

ご存じの通り、この状態だとパスワードがデフォルト値のままだったり、そもそもユーザー名が推測しやすい状況なので、新しくユーザーを作成しsshkey認証へ変更を行い、デフォルトユーザーの `pi` はログイン出来なくすると良いんじゃないでしょうか。

自分はここから、フルスクリーンでブラウザ表示し、タブで複数URL先を表示したものをラウンドロビンで表示するキオスク端末的なモノを作ろうと思います。