#!/bin/sh
# The burn bootloader creates its own DOS disk ID. Resolve the filesystem UUID
# here instead of assuming Linux's eMMC device number or a fixed PARTUUID.
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
panic() { echo "One-KVM burn initramfs: $*"; exec /bin/sh; }
/bin/busybox mount -t proc proc /proc || panic 'cannot mount proc'
/bin/busybox mount -t sysfs sysfs /sys || panic 'cannot mount sysfs'
/bin/busybox mount -t devtmpfs devtmpfs /dev || panic 'cannot mount devtmpfs'
read -r arguments </proc/cmdline
root_spec=
for argument in $arguments; do
    case "$argument" in root=UUID=*) root_spec="${argument#root=}" ;; esac
done
[ -n "$root_spec" ] || panic 'missing root filesystem UUID'
attempt=0
while [ "$attempt" -lt 60 ]; do
    root_device="$(/usr/sbin/blkid -c /dev/null -t "$root_spec" -o device 2>/dev/null)"
    [ -b "$root_device" ] && break
    attempt=$((attempt + 1))
    /bin/busybox sleep 1
done
[ -b "$root_device" ] || panic 'root filesystem not found'
/bin/busybox mount -t ext4 -o rw,noatime "$root_device" /newroot || panic 'cannot mount root'
for filesystem in dev proc sys; do
    /bin/busybox mount -o move "/$filesystem" "/newroot/$filesystem" || panic "cannot move $filesystem"
done
exec /bin/busybox switch_root /newroot /sbin/init
