forked from Piraterna/aurix
87 lines
1.9 KiB
Bash
Executable file
87 lines
1.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [[ -z $1 ]]; then
|
|
printf "Please don't invoke this script manually. Run \`make release_hdd\` instead.\n"
|
|
exit 1
|
|
fi
|
|
|
|
#sysroot_size=$(du -hsm kernel | cut -f 1)
|
|
sysroot_size=16
|
|
efi_partition_size=32
|
|
|
|
disk_name=$1
|
|
disk_size=$(($sysroot_size + $efi_partition_size + 2))
|
|
|
|
unamestr=$(uname)
|
|
|
|
# Check if we're running on a supported host
|
|
if ! [[ "$unamestr" =~ ^('Linux'|'Darwin') ]]; then
|
|
printf " failed. (unsupported host)\n"
|
|
exit 128
|
|
fi
|
|
|
|
# create a disk image
|
|
dd if=/dev/zero of="$disk_name" bs=1M count="$disk_size" >/dev/null 2>&1
|
|
|
|
# create a partition table
|
|
fdisk "$disk_name" >/dev/null 2>&1 << EOF
|
|
g
|
|
n p
|
|
1
|
|
|
|
+$efi_partition_size\M
|
|
t 1
|
|
1
|
|
n p
|
|
2
|
|
|
|
|
|
t 2
|
|
11
|
|
w
|
|
EOF
|
|
|
|
tempmountdir=$(mktemp -d 2>/dev/null)
|
|
|
|
# mount disk
|
|
if [ "$unamestr" = 'Linux' ]; then
|
|
echo "Linux HDD Generation not implemented yet"
|
|
rm -r $tempmountdir
|
|
exit 200
|
|
elif [ "$unamestr" = 'Darwin' ]; then
|
|
loopback=$(hdiutil attach -nomount $disk_name)
|
|
loopback=$(echo $loopback | cut -f1 -d" ")
|
|
|
|
loopback_efi="$loopback"s1
|
|
fi
|
|
|
|
# format EFI partition
|
|
mkfs.vfat -F32 -n "EFI" "$loopback_efi" >/dev/null 2>&1
|
|
|
|
# mount EFI partition
|
|
if [ "$unamestr" = 'Darwin' ]; then
|
|
diskutil mount -mountPoint "$tempmountdir" "$loopback_efi" >/dev/null 2>&1
|
|
else
|
|
mount "$loopback_efi" "$tempmountdir"
|
|
fi
|
|
|
|
# Copy system root to the newly created image
|
|
cp -r "$ROOT_DIR"/sysroot/* "$tempmountdir"
|
|
|
|
# unmount all partitions
|
|
if [ "$unamestr" = 'Linux' ]; then
|
|
echo "Linux HDD Generation not implemented yet"
|
|
rm -r $tempmountdir
|
|
exit 200
|
|
elif [ "$unamestr" = 'Darwin' ]; then
|
|
diskutil unmount "$tempmountdir" >/dev/null 2>&1
|
|
hdiutil detach "$loopback" >/dev/null 2>&1
|
|
fi
|
|
|
|
rm -r "$tempmountdir"
|
|
|
|
# Install legacy BIOS placeholder to the new image
|
|
dd if="$BUILD_DIR/boot/pc-bios/stage1-hdd.bin" of="$disk_name" conv=notrunc bs=446 count=1 >/dev/null 2>&1
|
|
dd if="$BUILD_DIR/boot/pc-bios/stage1-hdd.bin" of="$disk_name" conv=notrunc bs=1 count=2 skip=510 seek=510 >/dev/null 2>&1
|
|
|
|
printf " done.\n"
|