shimboot/build.sh

71 lines
1.7 KiB
Bash
Raw Normal View History

2023-10-02 01:47:30 -04:00
#!/bin/bash
#build the bootloader image
set -e
if [ "$DEBUG" ]; then
set -x
fi
2023-12-21 01:09:41 -05:00
. ./image_utils.sh
. ./shim_utils.sh
2023-10-02 15:17:59 -04:00
2023-10-02 01:47:30 -04:00
print_help() {
2023-10-04 02:56:57 -04:00
echo "Usage: ./build.sh output_path shim_path rootfs_dir"
2023-10-02 01:47:30 -04:00
}
if [ "$EUID" -ne 0 ]; then
echo "this needs to be run as root."
exit 1
fi
2023-10-07 00:28:40 -04:00
if [ -z "$3" ]; then
2023-10-02 01:47:30 -04:00
print_help
exit 1
fi
2024-01-25 16:12:20 -05:00
. ./common.sh
assert_deps "cpio binwalk pcregrep realpath cgpt mkfs.ext4 mkfs.ext2 fdisk rsync"
2024-01-30 16:13:03 -05:00
parse_args "$@"
2023-10-02 15:06:06 -04:00
2024-01-25 16:19:25 -05:00
output_path=$(realpath -m "${1}")
shim_path=$(realpath -m "${2}")
rootfs_dir=$(realpath -m "${3}")
2023-10-02 01:47:30 -04:00
echo "created loop device for shim"
2023-10-02 15:06:06 -04:00
shim_loop=$(create_loop "${shim_path}")
2023-10-02 01:47:30 -04:00
kernel_loop="${shim_loop}p2" #KERN-A should always be p2
echo "copying shim kernel to new file in /tmp"
kernel_dir=/tmp/shim_kernel
mkdir $kernel_dir -p
dd if=$kernel_loop of=$kernel_dir/kernel.bin bs=1M status=none
echo "extracting data from kernel"
initramfs_dir=/tmp/shim_initramfs
rm -rf $initramfs_dir
extract_initramfs $kernel_dir/kernel.bin $kernel_dir $initramfs_dir
2023-12-22 22:15:24 -05:00
losetup -d $shim_loop
2023-10-02 01:47:30 -04:00
2023-10-02 02:08:31 -04:00
echo "patching initramfs"
2023-10-02 15:17:59 -04:00
patch_initramfs $initramfs_dir
2023-10-02 02:08:31 -04:00
echo "creating disk image"
2023-10-06 13:29:10 -04:00
rootfs_size=$(du -sm $rootfs_dir | cut -f 1)
2023-12-25 22:33:28 -05:00
rootfs_part_size=$(($rootfs_size * 12 / 10))
2023-10-06 13:29:10 -04:00
#create a 20mb bootloader partition
2023-10-20 16:51:56 -04:00
#rootfs partition is 20% larger than its contents
2023-10-06 13:29:10 -04:00
create_image $output_path 20 $rootfs_part_size
echo "creating loop device for the image"
image_loop=$(create_loop ${output_path})
echo "creating partitions on the disk image"
create_partitions $image_loop "${kernel_dir}/kernel.bin"
echo "copying data into the image"
2024-01-30 16:13:03 -05:00
populate_partitions $image_loop $initramfs_dir $rootfs_dir "${args['quiet']}"
2023-10-02 01:47:30 -04:00
echo "cleaning up loop devices"
2023-10-20 16:51:56 -04:00
losetup -d $image_loop
echo "done"