#!/usr/bin/bash

trap "log 'Ignoring SIGTERM'" SIGTERM

logtag=$(basename $0)
initrd=
kernel=

log() {
  logger -t $logtag "$1"
}

get_files() {
  set -- $(cat /proc/cmdline)
  for arg in "$@"; do
    case "$arg" in
      BOOT_IMAGE=*)
      kernel="/boot${arg#BOOT_IMAGE=}"
      ;;
    esac
  done
  initrd=$(ls $(dirname $kernel)/init*)
}

copy_files_to_boot() {
  log "startup called, copying files to /boot"

  cp $kernel /boot
  cp $initrd /boot

  rm -f $(dirname $kernel)/tmp.imgbase.*

  log "$(stat --format "Copied boot file: %n (size=%s) to /boot" $kernel $initrd)"
  log "$(stat --format "Found boot file: %n (size=%s)" /boot/{vmlinuz*,init*})"
}

copy_files_from_boot() {
  dest=$(dirname $kernel)

  log "shutdown called, copying files from /boot to $dest"

  tmpkernel=$(mktemp -up $dest tmp.imgbase.vmlinuz.XXXXXX)
  tmpinitrd=$(mktemp -up $dest tmp.imgbase.initrd.XXXXXX)

  cp /boot/$(basename $kernel) $tmpkernel && mv $tmpkernel $kernel
  cp /boot/$(basename $initrd) $tmpinitrd && mv $tmpinitrd $initrd

  log "$(stat --format "Copied boot file: %n (size=%s) to $dest" /boot/$(basename $kernel) /boot/$(basename $initrd))"
  log "$(stat --format "Found boot file: %n (size=%s)" $dest/{vmlinuz*,init*})"
}

get_files

if [[ $1 == "startup" ]]; then
  copy_files_to_boot
fi

if [[ $1 == "shutdown" ]]; then
  copy_files_from_boot
fi
