#!/bin/sh set -e . "$(dirname $0)/config.sh" ORIG="ubuntu-$VERSION-$DISTRO-$ARCH.iso" COPY="ubuntu-$VERSION-$DISTRO-$ARCH" ISO="$NICKNAME-ubuntu-$VERSION-$DISTRO-$ARCH.iso" # Download the original ISO if it isn't present already. [ -f "$ORIG" ] || curl -L -o "$ORIG" \ -d distro="$DISTRO" \ -d release="$RELEASE" \ -d bits="$([ "$ARCH" = "i386" ] && echo 32 || echo 64)" \ "http://www.ubuntu.com/start-download" # Make a writable copy of the original ISO. { # os x sudo /usr/libexec/vndevice attach /dev/vn0 "$ORIG" sudo mount -t cd9660 /dev/vn0 "mount" } || { # linux rm -rf "mount" mkdir "mount" sudo mount -o loop "$ORIG" "mount" } rsync -a "mount/" "$COPY" { sudo diskutil unmount "mount" sudo /usr/libexec/vndevice detach /dev/vn0 } || { sudo umount "mount" rm -rf "mount" } chmod -R +w "$COPY" # Customize the writable copy. cp "isolinux.cfg" "$COPY/isolinux/" m4 \ -D __HOST__="$HOST" \ -D __DOMAIN__="$DOMAIN" \ -D __KERNEL__="linux-$([ "$ARCH" = "i386" ] \ && echo generic-pae \ || echo server )" \ -D __ROOT_PASSWORD__="$ROOT_PASSWORD" \ -D __USERNAME__="$USERNAME" \ -D __PASSWORD__="$PASSWORD" \ "unattended.seed.m4" >"$COPY/preseed/unattended.seed" cp "$PUBLIC_KEY" "sudoers" "$COPY/" m4 \ -D __USERNAME__="$USERNAME" \ -D __PUBLIC_KEY__="$PUBLIC_KEY" \ "late_command.sh.m4" >"$COPY/late_command.sh" # Build a custom ISO. mkisofs -r -V "Ubuntu $VERSION for Vagrant" \ -cache-inodes -J -l -no-emul-boot \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -boot-load-size 4 -boot-info-table \ -o "$ISO" "$COPY"