fix: ramdisk - dereference symlinks, they pack as zero-byte files

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NQRTGoYgnZQsh7uCh6Jsxm
This commit is contained in:
2026-08-08 14:42:42 +02:00
co-authored by Claude Opus 5
parent e8407afcdb
commit a06ef0192d
+13 -2
View File
@@ -14,7 +14,18 @@ if [ ! -d "$INPUT_DIR" ]; then
echo "MontaukOS ramdisk" > "$INPUT_DIR/readme.txt"
fi
# Create USTAR tar archive
tar --format=ustar -cf "$OUTPUT_PATH" -C "$INPUT_DIR" .
# Create USTAR tar archive.
#
# -h (dereference) is NOT optional: Fs/Ramdisk.cpp only recognises typeflag
# '5' (directory), so a symlink entry unpacks as a zero-length regular file --
# silently, with no error anywhere. A staged tree containing symlinks would
# ship empty files. Copying the target in is the only faithful representation.
tar --format=ustar -h -cf "$OUTPUT_PATH" -C "$INPUT_DIR" .
if tar -tvf "$OUTPUT_PATH" | grep -q '^l'; then
echo "mkramdisk: ERROR: symlink survived into $OUTPUT_PATH (would unpack as an empty file)" >&2
tar -tvf "$OUTPUT_PATH" | grep '^l' >&2
exit 1
fi
echo "mkramdisk: created $OUTPUT_PATH from $INPUT_DIR ($(wc -c < "$OUTPUT_PATH") bytes)"