prepare-volatile-img.sh 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/bin/sh
  2. if [ "`id -u`" != "0" ]; then
  3. exec sudo $0 $*
  4. fi
  5. set -e
  6. FILENAME=$1
  7. ROOT_SIZE=$2
  8. SWAP_SIZE=$[ 1024 ]
  9. if [ -z "$ROOT_SIZE" -o -z "$FILENAME" ]; then
  10. echo "Usage: $0 <filename> <root.img size in MB>"
  11. exit 1
  12. fi
  13. if [ -e "$FILENAME" ]; then
  14. echo "$FILENAME already exists, not overriding"
  15. exit 1
  16. fi
  17. # Cleanup lefovers from possible previous run
  18. loopdev=`losetup -a | grep "$FILENAME" | cut -f 1 -d :`
  19. if [ -n "$loopdev" ]; then
  20. dmsetup remove `basename $loopdev`p1 2>/dev/null
  21. dmsetup remove `basename $loopdev`p2 2>/dev/null
  22. losetup -d $loopdev
  23. udevadm settle
  24. fi
  25. TOTAL_SIZE=$[ $ROOT_SIZE + $SWAP_SIZE + 512 ]
  26. truncate -s ${TOTAL_SIZE}M "$FILENAME"
  27. sfdisk --no-reread -u M "$FILENAME" > /dev/null 2> /dev/null <<EOF
  28. 0,${SWAP_SIZE},S
  29. ,${ROOT_SIZE},L
  30. EOF
  31. kpartx -s -a "$FILENAME"
  32. loopdev=`losetup -j "$FILENAME"|tail -n 1 |cut -d: -f1`
  33. looppart=`echo $loopdev|sed 's:dev:dev/mapper:'`
  34. mkswap -f ${looppart}p1 > /dev/null
  35. udevadm settle
  36. kpartx -s -d ${loopdev}
  37. losetup -d ${loopdev} || :
  38. chown --reference `dirname "$FILENAME"` "$FILENAME"