RaspberryPiで遊んでみる #1(環境作り)

嫁から少し古めのラズパイを貰いました。興味はあったのですが一度も触ったことがなかったので、年末年始休みの機会にちょっと遊んでみようと思います。

## 1. 必要なものを用意します。
- Raspberry Pi 2 ModelB (「2」とか「モデル」とかなにがあるのかさえよく知りません…)
- 手持ちのPC(Mac)
- ラズパイに刺さってた32GBのMicroSD(つまり元々嫁が使っていたやつ)
- MicroSDをMacに接続できるようななにか

## RaspberryPi用のOSをダウンロード
まずはOSをMicroSDに焼く必要があるみたいです。
[公式サイト](https://www.raspberrypi.org/downloads/)を見てみると、OSは`NOOBS`,`Raspbian`の２種類があるようです。
<img width="612" alt="スクリーンショット 2019-12-28 19.32.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/e82f8a48-ca3a-e8d1-516f-f5f36d6a0338.png">
NOOBSは色々なOSがインストール時に選べるようなのですが、よくわからないので、シンプルそうな`Raspbian`を使うことにします。

また`Raspbian`にも三種類ありました。withDesktopとかはGUIなのかな?とりあえずCLIが動けばよいので、シンプルで軽い`Lite`というやつをダウンロードすることにしました。
<img width="938" alt="スクリーンショット 2019-12-28 19.34.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/af98918a-1ef9-674c-a6d3-161aa05de879.png">
ダウンロードしたファイルは`2019-09-26-raspbian-buster-lite.zip`という名前で、`約450MB`、解凍すると`2019-09-26-raspbian-buster-lite.img`という1ファイルだけでした。容量は`約2.25GB`でした。

## MicroSDのフォーマット(初期化)
MicroSDには嫁が使ってたOSが入っているはずですが、導入を最初からやってみたいのでMicroSDをフォーマットしちゃいます。
フォーマットはGUIでもディスクユーティリティで「消去」→「フォーマット(MS-DOS)」で初期化できますが、慣れ親しんだCLIでやっちゃいます。

### ディスクの確認
MicroSDをMacに接続した状態で`diskutil list`を実行すると、私のMacではMicroSDが`/dev/disk6`にマウントされていることが確認できました。

```bash:macOS
$ diskutil list
# ※略disk1〜disk5は関係ないので省略
/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *32.0 GB    disk6
   1:             Windows_FAT_32 boot                    45.0 MB    disk6s1
   2:                      Linux                         32.0 GB    disk6s2
```
### ディスクのフォーマット
確認が済んだので、次は本番のフォーマットです。上記で確認した`/dev/disk6` に対してフォーマットを行います。
ディスクのフォーマットは`diskutil eraseDisk`コマンドです。`フォーマット形式`、`ディスクの名前`、`フォーマット対象ディスク`の順に指定します。

```bash:macOS
$ diskutil eraseDisk MS-DOS RPI disk6
Started erase on disk6
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk6s2 as MS-DOS (FAT) with name RPI
512 bytes per physical sector
/dev/rdisk6s2: 62077280 sectors in 1939915 FAT32 clusters (16384 bytes/cluster)
bps=512 spc=32 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=62107648 bspf=15156 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk6
```
これでフォーマット完了です。


## RaspberryPiのOSをMicroSDに書き込む
これまたCLIでやってしまいます。GUIでもできるのかも知れませんが、残念ながらやり方知りません…

### MicroSDのアンマウント
imgファイルを書き込むにはddコマンドを使用しますが、マウントされていると出来ないので一旦アンマウントします。

```bash:macOS
$ diskutil unMountDisk /dev/disk6
Unmount of all volumes on disk6 was successful
```

### MicroSDへ書き込む
`disk6`じゃなくて`rdisk6`って指定すると書き込み速度が早くなります。なんでかは知らないです。

```bash:macOS
$ sudo dd if=/Users/tomohiro.b.sasaki/Downloads/2019-09-26-raspbian-buster-lite.img of=/dev/rdisk6 bs=1m
2144+0 records in
2144+0 records out
2248146944 bytes transferred in 51.164256 secs (43939795 bytes/sec)
```
完成！
※まだMicroSDはMacに接続したままにしてください。

### SSHログインができるように設定する
ラズパイは、初期設定だとsshログインが許可されていないようです。sshログインできるようにするには、microSDのルートであるbootにsshという名前の空ファイルを作ればよいようです。

```bash:macOS
$ touch /Volumes/boot/ssh
```

## wifiの設定をしてみる
ラスパイと無線で通信するために、ラズパイにWi-Fiの設定を書き込みます。
Wi-FiのSSID(ネットワーク名)がhogehoge、パスワードがfugafugaのとき、下記のようなファイルを作成しMicroSDのルートディレクトリbootに配置します。

```bash:macOS
$ vim /Volumes/boot/wpa_supplicant.conf
```

```conf:wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="hogehoge"
    psk="fugafuga"
}
```

※ こうやればできるらしいのですが、僕のラズパイは無線機能が無さそうです…。なので家に転がってたBuffaloの無線子機を接続することで無線化しました。


##RaspberryPiとMacを物理的に繋ぐ

RaspberryPiのOSを書き込んだMicroSDをMacから引っこ抜いて、RaspberryPi本体にぶっ刺します。あとはなんとかしてLANケーブルでRaspberryPi本体とMacを接続して電源を入れます。

## Macからラズパイにsshでアクセスしてみる
ラズパイにsshでログインするために必要な情報は、初期では以下のようになっているようです。

|項目|値|
|:-- |:--|
|ホスト名|raspberrypi.local|
|ユーザー名|pi|
|パスワード|raspberry|

ということでさっそくログインしてみます。

```bash:macOS
ssh pi@raspberrypi.local
pi@raspberrypi.local's password:
```
パスワードを聞かれるので、初期パスワードである`raspberry`と入力してreturnキーを押すと
すると下記のように表示され、ラズパイに接続されたことが確認できました。

```bash:Raspbian

Linux raspberrypi 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l

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: Thu Sep 26 01:25:13 2019 from fe80::2b:e4a3:d9a7:df66%eth0

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:~ $
```

## ちょっと調べて見る

### rootになれる
初期ユーザーのpiでrootになれました。

```bash:Raspbian
pi@raspberrypi:~ $ sudo su -

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.

root@raspberrypi:~#
```

### ipを調べる
普通に`ip addr`でいけます。まあdebianですからね。

```
pi@raspberrypi:~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:e4:b4:9f brd ff:ff:ff:ff:ff:ff
    inet 169.254.60.194/16 brd 169.254.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::7609:ae7c:ea60:d924/64 scope link
       valid_lft forever preferred_lft forever
```

### debianのバージョンを調べる

```bash:Raspbian
cat /etc/debian_version
10.1
```

### pythonのバージョンを調べる

```bash:Raspbian
pi@raspberrypi:~ $ python --version
Python 2.7.16
pi@raspberrypi:~ $ python3 --version
Python 3.7.3
```
ちゃんと3系もはいっているようです。

## 細かめの設定をする
### パッケージ類のアップデート
なにはともあれ、はいっているものをアップデートします。

```bash:Raspbian
$ sudo apt-get update
$ sudo apt-get upgrade
```

### timezoneの変更
ラズパイ専用のコマンドでもできるようなのですが、今後の設定自動化を考えて非対話式のやり方で実施します。

**まずは今のtimezoneを確認**

```bash:Raspbian
$ sudo timedatectl
               Local time: Sun 2019-12-29 05:01:04 GMT
           Universal time: Sun 2019-12-29 05:01:04 UTC
                 RTC time: n/a
                Time zone: Europe/London (GMT, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

```

**timezoneのAsia/Tokyoをセット**

```bash:Raspbian
$ sudo timedatectl set-timezone Asia/Tokyo
```

**timezoneの再確認**

```bash:Raspbian
$ sudo timedatectl
               Local time: Sun 2019-12-29 14:16:34 JST
           Universal time: Sun 2019-12-29 05:16:34 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
```

### pipのインストール

```bash:Raspbian
# インストール
$ sudo apt-get install python3-pip

# 最新化
$ sudo pip3 install --upgrade pip

# バージョン確認
$ sudo pip3 install --upgrade pip

 ```