Pi 4にRaspbianをインストール、MacでSSH、VNCできるまで奮闘中

#なんでラズパイでデスクトップLinux？

Pi 4を買った目的はずばり去年のElixir Confで観たKeynoteでプレゼンされていたElixirのIoTフレームワーク、Nervesです。動かしたい。男の子は機械と怪獣が大好きなんだよ。

しかし音楽制作メインで環境が2.5TB（毎回言いますけどうち2TBくらいがライブラリですよ、プラグインは938個、気が狂ってる）あるので、素のmacOSでプログラミングするのは危険だなと。

①比較的新しくてPhoenix LiveViewやNervesも扱っている個人のかたが書かれた本はDockerの知識を前提としているし、Dockerfileをもとにbuildするとホストのディレクトリからなんにも見えない。
なんやComposeとの違いやDocker for Macとの相関性もよくわからない！Dockerわからない頭プシュー！

素のmacOSでのみ作業環境は整ってますが、しくじってクリーンインストールしたらまる三日かかったしやはり危険すぎる。

②そして、お世話になった会社が出しているElixir/Phoenixの基礎本はNodejs、Elixirともにkiexなどで古いバージョンを揃えないといけない。

某オンライン教材で使っているVagrantで立てたUbuntuをもう一個作ってみたんですけどVagrant由来のエラーみたいのが出て問題の切り分けができなくて頭プシュー！

前置きが長くなりましたが取り急ぎ②のためにデスクトップのLinux環境を用意して、VNCその他の手段でヘッドレスでラズパイ動かせるようにしようと。


#魔境

10回くらいPi imagerで焼き直ししてます。

最初のころは有線LANが通ってるのに無線、wlan0が全く起動しないところで七転八倒し

当然セキュリティとか運用面で固定IPやポート番号などもいじるのですが、どうも成功したSSHやVNCが”なにもしてないのにPCがこわれた”的に放置して戻るとダメになる。

その他、ググったドキュメントの最大公約数を採ったり自分の頭で考えてもネイティブなトラブルの連続。。

いかにmacOSやWindowsがリッチなOSか思い知らされました。

#起動、なるべくいじらないでVNCに漕ぎつけよう

![スクリーンショット 2020-07-10 01.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306722/11b43757-de92-2650-1e10-f4ca9c0f2c62.png)

（公式のPi Imagerでの焼き方は割愛します。何回も焼き直し続けることになるのでRaspbianのGUIありの小さいほうのイメージを落としとくといいと思います。)

とりあえず焼き上がったディスク直下にtouch sshでブート前にSSH有効化を用意するなどもあるのですが、なるべく設定しない、とにかくMacのディスプレイとマウスでいじれるようにする、触らぬ神に祟りなし...フォントもメニューバーもどうでもいい、アプリもターミナルとChromiumあればいいだろう...

あ、焼き上がって起動する前にconfig.txtの

```
hdmi_safe=1
```
これコメントアウトついてるので外したほうがいいです。
ヘッドレスじゃないのに画面が映らない絶望を回避できます。

Pi 4用に弊モニターのD-Subを占有するとき、ググりマシンのMBPのDPを抜いとかないと映ってないモニタにDockやアプリがいってしまうので重ねてめんどくさい。はやくヘッドレスしたい。。

#起動

初期設定のウィザードに従って地域や言語（英語配列のかたはUse US Keyboad、あとから設定でApple ANSIとかHHKBとかを選んでもとくに挙動は変わらない気がします）

piユーザーは削除を推奨するかたも多いですが、とりあえずパスワードを設定。

アップデートが行われてリブートです。

#やること

とりあえずネットワークを見ます。
わたしは中継機から有線LANを繋いでいて、eth0にはIPアドレス192.168.10.xx/24が割り当てられています。

wlan0が存在しない、設定の書き換えをしまくってもifupやifdownすら効かない、ということがありましたが今は自宅のルーターのSSIDが表示されるので一応パスを入れておきます。
あとPi 4はIPv6に対応していないという文言もどこかで見たのでGUIでIPv6をdisableして2.4GHz帯で飛んでいるほうのSSIDを適用します。

つづいてターミナルで
```
sudo raspi-config
```

ないしメニューからのセッティングでSSHとVNCを有効にします。

延々設定ファイルを弄っていた

```
sudo nano
```

固定IPやポート番号、SSHキーの生成などもまずは繋がってから、ということにします。

#接続

macOSのターミナルから

```
ssh pi@raspberrpi.local
```

...

```
MacBook-Pro:~ kmizuno0211$ ssh pi@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address fe80::d293:636f:505e:9bf4%en8
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:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
lease contact your system administrator.
Add correct host key in /Users/kmizuno0211/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/kmizuno0211/.ssh/known_hosts:2
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.

```

できない。
鍵はちゃんとMBPクリーンインストールしたときに作ってある。
/.ssh配下にknown_host:2をつくろうとするんですがなぜかコロンがハイフンになってしまうエラーになったり、どうにかコロンを取得してもOSから”ファイル名が長すぎる”

と言われてうまくいかない。

普通にラズパイに公開鍵を送信する。
CLIでやってもWarningが出てラズパイに接続できないのでDropbox使いました。

id_rsa.pubをpiホームディレクトリに置き、転送ができました。

```
mkdir .ssh

mv ~/id_rsa.pub ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys
```

の流れです。

```
sudo nano /etc/ssh/sshd_config
```

パスワード認証を拒否、公開鍵認証をオンにします。

PasswordAuthentication no

pubkeyAuthentication yes

それぞれコメントアウトを外しこう設定してみます。

sshを再起動し接続

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Please contact your system administrator.
Add correct host key in /Users/kmizuno0211/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/kmizuno0211/.ssh/known_hosts:8
ECDSA host key for 192.168.10.11 has changed and you have requested strict checking.
Host key verification failed.
MacBook-Pro:~ kmizuno0211$ 
```
Warning一個減った、ラズパイからのECDSAキーをknown_host:8に加えればいいのね、そうするよ...

と、このタイミングで最近MacでもHHKBでもコロンがハイフンになってしまう怪現象が...

しかもいま7/1デイトの別のラズパイ（たぶんうまくいったやつ）sudo ddで復元しててリブートできな...い...

いったんお茶にしましょう。
アップルの有線テンキーをハードオフで拾って、これで自宅バックアップいけるんちゃう思って、HHKB一台売っちゃったんですよ。そしてアップルのキーボードは薄すぎる。ロジの薄型パームレストより薄い。
旧型のHHKB Pro 2の有線が時間指定で届くはず。

#SSH公開鍵を共有しても繋がらない！

アラートのとおりにPi 4が言っているECDSAキーをknown_host:2に書き込もうとしたら、コロンやら文字数でこのファイル名が使えないとOSからアラートが、、どないせいっちゅうねんということでググりまくったら

ECDSAキーのペアを生成する方法を見つけました。これをまた繋がらないからDropbox経由でRaspbianにロケートしよう。

```
ssh-keygen -t ecdsa -b 256
```
なお、一度pi@raspberrypi.localで接続したことがある場合違うラズパイ（OS書き直してるから違うラズパイですね）に接続する場合、pi@192.168.xx.xxと正確なIPを指定しないといけないようです。
確認しないといけない場合は

```
ping pi@raspberrypi.local
```
なぜヘッドレスでいきなり繋がるドキュメントがあるのに気分屋のように使えたり使えなかったりして何度もOSを書き直したのは、ホストのMacに原因があるのかもしれません。。

piユーザーのホーム直下に移したid_ecdsa.pubを追記になるので

```
cat ~/id_rsa.pub >> .ssh/Authorized_keys
chmod 600 ~/.ssh/authorized_keys
reboot
```
さあsshするぞ、と思ったらPi 4が文鎮に、、
画面映らないしping飛ばしても息してない、、

終わった...

なんらかの意図で7/1に取ったバックアップがあるので、それレストアしてみます。。

知識の集積にはなってるけどここまで動かないとは、まじ甘酸っぱいな〜、Pi 4...（笑

いちおうSDカード抜いてカード刺さってないよ画面出ること確認してもう一回ブートしたら、、、動いた、、

ほんとようわからん！
リッチなコンピューターの何十分の一の値段でこれだけ動くコンピューターが買えることとのトレードオフなのか、OSの問題なのか、、


#とにかくVNC
ECDSAキーを追加してもSSHできない状況が変わらない。。（エラーメッセージも同じアラート）

VNC Viewerを立ち上げてpi@もなしでIP直打ちしてみる

ユーザーネームとパスワードを求められたのあでpiユーザーの通り入れてみたら


<img width="1536" alt="スクリーンショット 2020-07-10 17.34.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306722/9708dce7-a5e4-9243-8cae-dd25ceca3765.png">

とりあえずこれでいいや、、いつまでもSSHに拘ってないでElixir1.3.4をビルドしよう、、

HHKBのキートップを乾燥機にかけてて終わったので、パチパチ組み立てて試し打ちして寝ます、、

（進捗あれば更新します 7/10 17:42)