#!/bin/sh if [ "`id -u`" != "0" ]; then exec sudo $0 $* fi set -e if ! echo $PATH | grep -q sbin; then PATH=$PATH:/sbin:/usr/sbin fi FILENAME=$1 ROOT_SIZE=$2 SWAP_SIZE=$[ 1024 ] if [ -z "$ROOT_SIZE" -o -z "$FILENAME" ]; then echo "Usage: $0 <filename> <root.img size in MB>" exit 1 fi if [ -e "$FILENAME" ]; then echo "$FILENAME already exists, not overriding" exit 1 fi TOTAL_SIZE=$[ $ROOT_SIZE + $SWAP_SIZE + 512 ] truncate -s ${TOTAL_SIZE}M "$FILENAME" sfdisk --no-reread -u M "$FILENAME" > /dev/null 2> /dev/null <<EOF 0,${SWAP_SIZE},S ,${ROOT_SIZE},L EOF ( flock 200 loopdev=`losetup -f --show --partscan "$FILENAME"` udevadm settle created= if [ ! -e ${loopdev}p1 ]; then # device wasn't created automatically, probably udev isn't running; # create devs manually for partdev in /sys/block/$(basename ${loopdev})/loop*p*; do mknod /dev/$(basename ${partdev}) b $(cat ${partdev}/dev | tr : ' ') done created=yes fi mkswap -f ${loopdev}p1 > /dev/null if [ "$created" = "yes" ]; then rm -f ${loopdev}p* fi losetup -d ${loopdev} || : chown --reference `dirname "$FILENAME"` "$FILENAME" ) 200>"/var/run/qubes/prepare-volatile-img.lock"