ラズパイ5をLANケーブルでMacBookと繋いでインターネットに接続した話【非wifiヘッドレスの正攻法】

arduinoの民が...ラズパイに...出会ったぁ～(ｳﾙﾙﾝ..

# はじめに
- 新しいラズパイ（以下、pi5）が出たというニュースを見たので、10年近くぶりにラズパイを買ってみた。
- ヘッドレス[^1]で使うのがシャレオツ[^2]らしいので、正攻法でラズパイをヘッドレス使用してみた。
- 今回は、macbookを使ったssh[^3]接続までを詳しく解説している。
- 僕[^4]みたいにlinuxに詳しくもないくせに、なんとなく買ってみた人の参考になればうれしい。

# 持ち物
- [pi5](https://www.raspberrypi.com/products/raspberry-pi-5/)
- [microSDカード](https://www.westerndigital.com/ja-jp/products/memory-cards/sandisk-ultra-uhs-i-microsd?sku=SDSQUA4-032G-JN3MA)
- macbook air M3（母艦）
- モバイルバッテリ（pi5の電源）
- 母艦用の[有線LANアダプタ](https://www.buffalo.jp/product/detail/lua4-u3-cgte-wh.html)
- ケーブル類（LANケーブル、usb-cケーブル）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/c66064f9-4557-1010-2c66-64f7724a6e2c.png)

# sdへのos書込み
- [公式インストーラー](https://www.raspberrypi.com/software/)を使って、pi5用の64bitOSをmicroSDカードに焼いた[^5]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/27337bdc-007f-35a7-7d31-f3d6306cc64d.png)
- インストーラーの設定画面（一般）
  ホスト名、ユーザ−名とパスワードは絶対に忘れないように。wifiについては、母艦経由でネットを使うので、設定不要。もちろん、後から追加も出来る。ヘッドレスを諦めてモニタを繋げて設定するなら、楽勝でwifiをつなげられるから、この時点では無視。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/a9c216e1-2304-b29c-d533-483dd6bc918a.png)
- インストーラーの設定画面（サービス）
  「パスワード認証を使う」(パスワードはユーザー名に紐付いたパスワードのこと)を選択して、sshを有効にするのを忘れずに！これをやらないとヘッドレスで何も出来ない、と思う。もちろん、ヘッドレスを諦めてモニタを(以下略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/2a5c4af8-0108-f2bc-b72b-b6450b45955b.png)
- インストーラーの設定画面（オプション）はお好みで。ちなみに、「テレメトリーを有効化」というのは、インストーラーの使用状況をラズパイ財団が収集することの許可らしい。収集結果は[ここ](https://rpi-imager-stats.raspberrypi.com/)。 日本からのダウンロード割合はドイツに完全に負けてるな。こりゃあ、将来が不安すぎるわ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/32de576f-f37b-22fc-3e6a-07111d6693dd.png)
![Screenshot_20240509-175637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/7ef5e6ec-0dd0-3424-1243-2346192943bd.png)


# 母艦の準備
- 有線LANアダプタを接続すると機器名(AX88179A)が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/9ef82a81-a02a-e4b3-696f-c4a0387ff3aa.png)
- 設定画面で、TCP/IPのIPv4を下記のように設定する。これは、後でpi5に接続（macosのインターネット共有オン）したとき、pi5のサブネットマスクが255.255.255.0でipアドレスが192.168.2.2に自動的に設定されるところ、初期設定(dhcp)のままだと、機器(AX88179A)のサブネットマスクが255.255.0.0となってしまい、macosのターミナルからpi5にアクセスできなくなってしまうため。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/06325c3b-9a9f-3d9f-5d1e-72d1383ae3e5.png)
- インターネット共有をオンにする。共有する接続経路はインターネット接続している経路（Wifi）とし、共有先に有線LANアダプタを追加するのを忘れずに。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/db86e181-097c-e4b9-034f-e269b5fc65a1.png)

# pi5の立ち上げからsshで接続するまで
- pi5に電源と有線LANを繋げて立ち上げる。
- しばらく待つと、接続される。もし、ネットワークの順番がWifiが下になっていたら順番を入れ替えて、wifiが上になるようにする。wifiが上でないと母艦がインターネットに繋がらなくなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/85260b2b-f05a-b53c-5fbe-5f74c99a86b5.png)
- ターミナルを立ち上げて、sshを打ち込む前に呪文`ssh-keygen -R ホスト名[例:raspberrypi.local]`を唱えておく[^6]。その後、`ssh ユーザー名@ホスト名`を打ち込む。うまく接続されていれば、次のような画面となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/75c30cd8-2137-18dc-4803-f8ea576ec321.png)
- ここでyesと答えると、次はパスワードを聞かれて、パスワードが合っていると、次のような画面となり、緑文字のようにpi5のosを書き込むsdインストーラーでで設定した`ユーザー名@ホスト名`　で始まるシェルが表示される。「~」はカレントディレクトリがユーザーのホームディレクトリ「rpi5」に有ることを意味し、「$」は一般ユーザー権限であることを示す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/01560675-203b-fae1-e811-301d3ec38d87.png)
- lsコマンドで、ホームディレクトリ内のサブディレクトリ一覧が表示され、cd ..で1階層上に上がり、そこでlsコマンドを行うことで、ホームディレクトリの実際の名称が「rpi5」であり、ユーザー名と同一であることが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/fc8be08e-c68f-6048-22c4-63091d9be780.png)
- この画面で`sudo raspi-config`を打ち込むと、ターミナルが次の画面に変わり、pi5に接続できていることを実感できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/2dc0bbac-99f9-72a4-ea72-76b117ce0cb4.png)
- escキーを押すなどして、元の画面に戻り、次は、pi5のネットワーク情報を確認するため、`ifconfig`を打ち込むと次のような画面になる。有線LAN(eth0)のアドレスが192.168.2.2となっていることが確認できた。また、無線LAN(wlan0)については設定を省略したため、ipアドレスが存在せず、pi5が無線LANに接続していないことが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/5acd54e9-de34-19a3-4cca-79d398734c85.png)
- 次は、インターネットにpi5が接続できているかを確認するため、curlコマンドを使う。
- 例えば、`curl wttr.in/tokyo`を打ち込むと、ターミナル表示に適したお天気サイト（wttr.in）に接続して、下記の結果を返す。pi5の無線LANは動作してないから、pi5がmac経由でインターネットに接続していることが分かる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/0f59ee53-1eca-63e0-8a01-fd9380dbd693.png)
- ちなみに、母艦でブラウザ(safari)を使って接続すると、こんな感じ。ブラウザ経由の場合は、ロケール情報等を乗っけてアクセスするから、自動的に漢字を使用してくれるんだろうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/3323c098-26f7-081b-785e-0c1a30f17795.png)
- 電源を切りたいときは、`sudo shutdown now`と打ち込む。`sudo shutdown`だけでもいいけど、電源が落ちるまでに無駄に時間がかかる。電源が落ちると、電源ボタンの色が赤くなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/aa3ce944-5831-d73d-9097-ebbe6dd790ec.png)
- なお、電源オフは電源ボタン2回クリックでも可能。ちなみにクリック1回だと、pi5にモニタを繋げていた場合、画面上で電源オフ画面がでる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/d165746d-8f5b-57fb-bd57-681649be41a2.png)

# 最後に
- とりあえず、pi5をヘッドレスでインターネットに繋ぐことが出来て満足した。【正攻法】と名付けたとおり、トリッキーなことは何もしていない。
- 次は、有線LANケーブルを使わず、usb-cケーブルで繋ぐことで、有線LANアダプタとLANケーブルを省く方法を紹介したい。ラズパイ4だと楽勝[^7]みたいだけど、pi5では大変だったよ。

[^1]:PC本体にキーボードやモニターを繋がないこと
[^2]:お洒落なこと
[^3]:Secure Shell（セキュア シェル）の略称。[ssh](https://ja.wikipedia.org/wiki/Secure_Shell)は、暗号や認証技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証を含むすべてのネットワーク上の通信が暗号化される。macosのターミナルで使用可能。接続するときは、`ssh [ユーザー名]@[ipアドレス or ホスト名]`。具体的には、 `ssh rpi5@192.168.2.2` や `ssh rpi5@raspberrypi.local` となる。
[^4]:picoもrpiosが動くものと勘違いしたまま購入して、インストーラーにpicoの設定がないことに驚愕した人。勢いでキットも買ってしまった。
![17166993126581.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/bced4d8d-f4a0-4e4e-a259-40146883bb23.jpeg)
[^5]:繰り返し、sdカードにrpiosを書き込むなら、都度、ネット経由でrpiosをダウンロードするより、imgファイルをダウンロードしておいた方が良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/4136aa8d-ee42-b1ae-dff0-136d51186c42.png)
Use customでダウンロードしたファイルを選択する。書込み速度は、sdカードにもよるけど、1秒で1%進むから、失敗を繰り返しても大丈夫。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/80b7c0be-e6ad-0e34-a0d9-fcb04c503b78.png)
imgは解凍前(.img.xz)のままで、使える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/0af66d7e-9b3e-aa4f-cb98-3e4f62422daf.png)
いろんなパターンを試すため、色違いになるようにsdカードを買った。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/fe0ccea6-4ec5-8a60-5891-109c5b13be2f.png)
[^6]:呪文を唱えないでsshすると、呪われてこんなメッセージが出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/b0279a57-0080-37e3-7403-9e1da58be0c1.png)
[^7]:`config.txt`と`cmdline.txt`にそれぞれ `dtoverlay=dwc2` と `modules-load=dwc2,g_ether` という呪文を追加で書き込むだけらしい。詳しくは、ググってね。
※写真では、ssdが刺さってるけど、初期設定のboot順はsdカードが先だから、問題なし。

# おまけ
- 翌日気づいたんだけど、母艦の有線LANアダプタを固定idにしなくてもpi5と繋がってた。母艦でifconfigコマンドを叩いた結果を見ると、アダプタ自体は「en6」に割り当てられてて、pi5側から見たときの母艦は、「インターネット共有」をオンにしたことにより「bridge100」に割り当てられているから、アダプタのip自体はどうでもいいみたい。この状態でもcurlコマンドによりネット接続できたのを確認できた。たまたま、お天気サービスはダウンしてたけど。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/28a08789-0eaa-d118-2bca-9cb96ff7f9f0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/b1d49a31-1ef3-1be6-83ec-52a3d3d43920.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/ae976b81-f102-2928-9384-dae51f200914.png)
- ちなみに、route -nコマンドでルートを確認するとこんな感じ。最初の行のGateway「192.168.2.1」からインターネットの世界に繋がっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/a6797732-621c-e0e1-944b-0fcc6f58e574.png)
- 母艦のnetstatコマンドで母艦のルートを確認するとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/7bfdc939-8778-d351-5667-3699fbfc0f99.png)
- 母艦のwifi接続はこんな感じだから、wifiが「en0」に割り当てられてて、最初の行の Gateway「10.128.128.128」からインターネットの世界に繋がっていると分かる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/64669032-0ae9-08b8-6079-1a87545b7d10.png)