@ -1,21 +1,58 @@
#!/bin/sh
#
# This file should be places in pre-mount directory in dracut's initramfs
# This file should be placed in pre-mount directory in dracut's initramfs, or
# scripts/local-top in case of initramfs-tools
#
echo "Qubes initramfs script here:"
# initramfs-tools (Debian) API
PREREQS = ""
case " $1 " in
prereqs)
# This runs during initramfs creation
echo " $PREREQS "
exit 0
; ;
esac
# This runs inside real initramfs
if [ -r /scripts/functions ] ; then
# We're running in Debian's initramfs
. /scripts/functions
alias die = panic
alias info = true
alias warn = log_warning_msg
alias log_begin = log_begin_msg
alias log_end = log_end_msg
elif [ -r /lib/dracut-lib.sh ] ; then
. /lib/dracut-lib.sh
alias log_begin = info
alias log_end = true
else
die( ) {
echo " $@ "
exit 1
}
alias info = echo
alias warn = echo
alias log_begin = echo
alias log_end = true
fi
info "Qubes initramfs script here:"
if [ -e /dev/mapper/dmroot ] ; then
die "Qubes: FATAL error: /dev/mapper/dmroot already exists?!"
fi
modprobe xenblk || modprobe xen-blkfront || echo "Qubes: Cannot load Xen Block Frontend..."
modprobe xenblk || modprobe xen-blkfront || warn "Qubes: Cannot load Xen Block Frontend..."
echo "Waiting for /dev/xvda* devices..."
log_begin "Waiting for /dev/xvda* devices..."
while ! [ -e /dev/xvda ] ; do sleep 0.1; done
log_end
if [ ` cat /sys/block/xvda/ro` = 1 ] ; then
echo "Qubes: Doing COW setup for AppVM..."
log_begin "Qubes: Doing COW setup for AppVM..."
while ! [ -e /dev/xvdc ] ; do sleep 0.1; done
VOLATILE_SIZE = $( sfdisk -s /dev/xvdc)
@ -29,20 +66,19 @@ if [ `cat /sys/block/xvda/ro` = 1 ] ; then
,$ROOT_SIZE ,L
EOF
if [ $? -ne 0 ] ; then
echo "Qubes: failed to setup partitions on volatile device"
exit 1
die "Qubes: failed to setup partitions on volatile device"
fi
while ! [ -e /dev/xvdc1 ] ; do sleep 0.1; done
mkswap /dev/xvdc1
while ! [ -e /dev/xvdc2 ] ; do sleep 0.1; done
echo "0 `cat /sys/block/xvda/size` snapshot /dev/xvda /dev/xvdc2 N 16" | \
dmsetup --noudevsync create dmroot || { echo "Qubes: FATAL: cannot create dmroot!" ; }
echo Qubes: done .
dmsetup --noudevsync create dmroot || die "Qubes: FATAL: cannot create dmroot!"
log_end
else
echo "Qubes: Doing R/W setup for TemplateVM..."
log_begin "Qubes: Doing R/W setup for TemplateVM..."
echo "0 `cat /sys/block/xvda/size` linear /dev/xvda 0" | \
dmsetup --noudevsync create dmroot || { echo "Qubes: FATAL: cannot create dmroot!" ; exit 1; }
echo Qubes: done .
dmsetup --noudevsync create dmroot || die "Qubes: FATAL: cannot create dmroot!"
log_end
fi
dmsetup mknodes dmroot