#!/bin/sh echo "Qubes initramfs script here:" mkdir -p /proc /sys /dev mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t devtmpfs devtmpfs /dev if [ -w /sys/devices/system/xen_memory/xen_memory0/scrub_pages ]; then # re-enable xen-balloon pages scrubbing, after initial balloon down echo 1 > /sys/devices/system/xen_memory/xen_memory0/scrub_pages fi if [ -e /dev/mapper/dmroot ] ; then echo "Qubes: FATAL error: /dev/mapper/dmroot already exists?!" fi /sbin/modprobe xenblk || /sbin/modprobe xen-blkfront || echo "Qubes: Cannot load Xen Block Frontend..." die() { echo "$@" >&2 exit 1 } echo "Waiting for /dev/xvda* devices..." while ! [ -e /dev/xvda ]; do sleep 0.1; done # prefer partition if exists if [ -b /dev/xvda1 ]; then if [ -d /dev/disk/by-partlabel ]; then ROOT_DEV=$(basename $(readlink "/dev/disk/by-partlabel/Root\\x20filesystem")) else ROOT_DEV=$(grep -l "PARTNAME=Root filesystem" /sys/block/xvda/xvda*/uevent |\ grep -o "xvda[0-9]") fi if [ -z "$ROOT_DEV" ]; then # fallback to third partition ROOT_DEV=xvda3 fi else ROOT_DEV=xvda fi SWAP_SIZE=$(( 1024 * 1024 * 2 )) # sectors, 1GB if [ `cat /sys/class/block/$ROOT_DEV/ro` = 1 ] ; then echo "Qubes: Doing COW setup for AppVM..." while ! [ -e /dev/xvdc ]; do sleep 0.1; done VOLATILE_SIZE=$(cat /sys/class/block/xvdc/size) # sectors ROOT_SIZE=$(cat /sys/class/block/$ROOT_DEV/size) # sectors if [ $VOLATILE_SIZE -lt $SWAP_SIZE ]; then die "volatile.img smaller than 1GB, cannot continue" fi /sbin/sfdisk -q --unit S /dev/xvdc >/dev/null </dev/null <