From 9d378548cc86028c55baf17260d32d0055603b78 Mon Sep 17 00:00:00 2001 From: Carsten Koester Date: Wed, 25 May 2016 05:58:29 -0400 Subject: CSIT-111: Add Packer based framework to auto-generate disk images Change-Id: Ia18ea34a6288aec0f12f176f4cc264d0f215d1fd Signed-off-by: Carsten Koester --- .../ubuntu/scripts-remote/cleanup.sh | 37 ++++++++++ .../ubuntu/scripts-remote/post-install.sh | 86 ++++++++++++++++++++++ .../ubuntu/scripts-remote/serial-console.sh | 57 ++++++++++++++ .../scripts-remote/vagrant-guestadditions.sh | 22 ++++++ .../ubuntu/scripts-remote/vagrant-user.sh | 40 ++++++++++ 5 files changed, 242 insertions(+) create mode 100644 resources/tools/disk-image-builder/ubuntu/scripts-remote/cleanup.sh create mode 100644 resources/tools/disk-image-builder/ubuntu/scripts-remote/post-install.sh create mode 100644 resources/tools/disk-image-builder/ubuntu/scripts-remote/serial-console.sh create mode 100644 resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-guestadditions.sh create mode 100644 resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-user.sh (limited to 'resources/tools/disk-image-builder/ubuntu/scripts-remote') diff --git a/resources/tools/disk-image-builder/ubuntu/scripts-remote/cleanup.sh b/resources/tools/disk-image-builder/ubuntu/scripts-remote/cleanup.sh new file mode 100644 index 0000000000..850c6958fb --- /dev/null +++ b/resources/tools/disk-image-builder/ubuntu/scripts-remote/cleanup.sh @@ -0,0 +1,37 @@ +#!/bin/sh -e + +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "********** CLEANING UP **********" + +# Clean up host keys only if we're using cloud-init +# (which will generate new keys upon next boot). This +# currently applies to Qemu build only. + +if dpkg -s cloud-init > /dev/null 2>&1 +then + rm -f /etc/ssh/ssh_host_* +fi + +# Remove root's password, old resolv.conf and DHCP lease +passwd -d root +passwd -l root +rm -f /etc/resolv.conf +pkill dhclient +rm -f /var/lib/dhcp/*leases + +echo "********** SCHEDULING SHUTDOWN IN 1 MINUTE **********" +sync +shutdown -h +1 +exit diff --git a/resources/tools/disk-image-builder/ubuntu/scripts-remote/post-install.sh b/resources/tools/disk-image-builder/ubuntu/scripts-remote/post-install.sh new file mode 100644 index 0000000000..da05b4350c --- /dev/null +++ b/resources/tools/disk-image-builder/ubuntu/scripts-remote/post-install.sh @@ -0,0 +1,86 @@ +#!/bin/sh -e + +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +TEMP_PATH="/root/temp" + +### +### APT +### +echo "********** INSTALLING APT PACKAGES **********" +echo -n > /etc/apt/sources.list + +export DEBIAN_FRONTEND=noninteractive + +# We're doing this the hard way as we're dealing with a bunch of +# .deb packages rather than any sources organized through APT. + +# Attempt up to five cycles of unpack/configure. There may be dependency +# problems during the first one(s). + +attempt=1 +MAX_ATTEMPTS=5 +try_again=1 + +while [ $attempt -le $MAX_ATTEMPTS ] && [ $try_again -eq 1 ] +do + try_again=0 + echo "Attempting .deb package installation, attempt #${attempt}/${MAX_ATTEMPTS}" + dpkg --unpack --recursive --skip-same-version ${TEMP_PATH}/deb || try_again=1 + dpkg --configure --pending || try_again=1 + if [ $try_again -eq 1 ] + then + echo Encountered errors. + fi + attempt=$(( $attempt + 1 )) +done + +if [ $try_again -eq 1 ] +then + echo "Still encountered errors after ${MAX_ATTEMPTS} attempts. Aborting". + exit 1 +fi + +## +## PIP +## +echo "********** INSTALLING PIP PACKAGES **********" +pip install --no-index --find-links ${TEMP_PATH}/pip/ -r ${TEMP_PATH}/requirements.txt + + +echo "********** CREATING HISTORIC LINK FOR QEMU, COPY NESTED VM IMAGE **********" +mkdir -p /opt/qemu/bin +ln -s /usr/bin/qemu-system-x86_64 /opt/qemu/bin/qemu-system-x86_64 + +mkdir -p /var/lib/vm + +echo "Embedding nested VM image on this image" +mkdir /var/lib/vm/images +cp ${TEMP_PATH}/nested-vm/* /var/lib/vm/images/ +# There should only be one file at this time +ln -s /var/lib/vm/images/* /var/lib/vm/vhost-nested.img + +ls -lR /var/lib/vm + +# Mount hugepages directory for nested VM +mkdir -p /mnt/huge +echo 'hugetlbfs /mnt/huge hugetlbfs mode=1770,gid=111 0 0' >> /etc/fstab + +echo "********** MOVING CHANGELOG AND VERSION FILES **********" + +mv ${TEMP_PATH}/VERSION / +mv ${TEMP_PATH}/CHANGELOG / + +echo "********** CLEANING UP **********" +rm -fr ${TEMP_PATH} diff --git a/resources/tools/disk-image-builder/ubuntu/scripts-remote/serial-console.sh b/resources/tools/disk-image-builder/ubuntu/scripts-remote/serial-console.sh new file mode 100644 index 0000000000..52879048ac --- /dev/null +++ b/resources/tools/disk-image-builder/ubuntu/scripts-remote/serial-console.sh @@ -0,0 +1,57 @@ +#!/bin/sh -e + +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +## +## Serial console +## +echo "********** CONFIGURING SERIAL CONSOLE AND DISABLING IPV6 **********" +cat - > /etc/init/ttyS0.conf <<"_EOF" +# ttyS0 - getty +# +# This service maintains a getty on ttyS0 from the point the system is +# started until it is shut down again. + +start on stopped rc RUNLEVEL=[12345] +stop on runlevel [!12345] + +respawn +exec /sbin/getty -L 115200 ttyS0 vt102 +_EOF + +cat - > /etc/default/grub <<"_EOF" +# If you change this file, run 'update-grub' afterwards to update +# /boot/grub/grub.cfg. +# For full documentation of the options in this file, see: +# info -f grub -n 'Simple configuration' + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=1 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 ipv6.disable=1" + +GRUB_TERMINAL=serial +GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" + +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +#GRUB_DISABLE_RECOVERY="true" + +# Uncomment to get a beep at grub start +#GRUB_INIT_TUNE="480 440 1" +_EOF + +update-grub diff --git a/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-guestadditions.sh b/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-guestadditions.sh new file mode 100644 index 0000000000..ec1c064437 --- /dev/null +++ b/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-guestadditions.sh @@ -0,0 +1,22 @@ +#!/bin/sh -e + +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "********** Installing VirtualBox Guest Additions (sigh) **********" +mkdir /mnt/VBoxGuestAdditions +mount VBoxGuestAdditions.iso /mnt/VBoxGuestAdditions/ +/mnt/VBoxGuestAdditions/VBoxLinuxAdditions.run +umount /mnt/VBoxGuestAdditions +rmdir /mnt/VBoxGuestAdditions/ +rm -f VBoxGuestAdditions.iso diff --git a/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-user.sh b/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-user.sh new file mode 100644 index 0000000000..31ef17f147 --- /dev/null +++ b/resources/tools/disk-image-builder/ubuntu/scripts-remote/vagrant-user.sh @@ -0,0 +1,40 @@ +#!/bin/sh -e + +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "********** Adding Vagrant user ***********" +# Remove cloud-init as this will slow down the Vagrant boot +export DEBIAN_FRONTEND=noninteractive +apt-get purge -y cloud-init + +# Add Vagrant user +useradd -c "Vagrant User" -m -s /bin/bash vagrant + +mkdir /home/vagrant/.ssh +cat - > /home/vagrant/.ssh/authorized_keys <<_EOF +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +_EOF + +chown -R vagrant.vagrant /home/vagrant/.ssh +chmod 700 /home/vagrant/.ssh + +mkdir -p /etc/sudoers.d +cat - > /etc/sudoers.d/vagrant <<_EOF +vagrant ALL=(root) NOPASSWD:ALL +_EOF +chmod 440 /etc/sudoers.d/vagrant + +echo "********** Rebooting with new kernel **********" +reboot +sleep 60 -- cgit 1.2.3-korg