如何制作私有 snap 工厂镜像?

©   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)

分享至