prepare-volatile-img.sh 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/sh
  2. if [ "`id -u`" != "0" ]; then
  3. exec sudo $0 $*
  4. fi
  5. set -e
  6. if ! echo $PATH | grep -q sbin; then
  7. PATH=$PATH:/sbin:/usr/sbin
  8. fi
  9. FILENAME=$1
  10. ROOT_SIZE=$2
  11. SWAP_SIZE=$[ 1024 ]
  12. if [ -z "$ROOT_SIZE" -o -z "$FILENAME" ]; then
  13. echo "Usage: $0 <filename> <root.img size in MB>"
  14. exit 1
  15. fi
  16. if [ -e "$FILENAME" ]; then
  17. echo "$FILENAME already exists, not overriding"
  18. exit 1
  19. fi
  20. TOTAL_SIZE=$[ $ROOT_SIZE + $SWAP_SIZE + 512 ]
  21. truncate -s ${TOTAL_SIZE}M "$FILENAME"
  22. sfdisk --no-reread -u M "$FILENAME" > /dev/null 2> /dev/null <<EOF
  23. 0,${SWAP_SIZE},S
  24. ,${ROOT_SIZE},L
  25. EOF
  26. (
  27. flock 200
  28. loopdev=`losetup -f --show --partscan "$FILENAME"`
  29. udevadm settle
  30. created=
  31. if [ ! -e ${loopdev}p1 ]; then
  32. # device wasn't created automatically, probably udev isn't running;
  33. # create devs manually
  34. for partdev in /sys/block/$(basename ${loopdev})/loop*p*; do
  35. mknod /dev/$(basename ${partdev}) b $(cat ${partdev}/dev | tr : ' ')
  36. done
  37. created=yes
  38. fi
  39. mkswap -f ${loopdev}p1 > /dev/null
  40. if [ "$created" = "yes" ]; then
  41. rm -f ${loopdev}p*
  42. fi
  43. losetup -d ${loopdev} || :
  44. chown --reference `dirname "$FILENAME"` "$FILENAME"
  45. ) 200>"/var/run/qubes/prepare-volatile-img.lock"