create and populate image partitions

This commit is contained in:
ading2210 2023-10-02 13:53:11 -07:00
parent 0c7003eb34
commit 7313d20584
3 changed files with 61 additions and 9 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/data /data
/test.bin

View File

@ -8,6 +8,7 @@ if [ "$DEBUG" ]; then
fi fi
. ./patch_initramfs.sh . ./patch_initramfs.sh
. ./build_image.sh
print_help() { print_help() {
echo "Usage: ./build.sh path_to_shim" echo "Usage: ./build.sh path_to_shim"
@ -22,12 +23,6 @@ check_deps() {
done done
} }
create_loop() {
local loop_device=$(losetup -f)
losetup -P $loop_device "${1}"
echo $loop_device
}
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo "this needs to be run as root." echo "this needs to be run as root."
exit 1 exit 1

View File

@ -5,6 +5,12 @@ if [ "$DEBUG" ]; then
set -x set -x
fi fi
create_loop() {
local loop_device=$(losetup -f)
losetup -P $loop_device "${1}"
echo $loop_device
}
make_mountable() { make_mountable() {
sh lib/ssd_util.sh --no_resign_kernel --remove_rootfs_verification -i $1 sh lib/ssd_util.sh --no_resign_kernel --remove_rootfs_verification -i $1
printf '\000' | dd of=$1 seek=$((0x464 + 3)) conv=notrunc count=1 bs=1 printf '\000' | dd of=$1 seek=$((0x464 + 3)) conv=notrunc count=1 bs=1
@ -14,7 +20,7 @@ partition_disk() {
local image_path=$(realpath "${1}") local image_path=$(realpath "${1}")
local bootloader_size=${2} local bootloader_size=${2}
#create partitions #create partition table with fdisk
( (
echo g #new gpt disk label echo g #new gpt disk label
@ -53,6 +59,50 @@ partition_disk() {
) | fdisk $image_path ) | fdisk $image_path
} }
safe_mount() {
rm -rf $2
mkdir -p $2
mount $1 $2
}
create_partitions() {
local image_loop=$(realpath "${1}")
local kernel_path=$(realpath "${2}")
#create stateful
mkfs.ext4 "${image_loop}p1"
#copy kernel
dd if=$kernel_path of="${image_loop}p2" bs=1M oflag=sync
#create bootloader partition
mkfs.ext2 "${image_loop}p3"
#create rootfs partition
mkfs.ext4 "${image_loop}p4"
}
populate_partitions() {
local image_loop=$(realpath "${1}")
local bootloader_dir=$(realpath "${2}")
local rootfs_dir=$(realpath "${3}")
#mount and write empty file to stateful
local stateful_mount=/tmp/shim_stateful
safe_mount "${image_loop}p1" $stateful_mount
mkdir -p $stateful_mount/dev_image/etc/
touch $stateful_mount/dev_image/etc/lsb-factory
umount $stateful_mount
#mount and write to bootloader rootfs
local bootloader_mount=/tmp/shim_bootloader
safe_mount "${image_loop}p3" $bootloader_mount
cp -r $bootloader_dir/* $bootloader_mount
umount $bootloader_mount
local rootfs_mount=/tmp/shim_rootfs
safe_mount "${image_loop}p4" $rootfs_mount
cp -r $rootfs_dir/* $rootfs_mount
umount $rootfs_mount
}
create_image() { create_image() {
local image_path=$(realpath "${1}") local image_path=$(realpath "${1}")
local bootloader_size=${2} local bootloader_size=${2}
@ -65,4 +115,10 @@ create_image() {
partition_disk $image_path $bootloader_size partition_disk $image_path $bootloader_size
} }
if [ $0 == "./build_image.sh" ]; then
create_image ./test.bin 20 200 create_image ./test.bin 20 200
image_loop=$(create_loop ./test.bin)
create_partitions $image_loop /tmp/shim_kernel/kernel.bin
populate_partitions $image_loop ./tmp/shim_initramfs ./lib
losetup -d $image_loop
fi