Ubuntu日和

【第35回】3,000円未満の「Raspberry Pi Zero 2 W」でUbuntuを遊ぼう

一通りのインターフェイスを備えた、まさに小型PCなRaspberry Pi Model 4B(上)と、非常に小型なRaspberry Pi Zero 2 W(下)。500円玉と比べると、Zeroの小ささがよく分かると思う。なおModel 4Bの基板サイズは、クレジットカードとほぼ同じだ

Raspberry Piとは

 Raspberry Piとは英Raspberry Pi社によって開発されている、ARMプロセッサ搭載のシングルボードコンピュータ(SBC)のシリーズだ。元々は教育向けを想定して開発されたが、HDMI、USB、NICといったインターフェイスを備えており[^1]「小型のPC」のように扱えたことや、非常に安価であったことから、世界的に大ヒット。現在ではホビーユースから産業用の組み込み目的まで、非常に広い分野で利用されているプロダクトだ。PC Watchでもよくニュースにも登場するため、名前くらいは聞いたことがあるのではないだろうか。

 Raspberry Piは一般的なx86_64のPCと比較すると、非常に非力なコンピュータでもある。だがそれでもRaspberry Piを使うメリットは、なんといってもSBCゆえのフットプリントの小ささと、その省電力ぶりだ。

 またOSをブートするストレージにはmicroSDやUSBメモリが使え、本体にはファンの類は一切搭載されていない。いわゆる「ゼロスピンドル」構成を簡単に実現できるため[^2]、静音性の面でも優れていると言える。以上のことからRaspberry Piは、常時稼動する必要があるものの、あまり大きな負荷を要求されない用途に適していると言えるだろう。つまりRaspberry Piの最適な使い方は、家庭内サーバーであると断言できる(個人の感想です)。

 Raspberry Piはコンピュータであるため、利用するには当然OSが必要となる。そしてUbuntuは公式に、Raspberry Pi対応版をリリースしている。そこで今回は筆者が最近入手した、Raspberry Pi Zero 2 Wを題材に、Ubuntuを使ってRaspberry Piをサーバーに仕立てる手順を紹介しよう。

Raspberry PiとUbuntu

 本連載的にはUbuntuの良さやメリットをお伝えしたい所なのだが、やはり事実は事実として、最初にきちんとお伝えしておかねばならないだろう。 Raspberry PiでわざわざUbuntuを動かすメリットは、実のところあまりない

 Raspberry Piは汎用パーツで構成された一般的なPCとは異なり、独自のSBCだ。こうしたSBCを動かすには、ソフトウェアにも、そのボードに向けたカスタマイズが必要になることが珍しくない。そしてRaspberry Piはオープンなハードウェアではないため、サードパーティのOSが、ハードウェアを100%動作させられる保証がないのだ。

 そもそもRaspberry Piでは、[Raspberry Pi OS]という公式なOSが用意されている。これはUbuntuの派生元でもあるDebian GNU/Linuxをベースに、専用カーネルやファームウェア、各種ツールなど、Raspberry Pi向けのカスタマイズを含めたOSだ。Raspberry Piを最大限に活用するのであれば、この公式OSを選択するのが最良であるということは、前提として知っておいてほしい。

 それでもあえてUbuntuを選ぶ理由があるとするならば

  • 使い慣れたデスクトップ/サーバーと同じOSが使える
  • 最新のUbuntuのリリースが使える(Raspberry Pi OSは2023年9月時点で、まだ最新のDebian 12に追従できていない)
  • snapパッケージシステムがデフォルトで動く
  • LTSならば延長サポート込みで10年利用できる

あたりだろうか。はっきり言って、どれも積極的にUbuntuを選ぶ理由としては弱い。とはいえ、OSの選択肢があるというのは良いことだ。「Ubuntuはこういう使い方もできる」という参考情報として見ていただければ幸いだ。

Raspberry Pi ImagerでOSを書き込む

 以前紹介したように、Ubuntuはインストールメディアからインストーラを起動してインストールを行なう。だがこれは、一般的なPCに限った話だ。実はSBCの世界では、こうした汎用インストーラは用意されていないことの方が多い。Raspberry Piもその例に漏れず、インストールは「Raspberry Pi向けとしてセットアップ済みのイメージをストレージに展開する」という手法で行なう。

 セットアップ済みのイメージは、Ubuntuのサイトで提供されている。Desktop版とサーバー版はそれぞれ、LTSであるUbuntu 22.04の最新のポイントリリースと、現時点での最新リリースである23.04が提供されている[^3]。使いたいバージョンを選んでダウンロードし、イメージをmicroSDカードやUSBメモリに書き込もう。そのメディアをRaspberry Piに挿入して電源を入れれば、Ubuntuが起動するはずだ。

 だが、最適なイメージを探してダウンロードするのも、そのイメージを正しいメディアに書き込むのも、慣れていないと少々面倒くさい作業だ。また後述するヘッドレスインストールを手動で行なうのも、初心者にはハードルが高い。そこでRaspberry Pi用のOSイメージの書き込みには、専用のツールである「Raspberry Pi Imager」を使うことをお勧めする。

 Ubuntuでは以下のコマンドでインストールできる。なおMacやWindowsを使っている人は、ここからImagerをダウンロードしよう。本記事ではUbuntu 22.04上で実行することを前提に解説するが、Imagerの使い方自体は、ほかのOSであっても基本的に違いはない。

$ sudo apt install -y rpi-imager

 インストールができたら、アプリケーション一覧から「Imager」を起動しよう。まず「OSを選ぶ」をクリックして、インストールしたいOSを選択しよう。今回は最新のUbuntuをインストールしたいので、「Other general-purpose OS」→「Ubuntu」→「Ubuntu Server 23.04 (64bit)」を選択した。続いて「ストレージを選ぶ」をクリックし、イメージを書き込むメディアを選択しよう。筆者はUSBカードリーダー経由の、microSDカードを選択した。

Raspberry Pi Imagerの画面。使いたいOSと、書き込み先を選択しよう
対応している主要なOSと、利用できるバージョンがリストアップされる
USBメモリやSDカードなど、書き込めるメディアがリストアップされるので、正しいメディアを選択しよう。イメージが書き込まれたメディアの中身は失われてしまうため、くれぐれも間違わないように

 最後に「書き込む」をクリックするとイメージが書き込まれるのだが、後述するヘッドレスインストールの設定を行なうため、書き込みの実行はちょっと待って欲しい。

ヘッドレスインストール

 通常であれば、書き込んだイメージからRaspberry Piを起動し、ログインして各種設定を行なうことになる。だがその場合は当然だが、Raspberry Piを操作するキーボードと、画面を表示するディスプレイが必要になる。

 Zero 2 Wには、mini HDMIポートとmicro USBポートが存在するため、対応したケーブルさえあれば、どちらもそれほど問題にならないだろう。だがUSBの変換コネクタや、mini HDMIに対応したケーブルを持っていないと、文字通り「手も足も出ない」状態になってしまう。

 そこでおすすめしたいのが、ディスプレイやキーボードを接続せずにインストールを行なう「ヘッドレスインストール」だ。ヘッドレスインストールでは、別のPCからSSH経由でログインして、各種設定を行なうことになる。そのためにはWi-FiやSSHサーバーの設定を、実際の起動前に行なっておかなくてはならない。これはイメージ書き込み後のメディアを一度Ubuntu PCにマウントし、内部の設定ファイルを書き換えることで行なえる。

 とはいえ、OSの起動用メディアを別のPCに繋いで中身を書き換えるのは、ある程度の知識がないと難しい。設定を間違ってしまい、OSが起動しなくなるというトラブルもザラだ。そこでRaspberry Pi Imagerには、こうした設定を簡単に行なう機能が実装されている。

 前述のイメージを書き込む前の段階で、ウィンドウの右下にある歯車のアイコンをクリックしょう。すると「詳細な設定」ダイアログが表示されるので、カスタマイズオプションを設定していこう。

詳細な設定のダイアログ。行なった設定は「カスタマイズオプション」で「いつも使う設定にする」を選択すると、次回以降のために保存できる

 デフォルトから変更したい項目にチェックを入れ、変更したい内容を入力するのが基本的な使い方だ。

ホスト名

 このRaspberry Piのホスト名を設定する。後述するマルチキャストDNSで利用される名前になるため、わかりやすく、かつネットワーク内でユニークな名前を設定しておくといいだろう。本記事では「zero2w」とした。

SSHを有効化する

 ヘッドレスでRaspberry Piを設定するのであれば、リモートからログインするためのSSHは必要不可欠だ。チェックを入れて、必ず有効化しておこう。SSHの認証に公開鍵を利用したい場合は「公開鍵認証のみを許可する」を選択し、その下のテキストボックスに、使いたい公開鍵をコピペしよう。

ユーザー名とパスワードを設定する

 デフォルトでは、ユーザー名/パスワードはともに「ubuntu」が設定されている。当然だが、このデフォルト設定のまま運用するのはセキュリティ上推奨されない。パスワードは単に再設定すればよいが、運用開始後のユーザー名の変更は少し面倒だ。そこでこの段階で、普段使っている自分のユーザー名に変更してしまうことをお勧めする。

Wi-Fiを設定する

 SSH経由で設定を行なうためには、当然ネットワークが必要になる。有線のNICを持っているタイプのRaspberry Piであれば、LANケーブルを挿すだけでとりあえずネットワークに繋げることが可能だ。しかしWi-Fiしか持たないZero 2 Wでは、あらかじめWi-Fiの設定を行なっておく必要がある。接続したいアクセスポイントのSSIDと、パスワードを必ず設定しておこう。

 また「Wi-Fiを使う国」は「JP」を指定しよう。これはカントリーコードと呼ばれるもので、その地域の規則に準拠した通信を行なうために必要となる。カントリーコードが間違っていると、正しく無線通信できない可能性もあるため、ここも忘れずに設定しよう。

 なお、ハマりやすいポイントとして、Zero 2 Wが対応しているのはIEEE 802.11b/g/nである点がある。つまり使用できるのは2.4GHzのみであり、5GHzのアクセスポイントには接続できないことに注意して欲しい。

ロケールを設定する

 タイムゾーンと、使用するキーボードレイアウトを設定する。日本国内で使用するのであれば、タイムゾーンは「Asia/Tokyo」になる。キーボードレイアウトは、Raspberry Piに直接キーボードを接続した際に適用されるレイアウトのため、SSH経由でのみ操作するのであれば影響はない。とはいえ緊急時に備え、普段使っているレイアウトを指定しておくとよいだろう。

 必要な設定の入力が終わったら「保存」をクリックしよう。ダイアログを閉じてImagerの画面に戻ったら、あらためて「書き込む」をクリックすればいい。イメージの書き込みには少し時間がかかるため、完了のメッセージが表示されるまで、しばらく待とう。

 なお環境によっては、イメージの書き込み時に以下のようなエラーが発生することがある。このエラーは、FAT32でフォーマットされているsystem-bootパーティションがマウントできなかったことを意味する。先ほど行なったユーザーやパスワードといった各種設定は、このパーティションに「user-data」というファイルで書き込まれるのだが、このエラーが発生すると、当然ながら変更を書き込むことができない。

筆者が常用しているデスクトップでイメージを書き込もうとすると、このようにエラーが出た。これをUSBの自動サスペンドを一時的に無効にして回避する

 この問題は、USBの自動サスペンドの影響で発生している可能性がある。そこでまず、以下のコマンドを実行してみよう。

$ cat /sys/module/usbcore/parameters/autosuspend
2

 これはusbcoreカーネルモジュールの、自動サスペンドに入るまでの遅延時間を表している。デフォルトでは「2」と出力されるはずだ。次に以下のコマンドを実行して、このパラメータを「-1」に変更する。これで自動サスペンドを無効にできる。

$ echo '-1' | sudo tee /sys/module/usbcore/parameters/autosuspend

 この状態で、再度イメージの書き込みを試してみてほしい。なおここで行なった自動サスペンドの無効化設定は、Ubuntuを再起動すれば元に戻るため、後始末などは特に気にしなくてよい。

上記コマンドを投入後に、再度イメージを書き込んでみたところ、問題なく成功した。]

IPアドレスを固定する

 各種設定とともに、イメージは書き込めただろうか。書き込みが完了したら、そのメディアをRaspberry Piに挿入して電源を入れよう。今回は最初からSSHを有効化しているため、設定したWi-Fiと同じネットワークに繋がっているPCから、以下のコマンドを実行するとログインできるはずだ[^4]。

$ ssh zero2w.local

 Imagerで設定したホスト名でアクセスできるのは、マルチキャストDNSにより、ローカルネットワーク内での名前解決が行なわれているためだ。この仕組みがあるため、IPアドレスが動的に変化するDHCP環境下であっても、具体的なIPアドレスを意識することなく、サーバーに接続することができる。

 とはいえ、サーバーとして本格的に運用するのであれば、IPアドレスは固定しておいた方が都合がよいだろう。Ubuntuのネットワーク設定は、第29回で紹介したように、「netplan」を使って行なう。

 Raspberry Pi ImagerでWi-Fiの設定を行なった場合、「/etc/netplan/50-cloud-init.yaml」というファイルに以下のような設定が書き込まれているはずだ。

network:
    version: 2
    wifis:
        renderer: networkd
        wlan0:
            access-points:
                SSID名:
                    password: パスワード(実際には計算されたPSK)
            dhcp4: true
            optional: true

 見ての通り、「dhcp4: true」となっている。ここを変更して、固定のIPアドレスが付与されるようにしよう。具体的には以下のように書き換えればよい。

network:
    version: 2
    wifis:
        renderer: networkd
        wlan0:
            addresses:
              - 設定したいIPアドレスとサブネットマスク(192.168.1.10/24など)
            nameservers:
              addresses:
              - ネームサーバーのIPアドレス(8.8.8.8など)
            routes:
              - to: default
                via: デフォルトゲートウェイのIPアドレス(192.168.1.1など)
            access-points:
                SSID名:
                    password: パスワード(実際には計算されたPSK)
            optional: true

 設定が完了したら、以下のコマンドで反映する。以後、新しいIPアドレスでRaspberry Piに接続できるようになる。

$ sudo netplan apply

Raspberry Pi専用ツールを使う

 Raspberry Piにおけるさまざまな設定を簡単に、かつ一元的に行なうためのツールが「raspi-config」だ。ただしUbuntu Serverのイメージにはデフォルトでインストールされていないため、以下のコマンドでraspi-configパッケージをインストールしておこう。

$ sudo apt install -y raspi-config

インストールが完了したら、raspi-configコマンドをsudoつきで実行する。

$ sudo raspi-config

 すると以下のようなメニューが表示される。操作はカーソルキーとTabキーで項目を選択、Enterキーで決定だ。メニューは階層構造を持っており、たとえば「System Options」ではWi-Fiやホスト名、ユーザーのパスワードの変更といった操作が行なえる。こうした設定を、Linuxコマンドに習熟していなくても、対話的に行なえるというわけだ。

raspi-configの画面。ロケールのようなLinuxの設定から、GPUメモリの割り当て量やI2Cの有効化といった、ハードウェアの制御まで行なえる。特にRaspberry Piのハードウェア固有の設定は手動で行なおうとすると難しい部分もあるため、raspi-configの利用をお勧めする

 raspi-configについて、より詳しくはドキュメントを参照してほしい。

ベンチマーク

 繰り返しになるが、Raspberry Piは安価で小型で省エネなぶん、非常に非力なコンピュータだ。その中でもZero 2 WはCortex-A53という、1GHzで動作するクアッドコアのCPUを搭載している。これは主力モデルであるRaspberry Pi 4 Model Bに搭載されているCortex-A72と比較しても、さらに非力なCPUとなる[^5]。

 非力だというが、具体的に一般的なPCと比較すると、どの程度の性能なのだろうか。有名なベンチマークツールである「Phoronix Test Suite」を使い、CPUのシングルスレッド性能を比較してみた。Phoronix Test Suiteのインストールと、ベンチマークの実行は以下のコマンドで行なえる。

$ wget https://phoronix-test-suite.com/releases/repo/pts.debian/files/phoronix-test-suite_10.8.4_all.deb
$ sudo apt install -y ./phoronix-test-suite_10.8.4_all.deb
$ phoronix-test-suite benchmark coremark

 比較対象は、Eコアのみで構成されるAlder Lake-NことN100を搭載した省エネPC、「Beelink EQ12」だ。

N100も性能は控え目なCPUだが、こうして見るとやはりPC用のCPUなのだなというのがよく分かる。スコアで言えば、おおよそ7.3倍程度の差がついた

 見ての通り、CPUの性能は比較できるようなレベルですらない。だが冒頭で述べた通り、Raspberry Piを使うメリットはそこではない。ミニPCを越える省スペース、省エネ、そして本体価格の安さである[^6]。

 PCを1台調達するほどではない、だがないと困る、そんな「トイレの電球」のようなささやかなサーバーには、まさにRaspberry Piがうってつけではないだろうか。実際筆者も、家庭内DのHCP、DNS、SSHの踏み台を兼ねる雑用サーバーを、Raspberry Piで長期間運用していた実績がある。

 いやまあ、OSとしてのUbuntuの出番はあまりないのだが……。

脚注

[^1]: 搭載されているインターフェイスはモデルによって異なる。たとえば今回紹介するRaspberry Pi Zero 2 Wは、Wi-Fiは搭載しているものの、有線のNICや、一般的なType-AのUSBを搭載していない。また組み込み向けのRaspberry Pi Compute Module 4は、単体ではインターフェイスを持たず、別途インターフェイスを引き出すためのI/Oボードが必要になる。

[^2]: ただしRaspberry Pi 4Bなどモデルによっては、CPUに負荷をかけると非常に高温となり、サーマルスロットによる性能の低下を起こしてしまうため、別途ファンを装着することを推奨する。

[^3]: Ubuntu Coreと呼ばれる、IoTや組み込み向けのリリースも提供されているが、本記事では省略する。

[[^4]: 初回の起動には少し時間がかかる。ログインできない場合は、3~5分ほど待ってみよう。

[^5]: とはいえ先代のZeroはシングルコアであったため、これでもパワーアップしているのだが。

[^6]: Zero 2 Wにいたっては、2023年9月現在、国内価格で3,000円未満で入手できる(ただし非常に品薄)。