Ubuntu Serverを管理したことがある方なら、apt upgradeの失敗でシステムが「動かなく」なった時の絶望感を味わったことがあるはずです。時には、スクリプトが誤ってシステムファイルを上書きしただけでOSが崩壊することもあります。遠隔地のステーションに設置されたIoTデバイスの場合、SDカードを焼き直すためだけに数百キロ移動するのはコスト面で大惨事です。
Ubuntu Coreは、そんな不安を解消するために誕生しました。Desktop版やServer版とは異なり、これは完全にSnapで動作するImmutable(不変)なオペレーティングシステムです。今回は、真の「堅牢な」IoTデバイスを構築するための Ubuntu Coreの設定方法を深掘りします。
なぜIoTには「変更不可能なOS」が必要なのか?
私は以前、水利観測所に設置された15台のRaspberry Piを管理していました。最も恐ろしかったのは、アップデート中に停電が発生し、OSが完全に「文鎮化(ブリック)」してしまうことでした。Ubuntu Coreは、以下の3つの技術的柱によってこの問題を解決します。
- 読み取り専用(Read-only)ファイルシステム: OS全体が読み取り専用のsquashfsファイルにパッケージ化されています。root権限であっても、これらのコアファイルを誤って変更したり削除したりすることはできません。
- トランザクションアップデート(A/Bアップデート): アップデート時、システムは新しいバージョンを別のパーティションにダウンロードします。プロセスにエラーが発生したり起動に失敗したりした場合、わずか数秒で安定した旧バージョンに自動的にロールバックされます。
- アプリケーションの分離(サンドボックス): Snapとして実行されるすべてのアプリは、専用の環境に隔離されます。AppArmorとSeccompにより、1つのアプリがハッキングされてもシステム全体に被害が及ぶことはありません。
事前準備:必須アイテム
Ubuntu Coreは従来のアプローチとは少し異なるため、しっかりと準備を整える必要があります:
- ハードウェア: Raspberry Pi 3, 4, 5 または Intel NUC。
- Ubuntu Oneアカウント: SSHキーを紐付けるために必須です。login.ubuntu.comで素早く登録できます。
- SSHキー: Ubuntu Coreはパスワードによるログインを完全に遮断しています。インストール前に公開鍵(Public Key)をUbuntu Oneアカウントにアップロードしておく必要があります。
# SSHキーがまだない場合は、素早く作成します
ssh-keygen -t ed25519 -C "[email protected]"
~/.ssh/id_ed25519.pubファイルの内容をコピーし、Ubuntuアカウント管理ページの「SSH Keys」セクションに貼り付けてください。これが、後でデバイスにアクセスするための唯一の鍵となります。
実際のインストール手順
1. イメージの書き込みとSDカードの準備
ハードウェアに適したイメージ(例:Ubuntu Core 22)をダウンロードします。Raspberry Pi Imagerを使用して書き込みます。注意点として、産業用(Industrial)または少なくともClass 10のSDカードを優先してください。Snapパッケージは読み書きの頻度が高いため、低品質なカードは24時間稼働させると6〜12ヶ月で故障する可能性があります。
2. 初回コンソール設定
デバイスの電源を入れ、ネットワークに接続します。初回起動時、Ubuntu Coreは基本設定を要求します:
- Enterキーを押して設定メニューに入ります。
- IPを設定します(素早く自動取得するためにEthernetの使用を推奨します)。
- Ubuntu Oneアカウントのメールアドレスを入力します。
デバイスがCanonicalのサーバーに接続し、公開鍵をダウンロードします。画面にIPアドレスとSSHコマンドが表示されたら、モニターとキーボードを外しても大丈夫です。
3. リモートアクセス
個人のコンピュータでターミナルを開き、以下を入力します:
ssh [email protected]
システム管理:aptは忘れましょう、Snapこそが唯一の手段です
Ubuntu Coreでは、カーネルからドライバーまですべてがSnapです。sudo apt installは使えません。代わりに、すべての操作はsnapコマンドを中心に行います。
実行中のコンポーネントを確認する:
snap list
コンテナを実行するためにDockerをインストールしたいですか?コマンド1行で完了します:
sudo snap install docker
実運用における「血の滲むような」教訓
産業用ゲートウェイを長期間運用してきた経験から、システムを最適化するための3つのヒントを紹介します:
4Gデータの節約
デフォルトでは、Snapは1日に4回自動的にアップデートを確認します。容量制限のある4G SIMを使用している場合は、オフピークの時間帯(例:日曜日の午前2時)にアップデートを制限しましょう:
# アップデート時間を日曜の午前2時に設定
sudo snap set system refresh.timer=sun,02:00
Snapの閉じ込め(Confinement)機能の活用
自作アプリを開発する際は、常にstrictモードでパッケージ化してください。このモードは、許可(インターフェース)がない限り、アプリがハードウェアに不正アクセスするのを防ぎます。これは、デバイスが機密データや監視カメラを扱う場合に非常に重要です。
SDカードのヘルスチェック
sudo snap logs -fコマンドを使用してシステムログを監視します。I/Oエラーが頻繁に発生する場合、それはSDカードの寿命が近い兆候です。早期に発見することで、デバイスが完全に停止する前に計画的に交換できます。
結論
Ubuntu Coreは、OSをいじくり回したり、ライブラリを自由にインストールしたりしたい人向けではありません。これはプロダクション(本番)環境向けです。メンテナンスなしで3〜5年間、24時間365日稼働し続けるゲートウェイシステムが必要なら、Ubuntu Coreは最良の選択肢です。その不変性のおかげで、遠隔地の大量のデバイスにアップデートをデプロイする際も、安心して眠ることができます。

