Ubuntu Weekly Recipe

第649回 Ubuntu Coreの独自イメージを作成する

この記事を読むのに必要な時間:およそ 6 分

カスタムイメージの作成方法

次にUbuntu Coreのカスタムイメージの作成方法を紹介しましょう。カスタムイメージの作成ができるようになると,次のようなメリットが得られます。

  • 任意のsnapパッケージがインストールされたイメージを構築できる
  • 初回セットアップをスキップできる
  • コンソールから直接ログイン可能に変更できる
  • 任意のカーネル・ブートローダーを利用できる

一番目のメリットは,たとえば最初からNextcloudインストール済みのイメージを作るといった使い方です。実際にUbuntu Applianceではこの仕組みを利用して特定のアプリをバンドルしたイメージを配布しています。

二番目のメリットがインストールの自動化に必要な仕組みです。通常配布されているUbuntu Coreはconsole-confによって初回セットアップ(Ubuntu SSOを利用したアカウントの作成)を必要としています。セットアップ済みのデバイスをmanagedと呼び,未セットアップなデバイスを「unmanaged」と呼びます。しかしながらインストールのたびにHDMIディスプレイとキーボードをつないで操作するのはいろいろと面倒です。そこで用意されているのが「設定済みのファイルをUSBスティックに保存し,それを接続して起動すれば自動セットアップしてくれる」モードです。これを実現するための設定ファイルをsystem-user assertionと呼びます。

system-user assertionはunmanagedなデバイスにのみ適用可能です。またその設定ファイル(アサーション)は,Coreイメージの作成者の鍵で署名されている必要があります。普通のUbuntu CoreはCanonicalの鍵で署名されているイメージのため,アサーションを作成できません。そこで自分の鍵で署名したカスタムイメージが必要になるのです。ちなみにsystem-user assertionの作り方については,次回以降で紹介する予定です。

初回セットアップの画面は「console-conf」によって実現しています。これはサーバー版のインストーラーで開発している機能で,⁠起動時にコンソールにUIを提供する」ためのフレームワークです。Ubuntu Coreではunmanagedなデバイスならセットアップ画面を,managedなデバイスならSSH経由のログイン方法を提示することで,⁠コンソールからのログイン」を抑止しています。しかしながらデバッグ目的でUbuntu Coreを使う場合,コンソールからログインできたほうがうれしいことも多々あります。カスタムイメージを作成する際は,最初からconsole-confを無効にしたイメージを作ることができるのです。これが三番目のメリットです。

四番目のメリットは,独自の組み込み機器にUbuntu Coreを対応させたい場合に必須となります。またKVMやRaspberry PiのようにすでにUbuntu公式で対応済みの機器であっても,カーネルコンフィグを変更したい・サードパーティのモジュールを導入したいならやはり必要な機能です。今回はこの方法については言及しません。詳細を知りたい場合は,kernel snapgadget snapの作り方を解説した,Board enablement overviewのページを参照してください。

これらの理由から,Ubuntu Coreを細かくカスタマイズしたい場合は,配布されているイメージを使うよりも,カスタムイメージを作ったほうが便利です。ただしカスタムイメージを作るためには次のような情報が必要です。

  • Ubuntu SSOアカウント(Snap Store用アカウント)
  • 上記アカウントに紐付いたGPG鍵

理論上はなくても作れるのですが,あったほうが周辺ツールが使えて便利なので,ここではUbuntu SSOアカウントが作成済みである前提で話を進めます。カスタムイメージの作成は次の手順で行います。

  1. account-idの取得
  2. GPG鍵の作成・登録
  3. model assertionファイルの作成
  4. カスタムイメージの作成

account-idの取得

Ubuntu SSOでアカウントを作成済みなら,Snap Store上の開発者向けdashboardから「account-id」を取得できます。これはカスタムイメージ作成時のbrand-idや,イメージ等に署名を行う際のauthority-idとして使うものです※3⁠。

※3
このあたりの用語や使い方は,たまに意味が変わることに注意が必要です。また,未確認ではありますが,独自のSnap Store(Brand Store)を構築すれば,独自のBrand SSOを利用することになるため,Ubuntu SSOアカウントも不要になるかもしれません。

本記事で説明するツール類はこのaccount-idが必要になりますので,まずはUbuntu SSOアカウントを作成し,account-idを取得しておいてください。

GPG鍵の作成・登録

イメージを作成するための設定ファイルや,自動的に作成するアカウント情報などは,snapcraft/Ubuntu Coreの文脈ではassertion(アサーション)と呼ばれています※4⁠。

※4
assertionという言葉自体は「宣言」とか「主張」とか「声明」とか「これはこうである」と表明する類の何かを示す名詞です。snapcraftやUbuntu Coreでは,いくつかの設定ファイル・文書についてはGPGにより電子署名されていることを要求しています。このような検証可能なドキュメントを,より強い意味を込めて「アサーション」と呼んでいるようです。

アサーションを作るためには,GPG鍵が必要です。またSnap Store側でアサーションを検証可能にするために,作成した公開鍵をSnap Storeに登録しなくてはなりません。まずはsnapcraftコマンドをインストールし,ログインしておきましょう。

$ sudo snap install snapcraft --classic
$ snapcraft login
Enter your Ubuntu One e-mail address and password.
If you do not have an Ubuntu One account, you can create one at https://snapcraft.io/account
Email: <Ubuntu SSOのメールアドレス>
Password: <Ubuntu SSOのパスワード>

Login successful.

次にアサーション用のGPG鍵を作成します。

$ snapcraft create-key
Passphrase: <パスフレーズ>
Confirm passphrase: <パスフレーズ>

パスフレーズはGPG鍵を利用する際のそれです。作成されたGPG鍵は~/.snap/gnupg/に保存されますので,必要に応じてバックアップをとっておいてください。

作成した鍵をSnap Storeに登録します。

$ snapcraft register-key
Enter your Ubuntu One e-mail address and password.
If you do not have an Ubuntu One account, you can create one at https://snapcraft.io/account
Email: <Ubuntu SSOのメールアドレス>
Password: <Ubuntu SSOのパスワード>

We strongly recommend enabling multi-factor authentication: https://help.ubuntu.com/community/SSO/FAQs/2FA
Registering key ...
Done. The key "default" (<鍵ID>) may be used to sign your assertions.

複数の鍵を登録可能なので,その場合はsnapcraft regiter-key 鍵名のように名前を指定すると良いでしょう。上記のように未指定の場合はdefaultが使われます。

登録された鍵は次の手順で確認可能です。

$ snapcraft list-keys
    Name     SHA3-384 fingerprint
*   default  <鍵ID>

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。