- なぜ今さらラズパイか、そしてSSDブートにすることにしたのか
- 使ったもの
- Raspberry Pi 4 Model B 全部入りセットの紹介
- ラズパイ公式サイトから Raspberry Pi Imager アプリのダウンロード
- なぜかSSDからラズパイの起動ができない。その原因とは…
- micro SDカードの設定
- パソコンとSSH接続するための秘密鍵、公開鍵を作成する
- SSDの設定
- まとめ
【目次】
7.パソコンとSSH接続するための秘密鍵、公開鍵を作成する
次に、SSDブートする前に、ラズパイをパソコンでリモート制御するためのSSH設定前処理をしていきます。
ImagerでSSDに焼き込む前にSSH設定を済ませておけば、格段に楽です。
私は最初、SSH設定せずに起動したら、ラズパイ側の設定が鬼のように面倒で、めちゃめちゃ労力かかりました。
ですから、事前に済ませておきます。
7-1: ラズパイとパソコンをSSH接続しなければならない理由
私は一昨年からラズパイを本格的に使用し始めたのですが、今までの設定でお分かりの通り、ラズパイ本体のみの操作はとても面倒です。
やはり、パソコンのVSCodeという素晴らし過ぎるエディタを使ってリモート制御したいですよね。
特に今回はラズパイのメジャーOSであるRasbianを使わずに、Ubuntu Serverを使うことが目的なので、VSCodeでリモート制御するためにSSH接続しなければならないのです。
SSH接続では、初回にパスフレーズを入力してログインできれば、後はパスワード不要でスラスラと作業できます。しかもデータを暗号化してくれるので安心ですね。
SSHとはSecure Shellの略らしく、パスワード認証と公開鍵認証があります。そして、通信データは全て暗号化されるのです。
パスワード認証よりも公開鍵認証の方が安全性は高く、個人的にはとても扱いやすいため、今回は公開鍵認証方式を使います。
公開鍵認証については、ド素人の私が過去にこのブログでSSLの件で扱ったことがあるので、こちらの記事を参照してみてください。
暗号化方式についてはSSLとほぼ同じなので、参考になるかもしれません。よくできた仕組みです。
7-2: 秘密鍵、公開鍵をパソコンで作成する
SSH接続用の秘密鍵、公開鍵を作成します。
Windows 10 パソコンで説明します。
Windows 10以降の場合、コマンドプロンプトで秘密鍵や公開鍵を作成するツールが予めインストールされているみたいです。
まず、自分のユーザー名フォルダに.ssh
フォルダを作成しておきます。
パスは
C:¥Users¥自分のユーザー名
です。
(図320)
次に下図の様にWindowsのコマンドプロンプトを起動します。
そして、
cd .ssh
と入力して、.ssh
フォルダに移動しておきます。
CDコマンドはChange Directory という意味です。
(図321)
次に、秘密鍵と公開鍵を生成するコマンドを打ちます。
ssh-keygen -t ed25519 -f raspi_key -C ""
(図322)
このコマンドの意味については、以下のサイトを参考にさせていただきました。
https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html
コマンドオプションの -t
は、鍵の暗号化形式を決めます。
ed25519
は、現状では最強の暗号化形式だそうです。
-f
はファイルを指定します。ここではraspi_key
としました。
-C
はコメントを指定しますが、””
とするとコメントを削除するそうです。
そして、Enterを押すと、下図の様にパスフレーズを聞いてきますので、長めで出来るだけ複雑な任意のパスワードを入力します。(※パスワードを入力しても文字は表示されません)
(図323)
次に、もう一度同じパスワードを入力します。
(図324)
すると、下図の様になり、
秘密鍵ファイル: raspi_key
公開鍵ファイル: raspi_key.pub
が生成されました。
(図325)
では、エクスプローラーで.sshフォルダを見てみると、以下のようになっていると思います。
(図326)
以上、WindowsパソコンでのSSH用秘密鍵、公開鍵の生成方法でした。
8.SSDの設定
では、次に、SSDに先ほど説明したRaspberry Pi ImagerでUbuntu Serverをインストールしていきます。
因みに、先に説明しましたが、最新版(たぶん2021年以降のロット)のRaspberry Pi 4B ならばSDカードインストールは省いて、ここからインストールすれば良いと思われます。
8-1: SSDにImagerでUbuntu Serverをインストールする
今回使ったRaspberry Pi Imagerのバージョンはv1.7.3です。バージョンが変わると使い方も多少変わるのでご了承ください。
Windows 10で説明します。
今回使ったUSB-SSDは、先にも紹介しましたが、Amazonで購入したものです。
まず、パソコンにSSDをUSBポートに挿し込みます。
内容をエクスプローラーで見ると、下図の様に表示されると思います。
(図350-0)
これらのファイルはImagerでフォーマットすると全て消去されます。
まず、ダウンロードしたImagerをパソコンで起動し、下図の様に「OSを選ぶ」をクリックします。
(図350)
すると、下図の様になり、「Other general-purpose OS」をクリックします。
(図351)
次に、下図の様にUbuntuをクリックします。
(図352)
次に、先にmicro SDカードでのUbuntu Serverインストールと同じOSの
Ubuntu Server 22.04.01 LTS(64-bit)
を選択し、Enterを押します。
(図353)
次に、「ストレージを選ぶ」をクリックします。
(図354)
下図の様に、予めパソコンのUSBポートに挿し込んでおいたSSDを選択します。
次に、下図の様に歯車アイコンをクリックします。
(図356)
次に下図の様に「ホスト名」にチェックを入れ、先ほどmicro SDカードのところで入力したホスト名と同じ名前にしておきます。
(図357)
次に、micro SDカードのところで説明したものと異なることをやります。
それは、SSH設定です。
まず、先ほど紹介しましたが、SSH用の秘密鍵、公開鍵を作成したフォルダを開き、公開鍵の方をテキストエディタで開きます。拡張子が .pub
となっているものですので、間違えないでください。
(図358-0-1)
下図ではサクラエディタで開いたものです。
このssh-ed25519 xxxxx………
となっているところ1行まるまるコピーしておきます。改行のコピーは不要です。
(図358-0-2)
次にImagerに戻り、下図の様に「SSHを有効化する」にチェックを入れます。
そして、「公開鍵認証のみ許可する」を選択し、下図のように先ほどコピーした公開鍵のテキストを貼り付けます。
(図358-1)
次に、下にスクロールして、下図の様に「ユーザー名とパスワードを設定する」にチェックを入れ、SDカードで設定したものと同じユーザー名とパスワードにします。
(図359)
あとはSDカードのところで説明したものと同じですが、下図の様に「ロケール設定をする」にチェックを入れ、タイムゾーンをAsia/Tokyo
にし、キーボードレイアウトにjp
と入力します。
(図360)
「永続的な設定」ではとりあえず、下図の様にすればOKです。
そうしたら、「保存」をクリックします。
(図361)
これでImagerの設定は全て終了したので、下図の様に「書き込む」をクリックします。
(図362)
すると、下図の様にSSDのデータが完全に削除されますがよろしいですか?と聞いてくるので、「はい」をクリックします。
(図362-2)
すると、SSDに書き込みが始まります。
12分くらいかかりました。
(図362-3)
SDカードの時と同様、下図の様なメッセージが出ますが、すべてキャンセルします。
(図363)
書き込みが完了すると、下図の様になるのでImagerを閉じてOKです。
(図363-2)
ところで、SSDの内容がどうなっているか見たかったので、SSDを抜いて、再度USBポートに挿し込んで、ドライブ全体のプロパティを見てみました。
すると、下図の様になっていました。
(図364)
あれ?
250GBのSSDのはずが、たった252MBしかありませんね。
実は、後にラズパイ側でトータル容量を確認すると、ちゃんと250GBありましたので、心配無用です。
どうやら、Imagerでパーティションが分けられてフォーマットされており、252MBはブートローダ専用の領域のようです。
8-2: ラズパイ本体をSSDから起動し、apt full-upgrade する
ようやくここまで来ました。
ラズパイ本体のUSBポートにSSDを挿し込み、ディスプレイとキーボードとLANケーブルを接続し、ACアダプターの電源を入れます。
すると、下図の様にSSDのアクセスランプが点きました!!!
やったぜぃ!
(図380)
すると、ディスプレイのコマンドラインが進行し、下図の様にSSHキーが表示されて、コマンドラインが停止します。
先ほど設定したSSHは成功したようです。
(図381)
次に、Enterを押して、ログイン名とパスワードを入力します。
(図382)
すると、下図の様になって、無事にSSDからLinuxコマンドラインが起動しました。
(図383)
ここで、SSDのトータル容量を確認してみたいと思います。
以下のコマンドを打ちます。
df -h --total
すると、下図のようになりました。
(図384)
/dev/sda1
というのが、ブートローダ(ファームウェア)の領域(パーティション)で、
/dev/sda2
が、実際にデータを保存する領域だそうです。
先ほどWindowsのプロパティで確認した、ブートローダの252MBとほぼ合っていますね。
そして、トータル232GBあることで安心しました。
では、今度はmicro SDカードのところでやったように、ファームウェアをアップデートします。
以下のコマンドを打ちます。
sudo apt update
(図385)
次に、以下のコマンドを打ちます。
sudo apt full-upgrade
すると、下図の所で停止するので、Yキーを打ちます。
5~10分くらい経過して、インストール終了すると、下図の様になるのでEnterを押します。
(図387)
すると、下図の様になるので、とりあえずこのまま<OK>にカーソルを持っていきEnterを押します。
(図388)
すると、下図の様になります。
(図389)
次に、このアップデートを有効にするために再起動します。
以下のコマンドを打ちます。
sudo reboot
パスワードも入力します。
(図390)
すると、再起動し、以下の画面になったらログインします。
(図391)
これでファームウェアがアップデートされました。
(図392)
ここで、ブートローダのバージョンを確認しておきます。
vcgencmd bootloader_version
すると、下図の様になって、結局バージョンは変わらずでした。
(図393)
因みに、SSDの容量がどう変化したのか気になったので確かめてみます。
以下のコマンドです。
df -h --total
すると、下図のようになりました。
(図394)
このように、apt full-upgrade する前と後では、ブートローダの容量がかなり変化してしまいました。
full-upgradeする前は30%使用だったのに、upgrade後は59%になっていました。
おいおい、このまま定期的にupgradeすると、パンパンになるんではないかい?
まぁブートローダくらいならそんなに容量は食わないと思いますが、結局はラズパイ公式が決めたパーティションなので、心配無用だと思います。
ふぅ・・・
これでようやくラズパイのSSD起動設定が完了しました。
ESP32に比べてとても面倒で、長い時間かかりました…。
最近流通しているラズパイならば、デフォルトでUSBブートができるはずで、もっと楽にできると思います。
以上、Raspberry Pi 4B のSSDブート方法の紹介でした。
まとめ
2020年12月以前のRaspberry Pi 4B は、デフォルトではSSDブートできず、micro SDでブートしてから、raspi-configでUSBブートに変えて、SSDブートするという手間のかかるものでした。
このブログ記事を書く前は何度も回りくどい方法でインストールやり直しましたが、3回くらいやるとある程度やり方が分ってきましたね。その分、えらい時間浪費しましたが…。
これでmicro SDでのラズパイ運用の不安が無くなり、思う存分データを読み書き出来そうです。
次回はラズパイをパソコンのVSCodeでリモート接続する設定を記事にする予定です。
というわけで、今回はここまでです。
ではまた…。
コメント
2023年投稿としては、始まりしか読んでいませんが、Ubuntuを選んだ理由や、インストール方法は、古い情報だと思います。
匿名さん
記事をご覧いただきありがとうございます。
記事中でもタイトルでも言っておりますが、この記事は自分用の備忘録です。
Ubuntuを選んだ理由は私個人の理由なのです。他の方々には別のOSの方が良いかも知れません。
インストール方法は記事中でも述べていますが、確かに古い情報です。
今はimagerで簡単にSSDドライブブートできるということは知っております。
記事を読んでいただけると分かると思いますが、私の使ったラズパイは2020年頃に購入したもので、それをSSDに換装するのが面倒だったというわけです。
>> 私の使ったラズパイは2020年頃に購入したもので、それをSSDに換装するのが面倒だったというわけです。
SSDに換装ってなんのことです?
よく読んで下さいました。
記事に書いてある通りですが、まぁ、私の文章は日本語になっていないとよく言われます。
(日本人じゃないかも…)
ドライブドライブ笑
匿名さん
うれしいですね。記事をまた読んで下さって感謝です。
確かに誤った表現でしたので、記事を修正しました。
ありがとうございました。
因みに、間違いかどうかChat GPTに聞いてみました。
一般的には間違いではないけど、厳密には冗長ということみたいっすね。
いずれにしても、わざわざ教えて頂き、ありがとうございました。
m(_ _)m