#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

mkdir -p /proc /sys /dev /boot /newroot

mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev 2>/dev/null || true

sleep 2

BOOT_PART="/dev/mmcblk0p1"
mount -t vfat "$BOOT_PART" /boot || exec sh

CMDLINE="$(cat /proc/cmdline)"
ROOT_LABEL="$(echo "$CMDLINE" | sed -n 's/.*root=LABEL=\([^ ]*\).*/\1/p')"

[ -z "$ROOT_LABEL" ] && ROOT_LABEL="root"

echo "[INITRAMFS] Requested root label: $ROOT_LABEL"

ROOT_DEV="$(blkid -L "$ROOT_LABEL" 2>/dev/null || true)"

if [ -z "$ROOT_DEV" ]; then
	echo "[INITRAMFS] Root label $ROOT_LABEL not found"
	ROLLBACK=1
else
	echo "[INITRAMFS] Trying root device $ROOT_DEV"
	mount -t btrfs "$ROOT_DEV" /newroot || ROLLBACK=1
fi

if [ "${ROLLBACK:-0}" = "1" ]; then
	echo "[INITRAMFS] Root mount failed"

	if [ -f /boot/previous-slot ]; then
		PREV="$(cat /boot/previous-slot)"
	else
		PREV="root"
	fi

	echo "[INITRAMFS] Rolling back to $PREV"

	sed -i "s/root=LABEL=[^ ]*/root=LABEL=$PREV/g" /boot/cmdline.txt

	rm -f /boot/rollback.flag
	rm -f /boot/pending-slot

	sync
	reboot -f
fi

echo "[INITRAMFS] Root mounted OK"

umount /boot
umount /proc
umount /sys

exec switch_root /newroot /sbin/init
