Install Vagrant and VirtualBox Vagrant Download https://www.vagrantup.com/downloads.html
Virtual Box Download https://www.virtualbox.org/wiki/Downloads
Download the Oracle Instant Client RPMS. Store them in ~/Vagrant/packages.
These are available at http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html Keep them once you've gone to the trouble to get them downloaded.
Create a new directory to hold your Vagrant host, and init Vagrant there.
mkdir -p ~/Vagrant/web;
cd ~/Vagrant/web;
vagrant init;Modify the new Vagrantfile file. This Vagrant file will create a new virtual machine named 'web' that is based on the Chef CentOS image. This is a very bare-bones image with hardly any software installed. This is a good thing, as we'll be tailoring out Vagrant host to just what we want/need.
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "web" do |web|
# Use the Chef CentOS base image
web.vm.box = "chef/centos-6.5"
# Forward the Vagrant Host port 80 to port 5150 on your workstation.
web.vm.network "forwarded_port", guest: 80, host: 5150
# Set up a private IP in the Vagrant Environment. Important for Multi-Host Vagrant deployments.
web.vm.network "private_network", ip: "192.168.10.10"
# Define the provision file.
web.vm.provision :shell, :path => "web-bootstrap.sh"
# Define a folder to map for locally hosted RPM files.
# This is where we'll get the Oracle Instant Client files from.
web.vm.synced_folder "~/Vagrant/packages", "/opt/packages"
# Define a location for your local checkout of your webapp.
web.vm.synced_folder "~/Source/webapp", "/local/www/webapp"
end
endNext, create and edit the web-bootstrap.sh file. This is a file that is executed to provison a new Vagrant host.
#!/usr/bin/env bash
# ===================================================================
# bootstrap.sh
# DESCRIPTION =======================================================
# Bootstrap file for Logstash Vagrant host.
# Sets up Apache/PHP environment from scratch
# Safe to re-run provision of vagrant host after initial setup
#
# AUTHOR ============================================================
# gary-rogers@uiowa.edu
#
# NOTES
# ===================================================================
# ===================================================================
# Variables
# ===================================================================
VAGRANT_HOST=web
UPDATE_SYSTEM=0
TIME_ZONE_FILE=/usr/share/zoneinfo/US/Central
# ===================================================================
# Functions
# ===================================================================
start_if_stopped () {
if [ ! -z "$1" ]
then
service=$1
value=$(service ${service} status | grep -c started)
if [ $value -eq 0 ]
then
service ${service} start
fi
else
printf "[ERROR] no parameter passed to start_if_stopped.\n"
fi
}
# ===================================================================
# Pretify logging to screen
# ===================================================================
printLog() {
printf "[${VAGRANT_HOST}-bootstrap] $1\n";
}
installManPages() {
FILE=/usr/bin/man
if [ ! -f $FILE ]; then
printLog "Installing man pages";
yum --quiet -y install man;
fi
}
installApache() {
FILE=/usr/sbin/httpd
if [ ! -f $FILE ]; then
printLog "Installing httpd";
yum --quiet -y install httpd
chkconfig httpd on
printLog "Altering httpd config";
FILE=/etc/httpd/conf/httpd.conf
perl -pi -e 's/#ServerName www.example.com:80/ServerName localhost.localdomain:80/g' $FILE
start_if_stopped httpd
fi
}
installPerl() {
FILE=/usr/bin/perl
if [ ! -f $FILE ]; then
printLog "Installing Perl";
yum --quiet -y install perl
fi
}
installGcc() {
value=$(rpm -qa | grep -c ^gcc)
if [ $value -eq 0 ]; then
printLog "Installing gcc";
yum --quiet -y install gcc
fi
}
installKernelDevel() {
value=$(rpm -qa | grep -c ^kernel-devel)
if [ $value -eq 0 ]; then
printLog "Adding kernel-devel\n";
yum --quiet -y install kernel-devel
fi
}
installRPMKeys() {
value=$(rpm -qi gpg-pubkey | grep -c 'centos-6-key@centos.org')
if [ $value -eq 0 ]; then
printLog "Installing CentOS RPM Signing Key";
rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
fi
value=$(rpm -qi gpg-pubkey | grep -c 'epel@fedoraproject.org')
if [ $value -eq 0 ]; then
printLog "Installing Fedora RPM Signing Key";
rpm --import https://fedoraproject.org/static/0608B895.txt
fi
}
installVimEnhanced() {
value=$(rpm -qa vim-enhanced | wc -l)
if [ $value -eq 0 ]; then
printLog "Installing Vim Enhanced";
yum --quiet -y install vim-enhanced
fi
}
configureShell() {
# ===================================================================
# Set up annoying shell and vim configs for root.
# ===================================================================
value=$(grep -c "set -o vi" ~root/.bashrc)
if [ $value -eq 0 ]; then
echo 'set -o vi' >> ~root/.bashrc
fi
if [ ! -f ~root/.vimrc ]; then
touch ~root/.vimrc
fi
value=$(grep -c "set tabstop=2" ~root/.vimrc)
if [ $value -eq 0 ]; then
echo 'set tabstop=2' >> ~root/.vimrc
fi
# ===================================================================
# Setting up annoying shell and vim configs for vagrant.
# ===================================================================
value=$(grep -c "set -o vi" ~vagrant/.bashrc)
if [ $value -eq 0 ]; then
echo 'set -o vi' >> ~vagrant/.bashrc
fi
if [ ! -f ~vagrant/.vimrc ]; then
touch ~vagrant/.vimrc
chown vagrant.vagrant ~vagrant/.vimrc
fi
value=$(grep -c "set tabstop=2" ~vagrant/.vimrc)
if [ $value -eq 0 ]; then
echo 'set tabstop=2' >> ~vagrant/.vimrc
fi
}
installOracleInstantClient() {
# ===================================================================
# Install Oracle Support for PHP
# (http://www.oracle.com/technetwork/articles/dsl/technote-php-instant-084410.html)
# ===================================================================
if [ $(rpm -qa | grep -c 'oracle-instantclient') -eq 0 ]; then
printLog 'Installing Oracle Client'
yum --quiet -y install libaio
yum -y --nogpgcheck --quiet install /opt/packages/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
yum -y --nogpgcheck --quiet install /opt/packages/oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
cat > /etc/profile.d/oracle.sh <<EOM
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin
EOM
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin
mkdir -p /usr/lib/oracle/11.2/client64/network/admin -p
fi
}
installEPEL() {
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
printLog "Adding EPEL (Extra Packages for Enterprise Linux) repository to yum";
yum --quiet -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
fi
}
installGit() {
if [ ! -f /usr/bin/git ]; then
printLog "Adding Git version controll";
yum --quiet -y install git
fi
}
installPHP() {
if [ $(rpm -qa | grep -c 'php') -eq 0 ]; then
printLog 'Installing PHP'
installGcc;
installEPEL;
installGit;
yum --quiet -y install php
yum --quiet -y install php-pear
yum --quiet -y install php-devel
yum --quiet -y install php-xml
yum --quiet -y install php-mcrypt
yum --quiet -y install php-ldap
yum --quiet -y install php-soap
yum --quiet -y install php-mbstring
yum --quiet -y install php-gd
yum --quiet -y install php-bcmath
yum --quiet -y install php-mysql
yum --quiet -y install php-mssql
yum --quiet -y install php-oci8
printLog 'Installing OCI8 extension for PHP'
printf "instantclient,/usr/lib/oracle/11.2/client64/lib" | pecl install oci8
# bits to add oci to php.ini
echo 'extension=oci8.so' >> /etc/php.ini
perl -pi -e "s/;date.timezone.*/date.timezone = \"America\/Chicago\"/g" /etc/php.ini
fi
}
# ===================================================================
# Main Section
# ===================================================================
# ===================================================================
# Set Timezone
# ===================================================================
printLog "Setting Timzone for host";
mv /etc/localtime /etc/localtime.orig
ln -s $TIME_ZONE_FILE /etc/localtime
# ===================================================================
# Update environment via yum.
# ===================================================================
if [ $UPDATE_SYSTEM -eq 1 ]; then
printLog "Updating Environment\n";
yum --quiet -y update
# ===================================================================
# Install kernel bits.
# We need them to rebuild the VirtualBox Guest Additions
# ===================================================================
installKernelDevel;
# ===================================================================
# Install GCC.
# We need it to rebuild the VirtualBox Guest Additions
# ===================================================================
installGcc;
# ===================================================================
# Update VirtualBox Additions
# ===================================================================
/etc/init.d/vboxadd setup
fi
# ===================================================================
# Install software
# ===================================================================
installRPMKeys;
installManPages;
installPerl;
installApache;
installVimEnhanced;
installOracleInstantClient;
installPHP;
configureShell;
# ===================================================================
# Configure Environment
# ===================================================================
if [ $(grep -c 'webapp' /etc/httpd/conf/httpd.conf) -eq 0 ]; then
cat >> /etc/httpd/conf/httpd.conf <<EOM
<IfModule alias_module>
Alias /webapp /local/www/webapp
</IfModule>
<Directory "/local/www/webapp">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
EOM
service httpd restart
Once these files are created, issue a vagrant up command to pull down the Chef image and start the provisioning process. When the process is done you can SSH to your Vagrant host with vagrant ssh. The host will expose the WebServer on port 5150, so point your browser at http://localhost:5150.
You can mount directories from your local file system into the Vagrant host by modifying the Vagrantfile.