Handle memtest recovery probe under set -e
This commit is contained in:
@@ -58,6 +58,18 @@ Root cause of the false alarm:
|
|||||||
- as a result, we re-entered the same memtest investigation loop even though
|
- as a result, we re-entered the same memtest investigation loop even though
|
||||||
the real ISO was already correct
|
the real ISO was already correct
|
||||||
|
|
||||||
|
Additional correction from the subsequent `v3.21` build logs dated 2026-04-01:
|
||||||
|
|
||||||
|
- once ISO reading was fixed, the post-build debug correctly showed the raw ISO
|
||||||
|
still carried live-build's default memtest layout (`live/memtest.bin`,
|
||||||
|
`live/memtest.efi`, `boot/grub/memtest.cfg`, `isolinux/memtest.cfg`)
|
||||||
|
- that mismatch is expected to trigger project recovery, because `bee` requires
|
||||||
|
`boot/memtest86+x64.bin` / `boot/memtest86+x64.efi` plus matching menu paths
|
||||||
|
- however, `build.sh` exited before recovery because `set -e` treated a direct
|
||||||
|
`iso_memtest_present` return code of `1` as fatal
|
||||||
|
- so the next repeated loop was caused by shell control flow, not by proof that
|
||||||
|
the recovery design itself was wrong
|
||||||
|
|
||||||
## Known Failed Attempts
|
## Known Failed Attempts
|
||||||
|
|
||||||
These approaches were already tried and should not be repeated blindly:
|
These approaches were already tried and should not be repeated blindly:
|
||||||
@@ -102,6 +114,8 @@ Any future memtest fix must explicitly identify:
|
|||||||
- and a post-build proof from a real ISO, not only from intermediate workdir files
|
- and a post-build proof from a real ISO, not only from intermediate workdir files
|
||||||
- whether the ISO inspection step itself succeeded, rather than merely whether
|
- whether the ISO inspection step itself succeeded, rather than merely whether
|
||||||
the validator printed a memtest warning
|
the validator printed a memtest warning
|
||||||
|
- whether a non-zero probe is intentionally handled inside an `if` / `case`
|
||||||
|
context rather than accidentally tripping `set -e`
|
||||||
|
|
||||||
## Decision
|
## Decision
|
||||||
|
|
||||||
@@ -134,6 +148,8 @@ Current implementation direction:
|
|||||||
- install a stable ISO reader in the builder image
|
- install a stable ISO reader in the builder image
|
||||||
- fail with an explicit reader error if ISO listing/extraction fails
|
- fail with an explicit reader error if ISO listing/extraction fails
|
||||||
- do not treat reader failure as evidence that memtest is missing
|
- do not treat reader failure as evidence that memtest is missing
|
||||||
|
- do not call a probe that may return "needs recovery" as a bare command under
|
||||||
|
`set -e`; wrap it in explicit control flow
|
||||||
|
|
||||||
## Consequences
|
## Consequences
|
||||||
|
|
||||||
|
|||||||
@@ -1136,13 +1136,16 @@ fi
|
|||||||
ISO_RAW="${LB_DIR}/live-image-amd64.hybrid.iso"
|
ISO_RAW="${LB_DIR}/live-image-amd64.hybrid.iso"
|
||||||
if [ -f "$ISO_RAW" ]; then
|
if [ -f "$ISO_RAW" ]; then
|
||||||
dump_memtest_debug "post-build" "${LB_DIR}" "$ISO_RAW"
|
dump_memtest_debug "post-build" "${LB_DIR}" "$ISO_RAW"
|
||||||
iso_memtest_present "$ISO_RAW"
|
if iso_memtest_present "$ISO_RAW"; then
|
||||||
memtest_status=$?
|
:
|
||||||
if [ "$memtest_status" -eq 1 ]; then
|
else
|
||||||
recover_iso_memtest "${LB_DIR}" "$ISO_RAW"
|
memtest_status=$?
|
||||||
dump_memtest_debug "post-recovery" "${LB_DIR}" "$ISO_RAW"
|
if [ "$memtest_status" -eq 1 ]; then
|
||||||
elif [ "$memtest_status" -eq 2 ]; then
|
recover_iso_memtest "${LB_DIR}" "$ISO_RAW"
|
||||||
memtest_fail "failed to inspect ISO for memtest before recovery" "$ISO_RAW"
|
dump_memtest_debug "post-recovery" "${LB_DIR}" "$ISO_RAW"
|
||||||
|
elif [ "$memtest_status" -eq 2 ]; then
|
||||||
|
memtest_fail "failed to inspect ISO for memtest before recovery" "$ISO_RAW"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
validate_iso_memtest "$ISO_RAW"
|
validate_iso_memtest "$ISO_RAW"
|
||||||
cp "$ISO_RAW" "$ISO_OUT"
|
cp "$ISO_RAW" "$ISO_OUT"
|
||||||
|
|||||||
Reference in New Issue
Block a user