Getting the revision of a snap from snapd


In the context of snapcraft pushing its own snap into the LXD container, along with the core snap, I was looking at how to get the relevant information. While I know the SNAP_REVISION for snapcraft itself, I don’t know what core snap revision is currently being used.

There seem to be several ways to get a revision right now:

  • readlink /var/snap/core/current
  • snap list core
    Name Version Rev Developer Notes
    core 16-2 1689 canonical -
    Not very suitable for parsing. Is this format stable?
  • snap info core
    name: core
    summary: "snapd runtime environment"
    publisher: canonical
    description: |
    The core runtime environment for snapd
    type: core
    tracking: stable
    installed: 16-2 (1689) 83MB -
    refreshed: 2017-04-11 14:28:54 +0200 CEST
    The installed value is what I’d be interested in, except it doesn’t seem to lend itself well to parsing.


I think using the snapd API is a good option:

$ curl -s --unix-socket /run/snapd.socket http:/v2/snaps/core
{"type":"sync","status-code":200,"status":"OK","result":{"apps":[],"broken":"","channel":"stable","confinement":"strict","contact":"","description":"The core runtime environment for snapd","developer":"canonical","devmode":false,"icon":"","id":"99T7MUlRhtI3U0QFgl5mXXESAiSwt776","install-date":"2017-04-11T05:28:54-07:00","installed-size":83349504,"jailmode":false,"name":"core","private":false,"resource":"/v2/snaps/core","revision":"1689","status":"active","summary":"snapd runtime environment","tracking-channel":"stable","trymode":false,"type":"os","version":"16-2"}}


Question, can we always install any revision?

Like, install core rev 1000 even when the latest released core is rev 5000?


I think the goal is to install the version of core on the host, right? Which is a simple matter of grabbing the snap out of /var/lib/snapd/snaps/, as well as its assertion from snap known.


That’s indeed what I’m doing in my PR and also the only way to do it (because the store only allows for the publisher to download specific revisions).


btw you probably also need to set a refresh schedule so that you don’t get a refresh in the middle of things inside inside the lxd


What would I set it to, though? Can I set it to eg. “never” and take care of it manually? The example given in the announcement of that feature uses specific times when it “might” run.


no, “never” is not supported


How should this be used then? The snaps snapcraft cares about will be the versions it specifically injected, so it would be counter-productive for them to be updated.


Perhaps that’s a case for not getting their assertions. Then they can’t be updated.