dbf04f4ece
It seems like a lsb_release program should be available on any distro if the appropriate package is installed. So it seems better to use lsb_release instead of /etc/lsb-release, because Debian doesn't appear to have /etc/lsb-release.
141 lines
3.8 KiB
Bash
Executable File
141 lines
3.8 KiB
Bash
Executable File
#!/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=pciutils,build-essential,git-core,subversion,language-pack-en,wget,lsb-release
|
|
|
|
if [ $LXC = "1" ]; then
|
|
addpkg=$addpkg,lxc
|
|
else
|
|
addpkg=$addpkg,linux-image-generic,grub-pc,openssh-server
|
|
fi
|
|
|
|
# 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 [ $LXC = "1" ]; then
|
|
if [ -e $OUT ]; then
|
|
echo $OUT already exists, please remove it first
|
|
exit 1
|
|
fi
|
|
sudo rm -rf $OUT-bootstrap
|
|
# Need universe for lxc in lucid
|
|
env -i LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 sudo debootstrap --arch=$ARCH --include=$addpkg --exclude=$removepkg --components=main,universe $SUITE $OUT-bootstrap $MIRROR
|
|
dd if=/dev/zero of=$OUT-lxc bs=1M count=1 seek=10240
|
|
/sbin/mkfs.ext4 -F $OUT-lxc
|
|
t=`mktemp -d gitian.XXXXXXXX`
|
|
sudo mount $OUT-lxc $t
|
|
sudo cp -a $OUT-bootstrap/* $t
|
|
sudo umount $t
|
|
rmdir $t
|
|
|
|
sudo rm -rf $OUT-bootstrap
|
|
mv $OUT-lxc $OUT
|
|
# bootstrap-fixup is done in libexec/make-clean-vm
|
|
else
|
|
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
|
|
# bootstrap-fixup is done on first boot
|
|
fi
|
|
|