| #!/bin/bash |
| # make_image.sh - Create Ubuntu images in various formats |
| # |
| # make_image.sh release format |
| # |
| # Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc) |
| # |
| # Requires sudo to root |
| |
| ROOTSIZE=${ROOTSIZE:-8192} |
| SWAPSIZE=${SWAPSIZE:-1024} |
| |
| usage() { |
| echo "$0 - Create Ubuntu images" |
| echo "" |
| echo "$0 [-r rootsize] [-s swapsize] release format" |
| exit 1 |
| } |
| |
| while getopts hm:r:s: c; do |
| case $c in |
| h) usage |
| ;; |
| m) MIRROR=$OPTARG |
| ;; |
| r) ROOTSIZE=$OPTARG |
| ;; |
| s) SWAPSIZE=$OPTARG |
| ;; |
| esac |
| done |
| shift `expr $OPTIND - 1` |
| |
| RELEASE=$1 |
| FORMAT=$2 |
| |
| case $RELEASE in |
| natty) ;; |
| maverick) ;; |
| lucid) ;; |
| karmic) ;; |
| jaunty) ;; |
| *) echo "Unknown release: $RELEASE" |
| usage |
| esac |
| |
| case $FORMAT in |
| kvm|qcow2) FORMAT=qcow2 |
| TARGET=kvm |
| ;; |
| vmserver|vmdk) FORMAT=vmdk |
| TARGET=vmserver |
| ;; |
| vbox|vdi) FORMAT=qcow2 |
| TARGET=kvm |
| FINAL_FORMAT=vdi |
| ;; |
| vhd|vpc) FORMAT=qcow2 |
| TARGET=kvm |
| FINAL_FORMAT=vpc |
| ;; |
| *) echo "Unknown format: $FORMAT" |
| usage |
| esac |
| |
| # Install stuff if necessary |
| if [ -z `which vmbuilder` ]; then |
| sudo apt-get install ubuntu-vm-builder |
| fi |
| |
| # Build the image |
| sudo vmbuilder $TARGET ubuntu --suite $RELEASE \ |
| -o \ |
| --rootsize=$ROOTSIZE \ |
| --swapsize=$SWAPSIZE \ |
| --tmpfs - \ |
| --addpkg=openssh-server \ |
| |
| # --mirror=$MIRROR \ |
| |
| if [ -z "$FINAL_FORMAT" ]; then |
| # Get image |
| mv ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FORMAT |
| else |
| # Convert image |
| qemu-img convert -O $FINAL_FORMAT ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FINAL_FORMAT |
| fi |
| rm -rf ubuntu-$TARGET |