4325590686
Includes: init (PID 1), hiperiso-lib.sh, qemu_launch.sh, hw_collect.sh, kvm_check.sh, fallback_boot.sh, log_flush.sh, conf_replace.sh, make_floppy.sh. 13-phase boot timing, 18 QEMU HMP commands, network pcap capture.
68 lines
1.6 KiB
Bash
68 lines
1.6 KiB
Bash
#!/bin/sh
|
|
# make_floppy.sh -- Create a virtual floppy disk image with given files
|
|
# Usage: make_floppy.sh <output.img> <file1> [file2] ...
|
|
# POSIX sh compatible (busybox/ash/dash)
|
|
|
|
set -eu
|
|
|
|
OUTPUT="${1:-}"
|
|
shift || true
|
|
|
|
if [ -z "$OUTPUT" ] || [ $# -eq 0 ]; then
|
|
echo "Usage: make_floppy.sh <output.img> <file1> [file2] ..." >&2
|
|
exit 1
|
|
fi
|
|
|
|
. /hiperiso-lib.sh
|
|
|
|
_total_size=0
|
|
for f in "$@"; do
|
|
if [ -f "$f" ]; then
|
|
_sz=$(wc -c < "$f" 2>/dev/null || echo 0)
|
|
_total_size=$((_total_size + _sz))
|
|
fi
|
|
done
|
|
|
|
if [ "$_total_size" -gt 2621440 ]; then
|
|
_floppy_size=2880
|
|
else
|
|
_floppy_size=1440
|
|
fi
|
|
|
|
dd if=/dev/zero of="$OUTPUT" bs=1024 count=$_floppy_size 2>/dev/null
|
|
|
|
if command -v mkfs.vfat >/dev/null 2>&1; then
|
|
mkfs.vfat -F 12 -n HIPERISO "$OUTPUT" >/dev/null 2>&1
|
|
elif command -v mkdosfs >/dev/null 2>&1; then
|
|
mkdosfs -F 12 -n HIPERISO "$OUTPUT" >/dev/null 2>&1
|
|
else
|
|
hiperiso_log "WARNING: no FAT formatter available, floppy image is blank"
|
|
exit 1
|
|
fi
|
|
|
|
_mnt=$(mktemp -d /tmp/floppy.XXXXXX 2>/dev/null || echo /tmp/floppy_mnt)
|
|
mkdir -p "$_mnt"
|
|
|
|
if mount -o loop "$OUTPUT" "$_mnt" 2>/dev/null; then
|
|
for f in "$@"; do
|
|
if [ -f "$f" ]; then
|
|
cp "$f" "$_mnt/" 2>/dev/null || true
|
|
fi
|
|
done
|
|
sync
|
|
umount "$_mnt" 2>/dev/null || true
|
|
else
|
|
if command -v mcopy >/dev/null 2>&1; then
|
|
for f in "$@"; do
|
|
if [ -f "$f" ]; then
|
|
mcopy -i "$OUTPUT" "$f" ::/ 2>/dev/null || true
|
|
fi
|
|
done
|
|
else
|
|
hiperiso_log "WARNING: cannot mount loop or use mtools, floppy is empty"
|
|
fi
|
|
fi
|
|
|
|
rmdir "$_mnt" 2>/dev/null || true
|
|
exit 0
|