In order to use the inject-subiquity-snap.sh script, we need some extra dependencies: xorriso and isolinux.
When xorriso is missing, the following error occurs:
./scripts/inject-subiquity-snap.sh: line 184: xorriso: command not found
When isolinux is missing, the image build step for x86-64 is failing:
xorriso : FAILURE : Given path does not exist on disk: -boot_image system_area='/usr/lib/ISOLINUX/isohdpfx.bin'
This file is not present in the source ISO image, so it has to come from the isolinux package.
The core image by default does not include the build-essential package. We need it to build the rtnetlink extension
for probert. If gcc is missing, the following error occurs:
running build_ext
building 'probert._rtnetlink' extension
creating build/temp.linux-x86_64-3.6
creating build/temp.linux-x86_64-3.6/probert
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -I/usr/include/python3.6m -fPIC -I/root/parts/probert/
install/usr/include/python3.6m -c probert/_rtnetlinkmodule.c -o build/temp.linux-x86_64-3.6/probert/_rtnetlinkmodule.o -I/usr/include/libnl3
unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
error: command 'x86_64-linux-gnu-gcc' failed with exit status
In this commit we include build-essential for the probert build step.
When building the snap in a clean environment, we start with a minimised core image. This image excludes translation
files, which are needed for the "languagelists" step. The following error will show up when building:
Building languagelists
do not know native name for oc
Failed to run 'override-build': Exit code was 1.
This is due to translation files being excluded by default in /etc/dpkg/dpkg.cfg.d/excludes on minimised systems:
# Drop all translations
path-exclude=/usr/share/locale/*/LC_MESSAGES/*.mo
We now comment this line and reinstall the "iso-codes" package.
When no snaps are seeded in the filesystem, empty string is returned,
which yaml safe load interprets as None.
But snapd seed.yaml is defined as a dictionary with snaps key. Ensure
that when no seed.yaml is present (or readable), that at least an
empty dictionary is returned, such that later calls to `.get("snaps",
[])` succeed.
LP: #1889429
Looking at this code thinking about the coming client / server split
made me realise that we could start by at least moving this
functionality to a more encapsulated place.
Using the NoCloud source meant that a filesystem label of "cidata"
(probably containing autoinstall config) could override the cloud-init
nocloud seed subiquity wrote and then users would not get created. So
instead write cloud config directly that hardcodes using the
DataSourceNone source and config for it.
https://bugs.launchpad.net/subiquity/+bug/1879103