THRIFT-2744:Add Centos 6.5 Vagrantfile to contrib

Client: Contrib
Patch: Randy Abernethy

Provides a Vagrantfile to setup Centos 6.5 for Apache Thrift
operations. Useful as is and as an example for Centos users
interested in configuring Apache Thrift on other Centos systems.
This commit is contained in:
Randy Abernethy 2014-11-19 18:09:58 -08:00
parent 6a4589aa4f
commit ba30239687
2 changed files with 335 additions and 0 deletions

View File

@ -0,0 +1,61 @@
Apache Thrift Centos 6.5 Vagrant Support
========================================
This directory is the Vagrant project directory for Apache Thrift running on Centos 6.5. The Vagrantfile in this directory configures a Vagrant provisioned VM launched under VirtualBox. To use this project you must have a recent version of VirtualBox and Vagrant installed (in that order). To run the VM, open a shell, clone Apache Thrift, change to this directory and enter the Vagrant up command.
$ git clone https://github.com/apache/thrift
$ cd thrift/contrib/vagrant/centos-6.5
$ vagrant up
This will download and launch the base box VM under VirtualBox and run the Apache Thrift provisioning script. This will take up to an hour depending on your hardware and network. Once complete you can login to the box with Vagrant ssh. The thrift source tree from your host os is mounted at /thrift.
$ vagrant ssh
[vagrant@thrift ~]$ cd /thrift
[vagrant@thrift thrift]$ compiler/cpp/thrift --version
Thrift version 1.0.0-dev
The provisioning script (inside the Vagrantfile) runs ./bootstrap.sh, ./configure, make and make check, but does not install thrift. To install thrift run "make install".
The Vagrant base box used here is a minimal Centos 6.5 VirtualBox with 2GB RAM and 2 CPUs. For more Vagrant information: https://www.vagrantup.com. A summary of the base box preperation follows:
root password: vagrant
#Create the vagrant user and give it sudo permission
adduser vagrant
passwd vagrant
visudo : vagrant ALL=(ALL) NOPASSWD: ALL
#Defaults requiretty
#Shut down the firewall and disable it
service iptables stop
chkconfig iptables off
#Setup the vagrant ssh public key to allow vagrant to ssh
mkdir /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
cd /home/vagrant/.ssh
wget --no-check-certificate 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' -O authorized_keys
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh
#Install EPEL (Extra Packages for Enterprise Linux) but protect the base
#repositories so that EPEL does not mask base packages
yum -y install yum-plugin-protectbase
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#Install perl, dynamic kernel modules, dev tools and kernel headers to support
#Virtual box additions
yum -y install perl
yum -y --enablerepo epel install dkms
yum -y groupinstall "Development Tools"
yum -y install kernel-devel
#Update everything and reboot
yum update
reboot
#Install the VirtualBox Guest additions (using VirtualBox iso)
mount /dev/cdrom /mnt
/mnt/VBoxLinuxAdditions.run
umount /mnt
See the Vagrantfile for further details

274
contrib/vagrant/centos-6.5/Vagrantfile vendored Normal file
View File

@ -0,0 +1,274 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
# APACHE THRIFT PROVISIONING SCRIPT
##############################################################
# This script is used to configure the base Centos 6.5
# Vagrant box for Apache Thrift compiler and lib builds.
# The base box is Centos 6.5 with no additional packages
# except those required to support VirtualBox Guest tools:
# perl, dkms, kernel-devel and the "Development Tools" group.
# The epel repo was also added along with the
# yum-plugin-protectbase package to prefer base repo packages.
# The script below provisions ALL languages. This will take
# time. You can greatly reduce the build time by commenting
# out the LIB provisioning for uneeded language libraries.
# Expect full provisioning to take 30 minutes on a fast
# machine with an excellent Internet connection (and another
# 15 minutes for the build).
#
# Machine accounts:
# - User: vagrant/vagrant
# - Admin: root/vagrant
# Vagrant public ssh key also installed
##############################################################
$build_and_test = <<SCRIPT
echo "Provisioning system to compile and test Apache Thrift."
date > /etc/vagrant.provision_begin
# Apache Thrift compiler dependencies
#####################################
#install an updated autoconf
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..
#install an updated automake
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..
#install an updated bison
wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..
# C++98 LIB Dependencies
#####################################
sudo yum -y install libevent-devel zlib-devel openssl-devel
#Install an updated Boost library
wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz
tar xvf boost_1_55_0.tar.gz
cd boost_1_55_0
./bootstrap.sh
sudo ./b2 install
# Java LIB Dependencies
#####################################
sudo yum install -y ant junit ant-nodeps ant-junit java-1.7.0-openjdk-devel
# Python LIB Dependencies
#####################################
sudo yum install -y python-devel python-setuptools python-twisted
# Ruby LIB Dependencies
#####################################
sudo yum install -y ruby ruby-devel rubygems
sudo gem install bundler rake
# Node.js LIB Dependencies
#####################################
sudo yum install -y nodejs nodejs-devel npm
# Perl LIB Dependencies
#####################################
sudo yum install -y perl-Bit-Vector perl-Class-Accessor perl-ExtUtils-MakeMaker perl-Test-Simple
# PHP LIB Dependencies
#####################################
sudo yum install -y php php-devel php-pear re2c
# GLibC LIB Dependencies
#####################################
sudo yum install -y glib2-devel
# Erlang LIB Dependencies
#####################################
sudo yum install -y erlang-kernel erlang-erts erlang-stdlib erlang-eunit erlang-rebar
# Lua LIB Dependencies
#####################################
sudo yum install -y lua-devel
# Go LIB Dependencies
#####################################
sudo yum install -y golang golang-pkg-linux-amd64
# C# LIB Dependencies
#####################################
sudo yum install -y mono-core mono-devel mono-web-devel mono-extras mingw32-binutils mingw32-runtime mingw32-nsis
# Haskell LIB Dependencies
#####################################
wget http://sherkin.justhub.org/el6/RPMS/x86_64/justhub-release-2.0-4.0.el6.x86_64.rpm
sudo rpm -ivh justhub-release-2.0-4.0.el6.x86_64.rpm
sudo yum -y install haskell
sudo cabal update
sudo cabal install cabal-install
# Build and Test Apache Thrift
#####################################
date > /etc/vagrant.provision_end
echo "Starting Apache Thrift build..."
cd /thrift
sh bootstrap.sh
# At the time of this file's creation Ruby, Python, Go and Lua fail
# their unit tests in this environment. To build and test any of these
# libraries uncomment the appropriate --without switches below.
sh configure --without-ruby --without-go --without-lua --without-python
make
echo "Starting Apache Thrift tests..."
make check
echo "Finished building and testing Apache Thrift."
echo 'Use "make install" to install the compiler and libraries.'
date > /etc/vagrant.make_end
SCRIPT
Vagrant.configure("2") do |config|
# Every Vagrant virtual environment requires a box to build off of.
##### Centos 6.5 minimal system with VirtualBox Guest Additions
##### Box maintained by ra@apache.org, see README.md for box config
config.vm.box = "RandyAbernethy/thrift-centos-6.5-64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
##### This box will never change
config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
# config.ssh.forward_agent = true
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
##### By convention the thrift source tree is mapped to /thrift
config.vm.synced_folder "../../../", "/thrift"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
##### The machine needs 2 CPUs and 2GB RAM for reasonable performance
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
end
# Enable provisioning with CFEngine. CFEngine Community packages are
# automatically installed. For example, configure the host as a
# policy server and optionally a policy file to run:
#
# config.vm.provision "cfengine" do |cf|
# cf.am_policy_hub = true
# # cf.run_file = "motd.cf"
# end
#
# You can also configure and bootstrap a client to an existing
# policy server:
#
# config.vm.provision "cfengine" do |cf|
# cf.policy_server_address = "10.0.2.15"
# end
# Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile.
# You will need to create the manifests directory and a manifest in
# the file default.pp in the manifests_path directory.
#
# config.vm.provision "puppet" do |puppet|
# puppet.manifests_path = "manifests"
# puppet.manifest_file = "default.pp"
# end
# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
# config.vm.provision "chef_solo" do |chef|
# chef.cookbooks_path = "../my-recipes/cookbooks"
# chef.roles_path = "../my-recipes/roles"
# chef.data_bags_path = "../my-recipes/data_bags"
# chef.add_recipe "mysql"
# chef.add_role "web"
#
# # You may also specify custom JSON attributes:
# chef.json = { mysql_password: "foo" }
# end
# Enable provisioning with chef server, specifying the chef server URL,
# and the path to the validation key (relative to this Vagrantfile).
#
# The Opscode Platform uses HTTPS. Substitute your organization for
# ORGNAME in the URL and validation key.
#
# If you have your own Chef Server, use the appropriate URL, which may be
# HTTP instead of HTTPS depending on your configuration. Also change the
# validation key to validation.pem.
#
# config.vm.provision "chef_client" do |chef|
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
# chef.validation_key_path = "ORGNAME-validator.pem"
# end
#
# If you're using the Opscode platform, your validator client is
# ORGNAME-validator, replacing ORGNAME with your organization name.
#
# If you have your own Chef Server, the default validation client name is
# chef-validator, unless you changed the configuration.
#
# chef.validation_client_name = "ORGNAME-validator"
##### Run the Apache Thrift provisioning script (declared above)
config.vm.provision :shell, :inline => $build_and_test
end