Raspberry Pi セットアップ ~Stretch編~

[前回の記事](https://qiita.com/HTsuruo/items/58f59c8d4a90558aa44e)から色々変わっていたのでメモを残しておく。
デスクトップUIもキレイになり、WiFi内臓もされたためかなりセットアップが簡単にできるようになりましたね。

# OSを選んでSDカードに書き込む
* 公式（ <https://www.raspberrypi.org/downloads/> ）から好きなものをダウンロード
* 今回は```RASPBIAN STRETCH WITH DESKTOP```を選定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116692/2c8d2767-f959-62d9-5bb0-4052398b8878.png)

* 書き込み手順おさらい

```
df -h  # SDカードのディスクを確認する（※誤ってPCのディスクを選択しないように）

ex) SDカードが/dev/disk4s1で2018-04-18-raspbian-stretch.imgを焼く場合
sudo diskutil unmount /dev/disk4s1  # アンマウント
sudo dd bs=1m if=2018-04-18-raspbian-stretch.img of=/dev/rdisk4 conv=sync　# 頭にrつける。readerの意？
sudo diskutil eject /dev/disk4s1
```

# 初期設定
* 最初の初期設定まではHDMLつないで操作したほうが楽。その後のソフトウェアインストール系はすべてSSH経由で行う。
* 起動したら左のメニューから設定を選択
    * 言語: そのまま英語。コマンド文の日本語に違和感があったため。気にしない人は日本語にしちゃいましょう。
    * 他の設定は全部日本語に。
    * WiFiも一応つないでおく。（※この時点では暗号化されていないので注意）
    * SSHをオンに設定。（他使用する場合はオンに設定）
    * 再起動
* ホスト名でSSH接続できるように例に倣ってavahiを導入
    * 私の場合デフォルトで入っていたのでインストール不要かも。素晴らしい！
    * 入っていない場合: ```sudo apt install avahi-daemon```

以降、SSHで作業します。

# 基本ソフトウェア系

``` 
# sshで普通に入ります
$ ssh pi@raspberrypi.local # 初期状態

$ sudo apt update  # 更新チェック
$ sudo apt upgrade  # 必要があれば更新

# ネットワーク設定（GUIでアクセスポイントを設定した場合パスワードが暗号化されないので、下記で上書きするのがベター）
$ sudo sh -c "wpa_passphrase ssid passphrase >> /etc/wpa_supplicant/wpa_supplicant.conf"

# vimとかgitとか入れておきましょう
$ sudo apt install vim git
```

# セキュリティ設定（最低限）

## ユーザー周り
```
# rootパスワードを設定
$ sudo passwd root

# ユーザー追加
$ sudo adduser newuser

新しいパスワードを二回入力します。
一旦piユーザーと同じ権限を当てます。
$ groups pi
$ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio newuser
$ groups newuser
# 作成したユーザーにグループ権限が当てられたことを確認

# 作成したユーザーで入れるか確認
$ ssh newuser@raspberrypi.local

# 次にもとのpiユーザーの名前を変更します（削除でも良いですがここでは変更にとどめます）
$ sudo usermod -l newpi pi
→ そのまま変更しようとしても「プロセス使用中」みたいなこと言われて実行できません。
ラズパイでは、起動時にデフォルトでpiユーザーとしてログインするようになっているようです。一時的に変更しましょう。

# おそらく一番上の項目になっていると思いますが、コンソールログインを（piユーザーではないやつ）選択
$ sudo raspi-config
Boot option > Desktop/CLI > Desktop Autologin > Console

$ reboot # リブート

$ sudo usermod -l newpi pi # 再び。うまくいくはず
# piユーザーの存在を消したらAutologinを戻しておきましょう
```

## sshd周り
SSHポート番号変更等を下記ファイルで行います。

```
$ sudo vim /etc/ssh/sshd_config
```

```
# 「Port」という箇所の番号を変更します。10000～64000で適当な数字を設定。
- Port 22
+ Port 51234

# sshdの設定を書き換える
- #PasswordAuthentication yes
+ PasswordAuthentication no

# rootの直接ログインを禁止する
- #PermitRootLogin prohibit-password
+ PermitRootLogin no

# 設定が済んだらsshdを再起動
$ sudo /etc/init.d/sshd restart
```

## 公開鍵
今回はクライアントPC（Mac）側で発行します。

```
$ ssh-keygen -t rsa (-f [名前]) #()内を指定しないとid_rsaになります
$ brew install ssh-copy-id #ssh-copy-idはbrewで落とせます。便利。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub newuser@raspberrypi.local # 公開鍵を転送&登録
```

# Pythonについて（任意）
* デフォルトでPythonもpipも入っている（2系は2.7, 3系は3.5が用意されている）

```
$ python -V
> Python 2.7.13
$ pip -V
> pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -V
> Python 3.5.3
$ pip3 -V
> pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.5)
```

pipでなにかパッケージをインストールすると、新しいバージョン使えるよ、と催促されるが、
pipの10系はバグ？が潜在しているので、現在（2018/5/12時点）ではアップデートしないほうが良いかも。
（参考：<https://github.com/pypa/pip/issues/5240>）

普段でPython使う際はCondaでバージョン、パッケージ管理をしていますがRaspberrypiのプロセッサはARMなため互換性がないパッケージなどが出てきてしままい、色々不便でした。なので、ラズパイではcondaを入れずそのまま使っています。



# Python3系でOpenCVを使う（任意）
2系であればpipのパッケージ（python-opencv）でそのまま使えるが3系には対応しておらず、色々困っていた。
色々探していたら、2018年3月にdebパッケージを作ってくれた人（[ラズパイ3にOpenCV3を簡単に導入](https://qiita.com/mt08/items/e8e8e728cf106ac83218)）がいたので、そちらをせっかくなので使わせていただく。大変ありがたい。

```
$ sudo apt autoremove libopencv3
$ wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.1-20180304.1_armhf.deb
$ sudo apt install -y ./libopencv3_3.4.1-20180304.1_armhf.deb
$ sudo ldconfig
$ python3 -c 'import cv2; print(cv2.__version__)'
> 3.4.1
```


## 参考
* [[wip] Raspberry Piのセキュリティを高めてみた](https://qiita.com/yyano/items/126cff2e3c49b0006c43)
* [Raspberry piでpiユーザーを消す時に(user pi is currently used by process )が出たときの対処法](http://sk7z.hatenablog.com/entry/2017/03/14/064939)
* [5ステップで完了！ラズベリーパイ(B+)のセキュリティ設定まとめ！](http://masatolan.com/raspberry-pi/raspberry-pi-security/)
* [ラズパイ3にOpenCV3を簡単に導入](https://qiita.com/mt08/items/e8e8e728cf106ac83218)