<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">Thanks Steve!</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">This will be very helpful to me - a clear and simple "lay of the land".</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">I'll try to put this information to use shortly.</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">Cheers, Mike</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 9, 2016 at 2:04 AM, Steve Langasek <span dir="ltr"><<a href="mailto:steve.langasek@canonical.com" target="_blank">steve.langasek@canonical.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Mike,<br>
<br>
On Thu, Sep 08, 2016 at 06:16:58PM -0400, MikeB wrote:<br>
> I feel like I am stumbling around in the dark as I'm learning about getting<br>
> Ubuntu-Core running on new devices.  I'm discovering things in a bottom-up<br>
> direction and I think I'm not seeing some basic concepts that Canonical<br>
> engineers take for granted.  I've trolled through the Ubuntu sites and<br>
> mailing lists trying to get good overview and understanding about subjects<br>
> but have come up empty or, at best, sparse.  Learning about concepts<br>
> through a mailing list "keyhole" is very difficult.<br>
><br>
> I think I'm way off on my knowledge about the following.<br>
><br>
> * Assertions/Model Assertions - I see them mentioned, but have no idea what<br>
> they are.<br>
> * Gadgets - Again hear and see them a lot, but no clue what they are.  How<br>
> can I create and use one for my target platforms.<br>
> * ubuntu-image - No idea of its status or how to use it.<br>
> * ubuntu-device-flash - Using it now from a recipe but don't know much else<br>
> about it.  Is it obsolete?<br>
<br>
> Any pointers to good overviews or documentation would be appreciated.<br>
<br>
> Regards, Mike<br>
<br>
These are some wonderfully timely questions, that I'm happy to help answer<br>
for you!  This should also help with the problems of your other post, about<br>
the image you've built with ubuntu-device-flash not letting snapd run.<br>
<br>
To answer the last question first: up until this week, ubuntu-device-flash<br>
has been The Way to make ubuntu-core images.  However, we've known for some<br>
time that this needed to be replaced, and this in-progress replacement is<br>
called ubuntu-image.<br>
<br>
We haven't been writing much about the status of ubuntu-image here because<br>
it's been pre-alpha, and would likely only add to people's frustrations<br>
around image building. ;)  But the images released this week were all made<br>
using ubuntu-image, which is a good indicator that it's now ready to be<br>
shared more widely.<br>
<br>
ubuntu-image is now available as a snap.  For the moment, it's only on the<br>
edge channel and requires devmode, so it can be installed as:<br>
<br>
  sudo snap install --channel=edge --devmode ubuntu-image<br>
<br>
You can also find the source repository for ubuntu-image at:<br>
<br>
  <a href="https://github.com/CanonicalLtd/ubuntu-image/" rel="noreferrer" target="_blank">https://github.com/<wbr>CanonicalLtd/ubuntu-image/</a><br>
<br>
Now, ubuntu-image has a number of commandline options, most of which are<br>
only of interest if you're working on ubuntu-image itself (we will clean up<br>
the --help output soon).  The basic usage is just:<br>
<br>
  UBUNTU_IMAGE_SKIP_COPY_<wbr>UNVERIFIED_MODEL=1 \<br>
      ubuntu-image -c edge my-model.assertion -o my_output.img<br>
<br>
So, what is a model assertion?  Others can speak more authoritatively than I<br>
can about the definition of a model assertion, but the summary is that this<br>
is a text document declaring what should go into your image.  Instead of<br>
specifying the gadget, kernel, and os snaps as commandline arguments to<br>
ubuntu-device-flash, you declare these in the model assertion, which can<br>
then be signed and referenced by the store and snapd.<br>
<br>
If you are making your own image, you will need your own model assertion.<br>
<br>
You can find some practical examples here:<br>
<br>
  <a href="http://people.canonical.com/~vorlon/amd64-generic-model.assertion" rel="noreferrer" target="_blank">http://people.canonical.com/~<wbr>vorlon/amd64-generic-model.<wbr>assertion</a><br>
  <a href="http://people.canonical.com/~vorlon/pi2-model.assertion" rel="noreferrer" target="_blank">http://people.canonical.com/~<wbr>vorlon/pi2-model.assertion</a><br>
<br>
These are 90% of the way to what was used in producing this week's images,<br>
which should be enough to get you going for your own local builds.  Note<br>
that current snapd requires model assertions to be signed, so the above<br>
include a signature - but the signature is not valid (and obviously won't be<br>
valid when you make your changes), thus the need for setting<br>
UBUNTU_IMAGE_SKIP_COPY_<wbr>UNVERIFIED_MODEL=1.<br>
<br>
And the main thing you're going to want to permute in your model assertion,<br>
vs. one of our reference assertions, are the snaps that you're using.<br>
You're already using a custom kernel snap; you will also want a custom<br>
gadget snap.<br>
<br>
A gadget snap is a snap that details how the kernel and os snap should be<br>
combined into an image for a given device.  This includes partition layouts,<br>
what bootloader snappy uses (grub or uboot), and how to integrate with the<br>
firmware.<br>
<br>
The backbone of a gadget snap is the meta/gadget.yaml.  You can find<br>
documentation of this yaml file here:<br>
<br>
  <a href="https://github.com/CanonicalLtd/ubuntu-image/blob/master/docs/gadget-yaml.rst" rel="noreferrer" target="_blank">https://github.com/<wbr>CanonicalLtd/ubuntu-image/<wbr>blob/master/docs/gadget-yaml.<wbr>rst</a><br>
<br>
And you can find the source for the reference gadget snaps at:<br>
<br>
  <a href="https://code.launchpad.net/~snappy-dev/snappy-hub/snappy-systems/" rel="noreferrer" target="_blank">https://code.launchpad.net/~<wbr>snappy-dev/snappy-hub/snappy-<wbr>systems/</a><br>
<br>
<br>
And since ubuntu-image is calling 'snap prepare-image' under the hood to<br>
create your ubuntu-core root filesystem, this will also take care of all the<br>
problems with /var/lib/snapd/seed in your other mail!<br>
<br>
Hope that helps,<br>
<span class="HOEnZb"><font color="#888888">--<br>
Steve Langasek                   Give me a lever long enough and a Free OS<br>
Debian Developer                   to set it on, and I can move the world.<br>
Ubuntu Developer                                    <a href="http://www.debian.org/" rel="noreferrer" target="_blank">http://www.debian.org/</a><br>
<a href="mailto:slangasek@ubuntu.com">slangasek@ubuntu.com</a>                                     <a href="mailto:vorlon@debian.org">vorlon@debian.org</a><br>
</font></span></blockquote></div><br></div>