#!/bin/bash # mkramdisk.sh - Create a USTAR tar archive for the MontaukOS ramdisk # Usage: ./scripts/mkramdisk.sh [input_dir] [output_path] set -e INPUT_DIR="${1:-programs/bin}" OUTPUT_PATH="${2:-ramdisk.tar}" if [ ! -d "$INPUT_DIR" ]; then echo "mkramdisk: input directory '$INPUT_DIR' does not exist, creating empty ramdisk" mkdir -p "$INPUT_DIR" # Create a placeholder file so the tar isn't completely empty echo "MontaukOS ramdisk" > "$INPUT_DIR/readme.txt" fi # 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)"