From 6a605632bb6562a2767841207ceb500f38ea0890 Mon Sep 17 00:00:00 2001 From: Andrew Grimberg Date: Thu, 27 Aug 2015 16:37:33 -0700 Subject: [PATCH] Refactor baseline vagrant image Rename the baseline image from rackspace-convert-base to just baseline to help inform that this is the baseline image that should be run on a new image type in the Rackspace environment to prepare for further Vagrant layers. This Vagrant now supports preparing RedHat flavors as well as Ubuntu. Change-Id: I67ad99f205e48b53f7f8d75640080a4fcc0ac719 Signed-off-by: Andrew Grimberg --- .../README.md | 17 ++- .../Vagrantfile | 6 +- vagrant/baseline/bootstrap.sh | 127 ++++++++++++++++++ .../remove_requiretty.sh | 0 .../system_reseal.sh | 0 vagrant/rackspace-convert-base/bootstrap.sh | 61 --------- 6 files changed, 145 insertions(+), 66 deletions(-) rename vagrant/{rackspace-convert-base => baseline}/README.md (55%) rename vagrant/{rackspace-convert-base => baseline}/Vagrantfile (95%) create mode 100644 vagrant/baseline/bootstrap.sh rename vagrant/{rackspace-convert-base => baseline}/remove_requiretty.sh (100%) rename vagrant/{rackspace-convert-base => baseline}/system_reseal.sh (100%) delete mode 100644 vagrant/rackspace-convert-base/bootstrap.sh diff --git a/vagrant/rackspace-convert-base/README.md b/vagrant/baseline/README.md similarity index 55% rename from vagrant/rackspace-convert-base/README.md rename to vagrant/baseline/README.md index 974f5be31..1ef1e7224 100644 --- a/vagrant/rackspace-convert-base/README.md +++ b/vagrant/baseline/README.md @@ -1,7 +1,12 @@ -rackspace-convert-base can be used to convert a RackSpace native base -image into a Vagrant compatible one. The default image to convert is the -'Fedora 20 (Heisenbug) (PVHVM)' image but this can be overridden just by -setting the RSIMAGE environment variable before calling the vagrant up. +basline can be used to prepare systems in the Rackspace (or potentially +other environments) for following vagrant layers. + +While the base image that is looked for is +'Fedora 20 (Heisenbug) (PVHVM)' which is no longer even offered, the +variable is being left in place so to prompt selection of a proper base +image to spin up against. + +This is controlled by the RSIMAGE environment variable ex: @@ -24,3 +29,7 @@ CentOS 7 - Vagrant ready NOTE: The reseal operation _destroys_ the SSH keys that were used to bring the Vagrant system up effectively making the system unable to perform SSH based logins again. This is intentional. + +If you are bringing up an Ubuntu system you _must_ also set +RSPTY='default' or the bring up will hang indefinitely during the OS +upgrade phase. diff --git a/vagrant/rackspace-convert-base/Vagrantfile b/vagrant/baseline/Vagrantfile similarity index 95% rename from vagrant/rackspace-convert-base/Vagrantfile rename to vagrant/baseline/Vagrantfile index fdcd9a511..dd09c1b48 100644 --- a/vagrant/rackspace-convert-base/Vagrantfile +++ b/vagrant/baseline/Vagrantfile @@ -15,7 +15,11 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.ssh.username = 'root' # Fedora and EL systems default to requiring a tty for sudo - config.ssh.pty = true + if (ENV['RSPTY'] == 'default') + config.ssh.pty = false + else + config.ssh.pty = true + end # The rackspace provider by default tries to rsync # the local folder / vagrant box to /vagrant diff --git a/vagrant/baseline/bootstrap.sh b/vagrant/baseline/bootstrap.sh new file mode 100644 index 000000000..2eb7a3c6f --- /dev/null +++ b/vagrant/baseline/bootstrap.sh @@ -0,0 +1,127 @@ +#!/bin/bash + +# vim: ts=4 sw=4 sts=4 et tw=72 : + +rh_systems() { + # Handle the occurance where SELINUX is actually disabled + if [ `grep SELINUX=permissive /etc/selinux/config` ]; then + # make sure that the filesystem is properly labelled. + # it could be not fully labeled correctly if it was just switched + # from disabled, the autorelabel misses some things + # skip relabelling on /dev as it will generally throw errors + restorecon -R -e /dev / + + # enable enforcing mode from the very start + setenforce enforcing + + # configure system for enforcing mode on next boot + sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config + else + sed -i 's/SELINUX=disabled/SELINUX=permissive/' /etc/selinux/config + touch /.autorelabel + + echo "*******************************************" + echo "** SYSTEM REQUIRES A RESTART FOR SELINUX **" + echo "*******************************************" + fi + + echo "---> Updating operating system" + yum clean all -q + yum update -y -q + + # add in components we need or want on systems + echo "---> Installing base packages" + yum install -y -q @base unzip xz puppet git perl-XML-XPath + + # All of our systems require Java (because of Jenkins) + # Install all versions of the OpenJDK devel but force 1.7.0 to be the + # default + + echo "---> Configuring OpenJDK" + yum install -y -q 'java-*-openjdk-devel' + alternatives --set java /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java + alternatives --set java_sdk_openjdk /usr/lib/jvm/java-1.7.0-openjdk.x86_64 +} + +ubuntu_systems() { + # Ignore SELinux since slamming that onto Ubuntu leads to + # frustration + + echo "---> Updating operating system" + apt-get update -qq + apt-get upgrade -y --force-yes -qq + + # add in stuff we know we need + echo "---> Installing base packages" + apt-get install -y --force-yes -qq unzip xz-utils puppet git libxml-xpath-perl + + # install Java 7 + echo "---> Configuring OpenJDK" + apt-get install -y --force-yes -qq openjdk-7-jdk + + # make jdk8 available + add-apt-repository -y ppa:openjdk-r/ppa + apt-get update -qq + # We need to force openjdk-8-jdk to install + apt-get install -y -qq openjdk-8-jdk + + # make sure that we still default to openjdk 7 + update-alternatives --set java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java + update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac +} + +all_systems() { + # To handle the prompt style that is expected all over the environment + # with how use use robotframework we need to make sure that it is + # consistent for any of the users that are created during dynamic spin + # ups + echo 'PS1="[\u@\h \W]> "' >> /etc/skel/.bashrc + + # Do any Distro specific installations here + echo "Checking distribution" + FACTER_OS=`/usr/bin/facter operatingsystem` + case "$FACTER_OS" in + RedHat|CentOS) + if [ `/usr/bin/facter operatingsystemrelease | /bin/cut -d '.' -f1` = "7" ]; then + echo + echo "---> CentOS 7" + echo "No extra steps currently for CentOS 7" + echo + else + echo "---> CentOS 6" + echo "Installing ODL YUM repo" + yum install -q -y https://nexus.opendaylight.org/content/repositories/opendaylight-yum-epel-6-x86_64/rpm/opendaylight-release/0.1.0-1.el6.noarch/opendaylight-release-0.1.0-1.el6.noarch.rpm + fi + ;; + *) + echo "---> $FACTER_OS found" + echo "No extra steps for $FACTER_OS" + ;; + esac +} + +echo "---> Attempting to detect OS" +# OS selector +if [ -f /usr/bin/yum ] +then + OS='RH' +else + OS='UBUNTU' +fi + +case "$OS" in + RH) + echo "---> RH type system detected" + rh_systems + ;; + UBUNTU) + echo "---> Ubuntu system detected" + ubuntu_systems + ;; + *) + echo "---> Unknown operating system" + ;; +esac + +# execute steps for all systems +all_systems diff --git a/vagrant/rackspace-convert-base/remove_requiretty.sh b/vagrant/baseline/remove_requiretty.sh similarity index 100% rename from vagrant/rackspace-convert-base/remove_requiretty.sh rename to vagrant/baseline/remove_requiretty.sh diff --git a/vagrant/rackspace-convert-base/system_reseal.sh b/vagrant/baseline/system_reseal.sh similarity index 100% rename from vagrant/rackspace-convert-base/system_reseal.sh rename to vagrant/baseline/system_reseal.sh diff --git a/vagrant/rackspace-convert-base/bootstrap.sh b/vagrant/rackspace-convert-base/bootstrap.sh deleted file mode 100644 index 15d47f68c..000000000 --- a/vagrant/rackspace-convert-base/bootstrap.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -# vim: ts=4 sw=4 sts=4 et tw=72 : - -# Handle the occurance where SELINUX is actually disabled -if [ `grep SELINUX=permissive /etc/selinux/config` ]; then - # make sure that the filesystem is properly labelled. - # it could be not fully labeled correctly if it was just switched - # from disabled, the autorelabel misses some things - # skip relabelling on /dev as it will generally throw errors - restorecon -R -e /dev / - - # enable enforcing mode from the very start - setenforce enforcing - - # configure system for enforcing mode on next boot - sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config -else - sed -i 's/SELINUX=disabled/SELINUX=permissive/' /etc/selinux/config - touch /.autorelabel - - echo "*******************************************" - echo "** SYSTEM REQUIRES A RESTART FOR SELINUX **" - echo "*******************************************" -fi - -yum clean all -q -yum update -y -q - -# add in components we need or want on systems -yum install -y -q @base unzip xz puppet git perl-XML-XPath - -# All of our systems require Java (because of Jenkins) -# Install all versions of the OpenJDK devel but force 1.7.0 to be the -# default - -yum install -y -q 'java-*-openjdk-devel' -alternatives --set java /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java -alternatives --set java_sdk_openjdk /usr/lib/jvm/java-1.7.0-openjdk.x86_64 - -# To handle the prompt style that is expected all over the environment -# with how use use robotframework we need to make sure that it is -# consistent for any of the users that are created during dynamic spin -# ups -echo 'PS1="[\u@\h \W]> "' >> /etc/skel/.bashrc - -# Do any Distro specific installations here -echo "Checking distribution" -if [ `/usr/bin/facter operatingsystem` = "Fedora" ]; then - echo "---> Fedora found" - echo "No extra steps for Fedora" -else - if [ `/usr/bin/facter operatingsystemrelease | /bin/cut -d '.' -f1` = "7" ]; then - echo "---> CentOS 7" - echo "No extra steps currently for CentOS 7" - else - echo "---> CentOS 6" - echo "Installing ODL YUM repo" - yum install -q -y https://nexus.opendaylight.org/content/repositories/opendaylight-yum-epel-6-x86_64/rpm/opendaylight-release/0.1.0-1.el6.noarch/opendaylight-release-0.1.0-1.el6.noarch.rpm - fi -fi -- 2.36.6