#!/bin/sh set -e SUITE=lucid ARCH=amd64 MIRROR=http://${MIRROR_HOST:-127.0.0.1}:3142/archive.ubuntu.com/ubuntu SECURITY_MIRROR=http://${MIRROR_HOST:-127.0.0.1}:3142/security.ubuntu.com/ubuntu LXC=0 VBOX=0 usage() { echo "Usage: ${0##*/} [OPTION]..." echo "Make a base client." echo cat << EOF --help display this help and exit --suite U build suite U instead of lucid --arch A build architecture A (e.g. i386) instead of amd64 --lxc use lxc instead of kvm --vbox use VirtualBox instead of kvm The MIRROR_HOST environment variable can be used to change the apt-cacher host. It should be something that both the host and the target VM can reach. It may be set to 127.0.0.1, in which case it will be changed to 10.0.2.2 on the guest (or GITIAN_HOST_IP if it is defined) 10.0.2.2 is the host IP as visible from the guest under qemu networking. EOF } if [ $# != 0 ] ; then while true ; do case "$1" in --help|-h) usage exit 0 ;; --suite|-s) SUITE="$2" shift 2 ;; --arch|-a) ARCH="$2" shift 2 ;; --lxc) LXC=1 shift 1 ;; --vbox) VBOX=1 shift 1 ;; --*) echo "unrecognized option $1" exit 1 ;; *) break ;; esac done fi mkdir -p var if [ ! -e var/id_dsa ]; then ssh-keygen -t dsa -f var/id_dsa -N "" fi OUT=base-$SUITE-$ARCH FLAVOUR=virtual if [ $ARCH = "amd64" -a $SUITE = "hardy" ]; then FLAVOUR=server fi addpkg=openssh-server,pciutils,build-essential,git-core,subversion,lxc # Remove cron to work around vmbuilder issue when umounting /dev on target removepkg=cron if [ $VBOX = "1" ]; then NAME="$SUITE-$ARCH" if ! vagrant status | grep "$NAME" | grep "not created" > /dev/null; then echo "Vagrant machine "$NAME" already exists, please remove it first (vagrant destroy "$NAME")" exit 1 fi vagrant up "$NAME" vagrant ssh "$NAME" -c "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh" vagrant ssh "$NAME" -c "sudo sh -c 'cat >> /root/.ssh/authorized_keys'" < var/id_dsa.pub vagrant ssh "$NAME" -c "sudo -u ubuntu mkdir -p /home/ubuntu/.ssh && sudo -u ubuntu chmod 700 /home/ubuntu/.ssh" vagrant ssh "$NAME" -c "sudo sh -c 'cat >> /home/ubuntu/.ssh/authorized_keys'" < var/id_dsa.pub VBoxManage snapshot "Gitian-$NAME" take "Gitian-Clean" vagrant suspend "$NAME" exit 0 fi if [ -e $OUT.qcow2 ]; then echo $OUT.qcow2 already exists, please remove it first exit 1 fi libexec/config-bootstrap-fixup rm -rf $OUT env -i LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 sudo vmbuilder kvm ubuntu --rootsize 10240 --arch=$ARCH --suite=$SUITE --addpkg=$addpkg --removepkg=$removepkg --ssh-key=var/id_dsa.pub --ssh-user-key=var/id_dsa.pub --mirror=$MIRROR --security-mirror=$SECURITY_MIRROR --dest=$OUT --flavour=$FLAVOUR --firstboot=`pwd`/target-bin/bootstrap-fixup mv $OUT/*.qcow2 $OUT.qcow2 rm -rf $OUT if [ $LXC = "1" ]; then #sudo debootstrap --include=$addpkg --arch=$ARCH $SUITE $OUT-root $MIRROR echo Extracting partition for lxc qemu-img convert $OUT.qcow2 $OUT.raw loop=`sudo kpartx -av $OUT.raw|sed -n '/loop.p1/{s/.*loop\(.\)p1.*/\1/;p}'` sudo cp --sparse=always /dev/mapper/loop${loop}p1 $OUT sudo chown $USER $OUT sudo kpartx -d /dev/loop$loop rm -f $OUT.raw # bootstrap-fixup is done in libexec/make-clean-vm fi