#!/bin/bash

target_rootfs=/dev/sda2
target_kern=/dev/sda1

set -x
kernel_image=/boot/vmlinuz-`uname -r`
ls ${kernel_image}
ls_boot=$?

echo "console=tty1 debug verbose root=${target_rootfs} rootwait rw lsm.module_locking=0" > /tmp/config
if [ ${ls_boot} -eq 0 ]
then
echo "Packing kernel"
vbutil_kernel --pack /tmp/newkern \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--version 1 \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config /tmp/config \
--vmlinuz ${kernel_image} \
--arch arm
else
  echo "Repacking running kernel"
# need to use "cgpt show /dev/mmcblk0" to determine kernel with highest priority to choose which one to copy. We are assuming partitions 2 and 4 are kernels
  ptwo=`cgpt show -i 2 -P /dev/mmcblk0`
  pfour=`cgpt show -i 4 -P /dev/mmcblk0`
  echo "Priority of partition 2 is ${ptwo}, priority of partition 4 is ${pfour}"
  rblock=2
  if [ ${two} -eq 0]
  then
    rblock=4
  else
    if [ ${pfour} -lt ${ptwo} ]
    then
      if [ ${pfour} -ne 0 ]
      then
         rblock=4
      fi
    fi
  fi
  echo "Determined that partition ${rblock} is running kernel"
  dd if=/dev/mmcblk0p${rblock} of=/tmp/oldblob
  echo "Repacking running kernel"
  vbutil_kernel --repack /tmp/newkern \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--version 1 \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config /tmp/config \
--oldblob /tmp/oldblob
fi

if [ $? -ne 0 ]
then
  echo "vbutil_kernel failed"
  exit 99
fi

echo "Copying new kernel to $target_kern"
dd if=/tmp/newkern of=$target_kern