Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # make_image.sh - Create Ubuntu images in various formats |
| 3 | # |
| 4 | # make_image.sh release format |
| 5 | # |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 6 | # Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 7 | # |
| 8 | # Requires sudo to root |
| 9 | |
| 10 | ROOTSIZE=${ROOTSIZE:-8192} |
| 11 | SWAPSIZE=${SWAPSIZE:-1024} |
| 12 | |
| 13 | usage() { |
| 14 | echo "$0 - Create Ubuntu images" |
| 15 | echo "" |
| 16 | echo "$0 [-r rootsize] [-s swapsize] release format" |
| 17 | exit 1 |
| 18 | } |
| 19 | |
| 20 | while getopts hm:r:s: c; do |
| 21 | case $c in |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 22 | h) usage |
| 23 | ;; |
| 24 | m) MIRROR=$OPTARG |
| 25 | ;; |
| 26 | r) ROOTSIZE=$OPTARG |
| 27 | ;; |
| 28 | s) SWAPSIZE=$OPTARG |
| 29 | ;; |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 30 | esac |
| 31 | done |
| 32 | shift `expr $OPTIND - 1` |
| 33 | |
| 34 | RELEASE=$1 |
| 35 | FORMAT=$2 |
| 36 | |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 37 | case $FORMAT in |
| 38 | kvm|qcow2) FORMAT=qcow2 |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 39 | QFORMAT=qcow2 |
| 40 | HYPER=kvm |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 41 | ;; |
| 42 | vmserver|vmdk) |
| 43 | FORMAT=vmdk |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 44 | QFORMAT=vmdk |
| 45 | HYPER=vmserver |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 46 | ;; |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 47 | vbox|vdi) FORMAT=vdi |
| 48 | QFORMAT=vdi |
| 49 | HYPER=kvm |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 50 | ;; |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 51 | vhd|vpc) FORMAT=vhd |
| 52 | QFORMAT=vpc |
| 53 | HYPER=kvm |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 54 | ;; |
| 55 | xen) FORMAT=raw |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 56 | QFORMAT=raw |
| 57 | HYPER=xen |
| 58 | ;; |
| 59 | raw) FORMAT=raw |
| 60 | QFORMAT=raw |
| 61 | HYPER=kvm |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 62 | ;; |
| 63 | *) echo "Unknown format: $FORMAT" |
| 64 | usage |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 65 | esac |
| 66 | |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 67 | case $RELEASE in |
| 68 | natty) ;; |
| 69 | maverick) ;; |
| 70 | lucid) ;; |
| 71 | karmic) ;; |
| 72 | jaunty) ;; |
| 73 | *) echo "Unknown release: $RELEASE" |
| 74 | usage |
| 75 | ;; |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 76 | esac |
| 77 | |
| 78 | # Install stuff if necessary |
| 79 | if [ -z `which vmbuilder` ]; then |
Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 80 | sudo apt-get install ubuntu-vm-builder |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 81 | fi |
| 82 | |
| 83 | # Build the image |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 84 | TMPDISK=`mktemp imgXXXXXXXX` |
| 85 | SIZE=$[$ROOTSIZE+$SWAPSIZE+1] |
| 86 | dd if=/dev/null of=$TMPDISK bs=1M seek=$SIZE |
| 87 | sudo vmbuilder $HYPER ubuntu --suite $RELEASE \ |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 88 | -o \ |
| 89 | --rootsize=$ROOTSIZE \ |
| 90 | --swapsize=$SWAPSIZE \ |
| 91 | --tmpfs - \ |
| 92 | --addpkg=openssh-server \ |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 93 | --raw=$TMPDISK \ |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 94 | |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 95 | if [ "$FORMAT" = "raw" ]; then |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 96 | # Get image |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 97 | mv $TMPDISK $RELEASE.$FORMAT |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 98 | else |
| 99 | # Convert image |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 100 | qemu-img convert -O $QFORMAT $TMPDISK $RELEASE.$FORMAT |
| 101 | rm $TMPDISK |
Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 102 | fi |
Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 103 | rm -rf ubuntu-$HYPER |