Skip to content

CI: linux-arm64 long-term clean() reboot times out under TCG #79

Description

@mobileskyfi

Observed

Run: https://github.com/tikoci/quickchr/actions/runs/28758858863
Failed job: https://github.com/tikoci/quickchr/actions/runs/28758858863/job/85270515858 (Integration (linux/aarch64 · long-term))

This is separate from #69. The issue69-focused run https://github.com/tikoci/quickchr/actions/runs/28758125602/job/85268595976 passed on linux/aarch64 · long-term, and the arm64 REST ordering lab also passed in the failing full-suite job.

Failure shape

  • Target: long-term, resolved in ci-data as RouterOS 7.21.4.
  • Host/job: GitHub hosted Linux arm64, QEMU 8.2.2.
  • Accel: quickchr detectAccel(arm64): tcg (crossArch=false, timeoutFactor=4).
  • KVM: /dev/kvm absent; explicit KVM open probe failed.
  • Test file: start-stop.test.ts failed after 788s.
  • Failing test: clean() resets disk to factory defaults — custom users disappear on next boot.
  • Failing step: after instance.stop(); await instance.clean();, QuickCHR.start({ name: "integration-clean-test" }) timed out in _launchExisting().
  • Error: BOOT_TIMEOUT, CHR did not respond within 480s (accel=tcg).
  • qemu.log tail only recorded QEMU termination during cleanup, so it did not prove a QEMU launch error.

Relevant artifact data:

start-stop.test.ts 788s fail
(pass) remove() on a running machine stops QEMU and deletes the directory [30466ms]
(fail) clean() resets disk to factory defaults — custom users disappear on next boot [523342ms]
QuickCHRError: CHR did not respond within 480s (accel=tcg). Machine "integration-clean-test" has been cleaned up automatically.

Comparisons

Same run (28758858863):

  • linux/x86_64 · long-term passed.
  • macos/arm64 · long-term passed.
  • windows/x86_64 · long-term passed.
  • linux/aarch64 · testing passed (7.24rc1).

ci-data rollup currently records:

  • 7.21.4: fail only on linux-arm64; pass on linux-x86, macos-arm64, windows-x86.
  • 7.24rc1: pass on recorded platforms, including linux-arm64.

Why this is interesting

clean() deliberately preserves ARM64 EFI vars because wiping them previously caused a long UEFI device scan. This failure hits the exact 480s same-arch TCG boot timeout after clean, so the investigation should check whether long-term ARM64 CHR is losing/ignoring the expected boot order, whether the cleaned disk path behaves differently on 7.21.4, or whether same-arch TCG simply needs more than 480s for this post-clean boot case.

The recent autosupout.rif observations are worth capturing if RouterOS gets far enough to expose files/logs, but passing #69 probes also generated autosupout entries, so do not assume supout is the root cause without correlation.

Investigation plan

  1. Reproduce locally on the Intel Mac with ARM64 CHR under cross-arch TCG using a focused script, not the whole suite: create custom user, stop, clean(), relaunch, capture elapsed times, qemu.log, serial output, and machine dir state before cleanup. Compare long-term, stable, and testing.
  2. Re-run focused CI: integration.yml on platforms=linux-arm64, routeros-targets=long-term, test-filter=start-stop.test.ts. If needed, add a temporary lab/probe variant that preserves machine dir and serial/qemu logs on timeout.
  3. Bucket the result before changing behavior:
    • boots after >480s: boot-order scan / timeout-envelope problem;
    • never boots and serial/firmware shows disk/UEFI issue: clean()/EFI/disk path bug;
    • only 7.21.4: RouterOS long-term ARM64 behavior difference.
  4. Do not skip, platform-gate, or simply bump timeouts until one of those buckets is proven.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3research / investigation — needs grounding firstarea:ciCI workflows, publish, verification matrixarea:qemuQEMU/CHR boot, virtio, acceleration, channelsbugSomething isn't workingresearchproduces a repro / REPORT.md / grounding doc

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions