diff --git a/linux/aux-tools/prepare-volatile-img.sh b/linux/aux-tools/prepare-volatile-img.sh index a31c92e4..33dfc9b9 100755 --- a/linux/aux-tools/prepare-volatile-img.sh +++ b/linux/aux-tools/prepare-volatile-img.sh @@ -31,20 +31,23 @@ sfdisk --no-reread -u M "$FILENAME" > /dev/null 2> /dev/null < /dev/null -if [ "$created" = "yes" ]; then - rm -f ${loopdev}p* -fi -losetup -d ${loopdev} || : -chown --reference `dirname "$FILENAME"` "$FILENAME" +( + 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"