I packed swtpm for the #QEMU build so it does not have to be installed to the system:
https://github.com/jarkkojs/tpmdd-buildroot-external
start-qemu.sh will automatically setup shenanigans so that swtpm will work as TPM emulation host for QEMU.
After build there’s three options:
output/build/images/start-qemu.shoutput/build/images/start-qemu.sh --tpm-crboutput/build/images/start-qemu.sh --tpm1Right, and neither QEMU needs to be installed to the host. I’m trying to sort of construct this in a way that it would become as CI friendly as possible so that this could be in addition used as a CI workload for keyutils.
After some experimentation it is best the define boards in this context as fairly self-contained packages to the specific test devices at hand and not have anything shared e.g. by CPU architecture even at the cost of some redundancy:
$ tree
.
├── Config.in
├── LICENSE
├── board
│ └── tpmdd_qemu_x86_64
│ ├── linux.config
│ ├── post-build.sh
│ ├── post-image.sh
│ └── start-qemu.sh.in
├── configs
│ └── tpmdd_qemu_x86_64_defconfig
├── external.desc
└── external.mk
4 directories, 9 files
E.g. similarly I’ll add tpmdd_raspberrypi3b target and so forth. For instance, I would not share post-image.sh and similar scripts between boards even if they were 1:1. It kills robustness.
The orchestrator itself has a flat repository:
$ tree
.
├── LICENSE
├── Makefile
└── README.md
I licensed external with GPL2 for the sake of upstream compatibility and orchestrator with MIT. This is overally pretty usable structure to use Buildroot.
My new (WiP) orchestrator for building test image for testing my #kernel tree is fully implemented with GNU make:
# SPDX-License-Identifier: MIT
ROOT := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
BUILDROOT_VERSION := 2023.11
OUTPUT := $(ROOT)output
BUILDROOT_URL := https://buildroot.org/downloads/buildroot-$(BUILDROOT_VERSION).tar.gz
EXTERNAL_URL := https://github.com/jarkkojs/tpmdd-buildroot-external/tarball/main
define make-buildroot
make -C "$(OUTPUT)/buildroot" BR2_EXTERNAL="$(OUTPUT)/external" O="$(OUTPUT)/build" $(1)
endef
define download-package
mkdir -p $(2)
curl -sL "$(1)" | tar -zxv -C "$(2)" --strip-components=1
endef
all: buildroot
.PHONY: buildroot
buildroot: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,all)
.PHONY: buildroot-menuconfig
buildroot-menuconfig: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,menuconfig)
$(call make-buildroot,savedefconfig)
.PHONY: linux-menuconfig
linux-menuconfig: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,linux-menuconfig)
$(call make-buildroot,linux-savedefconfig)
$(OUTPUT)/download-stamp:
$(call download-package,"$(BUILDROOT_URL)","$(OUTPUT)/buildroot")
$(call download-package,"$(EXTERNAL_URL)","$(OUTPUT)/external")
touch $@
.PHONY: clean
clean:
rm -rf "$(OUTPUT)"
It is pretty robust structure because I can e.g. easily add packages (like maybe host swtpm) in a robust manner to buildroot.
To test latest linux-tpmdd changes:
git clone https://github.com/jarkkojs/test-tpmdd
cd test-tpmdd
make
Then:
output/images/start-qemu.sh --swtpmoutput/images/start-qemu.sh --swtpm --tpm-crboutput/images/start-qemu.sh --swtpm --tpm1Tools for testing (more in future):
keyutils for testing keyring and trusted keys/usr/lib/kselftests/run_selftests.shRequires swtpm to be installed (but not QEMU, it will build one).
Linus might be willing to drop support for i486-class machines[1] from the #Linux #kernel.
No, nobody asked for that directly; he brought that up in a discussion himself: https://lore.kernel.org/all/CAHk-%3DwhESMW2v0cd0Ye%2BAnV0Hp9j%2BMm4BO2xJo93eQcC1xghUA@mail.gmail.com/ #LinuxKernel
[1] and a couple of processors which _claimed_ to be Pentium class, but weren't