初めてラズパイをセットアップしてみた

普段はwebエンジニアとして働いています。
最近自分の時間を作れるようになってきて、新しいことをしてみようということで、IOTにチャレンジしたいと思います。

最終ゴールは、ラズパイを使って自宅の家電をスマホから操作できるようにしたいなと。
どうやって実現するかはまだ未定。というか不明です。。

まずは、ラズパイを動かして、電子回路を組めるようになりたい。


# 買ったもの

ラズパイといっても何種類かあってどれを買おうか悩みましたが、安くてかつ扱いやすそうなラズパイZero WHを買いました。

![IMG_20181029_134001.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/e58989b4-d907-cc19-d176-0099e051e277.jpeg)


Zeroというシリーズは、今まで発売されてきたラズパイの半分の大きさで、値段の方も648円〜購入可能ととてもお手頃。
ただし、最も安いRaspberry Pi Zeroは、Wi-FiとBluetoothが利用できず、さらにGPIOのピンヘッダがついておりません。（よくわかっておりませんが、GPIOというのは電子回路に必要で、使うときははんだ付けをしなければなりません。）

そこでこの３つが備わっているRaspberry Pi Zero WH に決めました。

miniHDMIとMicroUSBの変換コネクターがセットになっているものをAmazonで購入しました。
[Raspberry Pi Zero WH スターターセット](https://www.amazon.co.jp/gp/product/B07GYFCJNT/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;psc=1&_encoding=UTF8&tag=bonos-22&linkCode=ur2&linkId=2c21ed14a829604250ccd17817272e31&camp=247&creative=1211)

![IMG_20181029_213538__01.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/a7a64b72-916c-7dc5-90aa-c852ce13295a.jpeg)

SDも必要になりますので、用意してください。
ものによっては動かないものもあるらしいので、[こちら](https://elinux.org/RPi_SD_cards#Working_/_Non-working_SD_cards)で動作確認済みとなっているものを買いましょう。（Class10以上が好ましい）

私が買ったのはこちら
[Transcend microSDHCカード 8GB Class10 TS8GUSDHC10
](https://www.amazon.co.jp/gp/product/B004TA0AUW/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;psc=1&_encoding=UTF8&tag=bonos-22&linkCode=ur2&linkId=b017de56b54b33ece65e1d49dd41ce83&camp=247&creative=1211)

# 用意したもの

* USB電源アダプタ（電圧5V）
* microUSBケーブル

アンドロイドの充電器を使います。

# セットアップ

## OSインストール

[公式サイトのOSインストール方法](https://www.raspberrypi.org/documentation/installation/installing-images/README.md)に従ってインストールしていきます。

[NOOBS](https://www.raspberrypi.org/documentation/installation/noobs.md)というインストーラをおすすめされていますが、簡単な代わりにインストールに時間がかかるし、容量が大きくなってしまうとのことなので、NOOBSは使わず、PC上でOSイメージをSDにコピーする方法で進めていきます。

### ① OSイメージをダウンロード

[raspbian](https://www.raspberrypi.org/downloads/raspbian/)というラズパイ用のOSをインストールします。


WITH DESKTOPとLITEという２種類があって、ようは通常版とライト版。
通常版はGUIで操作ができ、ライト版はCUIのみ
今回は、ディスプレイに映さずにラズパイを起動してみようと思うので、LITEを選択。
(ダウンロードに時間がかかりますので、Torrentファイルをダウンロードできる方は、「Download Torrent」をおすすめします。)

<img width="986" alt="スクリーンショット 2018-10-29 22.23.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/e4a68e49-d428-2819-23d7-582cedbd3a7c.png">



### ② EtcherでOSをSDカードにコピー

[Etcher](https://etcher.io/)というアプリケーションを使って、SDにダウンロードしたOSイメージをコピーしていきます。

Etcherを起動するとこのような画面が表示されるので、「Select image」からダウンロードしたzipファイルを選択。

![スクリーンショット 2018-10-29 20.58.34.png](https://qiita-image-store.s3.amazonaws.com/0/92083/a2612928-1976-6e98-de3f-96b5d13bc51e.png)


「Select drive」からコピー先のSDを選択。

![スクリーンショット 2018-10-29 22.35.21.png](https://qiita-image-store.s3.amazonaws.com/0/92083/cdefe12c-d829-01de-6b90-35c1658cf336.png)

最後に「Flash!」を押すとコピーがはじまります。
５分程かかりますのでしばらく待ちます。

![スクリーンショット 2018-10-29 22.36.23.png](https://qiita-image-store.s3.amazonaws.com/0/92083/09c2db31-ea50-b833-936f-2382c3f68348.png)

Flash Complete!と表示されたらコピー完了になります。

![スクリーンショット 2018-10-29 22.45.38.png](https://qiita-image-store.s3.amazonaws.com/0/92083/df497906-2f10-55e7-12f2-dc3848dd8057.png)


### SSHとWifiの設定

SSHが初期状態で起動できるように、ファイルを作成しておく
（Etcherでの書き込みを完了すると、PCからSDが認識されていないことがあるので、一度抜いて再度差し込んでください）

```sh
% cd /Volumes/boot
% touch ssh
```

Wifiも起動時に自動で接続できるように

```sh
% vim wpa_supplicant.conf
```

```sh
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
  ssid="接続するSSID"
  psk="パスワード"
}

```

ファイルの追加が終わったら、SDの外に移動して、PCからSDの取り出します。
※ターミナルがSD内にアクセスしたまま、PCから取り出すと書き込みが完了しません。

```sh
# /Volumes/bootから移動
% cd ..
```




## ラズパイを起動

microSDを左側に差し込みます。

![IMG_20181030_224838.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/2b58df98-1fff-0bb9-d244-890f24e3ae6b.jpeg)


電源をPWRと書いてある右側にmicroUSBを接続します。（WITH DESKTOPをダウンロードした場合は、先にラズパイをディスプレイと繋げておきます。）

![IMG_20181030_224914.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/39007937-6234-0329-4454-95e55b7b0642.jpeg)


緑色に光った！

![IMG_20181030_225044.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/ccc0949b-c593-6177-5611-50e4484db349.jpeg)


## SSHで接続

```sh
% ssh pi@raspberrypi.local
```

初めての接続には確認があるので、「yes」と入力。

```sh
The authenticity of host 'raspberrypi.local (192.168.3.8)' can't be established.
ECDSA key fingerprint is SHA256:BmtkkBgFMA8ImYwI7kw9IiTAZvXteYDlNt9gDWY8Tyg.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'raspberrypi.local,192.168.3.8' (ECDSA) to the list of known hosts.
```

パスワードを聞かれるので「raspberry」と入力。

```sh
pi@raspberrypi.local's password: 
```

接続完了です。

```sh
Linux raspberrypi 4.14.71+ #1145 Fri Sep 21 15:06:38 BST 2018 armv6l

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.

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


## 初期設定

[こちら](https://ayame.space/2017/11/install-raspbian-stretch-for-raspberrypi-3/#i-4)を参考にさせていただきました。

### デフォルトのパスワードを変更

パスワードがデフォルトのままだと、セキュリティが弱いので変更

```sh
$ passwd

Changing password for pi.
(current) UNIX password: raspberry #デフォルトのパスワードを入力
Enter new UNIX password: 「新しいパスワード」
Retype new UNIX password: 「新しいパスワード」
passwd: password updated successfully
```

### パッケージの更新

```sh
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
```


### 設定の変更

設定画面を表示

```
$ sudo raspi-config
```


**日本時間に変更**

4 Localisation Options を選択。（Enterキー）
I2 Change Timezone を選択。
Asia → Tokyo を選択。

<img width="820" alt="スクリーンショット 2018-10-31 21.42.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/3e5a4488-00b2-ccac-cb26-178fa3f2fe41.png">


**日本語に変更**

4 Localisation Options を選択。（Enterキー）
I1 Change Locale

ja_JP.UTF-8 UTF-8 でEnter。

<img width="815" alt="スクリーンショット 2018-10-31 21.45.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/3a616b1c-cc19-0a66-d448-f3c1ccbbd1a5.png">


en_GB.UTF-8 でEnter。

<img width="820" alt="スクリーンショット 2018-10-31 21.48.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/83497878-09b3-a790-537e-ec993e3dda52.png">


設定は完了ですので、Finishを選択。

設定を反映させるために、ラズパイを再起動させます。

```
$ sudo reboot
```

SSH接続が切れるので、ラズパイが点灯したら再度接続する。

```sh
% ssh pi@raspberrypi.local
pi@raspberrypi.local's password:　#変更したパスワードを入力
```

時間設定ができているか確認

```sh
pi@raspberrypi:~ $ date
Wed 31 Oct 21:59:11 JST 2018
```

## やった方がいいこと

### 日本語フォントが入っていないのでインストール

```sh
$ sudo apt-get install fonts-ipaexfont
```

### vimのインストール

```sh
$ sudo apt-get install vim
```


### 暗証鍵でのログイン

PC側で暗証鍵(raspi.pem)を作成

```sh
% cd ~/.ssh
% ssh-keygen -t rsa -f raspi
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): #ssh接続時に聞かれるパスワード、空でもよい
Enter same passphrase again:

# raspiとraspi.pubという２ファイルが生成される。
```
raspi.pubという公開鍵をラズパイの中に配置します。

raspi.pubをコピー。ssh-rsa〜最後までコピーする。

```sh
% cat raspi.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxpUEqVT4HR0OuOyf9PWGESQYhS+TJfUkkeyD8XcZQs/eb2i94qAAIwjr1M0+K1vhr81IKZDwPfBGaqsiwXffjSy40yfBddKP0B6UTnMtlSleYVCvpY9d9XSQeL2YC06GOX2pFdH8DLBZlStuBEO5zJKEXnIsMWPonSoj5EvMdzURh/wdFgbMQwd2DdeDqr90PEtVheIRtRmF/RKbmxFxP7lUs4SK08qHpYaHP+blH1aC2JXaTNu/3T5oSyMiHxbrb5YMcA7eOz/DHjOqRZ2bsOH5T7RqGr15TFRFgUD0sLTDhBoIjbN9+9mq2yn2tKpP6EOBUdeO9/RIK2HZCNgIV hoge@hoge.local
```

ラズパイで`.ssh`ディレクトリを作成して、`authorized_keys`というファイルにコピーした内容を書き込む

```
$ cd ~
$ mkdir .ssh
$ vim .ssh/authorized_keys
```

```sh
# authorize_keys
# コピーしたのを貼り付ける
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxpUEqVT4HR0OuOyf9PWGESQYhS+TJfUkkeyD8XcZQs/eb2i94qAAIwjr1M0+K1vhr81IKZDwPfBGaqsiwXffjSy40yfBddKP0B6UTnMtlSleYVCvpY9d9XSQeL2YC06GOX2pFdH8DLBZlStuBEO5zJKEXnIsMWPonSoj5EvMdzURh/wdFgbMQwd2DdeDqr90PEtVheIRtRmF/RKbmxFxP7lUs4SK08qHpYaHP+blH1aC2JXaTNu/3T5oSyMiHxbrb5YMcA7eOz/DHjOqRZ2bsOH5T7RqGr15TFRFgUD0sLTDhBoIjbN9+9mq2yn2tKpP6EOBUdeO9/RIK2HZCNgIV hoge@hoge.local
```

パーミッションの変更

```sh
$ chmod 600 .ssh/authorized_keys
```

動作確認

```sh
# 一旦ラズパイからログアウト
$ exit

# 認証鍵でログイン
% ssh -i ~/.ssh/raspi pi@raspberrypi.local
$ 
```

簡単にSSHログインできるようにエイリアス設定をする

```
% vim ~/.ssh/config
```

```sh
# ~/.ssh/config
Host raspi
    HostName raspberrypi.local
    Port 22
    User pi
    IdentityFile ~/.ssh/raspi
```

以下のコマンドで接続可能に。

```sh
% ssh raspi
```


### SSH設定変更

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

```sh
# /etc/ssh/sshd_config

# ポート変更
#Port 22
↓
Port 10022　　#適当なポート番号に変更。上記でエイリアス設定している場合はそちらも変更しておくこと。



# rootユーザーでのログイン禁止
#PermitRootLogin prohibit-password
↓
PermitRootLogin no


# パスワードでのログイン禁止
#PasswordAuthentication yes
↓
PasswordAuthentication no
```

sshdを再起動

```sh
$ sudo /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.
```

SSHに認証鍵を使わずにログインできなくなりました。

```sh
% ssh pi@raspberrypi.local
ssh: connect to host raspberrypi.local port 22: Connection refused
```


### Gitのインストール

ツールを導入するためにgitをインストール

```sh
$ sudo apt-get install -y git

Reading package lists... Done
Building dependency tree
.
.
.
Setting up git (1:2.11.0-3+deb9u4) ...

$ git --version
git version 2.11.0
```

### anyenvをインストール

pythonのバージョン管理するために、いつも愛用している[anyenv](https://github.com/riywo/anyenv)という言語のバージョン管理ツールを使う。

pythonのバージョン管理pyenvやNodeのバージョン管理ndenvや他にもrbenv, phpenv, goenvなど、様々な言語のバージョン管理をまとめてできるツールである。
このツールを使えば、最新バージョンへのアップグレードが簡単に行える。また、アプリケーションによって使用するバージョンを変えることもできる。

```sh
$ git clone https://github.com/riywo/anyenv ~/.anyenv
```

```sh
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_anyenv
echo 'eval "$(anyenv init -)"' >> ~/.bash_anyenv
```

.bashrcに追記する

```~/.bashrc
if [ -f ~/.bash_anyenv ]; then
  . ~/.bash_anyenv
fi
```

反映させる

```sh
$ source ~/.bashrc

# 動作確認
$ anyenv -v
anyenv
```

### python3系をインストール

依存関係モジュールをインストールしておきます。

```
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev
```

pythonのバージョン管理ツールpyenvをanyenvでインスールする

```sh
$ anyenv install pyenv

$ exec $SHELL -l
```

インストールしたいバージョンを確認

```sh
$ pyenv install -l

Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
   .
   .
   .
```

バージョンを決めたら、インストールする。
今回は、最新版の3.7.1をインストール。
(インストールがあまりにも長いので、-vオプションでログを表示させた方が安心して待てます。30分以上かかりました。)

```sh
$ pyenv install -v 3.7.1

Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...
```

インストールできたか確認

```sh
$ pyenv versions
* system (set by /home/pi/.anyenv/envs/pyenv/version)
  3.7.1
```

pythonのバージョンをセットする

```sh
$ pyenv global 3.7.1
```

pipのアップグレード

```sh
$ pip install --upgrade pip
```



# セットアップ編完了

とりあえず、ラズパイの初期設定は完了しました。
仕事とかで、サーバー管理してましたので、ここまでは特に躓くことなくできました。

次は、電子回路に挑戦です。
回路なんて、中学・高校のとき以来なので、全然覚えていません（笑）
ので、お勉強の方からしていきます〜