X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=packer%2Fdebian64_provision.sh;fp=packer%2Fdebian64_provision.sh;h=7830ad4a922206ca42641b09864e0304167f38c2;hb=7fc0e06e6bb818dd8410e8dc2341da015121203a;hp=0000000000000000000000000000000000000000;hpb=1081c44c4f6368490481c4c5b48281f3846cbed1;p=grml-debootstrap.git diff --git a/packer/debian64_provision.sh b/packer/debian64_provision.sh new file mode 100644 index 0000000..7830ad4 --- /dev/null +++ b/packer/debian64_provision.sh @@ -0,0 +1,132 @@ +#!/bin/bash + +set -e + +[ -f /etc/grml_cd ] || { echo "File /etc/grml_cd doesn't exist, not executing script to avoid data loss." >&2 ; exit 1 ; } + +TARGET=/mnt + +# if we notice an error then do NOT immediately return but provide +# user a chance to debug the VM +bailout() { + echo "* Noticed problem during execution, sleeping for 9999 seconds to provide debugging option" + sleep 9999 + echo "* Finally exiting with return code 1" + exit 1 +} +trap bailout ERR + +echo "* Executing automated partition setup" +cat > /tmp/partition_setup.txt << EOF +disk_config sda disklabel:msdos bootable:1 +primary / 800M- ext4 rw +EOF + +export LOGDIR='/tmp/setup-storage' +mkdir -p $LOGDIR + +export disklist=$(/usr/lib/fai/fai-disk-info | sort) +PATH=/usr/lib/fai:${PATH} setup-storage -f /tmp/partition_setup.txt -X + +echo "* Making sure we use latest grml-debootstrap version" +apt-get update +apt-get -y install grml-debootstrap + +# TODO - support testing the version provided by the ISO (without upgrading) +if [ -r /tmp/grml-debootstrap ] ; then + echo "* Found /tmp/grml-debootstrap - considering for usage as main grml-debootstrap script" + GRML_DEBOOTSTRAP="bash /tmp/grml-debootstrap" +else + GRML_DEBOOTSTRAP=grml-debootstrap +fi + +echo "* Installing Debian" +$GRML_DEBOOTSTRAP --hostname wheezy --release wheezy --target /dev/sda1 --grub /dev/sda --password grml --force 2>&1 | tee -a /tmp/grml-debootstrap.log + +echo "* Mounting target system" +mount /dev/sda1 ${TARGET} + +echo "* Installing make + gcc packages for Virtualbox Guest Additions" +chroot ${TARGET} apt-get -y install make gcc dkms + +echo "* Installing Virtualbox Guest Additions" +isofile="${HOME}/VBoxGuestAdditions.iso" + +KERNELHEADERS=$(basename $(find $TARGET/usr/src/ -maxdepth 1 -name linux-headers\* ! -name \*common) | sort -u -r -V | head -1) +if [ -z "$KERNELHEADERS" ] ; then + echo "Error: no kernel headers found for building the VirtualBox Guest Additions kernel module." >&2 + exit 1 +fi + +KERNELVERSION=${KERNELHEADERS##linux-headers-} +if [ -z "$KERNELVERSION" ] ; then + echo "Error: no kernel version could be identified." >&2 + exit 1 +fi + +cp /tmp/fake-uname.so "${TARGET}/tmp/fake-uname.so" +mkdir -p "${TARGET}/media/cdrom" +mountpoint "${TARGET}/media/cdrom" >/dev/null && umount "${TARGET}/media/cdrom" +mount -t iso9660 $isofile "${TARGET}/media/cdrom/" +UTS_RELEASE=$KERNELVERSION LD_PRELOAD=/tmp/fake-uname.so grml-chroot "$TARGET" /media/cdrom/VBoxLinuxAdditions.run --nox11 || true +tail -10 "${TARGET}/var/log/VBoxGuestAdditions.log" +umount "${TARGET}/media/cdrom/" + +# work around regression in virtualbox-guest-additions-iso 4.3.10 +if [ -d ${TARGET}/opt/VBoxGuestAdditions-4.3.10 ] ; then + ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions ${TARGET}/usr/lib/VBoxGuestAdditions +fi + +echo "* Setting password for user root to 'vagrant'" +echo root:vagrant | chroot ${TARGET} chpasswd + +echo "* Installing sudo package" +chroot ${TARGET} apt-get -y install sudo + +echo "* Adding Vagrant user" +chroot ${TARGET} useradd -d /home/vagrant -m -u 1000 vagrant + +echo "* Installing Vagrant ssh key" +mkdir -m 0700 -p ${TARGET}/home/vagrant/.ssh +echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" >> ${TARGET}/home/vagrant/.ssh/authorized_keys +chmod 0600 ${TARGET}/home/vagrant/.ssh/authorized_keys +chroot ${TARGET} chown vagrant:vagrant /home/vagrant/.ssh /home/vagrant/.ssh/authorized_keys + +echo "* Setting up sudo configuration for user vagrant" +echo "vagrant ALL=(ALL) NOPASSWD: ALL" > ${TARGET}/etc/sudoers.d/vagrant + +if [ -f ${TARGET}/etc/ssh/sshd_config ] && ! grep -q '^UseDNS' ${TARGET}/etc/ssh/sshd_config ; then + echo "* Disabling UseDNS in sshd config" + echo "UseDNS no" >> ${TARGET}/etc/ssh/sshd_config +fi + +echo "* Cleaning up apt stuff" +chroot ${TARGET} apt-get clean +rm -f ${TARGET}/var/lib/apt/lists/*Packages \ + ${TARGET}/var/lib/apt/lists/*Release \ + ${TARGET}/var/lib/apt/lists/*Sources \ + ${TARGET}/var/lib/apt/lists/*Index* \ + ${TARGET}/var/lib/apt/lists/*Translation* \ + ${TARGET}/var/lib/apt/lists/*.gpg \ + ${TARGET}/var/cache/apt-show-versions/* \ + ${TARGET}/var/cache/debconf/*.dat-old \ + ${TARGET}/var/cache/apt/*.bin \ + ${TARGET}/var/lib/aptitude/pkgstates.old + +echo "* Unmounting target system" +umount ${TARGET} + +echo "* Checking for bats" +if dpkg --list bats >/dev/null 2>&1 ; then + echo "* bats is already present, nothing to do." +else + echo "* Installing bats" + apt-get update + apt-get -y install bats + # dpkg -i /tmp/bats*deb +fi + +echo "* Running tests to verify grml-debootstrap system" +bats /tmp/debian64.bats -t + +echo "* Finished execution of $0"