After changed the firmware to UEFI, UC20 can boot, but I can see an error “no device: ubuntu-boot” before the VM booted up. Should I remove the section “ubuntu-boot” in gadget.yaml file? Another quick question, is there a way to disable the setup wizard after boot? Thanks.
Hi, I split your post to a new topic as it’s one that’s been asked before a few times and I think would be useful to have separately from the beta announcement page.
To answer your questions,
- No, you should not remove ubuntu-boot from the gadget.yaml definition, it is necessary in order to use UC20, you cannot build a UC20 image with a gadget.yaml that does not include ubuntu-boot
- The reason you see the ubuntu-boot message from grub upon first booting is that UC20 now creates this partition during the first boot in what is called “install mode”. This means when you very first boot UC20, there is no ubuntu-boot partition in the image, but snapd will create it during the first boot. Grub looks for the existence of the ubuntu-boot partition to decide if it should boot into install mode or run mode, and if it doesn’t find ubuntu-boot it will boot into install mode so that snapd can create the partitions and otherwise setup the run system.
Since this has come up as a question numerous times before, we will be looking into how we can silence that message from grub so that it does not confuse users so much. We did not intend for folks to really ever see this message.
Thanks @ijohnson for the details. I understand it now. After a reboot I didn’t see the error message again, so I guess there is some magic in the box. I’ll take a look into the codes. Which files do you think are related to this message?
After the image boots up the first time, we will go thru the network settings and enter email address. Is it possible to replace these settings with a customized one? I am trying to figure out which service or binary is called for the first time boot.
this is “console-conf”, there should be an option you can set from a gadget snap to disable its start …
to add users you can use a system-user assertion (that needs to be signed with the same ke as your model assertion) …
for networking there is currently nothing builtin though but you could use a snap with the network-control or network-manager-control interfaces for this …
Awesome, I’ll give them a try. Thanks @ogra!
There will be > 1 assertion files besides model assertion file. Should we merge them together as an input of ubuntu-image command? Before I used cloud-init file to create a user for uc18, I guess we cannot do the same for uc20.
For UC20 image has to boot with UEFI, is there a way to generate the image with UEFI firmware so the image can be imported and boot up with the default UEFI setting. For now, I am using VMWare Workstation on local laptop. To test an image, after importing the image, I can manually update the firmware setting from BIOS to UEFI and start the VM.
A quick update, I created an assertion according to https://ubuntu.com/core/docs/system-user. The command “make-system-user” generated the assertion file named “auto-import.assert”.
As I mentioned in my answer above the error message is not really an error message, there is no error here. Grub (the bootloader we use for amd64 on UC20) is simply issuing a message while it executes here.
No, you do not need to merge the assertions into a single file. The model assertion that you provide to ubuntu-image to create an image is just a model assertion.
To use a system-user assertion, you would place the auto-import.assert file (which is really multiple assertions in a single file) onto an external drive that the system reads and imports when it finishes booting up and then you can remove it.
cloud-init is still supported with UC20, but it works differently. The first difference is that you can no longer use the --cloud-init option to ubuntu-image, you need to manually mount the image that ubuntu-image provides you and add your cloud-init configuration to the image manually, or you can provide an external drive called CIDATA with your NoCloud cloud-init configuration on it and cloud-init will automatically import this. See my explanation of this on this thread: Ubuntu-image command crashed - #14 by ijohnson
Thanks @ijohnson for the details.
So it is not possible to create a user in cloud-init script for uc20, but need to use the auto-import.assert file? I am thinking of how this works if I’d create a user in a VMWare vSphere remotely. Sorry, got too many questions, trying to put different pieces together for migration lol
Edit: another question, how can console-conf be replaced with another similar terminal UI after VM starts? I think that would be a service and snapd will call the binary after boot and the binary will occupy the terminal as console-conf does.
As I explained above, you can use cloud-init with UC20, under certain circumstances. This includes creating users.
This would be a feature request for console-conf, you can disable it from “running” and allowing creation of new users, but you cannot currently remove it entirely from the system and replace it with your own process which owns the tty’s. Please file a feature request bug at bugs.launchpad.net/subiquity for this (if there isn’t already a bug for this)
Thanks, great to know this. Will do. I am looking at the subiquity project now
you could indeed create some kind of kiosk app that disables itself after the system is configured … to set up network you’d then have to make it use the
network-setup-control interface and for creating a user there is ```account-control````… here is a quick and dirty (really !) config snap that runs non-iteractive (and would have to ship a hardcoded network config in the state it is implemented) to give you some ideas …
and a rather advanced example is
Amazing, this gives some insights into the magic box thanks @orga.