Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
a8d1f39
genimage: support GROWFS flag on GPT partitions
wkz Oct 28, 2026
6f52fac
rauc: Add option to download bundles to locations other than /tmp
wkz Oct 12, 2026
c00505b
qemu: Only allow custom kernel options with QEMU's native loader
wkz Feb 26, 2026
58a881a
factory: Add check logic
wkz Oct 6, 2026
56212fd
board/common: nginx: Ensure existance of log directory
wkz Oct 7, 2026
0c03da7
image: Allow images to contribute files to the rootfs
wkz Mar 1, 2026
2b65ea3
image-itb-rootfs: Assume ownership of legacy filesystem setup
wkz Mar 1, 2026
2d77c97
image-itb-rootfs: Assume ownership of RAUC service finit config
wkz Oct 7, 2026
e8597e1
image-barebox-esp: EFI System Partition with Barebox
wkz Mar 3, 2026
0ed7469
image-ddi: Add Discoverable Disk Image (DDI)
wkz Dec 4, 2025
655b73d
image-ddi-disk: Full system image
wkz Dec 18, 2025
4f73059
image-ddi-rauc: Add RAUC update bundles for DDI images
wkz Oct 7, 2026
4d44cca
image-lvm-stub: Base image for use with 'make run'
wkz Feb 26, 2026
27f8fef
board/common: Support signing the Linux kernel
wkz Sep 29, 2026
be732a5
board/common: ddi: Add helper tool to work with DDIs
wkz Feb 26, 2026
93ac6fd
initramfs: Build initramfs capable of booting DDI images
wkz Feb 4, 2026
ae84875
qemu: Support running from DDI images
wkz Feb 27, 2026
887f322
{conf,yanger}d: Add Barebox support
wkz Oct 8, 2026
9ea50de
test: Use DDI images for qeneth testing
wkz Oct 8, 2026
d0f5718
defconfig: x86_64: Switch to DDI images
wkz Oct 8, 2026
a34f99b
doc: Update docs and changelog with info about DDI images
wkz Oct 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions board/common/Config.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@

menu "Images"

comment "DDI Based"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-ddi/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-ddi-disk/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-ddi-rauc/Config.in"

comment "ITB Based"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-rootfs/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-aux/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-boot/Config.in"
Expand All @@ -8,10 +15,36 @@ source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-gns3a/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-rauc/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-ext4-rauc/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-dl-release/Config.in"

comment "General"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-barebox-esp/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-lvm-stub/Config.in"
source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-readme/Config.in"

endmenu


menuconfig IX_KERNEL_SIGN
bool "Sign Linux Kernel"
default y if BR2_x86_64

config IX_KERNEL_SIGN_KEY
string "signing key"
depends on IX_KERNEL_SIGN
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.key"
help
Path to the private RSA key, in PKCS#8 format, used to sign
the kernel image.

config IX_KERNEL_SIGN_CERT
string "signing cert"
depends on IX_KERNEL_SIGN
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.crt"
help
Path to the X509 certificate whose associated public key can
validate the authenticity of the generated signature.


config IX_QEMU_SCRIPTS
bool "QEMU scripts"
default y
Expand Down
20 changes: 20 additions & 0 deletions board/common/barebox/barebox.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
ifeq ($(IX_IMAGE_BAREBOX_ESP),y)

IX_BAREBOX_DIR := $(BR2_EXTERNAL_INFIX_PATH)/board/common/barebox
IX_BAREBOX_BUILD := $(BUILD_DIR)/infix-bareboxenv

define BAREBOX_PRE_BUILD_CREATE_ENV
@$(call IXMSG,"Creating Barebox environment")
rsync -a $(IX_BAREBOX_DIR)/env/ $(IX_BAREBOX_BUILD)
dtc <$(IX_BAREBOX_DIR)/state.dts >$(IX_BAREBOX_BUILD)/state.dtb
endef
BAREBOX_PRE_BUILD_HOOKS += BAREBOX_PRE_BUILD_CREATE_ENV

define BAREBOX_POST_BUILD_INSTALL_STATE
@$(call IXMSG,"Installing state.dtb in rootfs")
mkdir -p $(TARGET_DIR)/etc/barebox \
&& dtc <$(IX_BAREBOX_DIR)/state.dts >$(TARGET_DIR)/etc/barebox/state.dtb
endef
BAREBOX_POST_BUILD_HOOKS += BAREBOX_POST_BUILD_INSTALL_STATE

endif
24 changes: 24 additions & 0 deletions board/common/barebox/env/boot/net
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/sh

if dhcp $1; then
if [ -z "${global.dhcp.bootfile}" ]; then
echo "net: ERROR: DHCP did not supply a bootfile"
exit 1
fi
else
echo "net: ERROR: DHCP Failed"
exit 1
fi

echo "net: Downloading ${global.dhcp.bootfile}..."
if tftp ${global.dhcp.bootfile} /initrd; then
else
echo "net: ERROR: Download failed"
exit 1
fi

global bootm.initrd=/initrd
dmsetup loop initrd /initrd && boot /dev/initrd

echo "net: ERROR: Unable to boot from ${global.dhcp.bootfile}"
exit 1
20 changes: 20 additions & 0 deletions board/common/barebox/env/init/infix
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/sh

global allow_color=1
global model=efi
export PS1="\e[1;32mbarebox@\h\e[0m:\e[1;36m\w\e[0m# "

global autoboot_timeout=1
global boot.default="bootchooser storage"
global bootchooser.reset_attempts="all-zero"
global bootchooser.retry=1
global bootchooser.state_prefix="state.bootstate"
global bootchooser.targets="internal-primary internal-secondary net"

global blspec.require_trust=${efi.secure_mode}
global ddi.require_trust=${efi.secure_mode}

keys -l os @efi

lvm activate

4 changes: 4 additions & 0 deletions board/common/barebox/env/menu/mainmenu
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh

boot -m
reset
80 changes: 80 additions & 0 deletions board/common/barebox/state.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/dts-v1/;

/ {
aliases {
state = &state;
};

partitions {
compatible = "fixed-partitions";

statepart: state {
partuuid = "80ca5554-c020-11f1-ba4d-b3c49d5dbf47";
};
};

state: state {
compatible = "barebox,state";
magic = <0x80ca5554>;
backend-type = "raw";
backend = <&statepart>;
backend-stridesize = <0x200>;

bootstate {
#address-cells = <1>;
#size-cells = <1>;

internal-primary {
#address-cells = <1>;
#size-cells = <1>;
remaining_attempts@0 {
reg = <0x0 0x4>;
type = "uint32";
default = <3>;
};
priority@4 {
reg = <0x4 0x4>;
type = "uint32";
default = <20>;
};
};

internal-secondary {
#address-cells = <1>;
#size-cells = <1>;
remaining_attempts@8 {
reg = <0x8 0x4>;
type = "uint32";
default = <3>;
};
priority@c {
reg = <0xc 0x4>;
type = "uint32";
default = <10>;
};
};

net {
#address-cells = <1>;
#size-cells = <1>;
remaining_attempts@10 {
reg = <0x10 0x4>;
type = "uint32";
default = <0>;
};
priority@14 {
reg = <0x14 0x4>;
type = "uint32";
default = <0>;
};
};

last_chosen@18 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0x18 0x4>;
type = "uint32";
};
};
};
};
14 changes: 14 additions & 0 deletions board/common/common.mk
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/barebox/barebox.mk
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/image/image.mk
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/initramfs/initramfs.mk
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/qemu/qemu.mk

ifeq ($(IX_KERNEL_SIGN),y)
define LINUX_POST_BUILD_SIGN
@$(call IXMSG,"Signing $(notdir $(LINUX_IMAGE_PATH))")
sbsign \
--key "$(IX_KERNEL_SIGN_KEY)" \
--cert "$(IX_KERNEL_SIGN_CERT)" \
--output "$(LINUX_IMAGE_PATH)" \
"$(LINUX_IMAGE_PATH)"
endef
LINUX_POST_BUILD_HOOKS += LINUX_POST_BUILD_SIGN
endif

ifeq ($(IX_TRUSTED_KEYS),y)
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/uboot.mk

Expand Down
23 changes: 23 additions & 0 deletions board/common/image/image-barebox-esp/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
menuconfig IX_IMAGE_BAREBOX_ESP
bool "Barebox EFI System Partition"
depends on BR2_TARGET_BAREBOX
select BR2_PACKAGE_DT_UTILS
help
An EFI System Partition (ESP) with Barebox installed.

config IX_IMAGE_BAREBOX_ESP_KEY
string "signing key"
depends on IX_IMAGE_BAREBOX_ESP
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.key"
help
Path to the private RSA key, in PKCS#8 format, used to sign
the Barebox EFI payload.

config IX_IMAGE_BAREBOX_ESP_CERT
string "signing cert"
depends on IX_IMAGE_BAREBOX_ESP
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.crt"
help
Path to the X509 certificate whose associated public key can
validate the authenticity of the generated signature.

44 changes: 44 additions & 0 deletions board/common/image/image-barebox-esp/generate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/bin/sh

set -e

case "$BR2_ARCH" in
x86_64)
BOOT_EFI=BOOTX64.EFI
;;
*)
echo "Unknown EFI boot path for $BR2_ARCH" >&2
exit 1
;;
esac

mkdir -p "${WORKDIR}"/root
rm -rf "${WORKDIR}"/tmp
mkdir -p "${WORKDIR}"/tmp

sbsign \
--key "${KEY}" \
--cert "${CERT}" \
--output "${BINARIES_DIR}"/barebox.efi.signed \
"${BINARIES_DIR}"/barebox.efi

cat <<EOF >"${WORKDIR}"/genimage.cfg
image barebox-esp.vfat {
size = "16M"
vfat {
file EFI/BOOT/$BOOT_EFI {
image = $BINARIES_DIR/barebox.efi.signed
}
}
}

# Silence genimage warnings
config {}
EOF

genimage \
--tmppath "${WORKDIR}"/tmp \
--rootpath "${WORKDIR}"/root \
--inputpath "${WORKDIR}" \
--outputpath "${BINARIES_DIR}" \
--config "${WORKDIR}"/genimage.cfg
9 changes: 9 additions & 0 deletions board/common/image/image-barebox-esp/image-barebox-esp.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
################################################################################
#
# image-barebox-esp
#
################################################################################

IMAGE_BAREBOX_ESP_CONFIG_VARS := KEY CERT

$(eval $(ix-image))
8 changes: 8 additions & 0 deletions board/common/image/image-ddi-disk/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
menuconfig IX_IMAGE_DDI_DISK
bool "LVM2 based provisioning disk (DDI)"
depends on IX_IMAGE_DDI
select IX_IMAGE_BAREBOX_ESP
help
Compose a full disk image consisting of an EFI System
Partition (ESP) containing Barebox, and an LVM PV in which
Infix is installed as an LV.
69 changes: 69 additions & 0 deletions board/common/image/image-ddi-disk/generate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/bin/sh

set -e


mkdir -p "${WORKDIR}"/root
rm -rf "${WORKDIR}"/tmp
mkdir -p "${WORKDIR}"/tmp

"${BR2_EXTERNAL_INFIX_PATH}"/utils/lvm-mkinternal \
primary "${BINARIES_DIR}"/"${ARTIFACT}".raw >"${WORKDIR}"/internal.lvm

. $BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/etc/partition-uuid
[ -n "${BAREBOX_STATE_UUID}" ]
[ -n "${ESP_UUID}" ]
[ -n "${ESP_BACKUP_UUID}" ]

cat <<EOF >"${WORKDIR}"/genimage.cfg

image ${ARTIFACT}.disk {
hdimage {
partition-table-type = "gpt"
}

partition esp {
partition-type-uuid = "esp"
partition-uuid = "$ESP_UUID"
image = "$BINARIES_DIR/barebox-esp.vfat"
}

partition esp-backup {
partition-type-uuid = "esp"
partition-uuid = "$ESP_BACKUP_UUID"
image = "$BINARIES_DIR/barebox-esp.vfat"
}

partition barebox-state {
partition-type-uuid = "barebox-state"
partition-uuid = "$BAREBOX_STATE_UUID"
size = 2048
}

partition internal {
growfs = "true"
partition-type-uuid = "lvm"
image = "internal.lvm"
}
}

image ${ARTIFACT}.qcow2 {
qemu {
format = "qcow2"
}

partition disk {
image = "${ARTIFACT}.disk"
}
}

# Silence genimage warnings
config {}
EOF

genimage \
--tmppath "${WORKDIR}"/tmp \
--rootpath "${WORKDIR}"/root \
--inputpath "${WORKDIR}" \
--outputpath "${BINARIES_DIR}" \
--config "${WORKDIR}"/genimage.cfg
9 changes: 9 additions & 0 deletions board/common/image/image-ddi-disk/image-ddi-disk.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
################################################################################
#
# image-ddi-disk
#
################################################################################

IMAGE_DDI_DISK_DEPENDENCIES := image-barebox-esp image-ddi

$(eval $(ix-image))
Loading
Loading