#!/bin/sh
#
# move the kernel out into a new device tarfile with system/boot 

set -ex

echo "I: Moving kernel into device tarball"

HERE="$(pwd)"
TMPDIR="$(mktemp -d)"
mkdir -p $TMPDIR/system/
mkdir -p $TMPDIR/assets/

# cp files, we can't simply use tar --transform as it changes the symlink target
(
 cd binary/boot/filesystem.dir

 cp -ar --parent lib/modules/ $TMPDIR/system/
 cp -ar --parent lib/firmware/ $TMPDIR/system/

 # new assets handling
 if [ -f boot/vmlinu?-*.signed ]; then
    kernel=boot/vmlinu?-*.signed
 else
    kernel=boot/vmlinu?-*
 fi

 initrd=boot/initrd.img-*

 cp -ar $initrd $TMPDIR/assets/
 cp -ar $kernel $TMPDIR/assets/
 cp -ar boot/abi-* boot/System.map-* $TMPDIR/assets/

 dtbs=$(find lib/firmware -type d -name 'device-tree' -print0)
 if [ -n "$dtbs" ]; then
    mv "$dtbs" $TMPDIR/assets/dtbs
 fi

 # create hardware.yaml
 # this assumes armh == u-boot
 # and all others grub
 # common bits
 cat > $TMPDIR/hardware.yaml << EOF
kernel: assets/$(basename $kernel)
initrd: assets/$(basename $initrd)
partition-layout: system-AB
EOF

# arch specific ones
if [ "$ARCH" = "armhf" ]; then
 cat >> $TMPDIR/hardware.yaml << EOF
dtbs: assets/dtbs
bootloader: u-boot
EOF
else
 cat >> $TMPDIR/hardware.yaml << EOF
bootloader: grub
EOF
fi
)

# and tar it up
(
 cd $TMPDIR
 tar -c --sort=name -z -f $HERE/device.tar.gz system assets hardware.yaml
)

rm -rf $TMPDIR

# remove files from the root filesystem
(cd binary/boot/filesystem.dir
 rm -f boot/vmlinu?-*
 rm -f boot/initrd.img-*
 rm -f boot/abi-*
 rm -f boot/System.map-*
 rm -f initrd.img
 rm -f vmlinu?
 rm -rf lib/modules
 rm -rf lib/firmware
)