#!/bin/busybox sh
BB=/bin/busybox
export PATH=/bin

fail()
{
  echo "initramfs: $*" >/dev/console
  exec $BB sh </dev/console >/dev/console 2>&1
}

$BB mount -t proc proc /proc || fail "cannot mount proc"
$BB mount -t sysfs sysfs /sys || fail "cannot mount sysfs"
$BB mount -t devtmpfs devtmpfs /dev 2>/dev/null || true
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/net/core/failover.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/net/core/failover.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/net/net_failover.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/net/net_failover.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/net/virtio_net.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/net/virtio_net.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/char/hw_random/rng-core.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/char/hw_random/rng-core.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/char/hw_random/virtio-rng.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/char/hw_random/virtio-rng.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/net/packet/af_packet.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/net/packet/af_packet.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/block/virtio_blk.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/block/virtio_blk.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/lib/crc/crc16.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/lib/crc/crc16.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/mbcache.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/mbcache.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/jbd2/jbd2.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/jbd2/jbd2.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/ext4/ext4.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/ext4/ext4.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/squashfs/squashfs.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/squashfs/squashfs.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/overlayfs/overlay.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/overlayfs/overlay.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/fat/fat.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/fat/fat.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/fat/vfat.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/fat/vfat.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/nls/nls_cp437.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/nls/nls_cp437.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/nls/nls_utf8.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/nls/nls_utf8.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/netfs/netfs.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/netfs/netfs.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/net/9p/9pnet.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/net/9p/9pnet.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/fs/9p/9p.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/fs/9p/9p.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/net/9p/9pnet_virtio.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/net/9p/9pnet_virtio.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/common/usb-common.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/common/usb-common.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/core/usbcore.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/core/usbcore.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/xhci-hcd.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/xhci-hcd.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/xhci-pci.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/xhci-pci.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/ehci-hcd.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/ehci-hcd.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/ehci-pci.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/ehci-pci.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/uhci-hcd.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/usb/host/uhci-hcd.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/hid/hid.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/hid/hid.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/hid/usbhid/usbhid.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/hid/usbhid/usbhid.ko"
$BB insmod "/lib/modules/6.18.42-0-virt/kernel/drivers/hid/hid-generic.ko" || fail "cannot load /lib/modules/6.18.42-0-virt/kernel/drivers/hid/hid-generic.ko"

$BB mount -t ext4 -o noatime,nodiratime,discard /dev/vdb /overlay ||
  fail "cannot mount overlay.qcow2"
$BB mkdir -p /overlay/lower /overlay/upper /overlay/work
$BB mount -t squashfs -o ro /dev/vda /overlay/lower ||
  fail "cannot mount root.squashfs"
$BB mount -t overlay overlay \
  -o lowerdir=/overlay/lower,upperdir=/overlay/upper,workdir=/overlay/work \
  /newroot ||
  fail "cannot mount overlay root"

$BB mkdir -p /newroot/overlay
$BB mount --move /overlay /newroot/overlay ||
  fail "cannot expose overlay layers"

for directory in proc sys dev; do
  $BB mount --move "/$directory" "/newroot/$directory" ||
    fail "cannot move $directory"
done

exec $BB switch_root /newroot /sbin/boot
