Skip to content

QEMU/RouterOS: post-clean() relaunch leaves www nonresponsive on linux-arm64 (7.21.5) #79

Description

@mobileskyfi

Current signature

start-stop.test.tsclean() resets disk to factory defaults reproducibly reaches a healthy post-reset RouterOS 7.21.5 guest on linux-arm64, but REST never becomes ready during the 480 s boot envelope.

The #101/#105/#107 forensics localize the failure:

  • QEMU stays alive and the serial console answers quickly;
  • DHCP has 10.0.2.15, uptime reaches 8+ minutes, and there are no firewall filter rules;
  • ssh, API, API-SSL, and WinBox are served;
  • HTTPS/443 cleanly refuses, proving the guest TCP stack can answer;
  • only HTTP/80 black-holes;
  • conntrack proves the forwarded SYNs reach RouterOS and receive no reply;
  • all 96 REST probes time out and zero HTTP requests complete.

This is a guest-side, service-specific www failure after clean(), not a generic boot, DHCP, slirp, hostfwd, or firewall failure.

Corrections to earlier hypotheses

clean() does leave state.user naming the user erased by factory reset; that should be corrected, but a deleted user normally returns 401, which is enough for readiness. It is a trigger/confound, not a demonstrated cause of the permanent black hole.

The local www-abort-damage lab proved that abort→completed-request alternation can cause resets/wrong replies, but aborts without any completions were harmless. This CI report contains 96 aborts and no completion, so that lab mechanism does not explain this #79 wedge. It remains relevant to #69's reset/wrong-answer family.

Current hypothesis boundary

Every observed #79/#69 failure ran linux-arm64 under QEMU 8.2.2. In the same matrix, macos-arm64 (same guest arch + TCG, QEMU 11.0.2) passed all targets. QEMU/virtio feature negotiation is therefore a useful hypothesis, but host OS also changes; it is not yet causal evidence.

The decisive /ip/service snapshot field was blank because waitForFinalPrompt matched the console prompt redraw before the large reply arrived. That reader defect is #109.

Dependency-ordered experiment

  1. Fix console: waitForFinalPrompt can match the prompt redraw, so large replies return empty — blanks the #79 guest snapshot #109 first so /ip/service and the full guest log cannot disappear from the next report.
  2. Correct clean() credential state independently and retain an anchor test for factory-admin fallback.
  3. Re-run the exact linux-arm64 · long-term · start-stop.test.ts case on QEMU 8.2.2 and a newer QEMU while holding RouterOS version, guest arch, accelerator, and test constant.
  4. Compare www service configuration/state, conntrack, negotiated virtio-net features if observable, and the first readiness request.
  5. Do not lower the outer timeout as the root-cause fix; CI: retune oversized boot envelopes from path-specific timing data without losing forensic headroom #106 owns envelope retuning after this operation is safely diagnosable.

Done-when

Tracked in Wave 2 of #110; correlated with #69 but not merged without a reproduced shared mechanism. Historical evidence remains in the comments.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2active improvement with clear shapearea:ciCI workflows, publish, verification matrixarea:qemuQEMU/CHR boot, virtio, acceleration, channelsbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions