#!/bin/sh

set -e

case "$1" in
  prereqs)
    exit 0
    ;;
esac

# shellcheck disable=SC1091
. /scripts/functions

if ! grep -q ' resize' /proc/cmdline; then
  exit 0
fi

if ! BOOT_PART_DEV=$(findmnt -n -o SOURCE -s -F "${rootmnt?}/etc/fstab" /boot/firmware); then
  exit 0
fi

log_begin_msg "Setting new disk ID..."

ROOT_DEV="/dev/$(lsblk -no pkname "$ROOT")"
mkdir -p /run/new_diskid
mount -o remount,rw "$ROOT" "${rootmnt?}/"
mount -o rw "$(resolve_device "$BOOT_PART_DEV")" /run/new_diskid/

OLD_DISKID="$(dd if="$ROOT_DEV" bs=4 count=1 skip=110 status=none | od -An -tx4 | cut -c2-9)"

dd if=/dev/hwrng "of=$ROOT_DEV" bs=4 seek=110 count=1 conv=notrunc status=none
DISKID="$(dd if="$ROOT_DEV" bs=4 count=1 skip=110 status=none | od -An -tx4 | cut -c2-9)"

sed -i "s/$OLD_DISKID/$DISKID/g" "${rootmnt?}/etc/fstab"
sed -i "s/$OLD_DISKID/$DISKID/" /run/new_diskid/cmdline.txt
sed -i 's| resize||g' /run/new_diskid/cmdline.txt

umount /run/new_diskid

fstrim "${rootmnt?}/"

mount -o remount,ro "$ROOT" "${rootmnt?}/"

rmdir /run/new_diskid

unset DISKID
unset OLD_DISKID
unset ROOT_DEV
unset BOOT_PART_DEV
log_end_msg

exit 0
