Right, that’s because the commands are actually executed in a chroot as far as I remember.
I think you could prepare the seed for snapd. On the first run, snapd will load up all the snap files and their metadata and install them in the system. This is how for instance the LXD snapd is set up in Ubuntu Cloud images.
Unfortunately, there’s not much documentation about building the seed from scratch. Apparently this was investigated before right there Seed.yaml documentation and even someone wrote a blog post on setting up the seed Seed.yaml documentation though it seems to be a bit outdated.
As quick reference I did this:
$ snap known --direct model \
series=16 model=generic-classic brand-id=generic > generic-classic.model
$ snap prepare-image --classic --arch amd64 \
--snap core --snap jq \
./generic-classic.model $PWD/dir
It should be possible to invoke all of the commands without active snapd.
The seed built a seed under $PWD/dir
looks like this:
dir
└── var
└── lib
└── snapd
└── seed
├── assertions
│ ├── 16,8X4ytHZ2xX4kNkr8V2NU3AQuoMlglwED.snap-declaration
│ ├── 16,99T7MUlRhtI3U0QFgl5mXXESAiSwt776.snap-declaration
│ ├── BWDEoaqyr25nF5SNCvEv2v7QnM9QsfCc0PBMYD_i2NGSQ32EF2d4D0hqUel3m8ul.account-key
│ ├── dFSiCVGoSMIXseHHK5W_y0WRonHv5_isSepiRYCJvdOF5l50SwTP8IdZaL4jS_Rz.snap-revision
│ ├── d-JcZF9nD9eBw7bwMnH61x-bklnQOhQud1Is6o_cn2wTj8EYDi9musrIT9z2MdAa.account-key
│ ├── generic.account
│ ├── model
│ └── U4kFeqGBTfrv8dPkHoGN9C6lW9OT_nBIcHHqUJv4EjTWTNoZoD27yOsxL9o63HIv.snap-revision
├── seed.yaml
└── snaps
├── core_9066.snap
└── jq_6.snap
The contents of seed.yaml:
$ cat dir/var/lib/snapd/seed/seed.yaml
snaps:
- name: core
snap-id: 99T7MUlRhtI3U0QFgl5mXXESAiSwt776
channel: stable
contact: mailto:snaps@canonical.com
file: core_9066.snap
- name: jq
snap-id: 8X4ytHZ2xX4kNkr8V2NU3AQuoMlglwED
channel: stable
contact: mailto:snaps@canonical.com
file: jq_6.snap
It may even work if you specify /
as target. If not, then transferring the contents from target directory into the chroot should be sufficient.
I’m not sure anyone has tried this on non Ubuntu, so please keep this topic updated so that we can fix any bugs.