From 3be90c7afdbebca54e1d06bced860bc869ad871e Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Wed, 15 Oct 2025 11:18:35 +1100 Subject: [PATCH 01/14] Run CI on QEMU --- .github/workflows/qemu.yml | 63 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/qemu.yml diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml new file mode 100644 index 00000000..8870882a --- /dev/null +++ b/.github/workflows/qemu.yml @@ -0,0 +1,63 @@ +# SPDX-FileCopyrightText: 2023 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +name: Run under QEMU + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + +jobs: + build: + name: Run under bubblewrap + runs-on: ubuntu-24.04 + steps: + - name: Install qemu + run: sudo apt-get install qemu-system-x86 + - name: Checkout repo + uses: actions/checkout@v4 + with: + submodules: recursive + # There is a strange bug(?) in nongnu, when you clone a git repository + # against a commit != HEAD with depth=1, it errors out. + fetch-depth: 0 + - name: Query cache for sources + id: cache + uses: actions/cache/restore@v4 + with: + path: | + mirror + mirror-state + key: cache-${{ hashFiles('steps/*/sources') }} + restore-keys: | + cache- + - name: Get sources + if: steps.cache.outputs.cache-hit != 'true' + run: mkdir -p mirror mirror-state && ./mirror.sh mirror mirror-state + - name: Cache sources + if: steps.cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + with: + path: | + mirror + mirror-state + key: cache-${{ hashFiles('steps/*/sources') }} + - name: Run bootstrap + run: sudo ./rootfs.py --qemu --external-sources --cores 2 --mirror file://${PWD}/mirror + - name: Remount package disk + if: always() + run: > + DEV=$(sudo losetup -f target/external.img) && + sudo partprobe ${DEV}p1 && + mkdir -p mnt && + sudo mount ${DEV}p1 mnt + - name: Archive created packages + if: always() # archive both failed and successful builds + uses: actions/upload-artifact@v4 + with: + name: packages + path: mnt/repo/** From ffda41f38ac980962445a20da7bc2294183d408f Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Wed, 15 Oct 2025 15:01:17 +1100 Subject: [PATCH 02/14] Flush stdout before bootstrap --- .github/workflows/qemu.yml | 2 +- lib/utils.py | 3 +++ rootfs.py | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 8870882a..d4ed10fe 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -51,7 +51,7 @@ jobs: - name: Remount package disk if: always() run: > - DEV=$(sudo losetup -f target/external.img) && + DEV=$(sudo losetup -f --show target/external.img) && sudo partprobe ${DEV}p1 && mkdir -p mnt && sudo mount ${DEV}p1 mnt diff --git a/lib/utils.py b/lib/utils.py index c1eca8cd..de015dd4 100755 --- a/lib/utils.py +++ b/lib/utils.py @@ -19,6 +19,9 @@ def run(*args, cleanup=None, **kwargs): if kwargs.pop('verbose', False): print(arguments) + sys.stdout.flush() + sys.stderr.flush() + try: return subprocess.run(arguments, check=True, **kwargs) except subprocess.CalledProcessError: diff --git a/rootfs.py b/rootfs.py index 7cbb4bc9..5dde3c8b 100755 --- a/rootfs.py +++ b/rootfs.py @@ -17,6 +17,7 @@ import argparse import os import signal +import sys import threading from lib.generator import Generator, stage0_arch_map From a9f253108a276c3a7110a41915da5eaccea9a05b Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Fri, 17 Oct 2025 21:06:33 +1100 Subject: [PATCH 03/14] What is going on here? --- .github/workflows/qemu.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index d4ed10fe..9b81dd4d 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -13,11 +13,20 @@ on: jobs: build: - name: Run under bubblewrap + name: Run under QEMU runs-on: ubuntu-24.04 steps: - name: Install qemu - run: sudo apt-get install qemu-system-x86 + run: > + sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build && + curl -L -O https://download.qemu.org/qemu-10.1.1.tar.xz && + tar -xf qemu-10.1.1.tar.xz && + cd qemu-10.1.1 && + mkdir build && + cd build && + ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm && + ninja && + sudo ninja install - name: Checkout repo uses: actions/checkout@v4 with: @@ -47,12 +56,18 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --external-sources --cores 2 --mirror file://${PWD}/mirror + run: > + ulimit -c unlimited && + sudo ./rootfs.py --qemu --qemu-cmd qemu-system-i386 --external-sources --cores 2 --mirror file://${PWD}/mirror ; + echo $? ; + sudo coredumpctl list; + sudo coredumpctl dump + - name: Remount package disk if: always() run: > DEV=$(sudo losetup -f --show target/external.img) && - sudo partprobe ${DEV}p1 && + sudo partprobe ${DEV} && mkdir -p mnt && sudo mount ${DEV}p1 mnt - name: Archive created packages From 54f30077446398a2fd1eaddf4d635b513c92ddeb Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Fri, 17 Oct 2025 22:15:21 +1100 Subject: [PATCH 04/14] slirp support --- .github/workflows/qemu.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 9b81dd4d..1c9e019e 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -18,13 +18,13 @@ jobs: steps: - name: Install qemu run: > - sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build && + sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build libslirp-dev && curl -L -O https://download.qemu.org/qemu-10.1.1.tar.xz && tar -xf qemu-10.1.1.tar.xz && cd qemu-10.1.1 && mkdir build && cd build && - ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm && + ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm --enable-slirp && ninja && sudo ninja install - name: Checkout repo From 8735777027e244310a41b8ee61e5148b1962167f Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sat, 18 Oct 2025 18:36:33 +1100 Subject: [PATCH 05/14] Revert "slirp support" This reverts commit 54f30077446398a2fd1eaddf4d635b513c92ddeb. --- .github/workflows/qemu.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 1c9e019e..9b81dd4d 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -18,13 +18,13 @@ jobs: steps: - name: Install qemu run: > - sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build libslirp-dev && + sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build && curl -L -O https://download.qemu.org/qemu-10.1.1.tar.xz && tar -xf qemu-10.1.1.tar.xz && cd qemu-10.1.1 && mkdir build && cd build && - ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm --enable-slirp && + ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm && ninja && sudo ninja install - name: Checkout repo From e8b3cb100d3c2a562f99ed0578f2dae412c0790d Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sat, 18 Oct 2025 18:36:51 +1100 Subject: [PATCH 06/14] Revert "What is going on here?" This reverts commit a9f253108a276c3a7110a41915da5eaccea9a05b. --- .github/workflows/qemu.yml | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 9b81dd4d..d4ed10fe 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -13,20 +13,11 @@ on: jobs: build: - name: Run under QEMU + name: Run under bubblewrap runs-on: ubuntu-24.04 steps: - name: Install qemu - run: > - sudo apt-get install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build && - curl -L -O https://download.qemu.org/qemu-10.1.1.tar.xz && - tar -xf qemu-10.1.1.tar.xz && - cd qemu-10.1.1 && - mkdir build && - cd build && - ../configure --disable-user --without-default-features --target-list=i386-softmmu --enable-system --enable-kvm && - ninja && - sudo ninja install + run: sudo apt-get install qemu-system-x86 - name: Checkout repo uses: actions/checkout@v4 with: @@ -56,18 +47,12 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: > - ulimit -c unlimited && - sudo ./rootfs.py --qemu --qemu-cmd qemu-system-i386 --external-sources --cores 2 --mirror file://${PWD}/mirror ; - echo $? ; - sudo coredumpctl list; - sudo coredumpctl dump - + run: sudo ./rootfs.py --qemu --external-sources --cores 2 --mirror file://${PWD}/mirror - name: Remount package disk if: always() run: > DEV=$(sudo losetup -f --show target/external.img) && - sudo partprobe ${DEV} && + sudo partprobe ${DEV}p1 && mkdir -p mnt && sudo mount ${DEV}p1 mnt - name: Archive created packages From a86196488af366f14d7a02bed1e0786577e07b5d Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sat, 18 Oct 2025 18:37:15 +1100 Subject: [PATCH 07/14] Attempt something else --- .github/workflows/qemu.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index d4ed10fe..c49b4909 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,12 +47,12 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --external-sources --cores 2 --mirror file://${PWD}/mirror + run: sudo ./rootfs.py --qemu --external-sources --cores 1 --mirror file://${PWD}/mirror - name: Remount package disk if: always() run: > DEV=$(sudo losetup -f --show target/external.img) && - sudo partprobe ${DEV}p1 && + sudo partprobe ${DEV} && mkdir -p mnt && sudo mount ${DEV}p1 mnt - name: Archive created packages From 7118cddb4cd43df64cf1bd17541389a8dd105cb6 Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sun, 19 Oct 2025 11:18:41 +1100 Subject: [PATCH 08/14] another test --- .github/workflows/qemu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index c49b4909..4eefa699 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --external-sources --cores 1 --mirror file://${PWD}/mirror + run: sudo ./rootfs.py --qemu --qemu-cmd true --external-sources --cores 1 --mirror file://${PWD}/mirror && sudo qemu-system-x86_64 -enable-kvm -m 4096M -smp 2 -drive file=target/init.img,format=raw -drive file=target/external.img,format=raw -machine kernel-irqchip=split -nic user,ipv6=off,model=e1000 -nographic - name: Remount package disk if: always() run: > From f232f7448549dab4f97f67a787a0fd995a76ad74 Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sun, 19 Oct 2025 23:16:03 +1100 Subject: [PATCH 09/14] jasdklfjasdklfj --- .github/workflows/qemu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 4eefa699..28f08d2f 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --qemu-cmd true --external-sources --cores 1 --mirror file://${PWD}/mirror && sudo qemu-system-x86_64 -enable-kvm -m 4096M -smp 2 -drive file=target/init.img,format=raw -drive file=target/external.img,format=raw -machine kernel-irqchip=split -nic user,ipv6=off,model=e1000 -nographic + run: ./rootfs.py --qemu --qemu-cmd true --external-sources --cores 1 --mirror file://${PWD}/mirror ; echo hi && sudo qemu-system-x86_64 -enable-kvm -m 4096M -smp 2 -drive file=target/init.img,format=raw -drive file=target/external.img,format=raw -machine kernel-irqchip=split -nic user,ipv6=off,model=e1000 -nographic - name: Remount package disk if: always() run: > From 9842f76db30189b7f49ec373bc5862508e4a16c2 Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Tue, 21 Oct 2025 20:05:52 +1100 Subject: [PATCH 10/14] blah blah blah --- .github/workflows/qemu.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 28f08d2f..1e006cf0 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -14,7 +14,7 @@ on: jobs: build: name: Run under bubblewrap - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 steps: - name: Install qemu run: sudo apt-get install qemu-system-x86 @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: ./rootfs.py --qemu --qemu-cmd true --external-sources --cores 1 --mirror file://${PWD}/mirror ; echo hi && sudo qemu-system-x86_64 -enable-kvm -m 4096M -smp 2 -drive file=target/init.img,format=raw -drive file=target/external.img,format=raw -machine kernel-irqchip=split -nic user,ipv6=off,model=e1000 -nographic + run: ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror - name: Remount package disk if: always() run: > From 63a201a77582da58427906f7abaa06890b35d59d Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Tue, 21 Oct 2025 20:23:20 +1100 Subject: [PATCH 11/14] blah blah blah --- .github/workflows/qemu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 1e006cf0..545aebbc 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror + run: sudo ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror - name: Remount package disk if: always() run: > From 985961cc30ae67942297cfb4bd4836130cdbf7ef Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Wed, 22 Oct 2025 15:37:57 +1100 Subject: [PATCH 12/14] another idea --- steps/jump/fiwix.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/steps/jump/fiwix.sh b/steps/jump/fiwix.sh index 549da56a..9b7d234c 100755 --- a/steps/jump/fiwix.sh +++ b/steps/jump/fiwix.sh @@ -16,5 +16,5 @@ make_fiwix_initrd -s 1381376 /boot/fiwix.ext2 if match x${BARE_METAL} xTrue; then kexec-fiwix /boot/fiwix -i /boot/fiwix.ext2 -m /e820 -c "fiwix console=/dev/tty1 root=/dev/ram0 initrd=fiwix.ext2 kexec_proto=linux kexec_size=199680 kexec_cmdline=\"init=/init consoleblank=0\"" else - kexec-fiwix /boot/fiwix -i /boot/fiwix.ext2 -m /e820 -c "fiwix console=/dev/ttyS0 root=/dev/ram0 initrd=fiwix.ext2 kexec_proto=linux kexec_size=199680 kexec_cmdline=\"init=/init console=ttyS0\"" + kexec-fiwix /boot/fiwix -i /boot/fiwix.ext2 -m /e820 -c "fiwix console=/dev/ttyS0 root=/dev/ram0 initrd=fiwix.ext2 kexec_proto=linux kexec_size=199680 kexec_cmdline=\"init=/init console=ttyS0,115200\"" fi From 8e60893e970e380bc75c9a09031db9f2e81fc4ee Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Wed, 22 Oct 2025 22:52:21 +1100 Subject: [PATCH 13/14] A further idea --- .github/workflows/qemu.yml | 2 +- rootfs.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 545aebbc..b595a955 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror + run: sudo ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror; cat output - name: Remount package disk if: always() run: > diff --git a/rootfs.py b/rootfs.py index 5dde3c8b..109e1ec5 100755 --- a/rootfs.py +++ b/rootfs.py @@ -336,7 +336,7 @@ def bootstrap(args, generator, target, size, cleanup): '-nic', 'user,ipv6=off,model=e1000' ] if not args.interactive: - arg_list += ['-no-reboot', '-nographic'] + arg_list += ['-no-reboot', '-nographic', '-serial', 'file:output'] run(args.qemu_cmd, *arg_list, cleanup=cleanup) if __name__ == "__main__": From 517409a4237cde937c29e4a7beb3ab30ac31bf05 Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Sun, 14 Dec 2025 11:46:36 +1100 Subject: [PATCH 14/14] Retrigger --- .github/workflows/qemu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index b595a955..545aebbc 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -47,7 +47,7 @@ jobs: mirror-state key: cache-${{ hashFiles('steps/*/sources') }} - name: Run bootstrap - run: sudo ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror; cat output + run: sudo ./rootfs.py --qemu --update-checksums --external-sources --cores 2 --mirror file://${PWD}/mirror - name: Remount package disk if: always() run: >