[v2,09/11] meta: Add Ubuntu 26.04 (Resolute Raccoon) support

Message ID 20260629094624.855927-10-amikan@ilbers.de
State New
Headers show
Series Add new targets and required fixes | expand

Commit Message

Anton Mikanovich June 29, 2026, 9:46 a.m. UTC
Create AMD64, ARM64 and RISCV64 configurations and put them under fast
CI testsuite.

Test cases for the RISCV64 are covered with KFAIL since stability of
this architecture on Ubuntu is not known yet.

Startvm test case for ARM64 is currently broken because of moving this
target to UEFI, so mark it as TODO and cover with KFAIL for now.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 kas/distro/Kconfig                            | 10 ++-
 kas/distro/ubuntu-resolute.yaml               |  9 +++
 kas/machine/Kconfig                           |  4 ++
 meta-isar/conf/distro/ubuntu-common.inc       |  6 +-
 .../conf/distro/ubuntu-resolute-ports.list    |  6 ++
 meta-isar/conf/distro/ubuntu-resolute.conf    | 14 ++++
 meta-isar/conf/distro/ubuntu-resolute.list    |  6 ++
 meta-isar/conf/machine/qemuarm64.conf         |  8 +--
 meta-isar/conf/machine/qemuriscv64.conf       |  3 +-
 meta-isar/conf/mc.conf                        |  3 +
 .../conf/multiconfig/qemuamd64-resolute.conf  |  7 ++
 .../conf/multiconfig/qemuarm64-resolute.conf  |  7 ++
 .../multiconfig/qemuriscv64-resolute.conf     |  7 ++
 testsuite/citest.py                           | 64 ++++++++++++++++++-
 testsuite/data/targets.yml                    |  6 ++
 testsuite/start_vm.py                         |  5 +-
 16 files changed, 155 insertions(+), 10 deletions(-)
 create mode 100644 kas/distro/ubuntu-resolute.yaml
 create mode 100644 meta-isar/conf/distro/ubuntu-resolute-ports.list
 create mode 100644 meta-isar/conf/distro/ubuntu-resolute.conf
 create mode 100644 meta-isar/conf/distro/ubuntu-resolute.list
 create mode 100644 meta-isar/conf/multiconfig/qemuamd64-resolute.conf
 create mode 100644 meta-isar/conf/multiconfig/qemuarm64-resolute.conf
 create mode 100644 meta-isar/conf/multiconfig/qemuriscv64-resolute.conf

Patch

diff --git a/kas/distro/Kconfig b/kas/distro/Kconfig
index e819ab70..9dadc52e 100644
--- a/kas/distro/Kconfig
+++ b/kas/distro/Kconfig
@@ -1,5 +1,5 @@ 
 # This software is a part of Isar.
-# Copyright (C) 2023-2024 ilbers GmbH
+# Copyright (C) 2023-2026 ilbers GmbH
 #
 # SPDX-License-Identifier: MIT
 #
@@ -44,6 +44,9 @@  config CODENAME_JAMMY
 config CODENAME_NOBLE
 	bool
 
+config CODENAME_RESOLUTE
+	bool
+
 choice
 	prompt "Distro selection"
 	default DEBIAN_TRIXIE
@@ -92,6 +95,10 @@  config UBUNTU_NOBLE
 	bool "Ubuntu 24.04 (Noble)"
 	depends on (DISTRO_UBUNTU && CODENAME_NOBLE) || ANY_MACHINE_DISTRO
 
+config UBUNTU_RESOLUTE
+	bool "Ubuntu 26.04 (Resolute)"
+	depends on (DISTRO_UBUNTU && CODENAME_RESOLUTE) || ANY_MACHINE_DISTRO
+
 endchoice
 
 config ANY_MACHINE_DISTRO
@@ -114,5 +121,6 @@  config KAS_INCLUDE_DISTRO
 	default "kas/distro/ubuntu-focal.yaml" if UBUNTU_FOCAL
 	default "kas/distro/ubuntu-jammy.yaml" if UBUNTU_JAMMY
 	default "kas/distro/ubuntu-noble.yaml" if UBUNTU_NOBLE
+	default "kas/distro/ubuntu-resolute.yaml" if UBUNTU_RESOLUTE
 
 endmenu
diff --git a/kas/distro/ubuntu-resolute.yaml b/kas/distro/ubuntu-resolute.yaml
new file mode 100644
index 00000000..fb643862
--- /dev/null
+++ b/kas/distro/ubuntu-resolute.yaml
@@ -0,0 +1,9 @@ 
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+header:
+  version: 14
+
+distro: ubuntu-resolute
diff --git a/kas/machine/Kconfig b/kas/machine/Kconfig
index 6151716a..04881a4b 100644
--- a/kas/machine/Kconfig
+++ b/kas/machine/Kconfig
@@ -123,6 +123,7 @@  config MACHINE_QEMU_AMD64
 	select CODENAME_FOCAL
 	select CODENAME_JAMMY
 	select CODENAME_NOBLE
+	select CODENAME_RESOLUTE
 	select ARCH_AMD64
 
 config MACHINE_QEMU_ARM
@@ -145,6 +146,7 @@  config MACHINE_QEMU_ARM64
 	select CODENAME_FOCAL
 	select CODENAME_JAMMY
 	select CODENAME_NOBLE
+	select CODENAME_RESOLUTE
 	select ARCH_ARM64
 
 config MACHINE_QEMU_I386
@@ -167,6 +169,8 @@  config MACHINE_QEMU_RISCV64
 	select DISTRO_DEBIAN
 	select CODENAME_TRIXIE
 	select CODENAME_SID
+	select DISTRO_UBUNTU
+	select CODENAME_RESOLUTE
 	select ARCH_RISCV64
 
 config MACHINE_RPI_ARM_V7
diff --git a/meta-isar/conf/distro/ubuntu-common.inc b/meta-isar/conf/distro/ubuntu-common.inc
index 8b9964c8..1ee9bb84 100644
--- a/meta-isar/conf/distro/ubuntu-common.inc
+++ b/meta-isar/conf/distro/ubuntu-common.inc
@@ -1,5 +1,6 @@ 
-#
+# This software is a part of Isar.
 # Copyright (c) Siemens AG, 2018-2023
+# Copyright (C) 2023-2024 ilbers GmbH
 #
 # SPDX-License-Identifier: MIT
 
@@ -12,6 +13,9 @@  HOST_BASE_DISTRO = "${BASE_DISTRO}"
 DISTRO_APT_SOURCES:arm64 ?= "conf/distro/${BASE_DISTRO}-${BASE_DISTRO_CODENAME}-ports.list"
 HOST_DISTRO_APT_SOURCES:arm64 ?= "conf/distro/${HOST_DISTRO}.list conf/distro/${HOST_DISTRO}-ports.list"
 
+DISTRO_APT_SOURCES:riscv64 ?= "conf/distro/${BASE_DISTRO}-${BASE_DISTRO_CODENAME}-ports.list"
+HOST_DISTRO_APT_SOURCES:riscv64 ?= "conf/distro/${HOST_DISTRO}.list conf/distro/${HOST_DISTRO}-ports.list"
+
 BOOTSTRAP_KEY = "file://${LAYERDIR_isar}/conf/distro/ubuntu.public.key;sha256sum=36a38199a4bf4eae1e7f574891f7dfcb79b91b87a33a499383265e1224b5e989"
 DISTRO_BOOTSTRAP_KEYS += "${BOOTSTRAP_KEY}"
 HOST_DISTRO_BOOTSTRAP_KEYS += "${BOOTSTRAP_KEY}"
diff --git a/meta-isar/conf/distro/ubuntu-resolute-ports.list b/meta-isar/conf/distro/ubuntu-resolute-ports.list
new file mode 100644
index 00000000..239cafe6
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute-ports.list
@@ -0,0 +1,6 @@ 
+deb	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute main restricted universe multiverse
+deb-src	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute main restricted universe multiverse
+deb	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-updates main restricted universe multiverse
+deb-src	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-updates main restricted universe multiverse
+deb	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-security main restricted universe multiverse
+deb-src	[arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-security main restricted universe multiverse
diff --git a/meta-isar/conf/distro/ubuntu-resolute.conf b/meta-isar/conf/distro/ubuntu-resolute.conf
new file mode 100644
index 00000000..141f438f
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute.conf
@@ -0,0 +1,14 @@ 
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+require conf/distro/ubuntu-common.inc
+
+BASE_DISTRO_CODENAME = "resolute"
+
+DISTRO_GCC = "15"
+
+DEBIAN_COMPAT = "13"
+
+DEBIAN_STANDARDS_VERSION ?= "4.7.4"
diff --git a/meta-isar/conf/distro/ubuntu-resolute.list b/meta-isar/conf/distro/ubuntu-resolute.list
new file mode 100644
index 00000000..65dcc81e
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute.list
@@ -0,0 +1,6 @@ 
+deb	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute main restricted universe multiverse
+deb-src	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute main restricted universe multiverse
+deb	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-updates main restricted universe multiverse
+deb-src	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-updates main restricted universe multiverse
+deb	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-security main restricted universe multiverse
+deb-src	[arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-security main restricted universe multiverse
diff --git a/meta-isar/conf/machine/qemuarm64.conf b/meta-isar/conf/machine/qemuarm64.conf
index 0cc7457c..4b76e5c1 100644
--- a/meta-isar/conf/machine/qemuarm64.conf
+++ b/meta-isar/conf/machine/qemuarm64.conf
@@ -1,12 +1,12 @@ 
 # This software is a part of Isar.
-# Copyright (C) 2015-2017 ilbers GmbH
+# Copyright (C) 2015-2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
 
 DISTRO_ARCH ?= "arm64"
 
 KERNEL_NAME ?= "arm64"
-KERNEL_NAME:ubuntu-focal ?= "generic"
-KERNEL_NAME:ubuntu-jammy ?= "generic"
-KERNEL_NAME:ubuntu-noble ?= "generic"
+KERNEL_NAME:ubuntu ?= "generic"
 
 IMAGE_FSTYPES ?= "ext4"
 ROOTFS_EXTRA ?= "128"
diff --git a/meta-isar/conf/machine/qemuriscv64.conf b/meta-isar/conf/machine/qemuriscv64.conf
index f2a32b8e..a2a5de9b 100644
--- a/meta-isar/conf/machine/qemuriscv64.conf
+++ b/meta-isar/conf/machine/qemuriscv64.conf
@@ -1,5 +1,5 @@ 
 # This software is a part of Isar.
-# Copyright (C) 2015-2017 ilbers GmbH
+# Copyright (C) 2015-2026 ilbers GmbH
 # Copyright (c) Siemens AG, 2020
 #
 # SPDX-License-Identifier: MIT
@@ -7,6 +7,7 @@ 
 DISTRO_ARCH ?= "riscv64"
 
 KERNEL_NAME ?= "riscv64"
+KERNEL_NAME:ubuntu ?= "generic"
 
 IMAGE_FSTYPES ?= "ext4"
 ROOTFS_EXTRA ?= "128"
diff --git a/meta-isar/conf/mc.conf b/meta-isar/conf/mc.conf
index 6c7d7840..6f9ac7df 100644
--- a/meta-isar/conf/mc.conf
+++ b/meta-isar/conf/mc.conf
@@ -72,9 +72,12 @@  BBMULTICONFIG = " \
     qemuarm64-focal \
     qemuarm64-jammy \
     qemuarm64-noble \
+    qemuarm64-resolute \
     qemuamd64-focal \
     qemuamd64-jammy \
     qemuamd64-noble \
+    qemuamd64-resolute \
     qemuamd64-sid \
     qemuarm64-sid \
+    qemuriscv64-resolute \
 "
diff --git a/meta-isar/conf/multiconfig/qemuamd64-resolute.conf b/meta-isar/conf/multiconfig/qemuamd64-resolute.conf
new file mode 100644
index 00000000..8c997f89
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuamd64-resolute.conf
@@ -0,0 +1,7 @@ 
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuamd64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/meta-isar/conf/multiconfig/qemuarm64-resolute.conf b/meta-isar/conf/multiconfig/qemuarm64-resolute.conf
new file mode 100644
index 00000000..cdb25642
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuarm64-resolute.conf
@@ -0,0 +1,7 @@ 
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuarm64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf b/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf
new file mode 100644
index 00000000..4f2c6b9e
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf
@@ -0,0 +1,7 @@ 
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuriscv64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/testsuite/citest.py b/testsuite/citest.py
index ff2f9ba4..5975b2cc 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -1,7 +1,7 @@ 
 #!/usr/bin/env python3
 #
 # This software is a part of Isar.
-# Copyright (C) 2022-2025 ilbers GmbH
+# Copyright (C) 2022-2026 ilbers GmbH
 # Copyright (C) 2022-2025 Siemens AG
 #
 # SPDX-License-Identifier: MIT
@@ -262,6 +262,8 @@  class CrossTest(CIBaseTest):
             'mc:qemuarm64-trixie:isar-image-base',
             'mc:qemuarm64-focal:isar-image-base',
             'mc:nanopi-neo-efi-bookworm:isar-image-base',
+            'mc:qemuarm64-resolute:isar-image-base',
+            'mc:qemuamd64-resolute:isar-image-base',
         ]
 
         self.init()
@@ -384,6 +386,42 @@  class CrossTest(CIBaseTest):
         self.init()
         self.vm_start('arm64', 'focal')
 
+    # TODO: broken because of moving to UEFI
+    def test_run_arm64_resolute(self):
+        """
+        :avocado: tags=startvm
+        """
+        self.init()
+        try:
+            self.vm_start('arm64', 'resolute')
+        except exceptions.TestFail:
+            self.cancel('KFAIL')
+
+    def test_run_amd64_resolute(self):
+        """
+        :avocado: tags=startvm
+        """
+        self.init()
+        self.vm_start('amd64', 'resolute')
+
+    def test_cross_debsrc(self):
+        targets = [
+            'mc:qemuarm64-bookworm:isar-image-ci',
+        ]
+
+        self.init()
+        # only build a single custom package to speedup test
+        self.perform_build_test(targets, debsrc_cache=True, image_install='cowsay')
+
+    def test_cross_trixie(self):
+        targets = [
+            'mc:qemuamd64-trixie:isar-image-base',
+            'mc:qemuarm64-trixie:isar-image-base',
+        ]
+
+        self.init()
+        self.perform_build_test(targets, cross=False)
+
     def test_cross_debsrc(self):
         targets = [
             'mc:qemuarm64-bookworm:isar-image-ci',
@@ -430,6 +468,30 @@  class CrossTest(CIBaseTest):
         self.perform_build_test(targets, lines=lines,
                                 image_install=image_install)
 
+    def test_cross_riscv64(self):
+        """
+        :avocado: tags=riscv64
+        """
+        targets = [
+            'mc:qemuriscv64-resolute:isar-image-ci',
+        ]
+
+        self.init()
+        try:
+            self.perform_build_test(targets)
+        except exceptions.TestFail:
+            self.cancel('KFAIL')
+
+    def test_run_riscv64_resolute(self):
+        """
+        :avocado: tags=startvm,riscv64
+        """
+        self.init()
+        try:
+            self.vm_start('riscv64', 'resolute', image='isar-image-ci')
+        except exceptions.TestFail:
+            self.cancel('KFAIL')
+
     def test_cross_mira_trixie(self):
         targets = [
             'mc:phyboard-mira-trixie:isar-image-base',
diff --git a/testsuite/data/targets.yml b/testsuite/data/targets.yml
index e7b112d9..f480d034 100644
--- a/testsuite/data/targets.yml
+++ b/testsuite/data/targets.yml
@@ -127,16 +127,22 @@  a: !mux
     name: qemuarm64-jammy
   qemuarm64-noble:
     name: qemuarm64-noble
+  qemuarm64-resolute:
+    name: qemuarm64-resolute
   qemuamd64-focal:
     name: qemuamd64-focal
   qemuamd64-jammy:
     name: qemuamd64-jammy
   qemuamd64-noble:
     name: qemuamd64-noble
+  qemuamd64-resolute:
+    name: qemuamd64-resolute
   qemuamd64-sid:
     name: qemuamd64-sid
   qemuarm64-sid:
     name: qemuarm64-sid
+  qemuriscv64-resolute:
+    name: qemuriscv64-resolute
 b: !mux
   base:
     image: isar-image-base
diff --git a/testsuite/start_vm.py b/testsuite/start_vm.py
index 8e28f11b..15d5ed5c 100755
--- a/testsuite/start_vm.py
+++ b/testsuite/start_vm.py
@@ -48,7 +48,7 @@  def format_qemu_cmdline(
     extra_args = ''
 
     image_type = image_fstypes.split()[0]
-    base = 'ubuntu' if distro in ['jammy', 'focal', 'noble'] else 'debian'
+    base = 'ubuntu' if distro in ['jammy', 'focal', 'noble', 'resolute'] else 'debian'
 
     rootfs_image = f"{image}-{base}-{distro}-qemu{arch}.{image_type}"
 
@@ -148,7 +148,7 @@  def start_qemu(arch, build, distro, image, out, pid, enforce_pcbios):
 
 def parse_args():
     parser = argparse.ArgumentParser()
-    arch_names = ['arm', 'arm64', 'amd64', 'amd64-sb', 'amd64-cip', 'amd64-iso', 'i386', 'mipsel']
+    arch_names = ['arm', 'arm64', 'amd64', 'amd64-sb', 'amd64-cip', 'amd64-iso', 'i386', 'mipsel', 'riscv64']
     distro_names = [
         'buster',
         'bullseye',
@@ -157,6 +157,7 @@  def parse_args():
         'focal',
         'jammy',
         'noble',
+        'resolute',
     ]
     parser.add_argument(
         '-a',