From 63ffd24bdc409800912bd11cf9ba8a597afd0602 Mon Sep 17 00:00:00 2001 From: "C.J. Collier" Date: Sun, 24 Apr 2016 11:00:46 -0700 Subject: Clean up apt package list * Combine all packages in to a single call to apt-get install * Modify /etc/apt/apt.conf * corrected a comment * not doing redundant edit of /etc/sysctl.conf * adding emacs files to .gitignore * Exercised this code while producing a new base image for each targetted platform * install java8 from official openjdk PPA if platform is 14.04 * detect correct python package to install in CentOS * open (and later close) stdout and stderr logs for later review Change-Id: I669c0c3043f0c90df7af5033b8e180b0e6dc696a Signed-off-by: C.J. Collier --- .gitignore | 5 ++ vagrant/basebuild/Vagrantfile | 3 +- vagrant/basebuild/bootstrap.sh | 121 ++++++++++++++++++++++++++++++++++------- 3 files changed, 108 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 96b3329fe..4c0dafd60 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ target/ # IntelliJ .idea/ *.iml + +# Emacs +*~ +\.\#* +\#* diff --git a/vagrant/basebuild/Vagrantfile b/vagrant/basebuild/Vagrantfile index e8d6a0a4f..0ee17e01f 100644 --- a/vagrant/basebuild/Vagrantfile +++ b/vagrant/basebuild/Vagrantfile @@ -44,8 +44,7 @@ Vagrant.configure(2) do |config| config.vm.synced_folder ".", "/vagrant" config.vm.synced_folder "../lib/", "/vagrant/lib" - # Do a full system update and force enforcing on (it's in permissive - # by default in the rackspace base images) + # Do a full system update and set enforcing on config.vm.provision 'shell', path: 'bootstrap.sh' ################# diff --git a/vagrant/basebuild/bootstrap.sh b/vagrant/basebuild/bootstrap.sh index f289c6333..140f4b0bb 100644 --- a/vagrant/basebuild/bootstrap.sh +++ b/vagrant/basebuild/bootstrap.sh @@ -1,51 +1,121 @@ +#!/bin/bash -x + +# die on errors +set -e + +# Redirect stdout ( 1> ) and stderr ( 2> ) into named pipes ( >() ) running "tee" +exec 1> >(tee -i /tmp/bootstrap-out.log) +exec 2> >(tee -i /tmp/bootstrap-err.log) ubuntu_systems() { - if [ "$(lsb_release -r | awk '{print $2}')" == "14.04" ] + LSB_PATH=$(which lsb_release) + + if [ $? == 0 ] + then + VERSION=$(lsb_release -r | awk '{print $2}') + DIST=$(lsb_release -i | awk '{print $3}') + CODENAME=$(lsb_release -c | awk '{print $2}') + else + ISSUE_TXT=$(head -1 /etc/issue) + DIST=$(echo ${ISSUE_TXT} | awk '{print $1}') + if [ "$DIST" = "Ubuntu" ] + then + VERSION=$(echo ${ISSUE_TXT} | awk '{print $2}' | sed -e 's/^(\d+\.\d+)(\.\d+)?$/\1/') + elif [ "$DIST" = "Debian" ] + then + VERSION=$(echo ${ISSUE_TXT} | awk '{print $3}') + else + echo "Unrecognized distribution: ${DIST}" + fi + fi + + echo "Detected [${DIST} v${VERSION} (${CODENAME})]" + + export DEBIAN_FRONTEND=noninteractive + cat <> /etc/apt/apt.conf +APT { + Get { + Assume-Yes "true"; + allow-change-held-packages "true"; + allow-downgrades "true"; + allow-remove-essential "true"; + }; +}; + +Dpkg::Options { + "--force-confdef"; + "--force-confold"; +}; + +EOF + + # Install plymouth labels and themes to get rid of initrd warnings / errors + if [ "$VERSION" = '14.04' ] then + # openjdk-8-jdk is not available in 14.04 repos by default add-apt-repository ppa:openjdk-r/ppa + + # Install OpenJDK + PACKAGES="$PACKAGES openjdk-8-jdk" + + # Install Oracle's jdk version 8 +# apt-add-repository -y ppa:webupd8team/java +# apt-get -qq update +# echo "debconf shared/accepted-oracle-license-v1-1 select true +# debconf shared/accepted-oracle-license-v1-1 seen true" | sudo debconf-set-selections +# PACKAGES="$PACKAGES oracle-java8-installer" + else + # Install default jdk and plymouth packages + PACKAGES="$PACKAGES plymouth-themes plymouth-label default-jdk" fi + # Standard update + upgrade dance - apt-get update - apt-get upgrade -y + apt-get -qq update + apt-get -qq upgrade + apt-get -qq dist-upgrade # Fix the silly notion that /bin/sh should point to dash by pointing it to bash - sudo update-alternatives --install /bin/sh sh /bin/bash 100 + update-alternatives --install /bin/sh sh /bin/bash 100 # Install build tools - apt-get install -y build-essential autoconf automake bison libssl-dev ccache libtool git dkms debhelper libganglia1-dev libapr1-dev libconfuse-dev dh-systemd + PACKAGES="build-essential autoconf automake bison libssl-dev ccache libtool git dkms debhelper libganglia1-dev libapr1-dev libconfuse-dev" - # Install other stuff - apt-get install -y --force-yes bridge-utils vim gdb iproute2 + # Install interface manipulation tools, editor, debugger and lsb + PACKAGES="$PACKAGES iproute2 bridge-utils vim gdb lsb-release" # Install debian packaging tools - apt-get install -y debhelper dkms + PACKAGES="$PACKAGES debhelper dh-systemd dkms" - # Install uio - apt-get install -y linux-image-extra-`uname -r` + # Install latest kernel and uio + PACKAGES="$PACKAGES linux-image-extra-virtual" - # Install jdk and maven - apt-get install -y openjdk-8-jdk # $$$ comment out for the moment - # apt-get install -y --force-yes maven3 + # PACKAGES="$PACKAGES maven3" + + # Install virtualenv for test execution + PACKAGES="$PACKAGES python-virtualenv python-pip python-dev" + + apt-get -qq install ${PACKAGES} + apt-get -qq autoremove + apt-get -qq clean - # Load the uio kernel module - modprobe uio_pci_generic + # It is not necessary to load the uio kernel module during the bootstrap phase +# modprobe uio_pci_generic # Make sure uio loads at boot time echo uio_pci_generic >> /etc/modules - # Setup for hugepages using upstart so it persists across reboots + # Setup for hugepages using sysctl so it persists across reboots sysctl -w vm.nr_hugepages=1024 + mkdir -p /mnt/huge echo "hugetlbfs /mnt/huge hugetlbfs defaults 0 0" >> /etc/fstab mount /mnt/huge - # Install virtualenv for test execution - apt-get install -y --force-yes python-virtualenv python-pip python-dev python3-dev } rh_systems() { @@ -58,7 +128,13 @@ rh_systems() { yum install -y java-1.8.0-openjdk-devel # Install python development - yum install -y python34-devel + yum search python34-devel 2>&1 | grep -q 'No matches' + if [ $? -eq 0 ] + then + yum install -y python-devel + else + yum install -y python34-devel + fi # Install EPEL yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm @@ -92,3 +168,10 @@ case "$OS" in echo "---> Unknown operating system" ;; esac + +echo "bootstrap process (PID=$$) complete." + +exec 1>&- # close STDOUT +exec 2>&- # close STDERR + +exit 0 -- cgit 1.2.3-korg