model assertionファイルの作成
GPG鍵を作成できたので,
署名そのものはsnapコマンドで行えますので,pc.
」
{
"type": "model",
"authority-id": "account-idの文字列",
"brand-id": "account-idの文字列",
"series": "16",
"model": "pc",
"architecture": "amd64",
"base": "core18",
"gadget": "pc=18",
"kernel": "pc-kernel=18",
"timestamp": "2021-01-08T10:54:39+00:00"
}
変更する必要がある部分のみを説明します。
- authority-id/
brand-id:Snap Storeから取得したaccount-idの文字列をそのまま記述してください。 - model:モデル名を示す任意の文字列です。ファイル名と一緒にしておくとわかりやすいです。
- architecture:ターゲットのCPUアーキテクチャー名です。PC向けなら
「amd64」, Raspberry Pi向けなら 「arm64」 「armhf」 のいずれかになるでしょう。 - base:ベースとなるsnapファイルです。Ubuntu Core 18ならcore18で,
将来的にリリースされるUbuntu Core 20ならcore20になります。 - gadget:gadget snapとしてインストールするsnapパッケージ名です。
- kernel:kernel snapとしてインストールするsnapパッケージ名です。
- timestamp:
「 date -Iseconds --utc
」で生成したタイムスタンプです。GPG鍵の登録日時よりも後ろである必要があります。
gadget snapとkernel snapについて補足しておきます。これらはターゲットデバイス依存のsnapパッケージであるため,
さらにsnapパッケージはパッケージ名の後ろに=channnel
」pi=18
」pi-kernel=18
」pc=20
」
Raspberry Pi向けには18-pi4
」18-pi3
」
また
作成したJSONファイルを署名します。
$ cat pc.json | snap sign -k default &> pc.model $ cat pc.model type: model authority-id: <account-id> series: 16 (以下略)
「default」snapcraft list-keys
」
error: cannot sign assertion: cannot sign using GPG: /usr/bin/gpg (中略) 署名に失敗しました: そのようなファイルやディレクトリはありません (後略)
原因は不明ですが,
$ gpg --homedir ~/.snap/gnupg --detach-sig pc.json
これを実行したあとにもう一度snap sign
を実行すれば成功しているはずです。うまくmodel assertionが生成されなかったら試してみてください。
ちなみにUbuntu WikiのUbuntuCoreの開発ページには,snap known ...
」
カスタムイメージの作成
ようやくカスタムイメージを作成するための必要なファイルを準備できました。次にイメージの作成手順に移りましょう。
イメージの作成そのものは,
$ sudo snap install ubuntu-image --classic
では実際にイメージを作成します。
$ mkdir pc $ sudo ubuntu-image snap -O pc pc.model $ ls -1 pc/ pc.img seed.manifest snaps.manifest
イメージの作成はsnapパッケージのダウンロードに時間がかかる程度でほぼすぐに終わる印象です。作られたファイルのうち
このコマンド実行時に--disable-console-conf
」
「-c チャンネル
」--snap パッケージ名
」パッケージ名=チャンネル名
」
他にもいろいろなオプションがあるので,ubuntu-image snap --help
」
作成したイメージは,
$ cp pc/pc.img{,.bak} $ kvm -smp 2 -m 1500 -netdev user,id=mynet0,hostfwd=tcp::8022-:22 \ -device virtio-net-pci,netdev=mynet0 -nographic \ -drive file=pc/pc.img,format=raw
今回は設定がほぼ同じなので,
これで独自イメージを作成する手順を確立できました。これの手順を把握しておけば,
たとえば第641回のubuntu-image snap
のオプションとして--snap microk8s=classic
」--cloud-init
」
ぜひ各自で好みのsnapパッケージをバンドルした、カスタムイメージを作ってみてください。