From cade6ef3b638331effc161d116fb005b8dc159c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20=27sil2100=27=20Zemczak?= Date: Fri, 19 Jan 2024 12:53:48 +0100 Subject: [PATCH] Work in progress for making iso images for the core-desktop installer. --- debian/changelog | 2 +- live-build/auto/build | 16 +++ live-build/auto/config | 27 +++- .../hooks/020-ubuntu-live.chroot_early | 19 +++ .../includes.chroot.live/etc/cloud/cloud.cfg | 117 ++++++++++++++++++ .../etc/cloud/cloud.cfg.d/06_quiet.cfg | 4 + .../journald.conf.d/no-rate-limit.conf | 2 + .../override.conf" | 3 + .../no-compact.conf | 4 + .../no-hardening.conf | 4 + .../usr/bin/subiquity-shell | 3 + .../system/getty@.service.d/autologin.conf | 3 + .../usr/lib/systemd/system/getty@tty1.service | 1 + .../media-filesystem.mount | 1 + .../subiquity-serial.conf | 9 ++ .../subiquity-serial.conf | 4 + .../subiquity.conf | 14 +++ .../system/snapd.service.d/no-reexec.conf | 2 + .../lib/systemd/system/subiquity_config.mount | 4 + .../lib/systemd/systemd-networkd-wait-online | 1 + .../var/lib/cloud/seed/nocloud/meta-data | 0 .../var/lib/cloud/seed/nocloud/user-data | 0 .../includes.chroot/etc/hosts | 9 ++ 23 files changed, 247 insertions(+), 2 deletions(-) create mode 100755 live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg.d/06_quiet.cfg create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/journald.conf.d/no-rate-limit.conf create mode 100644 "live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf" create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf create mode 100755 live-build/ubuntu-core-desktop/includes.chroot.live/usr/bin/subiquity-shell create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@.service.d/autologin.conf create mode 120000 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@tty1.service create mode 120000 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/subiquity_config.mount create mode 120000 live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/systemd-networkd-wait-online create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/meta-data create mode 100644 live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/user-data create mode 100644 live-build/ubuntu-core-desktop/includes.chroot/etc/hosts diff --git a/debian/changelog b/debian/changelog index e1d06987..14e9dc91 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -livecd-rootfs (23.10.56~core1) mantic; urgency=medium +livecd-rootfs (1:24.04.20~core1) noble; urgency=medium * Experiment with ubuntu-core-desktop livefs builds. * This branch auto-checks-out the related git branch. diff --git a/live-build/auto/build b/live-build/auto/build index 504958ef..76388270 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -155,6 +155,22 @@ if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ]; then exit 0 fi +if [ "$PROJECT" = "ubuntu-core-desktop" ]; then + # Special case for ubuntu-core-desktop - we need to call + # ubuntu-image twice, once for the core image payload and + # then for the actual image. + echo "Building the core image payload" + cd config/ + /snap/bin/ubuntu-image snap $UBUNTU_IMAGE_PAYLOAD_ARGS \ + -O output ubuntu-core-desktop*.model-assertion + mv output/*.img pc.img + xz -0 -T4 pc.img + rm -rf output/ + # We need to rename the image file so that it can be pulled + # by the builder. + mv pc.img.xz "$PREFIX".img.xz +fi + # Setup cleanup function Setup_cleanup diff --git a/live-build/auto/config b/live-build/auto/config index fcf27632..bd99828a 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -810,6 +810,31 @@ case $PROJECT in esac ;; + ubuntu-core-desktop) + touch config/universe-enabled + KERNEL_FLAVOURS='generic-hwe-22.04' + PASSES_TO_LAYERS="true" + # the live layer, contains all packages for the live session installer + add_task live minimal + add_snap live ubuntu-core-desktop-installer/classic core22 snapd + add_package live linux-$KERNEL_FLAVOURS plymouth-theme-spinner squashfs-tools snapd cloud-init + + # now let's create the neccessary catalog files + cat <<-EOF > config/install-sources-in.yaml + - default: true + description: + en: Ubuntu Core Desktop. + id: ubuntu-core-desktop + locale_support: none + name: + en: Ubuntu Core Desktop + path: pc.img.xz + type: dd-xz:file + size: @SIZE@ + variant: core + EOF + ;; + ubuntu-oem) touch config/universe-enabled PASSES_TO_LAYERS="true" @@ -1435,7 +1460,7 @@ EOF ;; ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled| \ - ubuntu-wsl:*|ubuntu-mini-iso:*|ubuntu:|ubuntu-oem:*) + ubuntu-wsl:*|ubuntu-mini-iso:*|ubuntu:|ubuntu-oem:*|ubuntu-core-desktop:*) # Ensure that most things e.g. includes.chroot are copied as is for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do case $entry in diff --git a/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early b/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early new file mode 100755 index 00000000..8d100940 --- /dev/null +++ b/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early @@ -0,0 +1,19 @@ +#! /bin/sh + +set -eu + +case ${PASS:-} in + live) + ;; + *) + exit 0 + ;; +esac + +cat < /etc/initramfs-tools/conf.d/casperize.conf +export CASPER_GENERATE_UUID=1 +EOF + +cat < /etc/initramfs-tools/conf.d/default-layer.conf +LAYERFS_PATH=${PASS}.squashfs +EOF diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg new file mode 100644 index 00000000..e9571afd --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg @@ -0,0 +1,117 @@ +# The top level settings are used as module +# and system configuration. + +# A set of users which may be applied and/or used by various modules +# when a 'default' entry is found it will reference the 'default_user' +# from the distro configuration specified below +users: + - default + +# If this is set, 'root' will not be able to ssh in and they +# will get a message to login instead as the default $user +disable_root: true + +# This will cause the set+update hostname module to not operate (if true) +preserve_hostname: true + +ssh_pwauth: yes +chpasswd: + expire: false + +# This is the initial network config. +# It can be overwritten by cloud-init or subiquity. +network: + version: 2 + ethernets: + zz-all-en: + match: + name: "en*" + dhcp4: true + zz-all-eth: + match: + name: "eth*" + dhcp4: true + +# We used to have a custom final_message here. Just use the default instead. + +# Example datasource config +# datasource: +# Ec2: +# metadata_urls: [ 'blah.com' ] +# timeout: 5 # (defaults to 50 seconds) +# max_wait: 10 # (defaults to 120 seconds) + +# The modules that run in the 'init' stage +cloud_init_modules: + - bootcmd + - write-files + - ca-certs + - rsyslog + - users-groups + - ssh + +# The modules that run in the 'config' stage +cloud_config_modules: +# Emit the cloud config ready event +# this can be used by upstart jobs for 'start on cloud-config'. + - ssh-import-id + - set-passwords + - timezone + - disable-ec2-metadata + - runcmd + +# The modules that run in the 'final' stage +cloud_final_modules: + - scripts-per-once + - scripts-user + - ssh-authkey-fingerprints + - keys-to-console + - phone-home + - final-message + +# System and/or distro specific settings +# (not accessible to handlers/transforms) +system_info: + # This will affect which distro class gets used + distro: ubuntu + # Default user name + that default users groups (if added/used) + default_user: + name: installer + lock_passwd: false + gecos: Ubuntu + groups: [adm, audio, cdrom, dialout, dip, floppy, lxd, netdev, plugdev, sudo, video] + sudo: ["ALL=(ALL) NOPASSWD:ALL"] + shell: /usr/bin/subiquity-shell + # Automatically discover the best ntp_client + ntp_client: auto + # Other config here will be given to the distro class and/or path classes + paths: + cloud_dir: /var/lib/cloud/ + templates_dir: /etc/cloud/templates/ + upstart_dir: /etc/init/ + package_mirrors: + - arches: [i386, amd64] + failsafe: + primary: http://archive.ubuntu.com/ubuntu + security: http://security.ubuntu.com/ubuntu + search: + primary: + - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/ + - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/ + - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/ + security: [] + - arches: [arm64, armel, armhf] + failsafe: + primary: http://ports.ubuntu.com/ubuntu-ports + security: http://ports.ubuntu.com/ubuntu-ports + search: + primary: + - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/ + - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/ + - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/ + security: [] + - arches: [default] + failsafe: + primary: http://ports.ubuntu.com/ubuntu-ports + security: http://ports.ubuntu.com/ubuntu-ports + ssh_svcname: ssh diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg.d/06_quiet.cfg b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg.d/06_quiet.cfg new file mode 100644 index 00000000..a614e723 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/cloud/cloud.cfg.d/06_quiet.cfg @@ -0,0 +1,4 @@ +output: {all: '>> /var/log/cloud-init-output.log'} +no_ssh_fingerprints: true +ssh: + emit_keys_to_console: false diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/journald.conf.d/no-rate-limit.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/journald.conf.d/no-rate-limit.conf new file mode 100644 index 00000000..fbaab956 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/journald.conf.d/no-rate-limit.conf @@ -0,0 +1,2 @@ +[Journal] +RateLimitIntervalSec=0 diff --git "a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf" "b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf" new file mode 100644 index 00000000..90ac2590 --- /dev/null +++ "b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf" @@ -0,0 +1,3 @@ +[Unit] +JobRunningTimeoutSec=0s +Wants=subiquity_config.mount diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf new file mode 100644 index 00000000..a0701e52 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf @@ -0,0 +1,4 @@ +# systemd in 23.04+ uses a newer "compact" format by default which is not +# understood by the systemd libraries from jammy used in the subiquity snap. +[Service] +Environment="SYSTEMD_JOURNAL_COMPACT=0" diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf new file mode 100644 index 00000000..c4262d26 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf @@ -0,0 +1,4 @@ +# systemd in 22.04+ uses "hash table hardening" by default which is not +# understood by the systemd libraries from focal used in the subiquity snap. +[Service] +Environment="SYSTEMD_JOURNAL_KEYED_HASH=0" diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/bin/subiquity-shell b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/bin/subiquity-shell new file mode 100755 index 00000000..d739d86f --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/bin/subiquity-shell @@ -0,0 +1,3 @@ +#!/bin/sh +exec sudo snap run subiquity + diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@.service.d/autologin.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@.service.d/autologin.conf new file mode 100644 index 00000000..a166aab4 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@.service.d/autologin.conf @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=-/sbin/agetty --noclear -n --autologin ubuntu-server %I $TERM diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@tty1.service b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@tty1.service new file mode 120000 index 00000000..dc1dc0cd --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/getty@tty1.service @@ -0,0 +1 @@ +/dev/null \ No newline at end of file diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount new file mode 120000 index 00000000..0a663081 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount @@ -0,0 +1 @@ +../media-filesystem.mount \ No newline at end of file diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf new file mode 100644 index 00000000..eebf38b4 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf @@ -0,0 +1,9 @@ +[Unit] +Description=Subiquity, the installer for Ubuntu Server %I +After=snapd.seeded.service +StartLimitInterval=0 + +[Service] +Environment=SNAP_REEXEC=0 +ExecStart= +ExecStart=/usr/bin/snap run subiquity.subiquity-service %I diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf new file mode 100644 index 00000000..56900a35 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf @@ -0,0 +1,4 @@ +[Service] +StandardOutput=tty +ExecStart= +ExecStart=/usr/bin/snap run subiquity --ssh diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf new file mode 100644 index 00000000..c1af5666 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf @@ -0,0 +1,14 @@ +[Unit] +IgnoreOnIsolate=yes +After=systemd-user-sessions.service plymouth-quit-wait.service snap.seeded.service + +[Service] +Environment=SNAP_REEXEC=0 +UtmpIdentifier=tty1 +TTYPath=/dev/tty1 +TTYReset=yes +TTYVHangup=yes +TTYVTDisallocate=yes +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf new file mode 100644 index 00000000..14a6b477 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf @@ -0,0 +1,2 @@ +[Service] +Environment=SNAP_REEXEC=0 diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/subiquity_config.mount b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/subiquity_config.mount new file mode 100644 index 00000000..af33494b --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/system/subiquity_config.mount @@ -0,0 +1,4 @@ +[Mount] +What=/dev/disk/by-uuid/00c629d6-06ab-4dfd-b21e-c3186f34105d +Where=/subiquity_config +Type=ext4 diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/systemd-networkd-wait-online b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/systemd-networkd-wait-online new file mode 120000 index 00000000..63b10de4 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot.live/usr/lib/systemd/systemd-networkd-wait-online @@ -0,0 +1 @@ +/bin/true \ No newline at end of file diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/meta-data b/live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/meta-data new file mode 100644 index 00000000..e69de29b diff --git a/live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/user-data b/live-build/ubuntu-core-desktop/includes.chroot.live/var/lib/cloud/seed/nocloud/user-data new file mode 100644 index 00000000..e69de29b diff --git a/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts b/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts new file mode 100644 index 00000000..81684340 --- /dev/null +++ b/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts @@ -0,0 +1,9 @@ +127.0.0.1 localhost.localdomain localhost +::1 localhost6.localdomain6 localhost6 + +# The following lines are desirable for IPv6 capable hosts +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters +ff02::3 ip6-allhosts