Forward-port the ubuntu-core-desktop changes to noble.

ubuntu-core-desktop-noble
Łukasz 'sil2100' Zemczak 8 months ago
parent f89c096cbf
commit e575146fae

@ -20,19 +20,17 @@ fi
# Link output files somewhere launchpad-buildd will be able to find them. # Link output files somewhere launchpad-buildd will be able to find them.
PREFIX="livecd.$PROJECT${SUBARCH:+-$SUBARCH}" PREFIX="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ]; then if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ] \
# Use ubuntu-image instead of live-build || [ "$PROJECT" = "ubuntu-core-desktop" ]; then
# Use ubuntu-image instead (or as part) of live-build
export SNAPPY_STORE_NO_CDN=1 export SNAPPY_STORE_NO_CDN=1
LB_UBUNTU_IMAGE_CHANNEL="${LB_UBUNTU_IMAGE_CHANNEL:-candidate}" LB_UBUNTU_IMAGE_CHANNEL="${LB_UBUNTU_IMAGE_CHANNEL:-stable}"
snap install \ snap install \
--classic --channel="$LB_UBUNTU_IMAGE_CHANNEL" ubuntu-image --classic --channel="$LB_UBUNTU_IMAGE_CHANNEL" ubuntu-image
# TODO: eventually, this should be handled by a single ubuntu-image
# call without having to do a conditional on ubuntu-core/classic.
# We could already do that, but then we'd still have to do the
# compressing for the core images.
if [ "$PROJECT" = "ubuntu-core" ]; then if [ "$PROJECT" = "ubuntu-core" ]; then
# Ubuntu Core images
/snap/bin/ubuntu-image snap $UBUNTU_IMAGE_ARGS \ /snap/bin/ubuntu-image snap $UBUNTU_IMAGE_ARGS \
-O output "$PREFIX".model-assertion -O output "$PREFIX".model-assertion
# XXX: currently we only have one image generated, but really # XXX: currently we only have one image generated, but really
@ -41,8 +39,43 @@ if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ]; then
mv output/*.img "$PREFIX".img mv output/*.img "$PREFIX".img
xz -0 -T4 "$PREFIX".img xz -0 -T4 "$PREFIX".img
mv output/seed.manifest "$PREFIX".manifest mv output/seed.manifest "$PREFIX".manifest
# All the builds are finished now, exit
exit 0
elif [ "$PROJECT" = "ubuntu-core-desktop" ]; then
# Ubuntu Core Desktop payload image
# 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/
# Prepare the source catalogue
cat install-sources-in.yaml | sed "s/@SIZE@/$(stat -c%s pc.img.xz)/g" > ../"$PREFIX".install-sources.yaml
# We need to rename the image file so that it can be pulled
# by the builder.
mv pc.img.xz ../"$PREFIX".img.xz
# We need to make sure the autoinstall file is also exported.
mv autoinstall.yaml ../"$PREFIX".autoinstall.yaml
# Useful to have the model-assertion exported as well.
mv ubuntu-core-desktop*.model-assertion ../"$PREFIX".model-assertion
# Important: return to the previous directory
cd ../
# Payload build finished, but now we need to build the rest with the
# usual live-build tools.
else else
/snap/bin/ubuntu-image classic --debug $UBUNTU_IMAGE_ARGS \ # Ubuntu classic preinstalled images
/snap/bin/ubuntu-image classic --verbose $UBUNTU_IMAGE_ARGS \
-O output "$IMAGE_DEFINITION" -O output "$IMAGE_DEFINITION"
# Since the output of the ubuntu-image call can vary based on what # Since the output of the ubuntu-image call can vary based on what
# kind of an image we build, the safest bet is to 'export' all the # kind of an image we build, the safest bet is to 'export' all the
@ -59,10 +92,11 @@ if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ]; then
mv $artifact "$PREFIX".$extension mv $artifact "$PREFIX".$extension
done done
[ -f $PREFIX.img ] && xz -0 -T4 "$PREFIX".img [ -f $PREFIX.img ] && xz -0 -T4 "$PREFIX".img
fi
# All the builds are finished now, exit
exit 0 exit 0
fi fi
fi
# Setup cleanup function # Setup cleanup function
Setup_cleanup Setup_cleanup

@ -528,8 +528,13 @@ case $IMAGEFORMAT in
else else
# classic images # classic images
# Sometimes per-project quirks are necessary
IMAGE_PROJECT=$PROJECT IMAGE_PROJECT=$PROJECT
[ "$IMAGE_PROJECT" = "ubuntu-cpc" ] && IMAGE_PROJECT="ubuntu-server" case "$IMAGE_PROJECT" in
ubuntu-cpc)
IMAGE_PROJECT="ubuntu-server"
;;
esac
LB_UBUNTU_IMAGES_REPO="${LB_UBUNTU_IMAGES_REPO:-git://git.launchpad.net/ubuntu-images}" LB_UBUNTU_IMAGES_REPO="${LB_UBUNTU_IMAGES_REPO:-git://git.launchpad.net/ubuntu-images}"
LB_UBUNTU_IMAGES_BRANCH="${LB_UBUNTU_IMAGES_BRANCH:-$SUITE}" LB_UBUNTU_IMAGES_BRANCH="${LB_UBUNTU_IMAGES_BRANCH:-$SUITE}"
@ -832,6 +837,26 @@ case $PROJECT in
esac esac
;; ;;
ubuntu-core-desktop)
touch config/universe-enabled
KERNEL_FLAVOURS='generic-hwe-22.04'
PASSES_TO_LAYERS="true"
# the minimal layer, for minimal installs
add_task minimal minimal
# the live layer, contains all packages for the live session installer
add_snap minimal.live ubuntu-core-desktop-installer/classic core22 snapd
add_package minimal.live linux-$KERNEL_FLAVOURS plymouth-theme-spinner squashfs-tools snapd cloud-init gsettings-desktop-schemas yaru-theme-gtk lshw
echo "Configuring for additional payload preparation"
UBUNTU_IMAGE_PAYLOAD_ARGS="--image-size 12G"
EXTRA_SNAPS="$EXTRA_SNAPS evince firefox gnome-calculator gnome-characters gnome-clocks gnome-font-viewer gnome-logs gnome-system-monitor gnome-text-editor gnome-weather loupe snapd-desktop-integration snap-store ubuntu-core-desktop-init workshops"
for snap in $EXTRA_SNAPS; do
UBUNTU_IMAGE_PAYLOAD_ARGS="$UBUNTU_IMAGE_PAYLOAD_ARGS --snap $snap"
done
echo "UBUNTU_IMAGE_PAYLOAD_ARGS=\"$UBUNTU_IMAGE_PAYLOAD_ARGS\"" >> config/common
;;
ubuntu-oem) ubuntu-oem)
HAS_MINIMAL=yes HAS_MINIMAL=yes
MINIMAL_NAME="Ubuntu Desktop for OEM (minimal)" MINIMAL_NAME="Ubuntu Desktop for OEM (minimal)"
@ -1411,7 +1436,7 @@ case $PROJECT:${SUBPROJECT:-} in
ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled| \ ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled| \
ubuntu-wsl:*|ubuntu-mini-iso:*|ubuntu:|ubuntu-oem:*| \ ubuntu-wsl:*|ubuntu-mini-iso:*|ubuntu:|ubuntu-oem:*| \
ubuntustudio-dvd:*|edubuntu:*|ubuntu-budgie:*|ubuntucinnamon:*|xubuntu:*| \ ubuntustudio-dvd:*|edubuntu:*|ubuntu-budgie:*|ubuntucinnamon:*|xubuntu:*| \
ubuntukylin:*|ubuntu-mate:*) ubuntukylin:*|ubuntu-mate:*|ubuntu-core-desktop:*)
# Ensure that most things e.g. includes.chroot are copied as is # Ensure that most things e.g. includes.chroot are copied as is
for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do
case $entry in case $entry in

@ -0,0 +1,12 @@
version: 1
source:
id: ubuntu-core-desktop
search_drivers: false
interactive-sections:
- locale
- keyboard
- storage
identity:
username: ubuntu
password: '$1$zB3Qu2ef$TKLhQpQlKRyCZGUdHFFMH/'
hostname: ubuntu

@ -0,0 +1,21 @@
#! /bin/sh
set -eu
case ${PASS:-} in
minimal.live)
;;
*)
exit 0
;;
esac
mkdir -p "/etc/initramfs-tools/conf.d"
cat <<EOF > /etc/initramfs-tools/conf.d/casperize.conf
export CASPER_GENERATE_UUID=1
EOF
cat <<EOF > /etc/initramfs-tools/conf.d/default-layer.conf
LAYERFS_PATH=${PASS}.squashfs
EOF

@ -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

@ -0,0 +1,4 @@
output: {all: '>> /var/log/cloud-init-output.log'}
no_ssh_fingerprints: true
ssh:
emit_keys_to_console: false

@ -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"

@ -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"

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear -n --autologin ubuntu-server %I $TERM

@ -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

@ -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

@ -0,0 +1,4 @@
[Mount]
What=/dev/disk/by-uuid/00c629d6-06ab-4dfd-b21e-c3186f34105d
Where=/subiquity_config
Type=ext4

@ -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

@ -0,0 +1,11 @@
- default: true
description:
en: Ubuntu Core Desktop.
id: ubuntu-core-desktop
locale_support: none
name:
en: Ubuntu Core Desktop
path: filesystem.img.xz
type: dd-xz:file
size: @SIZE@
variant: core

@ -0,0 +1,187 @@
type: model
authority-id: canonical
revision: 5
series: 16
brand-id: canonical
model: ubuntu-core-desktop-22-amd64
architecture: amd64
base: core22-desktop
display-name: Ubuntu Core Desktop 22 (amd64)
grade: signed
snaps:
-
default-channel: 22/stable
id: mZqHskGgGDECRCKP7h7ef3Rl2wTwyNfy
name: pc-desktop
type: gadget
-
default-channel: 23.10/stable
id: pYVQrBcKmBa0mZ4CCN7ExT6jH8rY1hza
name: pc-kernel
type: kernel
-
default-channel: latest/edge/ubuntu-core-desktop
id: PMrrV4ml8uWuEUDBT8dSGnKUYbevVhc4
name: snapd
type: snapd
-
default-channel: latest/stable
id: qRMmQqNDz8kRUTqFIgqk2RzNNoC7jUZ6
name: core22-desktop
type: base
-
default-channel: latest/stable
id: LVkazk0JLrL0ivuHRlv3wp3bK1nAgwtN
name: ubuntu-desktop-session
type: app
-
default-channel: latest/stable
id: amcUKQILKXHHTlmSa7NMdnXSx02dNeeT
name: core22
type: base
-
default-channel: 22/stable
id: RmBXKl6HO6YOC2DE4G2q1JzWImC04EUy
name: network-manager
type: app
-
default-channel: latest/stable
id: EISPgh06mRh1vordZY9OZ34QHdd7OrdR
name: bare
type: base
-
default-channel: latest/stable
id: jZLfBRzf1cYlYysIjD2bwSzNtngY0qit
name: gtk-common-themes
type: app
-
default-channel: latest/stable
id: lATO8HzwVvrAPrlZRAWpfyrJKlAJrZS3
name: gnome-42-2204
type: app
-
default-channel: latest/stable
id: m1eQacDdXCthEwWQrESei3Zao3d5gfJF
name: cups
type: app
-
default-channel: latest/stable
id: WJKWBUuCDufOFw2p24tvkbbw02plGkbd
name: ipp-usb
type: app
-
default-channel: 22/stable
id: dVK2PZeOLKA7vf1WPCap9F8luxTk9Oll
name: avahi
type: app
-
default-channel: 22/stable
id: JmzJi9kQvHUWddZ32PDJpBRXUpGRxvNS
name: bluez
type: app
-
default-channel: latest/stable
id: Si21Q1kjaZpyJ8TfGbAnxJ4y6KMv7FuW
name: loupe
presence: optional
type: app
-
default-channel: latest/stable
id: EDFg87ESUg9sAIlm0Vm5Wmr0LjiEonSm
name: evince
presence: optional
type: app
-
default-channel: latest/stable/ubuntu-23.10
id: 3wdHCAVyZEmYsCMFDE9qt92UV8rC8Wdk
name: firefox
presence: optional
type: app
-
default-channel: latest/stable
id: J8OcDPQ0JM8dbvk29HRqpWVI9kBw0atG
name: gnome-calculator
presence: optional
type: app
-
default-channel: latest/stable
id: qJcS3UjpF9AMJKWAiKwA5EWbm0y6Uduw
name: gnome-characters
presence: optional
type: app
-
default-channel: latest/stable
id: 8NtSF2nXW6krsxbXBYydy1j985k6ZsVK
name: gnome-clocks
presence: optional
type: app
-
default-channel: latest/stable
id: BzJuWXmCIpyjUKotXPWU2psnl8gEh4hm
name: gnome-font-viewer
presence: optional
type: app
-
default-channel: latest/stable
id: kIMfmZTJspWa8vtfbgU3W9Nbv4V5Qgmh
name: gnome-logs
presence: optional
type: app
-
default-channel: latest/stable
id: PZj2sEabMQrVUV1HKZmmmXSk3E6wKC9i
name: gnome-text-editor
presence: optional
type: app
-
default-channel: latest/stable
id: LhzK7p8214jufMYx1kz43QkWhFnOKdbr
name: gnome-weather
presence: optional
type: app
-
default-channel: latest/stable
id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu
name: lxd
type: app
-
default-channel: latest/edge/ubuntu-core-desktop
id: IrwRHakqtzhFRHJOOPxKVPU0Kk7Erhcu
name: snapd-desktop-integration
type: app
-
default-channel: latest/stable/ubuntu-23.10
id: gjf3IPXoRiipCu9K0kVu52f0H56fIksg
name: snap-store
type: app
-
default-channel: latest/stable
id: JMjaFobGn56fh1HepiaGuCxQgbWYnHc8
name: workshops
presence: optional
type: app
-
default-channel: latest/stable
id: 9BTClmjz31r0UltmbJ5nnGe0Xm1AzfMp
name: gnome-system-monitor
presence: optional
type: app
-
default-channel: latest/stable
id: xODwiAdjx9KGChvI1z9Xx2JWJE7oLFF6
name: ubuntu-core-desktop-init
type: app
storage-safety: prefer-encrypted
timestamp: 2023-10-21T10:19:41+00:00
sign-key-sha3-384: 9tydnLa6MTJ-jaQTFUXEwHl1yRx7ZS4K5cyFDhYDcPzhS7uyEkDxdUjg9g08BtNn
AcLBXAQAAQoABgUCZTP+wgAKCRDgT5vottzAEia0D/9FyEOb4Qai+sJQ/ilVqZ1L0FicTIwa9/Ae
khv5xXYGmukSzkIUGNYjvcCJByxgMiDsFOIIzrOYlJPmRFtdFOwm3KGS2JGthIUbQfElVbyPswZh
cgqYVuGMiRw8udlZHOmy2rWIKxo/uLMEsZzZuk83nC+ZzAoQoHOmcELuRtIc1qz9XAf6n7pd79S2
10cxG7vuaA1iVbqqtbSlQCAdKTdOCxw2/NHTZ8mIRtAQZGA1LP8IMEyv2Fi3FVpmN2derV78sO3f
kCf/KdYeD6d1a03WchIDsuPlvTpTOU3TSX07QWj+WrZHMDh9gpQHDdSIWswBCPIHa10R6aDRRUUK
/5dJDq77/CyY/Q/ivcAuFiTceghKVcx3Zci+VX2WgvLK9qYHYHSilb70nTvsDFUA/bKep57/xqeG
j03cvUaqHb6li2T2SmyzaQOGV5MF6XxlhcLWY19PHc2/ocLpukL4vxkl18Ur3FoYAOLODwrlxueS
FDu7u+qf+Ki2+f0ZtN70EPcFAQAJ4C0N6f9j9Z+9BQptTlVwrIzIUxIwxtkp27YvERno6bZPBRYs
T4YdzVSdPKXsItT/GUiqYwdgPTi61FZXTN/47yIaHZLUwMT9gg/9XgNqIHKIdFHxm6GWVxL0AqOp
JPIfqrsmVbewevzwV1Rgo1LbPKVVrjqPtW0QQlkS8w==
Loading…
Cancel
Save