#!/bin/sh
# This script creates an image from a rootfs
#
# by Bernhard M. Wiedemann
# License: MIT

rbase=$1
r=$rbase/.root
img=$rbase/.img
mnt=/mnt/1
uuid=12341234-a4ec-4304-a70f-c549ea829da8
dd if=/dev/zero of=$img bs=1M count=2000
# partitioning rootfs
echo "
n
p



a
p
w
" | fdisk -u $img

# prepare filesystems
modprobe loop
l=$(losetup --find --show $l $img)
kpartx -afsv $l ; sleep 1
l2=/dev/mapper/loop0
ls -l /dev/mapper/loop*
ls -l $l2
rootdev=${l2}p1
mkfs.ext2 -F -d $r -U $uuid -L root ${rootdev}
# add bootloader
mkdir $mnt
mount ${rootdev} $mnt || exit 17

pushd $mnt
for m in proc sys dev ; do mount --bind /$m $m ; done
chroot $mnt grub2-install --verbose --target=i386-pc --force ${l}
chroot $mnt grub2-mkconfig | sed -e "s,root=/dev/mapper/loop.p1,root=UUID=$uuid," > $mnt/boot/grub2/grub.cfg
for m in proc sys dev ; do umount $m ; done
cp -a boot $r/
popd

# cleanup
umount $mnt
sleep 1
# recreate filesystem to make it deterministic
dd if=/dev/zero of=$rootdev bs=1M count=2000
tar --sort=name --mtime=@$SOURCE_DATE_EPOCH --clamp-mtime --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime -cf /tmp/r.tar -C $r .
mkfs.ext2 -F -d /tmp/r.tar -E hash_seed=035cb65d-0a86-404a-bad7-19c88d05e400 -U $uuid -L root ${rootdev}
#make_ext4fs -u $uuid -L root -T $SOURCE_DATE_EPOCH ${rootdev} $r 
date --set=@$SOURCE_DATE_EPOCH
e2fsck -f -y $rootdev
kpartx -dsv $l
losetup -d $l

echo result is in $img
echo now write it to an SD-card with dd bs=1M if=$img of=/dev/sdX
