Raspberry Pi 購入からCLI接続まで

##この記事は？
埼玉の専業主夫をやっているスズキです。こんにちは！
ラズパイが欲しくなったから買ったので、初期セットアップ関連手順を取りまとめます。
どちらかと言えば以下のような方々向けです。

 - ラズパイってなんか聞いたことあるけどよく分からん
 - いい加減Linuxを履修したいけど取っ掛かりが見当たらない
 - 新しいオモチャが欲しい

##TL;DR
以下の手順について記載します。初学者が初学者向けに書いている旨、ご理解下さい。

 - どこでどのラズパイを買うか
 - 組み立て
 - 初期設定
 - SSHによるリモートログイン
    - ラズパイは電源と有線LANだけ繋いで普段使ってる端末からCLI操作します

##Raspberry Piって何？
###ラズパイとは
例によって[Wikipedia](https://ja.wikipedia.org/wiki/Raspberry_Pi)より引用します。

>Raspberry Pi（ラズベリー パイ）は、ARMプロセッサを搭載したシングルボードコンピューター。イギリスのラズベリーパイ財団によって開発されている。日本では略称としてラズパイとも呼ばれる。

通称ラズパイです。複数の製品がありますが、共通して以下の特徴があります。

- Linux系のOSが動作する
- 必要充分な性能
- とても安い
    - 現行のラインナップは実質2種類ですが、高い方でも1万円でお釣りがきます。
- 電力消費量がものすごく小さい
    - 24/365で稼働させやすいです。
- 様々なオプションモジュール（カメラとかセンターとか）を取り付けて色々出来る。

###機種について

現行機種については、大きくわけて2種類です。

- Raspberry Pi 3B+
    - 性能が良い方
    - 常駐系のプログラムを並列で動かすならこっち？
- Raspberry Pi Zero WH
    - 性能もサイズもミニマム
    - サイズぴったりのモジュールもあったりするらしい。

今回はLinuxOSに触りたかった事と、NAS機能とラジオサーバ機能が欲しかったので、3B+を選択しました。

###購入したもの
今回はPi3B+のスターターキットを[KSY](https://raspberry-pi.ksyic.com/main/index)の通販サイトで買いました。
本体と電源とケースとOSを入れるMicroSD等々がセットです。
知見のある友人から紹介されたので取り敢えず買いました。
2019年6月現在の同梱物は以下の通りです。

 - スタータキット同梱
    - 本体（Raspberry Pi 3B+）
    - 公式ケース
    - 電源アダプター
    - MicroSDカード（OSインストーラー書き込み済み）
    - HDMIケーブル
    - ヒートシンク（両面テープで貼り付けます）

その他必要なものは以下の通りです。
MicroSDにはインストーラーが書き込まれている関係で、**GUIでの初期設定を行います。**
（OSの書き込みを別途行い、SSH有効化等の設定をSDカードに直接仕込むのであれば以下は不要になります）

 - 別途購入
    - モニター
    - キーボード
    - マウス
        - どちらかは必須です。マウスが楽かな…。

**以降、スターターキット購入時のケースを前提に進めます。**
**個別に購入されている場合はOSに周りでやることが変わるので適宜読み替えて下さい。**

##開封からGUIの初期設定

基本的に以下のブログ記事に沿って進めました。大変助かりました、ありがとうございます。
[RaspberryPiの組み立てからRaspbianをインストールして起動するまでの手順](https://www.virment.com/setup-raspberrypi-and-install-raspbian/)

###組み立て
これは届いたものを組み立てた画像です。
大きさを比較できるものを置けばよかったのですが、右側の端子はUSB/USB/RJ-45(有線LAN)です。手のひらサイズ！
上の蓋は乗っけるだけなので注意しましょう、ハマんねぇってなって壊しかけました。
![IMG_2543.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/bcc5e7bb-ab23-6074-2ee0-63917504d680.jpeg)

###起動とOSインストール
キーボード、マウス、HDMIを接続して給電すると以下のような画面が表示されるので、上の**Raspbian**を選択してインストールをクリックすると、インストールが開始されます。
<img width="584" alt="スクリーンショット 2019-06-13 18.30.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/373c4a96-7f20-88df-a5a5-bf14829839a9.png">
<img width="673" alt="スクリーンショット 2019-06-13 18.31.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/834a45bb-b87d-a1af-65f0-9585b4c5ff06.png">

ここで気になるのは、**そもそもこの画面は何？BIOS？**って話です。
正解は、KSYさんがMicroSDに予め書き込んでいた**NOOBS**です。
公式サイトから[DL](https://www.raspberrypi.org/downloads/)出来ます。
簡単に纏めますので、詳細は各位ググって下さい。

 - Raspberry Piがサポート（推奨）してるOSは？
    - 複数あるが、一番基本的になるのは**Raspbian**
 - Raspbianって何？
    - ラズパイに最適化されたLinuxのディストリビューションのDebianのディストリビューション
 - じゃあNOOBSってなんだよ
    - Raspbian（や他のOS）をインストールする為のインストーラー
    - インストーラーを介さずにRaspbianを直接MicroSDに焼き込んで挿せば使える状態にも出来るようです
    - GUI環境が無い状態で即SSH接続から始めたい場合に有用っぽいですが今回は割愛

疑問点をググってる間にインストールが終わりました。
<img width="340" alt="スクリーンショット 2019-06-13 18.41.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/38adf5f4-6d73-2e12-89eb-bd6b7feea1c1.png">

###初期設定
再起動するとそれっぽい画面が出てくるので、Nextから初期設定をします。
<img width="1611" alt="スクリーンショット 2019-06-13 19.06.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/2bef1e73-dfe5-97bb-0a94-13c32b8a8e56.png">
引き続き画面に従い初期設定を進めていきます。
今回のポイントとしては、推奨では初期パスワードの変更を行うのですが、**接続したキーボードが壊れていた**ので空白のまま次に進みました。
後にSSH接続しましたが、初期ユーザ`pi`とパスワード`raspberry`でした。
3B+はWifiが搭載されているのでSSIDが訊かれます。各自任意の値を設定して下さい。私は有線固定IPに絞りたかったのでSkipしています。
因みに有線のネットワーク設定ですが、初期設定でDHCP有効です。
インターネットに接続していないので、アップデートもSkipします。
お疲れ様でした！
<img width="491" alt="スクリーンショット 2019-06-13 19.09.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/206f1b53-325d-add0-52b3-d1558f180361.png">

###DHCPの確認とSSHの有効化
まず、DHCPが有効な事を確認します。
事前の情報もありますが、eth0のAuto某にチェックが付いてるので大丈夫でしょう。
（ここで固定IPを振っても良いと思いますが、可能な限りCLIで設定したかったので今回はこのままにしました。）
（後の手順を考えると、ルータやネットワークに明るくない場合はここで固定IPを振った方が良いです。）
（IPアドレスはSSH接続元のPCと同じセグメントであれば問題ありません。）
<img width="1616" alt="スクリーンショット 2019-06-13 19.19.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/38c5d730-7f4f-79ea-81a1-3a4fe6a431f5.png">

また、**SSHがデフォルトで無効**なのでこの画面から有効化します。
<img width="1622" alt="スクリーンショット 2019-06-13 19.10.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165009/e459b1ee-3945-8b6f-8e10-a3bcde0f5423.png">

これでGUI操作は終わりです。
Shutdownから電源を落とし、マウス、キーボード、モニターを取り外して、新たにLANケーブルのみを接続して電源を抜き差しさせて起動させます。

##目的のおさらい/CLIで操作する方法について
###CLIしよう
CLIとは**command line interface**の略称です。CUIとも呼ばれます。
色んなQiita記事で様々なスニペットが書かれていますが、あれは全部が全部、何かしらの言語で記載されたコードではなく、LinuxやMacのターミナルと呼ばれるCLIで実行されたコマンドと結果が書かれているものがあります。

全部GUIでやれば良いのでは？というお気持ちもわかりますが、残念ながら世の中の実態としてそうなっていません。諦めましょう。歴史上、コンピューターはCLI操作から始まっていて、グラフィカルな操作も開発したよ！という世界観なので、精密な操作を行うためにCLIは必須なのかもしれませんね、諦めましょう。
とはいえ、ケーブルやらキーボード/マウスが部屋の中で何個も転がっているのは邪魔だし、Raspberry Piはせっかく小さいので、部屋の隅っこに転がしておきたい。なんとかならんのか、なります。

###CLIを触る2つの方法
1つ目は、簡単です、モニターとキーボードを繋いで、Macならターミナル、WindowsならコマンドプロンプトやPowerShellを立ち上げるとCLI操作が出来ます。Raspberry Pi/Linuxも同様です。

2つ目は、コンピューター間で通信を行い、端末Aから端末Bにログインすることで、CLI操作を行います。
WindowsであればリモートデスクトップでGUI操作が出来ますが、あれのCLI版です。
現在コンピューター間で通信を行う為には、IPアドレス情報が必要になります。この辺りまで記載すると脱線がひどいことになるので必要に応じてググってください。
IPアドレスは、家の中（＝家庭用ルータの配下）であれば自由に設定出来ます。
次に、PC間で通信する為のルールがあり、これをプロトコルと呼びます。
例えば、ウェブページを閲覧するのはHTTP及びHTTPSというプロトコルに則って通信が行われています。
今回行うCLIのリモート操作では、**SSH**と呼ばれるプロトコルを使用します。
他にはTELNETもあるんですが…今もまだ使われてるんですかね…？

（今回は端末AをMacOS、端末BをRaspberry Piとしますが、行うことはSSHでの接続ですので、良いように読み替えて下さい。）

##IPアドレスの確認からSSH接続
###IPアドレスの確認
さて、現在ラズパイには所謂PCに刺すLANケーブルと、電源のみがつながっている状態です。
あなたが現在、ルータを買ってきて特に設定を意識せずにインターネットをやっているのであれば、ルータで**DHCPサーバ**機能が有効になっているはずです。
これは、端末側（パソコンやスマホのWifiゲーム機やラズパイなど全てです）が余ってるIP頂戴と言ってきたら、余ってるIPアドレスを適宜渡して管理してくれる機能です。

先程Raspberry PiはDHCPが有効になっていることを確認しました。
（これは正確には、DHCPのクライアント側が有効になっている、ということで、つまり「余っているIP頂戴」と言いに行きます。）
ラズパイがどのIPを貰ったか確認しましょう。
方法としてはいくつかあります。
ルータ側のDHCPログサーバログを確認するのが一番確実なのですが、iPhoneを利用しているのであれば、**Fing**というアプリを使うと楽です。
同一ネットワークに属している機器を全てリストアップしてくれるので、他に接続している機器を消去法で消しこんでいって特定しましょう。

**追記**
IPアドレスを確認しなくても、ホスト名指定でSSH接続が可能です。
（本来ホスト名とIPアドレスを紐付ける為にはクライアントPCの設定ファイルに追記するか、DNSサーバが必要なはずなのですが、なんか技術が進歩していた…。コメントでのご指摘、ありがとうございます。）
参考URL：[Raspberry PiでAvahi を使ってホスト名でアクセスする](http://independence-sys.net/main/?p=2116)

###SSH接続
IPアドレスが特定出来たら、いよいよSSH接続です。
各々のクライアントから接続しましょう。
コンソールのログは以下のパラメータで実施した例になります。

Raspberry PiのIPアドレス：`192.168.1.116`
ユーザID：`pi`
パスワード：`raspberry`

```Console.log
$ ssh pi@192.168.1.116
pi@192.168.1.116's password:
Linux raspberrypi 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 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: Tue Oct  9 22:21:59 2018

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

1行目はMacのConsoleでコマンドの入力、2行目にはSSH先のRaspberry Piからパスワードを訊かれていて入力、以降は接続完了のメッセージ（初期パスワードを変えろって怒られてますね）、最終行はRaspberry Piのプロンプトです。
無事SSH接続が完了しました。

尚、初回接続時は以下のメッセージが表示されると思われます。
未知のホストだけど信用する？というような意味合いなので、yesで進みましょう、安全なものだと分かっているので。

```Console.log
The authenticity of host '192.168.1.116 (192.168.1.116)' can't be established.
ECDSA key fingerprint is SHA256:****************************************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.116' (ECDSA) to the list of known hosts.
```

###Hello World!
無事できました！良かったですね！

```Console.log
pi@raspberrypi:~ $ echo Hello World!
Hello World!
pi@raspberrypi:~ $
```

##終わり
以上、SSH接続までの手順取りまとめでした。
今回はローカル内の接続でしたが、応用してクラウド等々色々と応用が出来るようになれば良いですね！
本来やりたかった事は完全に棚上げされてるので、引き続きやっていきますので宜しくおねがいします。