Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
5053e4d
ci: Add upterm debugging for test failures
cgwalters Oct 17, 2025
99e349e
ci: Fix upterm action version to v1.3.0
cgwalters Oct 17, 2025
1e610e7
ci: Fix upterm to trigger on test failures
cgwalters Oct 17, 2025
0700677
ci: Replace upterm with console log diagnostics
cgwalters Oct 17, 2025
a443458
ci: Enhance diagnostics for boot failure investigation
cgwalters Oct 17, 2025
268a65c
test: Increase boot timeout and capture QEMU output
cgwalters Oct 17, 2025
5b9e48c
ci: Add build artifacts debugging on test failure
cgwalters Oct 18, 2025
66943de
unified: Add debug output for computed composefs digest
cgwalters Oct 18, 2025
def6691
boot: Normalize metadata for deterministic digests
cgwalters Oct 18, 2025
84350ac
Fix rustfmt formatting
cgwalters Oct 18, 2025
638f5ee
Fix clippy warning: use is_multiple_of
cgwalters Oct 18, 2025
c55f357
examples: Pin kernel to 6.16.9 to work around regression
cgwalters Oct 18, 2025
d2b126b
examples/unified: Revert to compute-id instead of create-image
cgwalters Oct 18, 2025
f70f39e
Revert "boot: Normalize metadata for deterministic digests"
cgwalters Oct 18, 2025
3396f21
Revert testthing.py changes that broke VM testing
cgwalters Oct 18, 2025
ed668bd
examples: Pin systemd to 257.9-2 alongside kernel
cgwalters Oct 18, 2025
5a8f8b9
testthing: Add comprehensive QEMU and boot logging
cgwalters Oct 18, 2025
4add586
testthing: Fix QEMU logging by adding stderr parameter
cgwalters Oct 18, 2025
1c15f88
testthing: Skip IpcDirectory cleanup on exception
cgwalters Oct 18, 2025
ae7ab08
testthing: Add debug logging to IpcDirectory.__exit__
cgwalters Oct 18, 2025
80f1146
testthing: Detach finalizer to prevent cleanup on exception
cgwalters Oct 18, 2025
b565aba
testthing: Fix kernel cmdline to avoid QEMU parameter parsing issue
cgwalters Oct 18, 2025
2ba8188
testthing: Remove console=ttyS0 from kernel cmdline to avoid QEMU SMB…
cgwalters Oct 18, 2025
1ccdee4
testthing: Base64 encode SMBIOS credentials containing spaces
cgwalters Oct 18, 2025
4a3e1f9
testthing: Remove console=hvc0 SMBIOS override to avoid conflicts
cgwalters Oct 19, 2025
5efbd1f
uki: Fix console baud rate typo and remove SMBIOS console override
cgwalters Oct 19, 2025
0cc0ca8
docs: Update BUG.md with SSH/vsock failure findings and test instruct…
cgwalters Oct 19, 2025
1420ff1
docs: Add critical warning about not pushing to debug-ci/creating PRs
cgwalters Oct 19, 2025
e3c926d
testthing: Add SSH verbose debug logging to diagnose vsock connection…
cgwalters Oct 19, 2025
045f035
testthing: Add systemd.journald.forward_to_console=1 for SSH debug
cgwalters Oct 19, 2025
bc39136
docs: Document SMBIOS kernel parameter discovery
cgwalters Oct 19, 2025
5561c54
uki: Bake debug and journal forwarding into kernel cmdline
cgwalters Oct 19, 2025
3b59d8a
uki: Exclude openssh-server 9.9 to avoid vsock connection rejection
cgwalters Oct 19, 2025
3ff73a8
uki: Add DEBUG3 logging and disable SELinux to debug openssh 9.9 vsoc…
cgwalters Oct 19, 2025
e917ce3
selinux: Add vsock socket policy instead of disabling enforcement
cgwalters Oct 19, 2025
b1cdcb3
selinux: Enable audit logging and make sshd_t permissive
cgwalters Oct 19, 2025
390be35
selinux: Disable dontaudit rules to reveal hidden denials
cgwalters Oct 19, 2025
b16607d
openssh: Pin to version < 9.9 to fix vsock SSH issue
cgwalters Oct 19, 2025
f8bf16a
uki: Fix dnf syntax for openssh-server version exclusion
cgwalters Oct 19, 2025
6e66ac7
uki: Pin openssh-server to 9.8p1-1 to avoid vsock issue in 9.9
cgwalters Oct 19, 2025
dca4f64
selinux: Pin selinux-policy-targeted to 41.24 (pre-Oct 13 version)
cgwalters Oct 19, 2025
9266a1e
selinux: Use permissive mode as final solution
cgwalters Oct 19, 2025
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
20 changes: 20 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"permissions": {
"allow": [
"Bash(cargo test:*)",
"Bash(grep:*)",
"Bash(RUST_BACKTRACE=1 cargo test --features \"composefs/pre-6.15\" tar::tests::test_empty_tar)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git rebase:*)",
"Bash(git reset:*)",
"Bash(git stash:*)",
"Bash(cargo fmt:*)",
"Bash(cargo:*)",
"WebFetch(domain:github.com)",
"Bash(find:*)",
"Bash(rg:*)"
],
"deny": []
}
}
95 changes: 81 additions & 14 deletions .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,19 @@ jobs:
strategy:
matrix:
example:
- { dir: 'bls', os: 'arch' }
- { dir: 'bls', os: 'fedora' }
- { dir: 'bls', os: 'fedora-compat' }
- { dir: 'bls', os: 'rawhide' }
- { dir: 'bls', os: 'rhel9' }
# This one is currently failing, needs debugging
# https://github.com/containers/composefs-rs/pull/168#pullrequestreview-3088673152
# We believe it's mount API changes causing /sysroot to be mounted
# at the wrong place.
# Temporarily disabled for faster debugging
# - { dir: 'bls', os: 'arch' }
# - { dir: 'bls', os: 'fedora' }
# - { dir: 'bls', os: 'fedora-compat' }
# - { dir: 'bls', os: 'rawhide' }
# - { dir: 'bls', os: 'rhel9' }
# - { dir: 'bls', os: 'ubuntu' }
- { dir: 'uki', os: 'arch' }
# - { dir: 'uki', os: 'arch' }
- { dir: 'uki', os: 'fedora' }
- { dir: 'unified', os: 'fedora' }
- { dir: 'unified-secureboot', os: 'fedora' }
- { dir: 'bls', os: 'arch', fsfmt: 'ext4', verity: 'none' }
- { dir: 'bls', os: 'arch', fsfmt: 'xfs', verity: 'none' }
# - { dir: 'unified', os: 'fedora' }
# - { dir: 'unified-secureboot', os: 'fedora' }
# - { dir: 'bls', os: 'arch', fsfmt: 'ext4', verity: 'none' }
# - { dir: 'bls', os: 'arch', fsfmt: 'xfs', verity: 'none' }
fail-fast: false

steps:
Expand Down Expand Up @@ -88,8 +85,78 @@ jobs:
run: sudo cp examples/bls/test-thing.workarounds/systemd-ssh-proxy /usr/lib/systemd

- name: Run example tests
id: run_tests
continue-on-error: true
run: |
export PATH="${HOME}/bin:${PATH}"
export FS_FORMAT=${{ matrix.example.fsfmt }}
export FS_VERITY_MODE=${{ matrix.example.verity }}
examples/test/run ${{ matrix.example.dir }} ${{ matrix.example.os }}

- name: Dump console logs on failure
if: steps.run_tests.outcome == 'failure'
run: |
echo "=== Test.thing directories ==="
ls -laR /run/user/$(id -u)/test.thing/ 2>/dev/null || true
echo ""
echo "=== Console logs from failed VMs ==="
find /run/user/$(id -u)/test.thing -name console -type f 2>/dev/null | while read console; do
echo "==== Console from $console ===="
cat "$console" || true
echo ""
done
echo "=== QEMU logs from failed VMs ==="
find /run/user/$(id -u)/test.thing -name qemu.log -type f 2>/dev/null | while read qemu_log; do
echo "==== QEMU log from $qemu_log ===="
cat "$qemu_log" || true
echo ""
done
echo "=== Serial logs from failed VMs ==="
find /run/user/$(id -u)/test.thing -name serial.log -type f 2>/dev/null | while read serial_log; do
echo "==== Serial log from $serial_log ===="
cat "$serial_log" || true
echo ""
done
echo "=== SSH debug logs from failed VMs ==="
find /run/user/$(id -u)/test.thing -name ssh.log -type f 2>/dev/null | while read ssh_log; do
echo "==== SSH log from $ssh_log ===="
cat "$ssh_log" || true
echo ""
done
echo "=== QMP sockets ==="
find /run/user/$(id -u)/test.thing -name qmp -type s 2>/dev/null || true

- name: Check vsock device permissions
if: steps.run_tests.outcome == 'failure'
run: |
echo "=== vsock device status ==="
ls -la /dev/vhost-vsock /dev/kvm || true
echo ""
echo "=== vsock kernel module ==="
lsmod | grep vsock || true
echo ""
echo "=== Test vsock connection ==="
python3 -c "import socket; sock = socket.socket(socket.AF_VSOCK, socket.SOCK_STREAM); print('vsock socket created successfully')" || echo "Failed to create vsock socket"

- name: Capture test.thing runtime directory
if: steps.run_tests.outcome == 'failure'
run: |
echo "=== test.thing IPC directory contents ==="
find /run/user/$(id -u)/test.thing -ls 2>/dev/null || true

- name: Show build artifacts for debugging
if: steps.run_tests.outcome == 'failure'
run: |
cd examples/${{ matrix.example.dir }}
echo "=== Boot directory contents ==="
find tmp/efi -ls 2>/dev/null || true
echo ""
echo "=== Sysroot composefs images ==="
ls -lh tmp/sysroot/composefs/images/ 2>/dev/null || true
echo ""
echo "=== Sysroot state deployments ==="
ls -lh tmp/sysroot/state/deploy/ 2>/dev/null || true

- name: Fail job if tests failed
if: steps.run_tests.outcome == 'failure'
run: exit 1
Loading
Loading