© Linux / 2017-08-16
最简单的方法了:snap不要私自上传到商店
原因如下:
首先看一下这个有关模型定义的例子——amd64-model.json:
{
"type":"model",
"series":"16",
"model":"custom-amd64",
"architecture":"amd64",
"gadget":"pc",
"kernel":"pc-kernel",
"authority-id":"4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8",
"brand-id":"4tSgWHfAL1vm9l8mSiutBDKnnSQBv0c8",
"timestamp":"2017-06-23T21:03:24+00:00",
"required-snaps":["kyrofa-test-snap"]
}
让我们将它转换成模型断言:
$ cat amd64-model.json | snap sign -k my-key-name > amd64.model
You need a passphrase to unlock the secret key for
user:"my-key-name"
4096-bit RSA key, ID 0B79B865, created 2016-01-01
...
获得模型断言:amd64.model 后,如果你现在就把它交给 ubuntu-image 使用,你将会碰钉子:
$ sudo ubuntu-image -c stable amd64.model
Fetching core
Fetching pc-kernel
Fetching pc
Fetching kyrofa-test-snap
error: cannot find snap "kyrofa-test-snap": snap not found
COMMAND FAILED: snap prepare-image --channel=stable amd64.model /tmp/tmp6p453gk9/unpack
实际上商店中并没有名为 kyrofa-test-snap 的 snap。这里需要重点说明的是:模型定义(以及转换后的断言)只包含了一系列的 snap 的名字。如果你在本地有个那个名字的 snap,即使它没有存在于商店中,你也可以通过--extra-snaps 选项告诉 ubuntu-image 在断言中匹配这个名字来使用它:
$ sudo ubuntu-image -c stable \
--extra-snaps /path/to/kyrofa-test-snap_0.1_amd64.snap \
amd64.model
Fetching core
Fetching pc-kernel
Fetching pc
Copying"/path/to/kyrofa-test-snap_0.1_amd64.snap"(kyrofa-test-snap)
kyrofa-test-snap already prepared, skipping
WARNING:"kyrofa-test-snap" were installed fromlocal snaps
disconnected from a store and cannot be refreshed subsequently!
Partitionsize/offset need to be a multiple of sector size(512).
Thesize/offset will be rounded up to the nearest sector.
现在,在 snap 并没有上传到商店的情况下,你已经获得一个预装了私有 snap 的 Ubuntu Core 镜像(名为 pc.img)。但是这样做有一个很大的问题,ubuntu-image 会提示一个警告:不通过连接商店预装 snap 意味着你没有办法在烧录了这些镜像的设备上更新它。你只能通过制作新的镜像并重新烧录到设备的方式来更新它。
(0)