USB 1本とSDカードライタだけでできるUSB OTGを用いたRapsberry Pi Zero WH のセットアップ

以下，Raspberry Pi Zeroと書くのは長いため，RPZと省略する場合があります．

Macの場合とWindowsの場合両方に対応しています

# 1. Raspberry Pi Zero のセットアップ
USB 1本とSDカードライタだけでできるRaspberry Pi Zeroのセットアップ方法を紹介します．

## 1.1 OSのインストール

### 1.1.1 OSのダウンロード
Raspberry Pi専用のOSであるRaspberry Pi OS(旧Raspbian)は，[公式サイトのダウンロードページ](https://www.raspberrypi.org/downloads/raspberry-pi-os/)からダウンロードできます．しかし，海外サーバーは遅いため，日本にあるミラーサーバーを利用しましょう．

+ [Raspberry Pi OS Full](http://ftp.jaist.ac.jp/pub/raspberrypi/raspios_full_armhf/)
+ [Raspberry Pi OS with desktop](http://ftp.jaist.ac.jp/pub/raspberrypi/raspios_armhf/)
+ [Raspberry Pi OS Lite](http://ftp.jaist.ac.jp/pub/raspberrypi/raspios_lite_armhf/images/)

WITH DESKTOP版とLITE版の違いは主にデスクトップ環境の有無です．Full版はWITH DESKTOPにさらにおすすめのソフトウェアが付属したものです．これらは後からでもインストールできます．自分の目的にあったものを選びましょう．サーバーやIoTデバイスを作る場合は，LITEで十分でしょう．今回は，IoTデバイスを作りたいので，LITEを選択します．

<img width="1306" alt="Index_of__pub_raspberrypi_raspbian_lite_images_raspbian_lite-2018-03-14.png" src="https://qiita-image-store.s3.amazonaws.com/0/74646/608a8446-5356-4d58-2253-336a8deb66f1.png">

最新のフォルダを開き，`<日付>-raspios-buster-armhf.zip`または`<日付>-raspios-buster-lite-armhf.zip`をダウンロードします．容量が大きなファイルなので，環境にもよりますが10分前後かかります．

### 1.1.2 OSの書き込み
最近になって，公式のOSをSDに書き込むためのソフトが発表されました．今回はそれを使用します．

[公式のダウンロードページ](https://www.raspberrypi.org/downloads/)

からお使いのOSにあった**Raspberry Pi Imager**をダウンロードします．Windows, Mac, Linux版が用意されています．指示に従ってインストールしてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/3eb9316e-eb86-879e-9607-d654ad1c6a8f.png)

実行すると上のような画面が表示されます．

#### **CHOOSE OS**を選択し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/6368a672-7c7e-7c9c-32ec-196528c8f869.png)

#### **Use custom**を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/b7b894da-f162-0cf1-3889-3db8ee7550ab.png)
先ほどダウンロードした`<日付>-raspios-buster-armhf.zip`というようなファイルを選択します．.imgを選択しろと書いてありますが**.zipファイルのまま**で問題ありませんでした．

#### **CHOOSE SD CARD**を選択し，SDカードを選択します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/4eb79caf-f505-e7fd-157f-3d9a9a58a388.png)
SDカード以外も表示されるので，**間違いがないかよく確認**してください．間違えると**OSや大事なデータが消える**可能性があります．

#### **WRITE**を選択し書きこみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/a8712537-4cde-498a-c564-0bb17741e558.png)
10分ほどかかるので，紅茶でも飲みながらゆっくり待ちましょう．

## 1.2 パソコンからSSH接続しよう
### 1.2.1 USB On-the-Go Ethernetとして認識させる
まず，Raspberry Pi ZeroとUSBでインターネット接続できるように，SDカードの中身を書き換えていきます．SDを**挿し直す**と，`boot`という名前で認識されます．その中にある，`config.txt`というファイルの一番下に下記の行を追加しましょう．

```config.txt
#下記の行を一番下に追加
dtoverlay=dwc2
```

次に，`commandline.txt`を以下に置き換えましょう．
`rootwait`の後に `modules-load=dwc2,g_ether`が追加されています．

+ Raspbian WITH DESKTOPの場合

```commandline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=15ca46a5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles
```

+ Raspbian Liteの場合

```commandline.txt_for_Raspbian_Lite
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=a8fe70f4-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
```


### 1.2.2 SSH接続を許可する
`boot`の直下に`ssh`という空のファイルを置くことによって，ssh接続ができるようになります．
テキストエディタで空のファイルを`boot`に`ssh`という名前で保存しましょう．このとき，`.txt`などの拡張子が**付かないように**注意してください．

また，このファイルは一度OSを起動すると消えますが，設定は反映されているはずです．安心してください．

### 1.2.3 PCに接続しよう
SDカードをRPZに差し込みます．USB A-MicroB(下図のUSBケーブル)でPCに繋ぎましょう．充電用のケーブルは通信をすることができません．**データ転送用**のケーブルを用意してください．
![使用するUSBケーブル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74646/a89a59b2-7add-0899-4591-8e9a0b0b1349.jpeg)

RPZには`PWR IN`と`USB`と書かれた2つのUSBポートが有りますが，`PWR IN`は給電専用です．必ず`USB`と書かれたポートを使用してください．そうしないとUSBを通してインターネット接続をすることができません．
![USB.png](https://qiita-image-store.s3.amazonaws.com/0/74646/d4754e5e-d4da-97fa-8163-5ff7c742c3c0.png)

RPZが起動し始めます．起動が終わるまで少し待ちましょう．緑のLEDが点滅せずに点灯するようになったら起動が完了しています．初回はかなり時間がかかるので，気長に待ちましょう．

### 1.2.3 ドライバの設定をしよう

##### ドライバの設定
COMポートとして認識されているRPZをネットワークデバイスとして認識させるために，ドライバを変更します．下記のドライバをダウンロードして解凍してください．
[RPI Driver OTG](https://caron.ws/wp-content/uploads/telechargement/RPI%20Driver%20OTG.zip)

Windowsロゴを右クリックして、**デバイスマネージャ**を開きます．
![DeviceManager.png](https://qiita-image-store.s3.amazonaws.com/0/74646/a93f07d3-622c-87a6-5a54-87ec0d0d4bb4.png)

ドライバをインストールしない場合はシリアルデバイスとして認識されています．
![serial.png](https://qiita-image-store.s3.amazonaws.com/0/74646/6f019329-99c3-6930-58cf-9e3703fe3148.png)

**USBシリアルデバイス**という項目を右クリックして，**ドライバーの更新**をクリックします．
![driver.png](https://qiita-image-store.s3.amazonaws.com/0/74646/3fb4b011-d6b2-2c2f-3580-dc286a7c17f6.png)

**コンピュータを参照してドライバーソフトウェアを検索** を選択します．次へを押します．
![reference.png](https://qiita-image-store.s3.amazonaws.com/0/74646/f3754f2a-811d-ce10-a0be-391cf38256f4.png)

先程ダウンロードしたzipファイルを**解凍した**ディレクトリを指定します．次へを押します．
![referrence2.png](https://qiita-image-store.s3.amazonaws.com/0/74646/a31a5dcd-295e-ab39-ed27-0ace6bb9df79.png)

成功すると．ネットワークアダプターの欄に**USB Ethernet/RNDIS Gadget**が表示されます．
![success.png](https://qiita-image-store.s3.amazonaws.com/0/74646/2aba732b-efc8-1e44-62e3-0239826acc32.png)

デバイスマネージャを閉じましょう．

### 1.2.4 SSH接続しよう

ターミナル，またはパワーシェルで以下のように打つことで、ssh接続することができます．

```console
$ ssh pi@raspberrypi.local
```
初めて接続すると，`Are you sure you want to continue connecting (yes/no)?`と聞かれるので`yes`と入力しEnterを押します．
パスワードを聞かれるので，パスワードを打ちましょう．このとき入力しても何も表示されませんが，きちんと入力できているので最後まで打ってEnterを押しましょう．
初期状態では

```
user name: pi
password: raspberry
```
になっています．

#### トラブルシューティング

sshで接続した際に，以下のようなエラーが出る場合があります．
これは，RPZのIPアドレスが変化した場合などに表示されます．

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address 0000::0000:0000:0000:0000%21
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:******************************************.
Please contact your system administrator.
Add correct host key in /c/Users/****/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/****/.ssh/known_hosts:1
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.
```

以下のコマンドで，ホストの情報を消去することによって再び接続できるようになります．

```shell
$ ssh-keygen -R raspberrypi.local
```

### 1.2.5 シャットダウン，再起動の仕方
コンソールに以下のように打ちます

```shell
# シャットダウン
$ sudo poweroff

# 再起動
$ sudo reboot
```

## 1.3 インターネットに接続しよう
RPZからPCを介してインターネットに接続ができるように設定します．

### 1.3.1 インターネットの共有
#### Macの場合
[]-[システム環境設定]-[共有]を開きます．
下記の画面のようにインターネット共有を選択し，`RNDIS/Ethernet Gadget`にチェックを入れ，`インターネット共有`にチェックを入れます．
<img width="672" alt="共有.png" src="https://qiita-image-store.s3.amazonaws.com/0/74646/39050165-af08-a910-2bca-d5bd38fe8123.png">

#### Windowsの場合
右下の**通知(吹き出しマーク)**をクリックして，**すべての設定**を押します
![setting.png](https://qiita-image-store.s3.amazonaws.com/0/74646/d20be1d5-bd05-989c-acd3-4809229d0e6f.png)

**ネットワークとインターネット**を押します
![internet.png](https://qiita-image-store.s3.amazonaws.com/0/74646/915629ba-3970-9644-9ca0-bc1eeb3bda9b.png)

**イーサネット**を選び，右の欄から**アダプターのオプションを変更する**を押します
![adopter.png](https://qiita-image-store.s3.amazonaws.com/0/74646/02e47110-be37-3d7c-7af0-fd0acc834d44.png)

**表示方法**を**詳細**にします
![view.png](https://qiita-image-store.s3.amazonaws.com/0/74646/81d5f778-8778-af61-d421-1c41b1ce4f65.png)

**デバイス名**が **USB Ethernet/RNDIS Gadget** となっているデバイスの名前を確認します．ここでは，これを「ネットワークA」と呼びます．
![name.png](https://qiita-image-store.s3.amazonaws.com/0/74646/163d6c7d-fe27-8a4d-6a5f-964eca8154e7.png)

**接続**が**インターネットアクセス**になっているものを探します．それを**右クリック**します．
![right_click.png](https://qiita-image-store.s3.amazonaws.com/0/74646/0c59d9c2-3e9e-60e4-b7c1-f587922d7a45.png)

**プロパティ**を選びます
![property.png](https://qiita-image-store.s3.amazonaws.com/0/74646/f28ea87d-b122-e74e-494c-c53607d9f9ef.png)

**共有**タブに移動します
![share.png](https://qiita-image-store.s3.amazonaws.com/0/74646/9d6121aa-b34e-f9c0-ecaf-b4aba85f9e32.png)

**ネットワークをほかのユーザーに...**にチェックを入れ，ホームネットワーク接続で**「ネットワークA」の名前**を選びます．
![homenet.png](https://qiita-image-store.s3.amazonaws.com/0/74646/433ab9f9-7808-8db2-a366-6153e43dd356.png)

OKを押して終了です．


### 1.3.2 インターネット接続のチェック
ssh接続を行った，**raspberry pi上のコンソールで**，以下のコマンドを打ちます．

```shell
$ ping -c 4 8.8.8.8
```

以下のように`0% packet loss`と表示されれば，無事インターネットに繋がっています．

```
$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=6.73 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=18.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=5.90 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=6.46 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 5.907/9.480/18.816/5.398 ms
```

以下のように`100% packet loss`と表示された場合は，うまくインターネットに接続されていません．設定を確認してもう一度やってみましょう．

```
$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 169.254.98.74 icmp_seq=1 Destination Host Unreachable
From 169.254.98.74 icmp_seq=2 Destination Host Unreachable
From 169.254.98.74 icmp_seq=3 Destination Host Unreachable
From 169.254.98.74 icmp_seq=4 Destination Host Unreachable

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3141ms
pipe 4
```

## 1.4 Wifiの設定をしよう
以下のようにコマンドを打ちましょう

```
$ cd ~

# パスワードが履歴に残らないように，ファイルに書く
$ vi pass 

# 設定をファイルに書き出す
$ sudo sh -c 'wpa_passphrase "wifiのSSID" < pass >> /etc/wpa_supplicant/wpa_supplicant.conf'

# 生のパスフレーズがコメントアウトされて書き込まれているので消去する(#psk="**********"という行)
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

# 再起動
$ sudo reboot

# つながったらパスワードファイルを消去
$ rm ~/pass
```

## 1.5 Updateしよう
セキュリティの心配があるため，定期的にソフトウェアをアップデートしましょう．
`$ sudo apt-get update`
`$ sudo apt-get upgrade`






## 参考記事

+ [Raspberry Pi Zero(W)のセットアップ](https://qiita.com/hishi/items/8bdfd9d72fa8fe2e7573)
+ [Raspbian mirrors](https://www.raspbian.org/RaspbianMirrors)
+ [SETTING WIFI UP VIA THE COMMAND LINE](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md)
+ [Raspberry Pi Zeroについて](http://hara.jpn.com/_default/ja/Topics/RaspPiZero.html)