tag:crieit.net,2005:https://crieit.net/tags/RaspberryPi5/feed 「RaspberryPi5」の記事 - Crieit Crieitでタグ「RaspberryPi5」に投稿された最近の記事 2024-02-27T00:48:40+09:00 https://crieit.net/tags/RaspberryPi5/feed tag:crieit.net,2005:PublicArticle/18777 2024-02-27T00:46:48+09:00 2024-02-27T00:48:40+09:00 https://crieit.net/posts/Raspberry-Pi-5-Ubuntu-24-04-LTS-SSH Raspberry Pi 5 に Ubuntu 24.04 LTS を入れて SSH するまで <p>ついに日本でも、 Raspberry Pi 5 の技適対応モデルが発売された。</p> <p>Raspberry Pi にインストールする OS と言えば、まずは <a target="_blank" rel="nofollow noopener" href="https://www.raspberrypi.com/software/">Raspberry Pi OS (旧 Raspbian)</a> だが、同じ Debian ベースの <a target="_blank" rel="nofollow noopener" href="https://ubuntu.com/download/raspberry-pi">Ubuntu</a> も Raspberry Pi 向けの公式イメージを出している。</p> <p>但し、 Raspberry Pi 5 に対応しているのは、 Ubuntu 23.10 (コードネーム: mantic) 以降のみとなる。</p> <p>現在リリース済みの 23.10 は「非LTS」バージョンとなり、サポートが 9ヶ月 (2024年6月まで) と短い。<br /> 常用するなら、サポートが 5年 (ESM なら 10年) と長い LTS バージョンが望ましいが、残念ながら 22.04 LTS Raspberry Pi 5 に非対応だ。</p> <p>LTS バージョンの次回リリースは 24.04 LTS (コードネーム: noble / 2024年4月リリース予定) で、現在絶賛開発中だ。</p> <p>そんな開発中の 24.04 LTS も、デイリースナップショットが手に入る。<br /> そいつを使って<strong>ディスプレイやキーボードが無い状態</strong>で、インストールから SSH 接続までやってみよう。</p> <p>Raspberry Pi 5 をターゲットに書いているが、 Raspberry Pi 3, 4, Raspberry Pi Zero 2 W でも同じ手順でできるはずだ。</p> <p>なお、この記事は 24.04 LTS がリリースされたら、それに併せて内容に書き換えていくつもり。</p> <h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2> <ul> <li>microSD カードに Ubuntu の OS イメージを焼いたあと、 RasPi に挿す<strong>前</strong>に初回起動時の設定を書き換える</li> <li>cloud-init の挙動を理解しよう</li> <li>ディスプレイなし & 無線LAN Only だと少し工夫がいる</li> <li>今回の記事の内容は、<a target="_blank" rel="nofollow noopener" href="https://aquasoftware.net/blog/?p=1404">Raspberry Pi に Ubuntu を入れて SSH でログインするまでの A to B | Aqua Ware つぶやきブログ</a> の二番煎じ <ul> <li>Ubuntu 24.04 LTS に合わせて内容はアップデートされている</li> </ul></li> </ul> <h2 id="準備するもの"><a href="#%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B%E3%82%82%E3%81%AE">準備するもの</a></h2> <ul> <li>Raspberry Pi 5 <ul> <li>Raspberry Pi 3, 4 でも同じ手順でいけるはず</li> </ul></li> <li>4GB 以上の micorSD カード <ul> <li>IOPS が高い、「アプリケーションパフォーマンスクラス」が A2 のものが良いだろう。値段や速度を考えると、実用上は 64GB 以上になるだろうか。</li> <li>私は、<a target="_blank" rel="nofollow noopener" href="https://amzn.to/42J1AeI">ARCANITE 64GB microSDXCカード 【A2】、UHS-I U3、V30、4K、C10</a> 値段の割にパフォーマンスが良かったため、これを使った。</li> <li>後述するが、最終的には NVMe SSD にした方が断然良い</li> </ul></li> <li>microSD を書き込める PC (Win, Linux, mac)</li> <li>インターネットに繋がる Wi-Fi または イーサネットケーブル</li> </ul> <p>以下もあると便利だが、今回の手順では無くても問題ない。</p> <ul> <li>micro-HDMI で繋がるディスプレイ 又は 変換コネクタ</li> <li>RasPi に繋げる USB キーボード</li> </ul> <h2 id="イメージファイルの取得"><a href="#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%8F%96%E5%BE%97">イメージファイルの取得</a></h2> <p>正式リリース前の Raspberry Pi 向けデイリースナップショットイメージは、以下のいずれかから手に入る。</p> <p>今回は、サーバーOS的に SSH して使う事が目的なので、<strong>後者のサーバー版</strong>を利用する。</p> <ul> <li>Raspberry Pi 向けデスクトップ版イメージ <ul> <li><a target="_blank" rel="nofollow noopener" href="https://cdimage.ubuntu.com/daily-preinstalled/current/">https://cdimage.ubuntu.com/daily-preinstalled/current/</a></li> </ul></li> <li>Raspberry Pi や、汎用 64-bit ARM, RISC-V 向けサーバー版イメージ <ul> <li><a target="_blank" rel="nofollow noopener" href="https://cdimage.ubuntu.com/ubuntu-server/daily-preinstalled/current/">https://cdimage.ubuntu.com/ubuntu-server/daily-preinstalled/current/</a></li> </ul></li> </ul> <p>リンク先から、 <code>noble-preinstalled-server-arm64+raspi.img.xz</code> を選択してダウンロードしよう。</p> <p>24.04 LTS が正式リリースされれば、 <a target="_blank" rel="nofollow noopener" href="https://ubuntu.com/download/raspberry-pi">Install Ubuntu on a Raspberry Pi | Ubuntu</a> のページからダウンロードできるようになるはずだ。</p> <h2 id="ブータブル SD の焼き込み"><a href="#%E3%83%96%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AB+SD+%E3%81%AE%E7%84%BC%E3%81%8D%E8%BE%BC%E3%81%BF">ブータブル SD の焼き込み</a></h2> <p>ダウンロードしたイメージファイルを、ブート可能な状態で microSD に書き込む。<br /> ダウンロードしたファイルをただ SD カードに保存するのではなく、専用のツールで書き込む必要があるぞ。</p> <p>方法は色々あるのだが、今回は個人的にオススメな <a target="_blank" rel="nofollow noopener" href="https://www.balena.io/etcher/">balenaEtcher</a> を使った方法で紹介しよう。</p> <ol> <li>microSD を SDカードスロットに挿す</li> <li>balenaEtcher を DL & 起動する。 <ul> <li>DLする balenaEtcher は Portable 版で良い</li> </ul></li> <li>前項でダウンロードするした <code>***.img.xz</code> を選択して、書き込みを開始する <ul> <li><code>***.img.xz</code> は、 <code>***.img</code> ファイルを <code>.xz</code> 形式で圧縮したものなのだが、手動で解凍せず直接 balenaEtcher で選択してしまって問題ない。 balenaEtcher は書き込み時にオンザフライで解凍する。</li> </ul></li> </ol> <p>なお、リリース済みの Ubuntu (や Raspberry Pi OS など) であれば、一般的に <a target="_blank" rel="nofollow noopener" href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a> というツールを使った方法がオススメされるのだが、DLが遅いからか、全体的に時間がかかるので私はあまりオススメしない。</p> <h2 id="system-boot パーティション内の cloud-init 等の設定を書き換える"><a href="#system-boot+%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E5%86%85%E3%81%AE+cloud-init+%E7%AD%89%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B">system-boot パーティション内の cloud-init 等の設定を書き換える</a></h2> <p>作成した micorSD を早速 RasPi に挿す <strong>…前に</strong> 、 初回セットアップ設定を書き換える。</p> <p>一度書き込んだ microSD を再び PC に挿し直すと、 <code>"system-boot"</code> という 500MB 位の FAT32 パーティションが開けるはずだ。</p> <p>ここには、 cloud-init という仕組みで初回起動時の設定を定義するファイルがいくつか含まれている。<br /> これらを書き換えていく。</p> <p>書き換え後のファイルは <a target="_blank" rel="nofollow noopener" href="https://gist.github.com/advanceboy/c9b020fe09ababd390c0e95d74dfde7e">こちらの Gist</a> に置いてあるので、結果だけ欲しい人はここから DL をば。</p> <h3 id="cloud-init の network-config"><a href="#cloud-init+%E3%81%AE+network-config">cloud-init の network-config</a></h3> <p>以下のように書き換える。<br /> (元のファイルからの差分を <code>diff</code> のフォーマットで表示している。 以降同様。)</p> <pre><code class="diff">--- network-config.org +++ network-config @@ -22,23 +22,11 @@ ethernets: eth0: dhcp4: true optional: true -# wifis: -# wlan0: -# dhcp4: true -# optional: true -# access-points: -# myhomewifi: -# password: "S3kr1t" -# myworkwifi: -# password: "correct battery horse staple" -# workssid: -# auth: -# key-management: eap -# method: peap -# identity: "[email protected]" -# password: "passw0rd" -# ca-certificate: /etc/my_ca.pem - -# regulatory-domain: GB + wifis: + wlan0: + dhcp4: true + access-points: + "SSID-of-myhomewifi": + password: "password-of-myhomewifi" </code></pre> <p>Ubuntu では Netplan を使ってネットワークが管理されるため、 Netplan の形式で記述する。</p> <p>規定値では IPv4 の有線イーサネットのみ、 DHCP 自動取得で接続されるようになっている。<br /> 必要に応じて、上述のように Wi-Fi で接続する SSID 等の情報を追記したり、逆に有線LANを使わないなら <code>ethernet:</code> プロパティごと削除してしまってもよいだろう。</p> <p>SSID やパスワードは、各自の環境のものに置き換えて書き換えてほしい。</p> <p>コメントアウトされている wifi の記述例では、 <code>wifis.wlan0.optional</code> を <code>true</code> に設定しているが、もし Wi-Fi 単独でネットワークに接続するつもりならこの設定は行わないようにしよう。<br /> さもないと、OS起動の度に2分も余計に時間かかる羽目になる。<br /> これは、 <code>systemd-networkd-wait-online.service</code> デーモンが、(optional true を指定していない) 有効なネットワークの接続をタイムアウトするまで待機してしまうためだ。</p> <p>network-config 自体のリファレンスはこちら。<br /> <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/23.4.1/reference/network-config.html">https://cloudinit.readthedocs.io/en/23.4.1/reference/network-config.html</a></p> <h3 id="cloud-init の user-data"><a href="#cloud-init+%E3%81%AE+user-data">cloud-init の user-data</a></h3> <p>こちらは書き換え箇所が多いので、何箇所かに分けて説明していく。</p> <p>まず最初はユーザー名まわり。</p> <pre><code class="diff">--- user-data.org +++ user-data @@ -17,13 +17,17 @@ # Some additional examples are provided in comments below the default # configuration. +# Override the `default_user` configuration from `/etc/cloud/cloud.cfg`. The `user` dictionary keys supported for the default_user are the same as the `users` schema. +user: + name: newusername + # On first boot, set the (default) ubuntu user's password to "ubuntu" and # expire user passwords chpasswd: expire: true users: - - name: ubuntu - password: ubuntu + - name: newusername + password: newpassword type: text ## Set the system's hostname. Please note that, unless you have a local DNS </code></pre> <p>規定では、 cloud-init パッケージの <code>/etc/cloud/cloud.cfg</code> ファイルの定義によって、 "ubuntu" というユーザーが作成される。</p> <p>しかし、 既知のユーザー名をそのまま使うのはセキュリティ的にも若干不安があるし、 作成後のユーザー名を書き換えるのは若干面倒なので、作成されるデフォルトのユーザー名自体を、他の名前 (上記例だと "newusername") に書き換えてしまおう。</p> <p>また、 <code>chpasswd</code> による、初回アクセス時のパスワード変更対象とするユーザー名も、併せて変更しておく。</p> <p>--</p> <p>次にホスト名とキーボード周りの設定。</p> <pre><code class="diff">@@ -31,14 +35,14 @@ ## setting the hostname here will not make the machine reachable by this name. ## You may also wish to install avahi-daemon (see the "packages:" key below) ## to make your machine reachable by the .local domain -#hostname: ubuntu +hostname: ubuntu-raspi5 ## Set up the keyboard layout. See localectl(1), in particular the various ## list-x11-* sub-commands, to determine the available models, layouts, ## variants, and options -#keyboard: -# model: pc105 -# layout: gb +keyboard: + model: pc105 + layout: jp # variant: # options: ctrl:nocaps </code></pre> <p>ここはまぁ、見た通りなので追加での説明はいらないかな。</p> <p>--</p> <p>お次は SSH まわり。</p> <pre><code class="diff">@@ -53,6 +57,8 @@ #ssh_import_id: #- lp:my_launchpad_username #- gh:my_github_username +ssh_authorized_keys: +- ssh-rsa AAAA<中略>== rsa-key-of-user1 ## Add users and groups to the system, and import keys with the ssh-import-id ## utility </code></pre> <p><code>ssh_authorized_keys</code> に直接指定するか、<code>ssh_import_id:</code> のところで自分の GitHub のユーザー名を指定してインポートすることにより、 デフォルトのユーザー (上記例だと "newusername") に登録する公開鍵を指定する。</p> <p>SSH に登録するパスワードログインは規定で禁止されているので、この設定をしておかないと SSH による遠隔からのアクセスができない。</p> <p>--</p> <p>タイムゾーンや起動後の処理まわり。</p> <pre><code class="diff">@@ -82,8 +88,13 @@ #- python3-gpiozero #- [python3-serial, 3.5-1] +# locale and timezone +timezone: Asia/Tokyo + ## Write arbitrary files to the file-system (including binaries!) -#write_files: +write_files: +- path: /etc/cloud/cloud-init.disabled + defer: true #- path: /etc/default/console-setup # content: | # # Consult the console-setup(5) manual page. </code></pre> <p>とりあえずタイムゾーンは日本標準時にしておこう。</p> <p>次に、 <code>write_files:</code> のほうだが、これは次回以降のブート時に cloud-init が余計に起動しないようにするための設定だ。</p> <p>cloud-init の設定の大半は、 初回ブート時にただ一度だけ実行されるのだが、 cloud-init サービス自体は基本的に毎回常に起動して、サービスとして常駐しっぱなしになっている。<br /> <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/latest/topics/modules.html">Modules</a> で、 <code>Module frequency: per always</code> となっているモジュールの実行などは、ブートする度に毎回実行される。<br /> そうすると、場合によっては cloud-init の実行ログがログイン画面を覆ってしまうことが毎回の起動ごとに発生して鬱陶しい。<br /> このため、 <code>/etc/cloud/cloud-init.disabled</code> という <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/latest/howto/disable_cloud_init.html#method-1-text-file">空ファイルを作成しておく</a> ことで、 次回以降の起動時に cloud-init を無効にしている。</p> <p><code>defer: true</code> が指定されている部分についてだが、これは cloud-init の初期化処理が大きく分けて Network (<code>cloud_init_modules</code>), Config (<code>cloud_config_modules</code>), Final (<code>cloud_final_modules</code>) という <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/latest/explanation/boot.html">3ステージ に分かれて</a> いることに関係する。<br /> <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/latest/reference/modules.html#write-files"><code>write_files:</code> モジュール</a> は Ubuntu の既定だと Network ステージに実行されてしまい、このタイミングで <code>cloud-init.disabled</code> ファイルが作成されてしまうと、 Config や Final ステージの処理が実行されなくなってしまう。<br /> このため、 <code>defer</code> オプションを true にして Final ステージで <code>cloud-init.disabled</code> ファイルが作成されるよう調整しているのだ。</p> <p>なお、どのモジュールがどのステージで実行されるかは、 <a target="_blank" rel="nofollow noopener" href="https://cloudinit.readthedocs.io/en/latest/reference/base_config_reference.html#example"><code>/etc/cloud/cloud.cfg</code></a> で定義されている。<br /> (各ディストリビューション毎の <a target="_blank" rel="nofollow noopener" href="https://git.launchpad.net/ubuntu/+source/cloud-init/tree/config/cloud.cfg.tmpl?h=ubuntu/noble"><code>cloud.cfg</code> のテンプレートソースはこちら</a>)</p> <hr /> <p>最後に、コマンドの実行。<br /> 以下の <code>192.168.0.2</code> の部分は、 ssh で RasPi に接続するゲスト PC の IPアドレス に書き換えてくれ。</p> <pre><code class="diff">@@ -106,7 +117,9 @@ # permissions: '0644' ## Run arbitrary commands at rc.local like time -#runcmd: +runcmd: +# after wlan0 is connected, write the arp entry to target machine on background job +- [ sh, -c, 'sleep 2; ping -c 4 192.168.0.2' ] #- [ ls, -l, / ] #- [ sh, -xc, "echo $(date) ': hello world!'" ] #- [ wget, "http://ubuntu.com", -O, /run/mydir/index.html ] </code></pre> <p>このコマンドは、仮に ssh ゲストの IP アドレスが <code>192.168.0.2</code> であると仮定して、そこへ向かって Ping を打っている。<br /> なぜなら、 ゲストPC から RaspPi の IP アドレスを ARP コマンドで確実に調べられるようにするためだ。</p> <p>RasPi に繋げるディスプレイがないことを前提とすると、 SSH するために DHCP によって RasPi に割り当てられた IP アドレスをどうやって調べるのか、と言う問題に直面する。</p> <p>RasPi の MAC アドレスの先頭 24bit は、 Raspberry 財団の所持する OUI から割り当てられるはずなので、以下のいずれかになるはずだ。</p> <pre><code>28:CD:C1 2C:CF:67 B8:27:EB D8:3A:DD DC:A6:32 E4:5F:01 </code></pre> <p>通常、 RasPi がオンラインになったときに、 ARPリクエストがブロードキャストされるため、 同一ネットワーク内の PC の ARP テーブルに RasPi のレコードが追加され、 以下のような arp コマンドで対象の IP アドレスを調べることができるようになる。。。 <strong>多くの場合は。</strong></p> <pre><code class="powershell">while(1) { arp -a | ?{ $_ -match '\s(28-cd-c1|2c-cf-67|b8-27-eb|d8-3a-dd|dc-a6-32|e4-5f-01)' }; Start-Sleep -Seconds 1} </code></pre> <p>ところが、 RasPi が Wi-Fi で繋いでいる先が (単なるアクセスポイントではなく) ルーターだったりすると、 RasPi が 同じサブネット内に ARPリクエスト をブロードキャストしたのにも関わらず、 ルーターが無駄に気を利かせて ARPリクエスト を代替して投げてしまい、 同じサブネットの別の端末の ARP テーブルには、 RasPi の MAC アドレスのレコードが記録されないことがある。</p> <p>そこで、 RasPi 側から SSH のアクセス元となる PC を指定して ping を投げることで、 その PC の ARP テーブルに確実に RasPi が載るようにしている。</p> <p>--</p> <p>ここまで書き換えたら、 SD カードを取り外して RasPi に挿し、いよいよ起動する。</p> <h3 id="cloud-init 周りの補足"><a href="#cloud-init+%E5%91%A8%E3%82%8A%E3%81%AE%E8%A3%9C%E8%B6%B3">cloud-init 周りの補足</a></h3> <p>system-boot パーティション内の中身について、もう少し細かい仕組み周りを深堀りして補足したい。<br /> 興味が無ければ、読み飛ばしてしまって次の章に進んでもらって問題ない。</p> <p>system-boot パーティション直下にある <code>README</code> というファイルを開くと、このパーティションに存在するファイルの概要が簡単に書いてある。</p> <pre><code class="text:README">================== The Boot Partition ================== This file belongs to the boot partition of the Ubuntu Server for Raspberry Pi. ... </code></pre> <p>このパーティションには、Raspberry Pi に於ける BIOS の代替となる <a target="_blank" rel="nofollow noopener" href="https://www.raspberrypi.com/documentation/computers/config_txt.html">config.txt</a> といった H/W 設定用のファイルや、 cloud-init の構成ファイルなどが含まれていることがわかる。</p> <p>このうち、<strong>cloud-init</strong> は Infrastructure as Code (IaC) の一種だ。<br /> その名の通り、 AWS などのクラウド上の仮想マシンの初期設定を念頭においた仕組みだが、それに留まらず、一般的な Linux インスタンスの初期設定に活用される。<br /> 設定内容は、YAML形式の設定ファイルを使用して記述し、クラウドやディストリビューションの違いをある程度吸収して初期設定を行うことができる。<br /> Ubuntu の OS のイメージ内には、事前に cloud-init のサービス(デーモン)が組み込まれており、OS の起動時に何らかの方法で指定された設定ファイルを読み取って、初回設定処理が実行される仕組みとなっている。</p> <p>Raspberry Pi 用の Ubuntu Server イメージでは、この cloud-init 用の設定ファイルが上記の <code>system-boot</code> パーティションから取得される。<br /> イメージ内のデフォルト値の定義と、<code>system-boot</code> パーティション内のユーザー定義が組み合わされ、初期設定が進められるワケだ。</p> <p>たとえば、今回 microSD に書き込んだイメージをそのまま書き換えずに Ubuntu を起動すると、ユーザー認証が以下のように構成される。</p> <ol> <li><code>ubuntu</code> というユーザーID</li> <li><code>ubuntu</code> というパスワード</li> <li>初回起動時にパスワードの変更を求める</li> <li>SSH サーバーの起動</li> </ol> <p>このうち、 (1), (4) は、OSに組み込まれた <code>/etc/cloud/cloud.cfg</code> の定義によるもの。<br /> そして、 (2), (3) は <code>system-boot</code> パーティション内の <code>user-data</code> ファイル内の以下の部分の定義によるモノだ。</p> <pre><code class="yaml:user-data">#cloud-config chpasswd: expire: true users: - name: ubuntu password: ubuntu type: text </code></pre> <p>このデフォルトの構成だと流石にセキュリティ的にアレなので、書き換えを行っている… というのが、前項の設定の真相となる。</p> <h2 id="Raspberry Pi に割り当てられた IP アドレスを調べられるようにして起動"><a href="#Raspberry+Pi+%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%81%9F+IP+%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%89%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E8%B5%B7%E5%8B%95">Raspberry Pi に割り当てられた IP アドレスを調べられるようにして起動</a></h2> <p>こんな感じでひととおりファイルを書き換えたら、いよいよ RasPi を起動する。</p> <p>…と、その前に、 ssh でつなぐ予定のゲスト端末で、管理者権限で以下のコマンドを実行し、端末内の「arp テーブル」をリセットする。</p> <pre><code class="powershell">arp -d * </code></pre> <p>その後、ようやくだが RasPi に microSD を挿して起動させよう。<br /> 初回ブート時の設定を適用しながら起動してくれる。</p> <p>ssh でつなぐ予定のゲスト端末の PowerShell で、以下のような arp コマンドのループを実行し、ゲストPC から RasPi の IPアドレスを調べよう。<br /> 初回起動され安定しただろうところ(SDカードの I/O 性能によるが 1~5分?)で、 RasPi の IP アドレスがヒットしてくるようになるはずだ。</p> <pre><code class="powershell">while(1) { arp -a | ?{ $_ -match '\s(28-cd-c1|2c-cf-67|b8-27-eb|d8-3a-dd|dc-a6-32|e4-5f-01)' }; Start-Sleep -Seconds 1} </code></pre> <p>公開鍵の登録が適切に行えれば、その IP アドレスに対し SSH できるはずだ。</p> <p>初回アクセス時は、以下のようなパスワード変更を求められる。</p> <pre><code>WARNING: Your password has expired. You must change your password now and login again! Changing password for newusername. </code></pre> <p>古いパスワード ("newpassword") と変更後のパスワードを改めて入れる。</p> <h2 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h2> <p>一般的な1列端子の microSD で最速な UHS-I SDR104 のバスインターフェースに Raspberry Pi 5 が対応したことや、最近の安価な microSD の I/O 速度もだいぶ向上したのも相まって、 RasPi 4B が登場した頃と比べると、体感できる I/O 性能が大きく向上している。<br /> おかげで、起動やパッケージのインストール、更新などが快適になった。</p> <p>だいぶ高価になってしまった価格的な面からも、 Raspberry Pi の 非Zero/Pico シリーズは「Linuxが動くマイコン」から「小型のLinuxマシン」という面がより強くなったと感じる。<br /> (それはどうなんだという気もするけど。)</p> <p>更に RasPi 5 では PCI Express (PCIe) にも対応しているため、 NVMe で繋いだ SSD からブートさせると、更に桁違いの高速化が臨める。</p> <p>近いうちに、そちらも試してみようと思う。</p> <p>…ただ、どうせ PCIe に対応するなら、microSD Express に対応してくれれば、 NVMe 用 HAT とか買い足さんで済むから良かったのにな~…と、思わんでもない。<br /> しかし、2019年にSD7.1の規格として登場してから4年も経った2024年現在その製品が売られているとこを見たことないので、まぁ無理な相談か。</p> advanceboy