-
Notifications
You must be signed in to change notification settings - Fork 3k
Building and installing HHVM on CentOS 6.3
(This page is a work in progress. Instructions are for building the HipHop VM, or HHVM for CentOS 6.3 64bit. The instructions will also apply to Fedora 19.)
If your build environment does not have internet access, You could refer to this to build your hhvm in centos6.3 by scripts: https://github.com/jackywei/HOW-TO-BUILD-HHVM-WiKi/wiki/Build-HHVM-in-CentOS6.3-(w-o-internet-access-for-build-env.)
sudo yum install git svn cpp make autoconf automake libtool patch memcached gcc-c++ cmake wget boost-devel mysql-devel pcre-devel gd-devel libxml2-devel expat-devel libicu-devel bzip2-devel oniguruma-devel openldap-devel readline-devel libc-client-devel libcap-devel binutils-devel pam-devel elfutils-libelf-devel ImageMagick-devel
Although CentOS doesn't provide libmcrypt, we can borrow from another repo and get the files we need.
cd ~/dev
wget 'http://pkgs.repoforge.org/libmcrypt/libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm'
wget 'http://pkgs.repoforge.org/libmcrypt/libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm'
rpm -Uhv libmcrypt-*.rpm
The version of GCC which comes with CentOS is too old for the C++11 features used by HipHop. Either find another RPM from a nearby distro. Hip-Hop requires GCC min version 4.7
wget https://gmplib.org/download/gmp/gmp-5.1.3.tar.bz2
tar jxf gmp-5.1.3.tar.bz2 && cd gmp-5.1.3/
./configure --prefix=/usr/local/gmp
make && make install
cd ..
wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.bz2
tar jxf mpfr-3.1.2.tar.bz2 ;cd mpfr-3.1.2/
./configure --prefix=/usr/local/mpfr -with-gmp=/usr/local/gmp
make && make install
cd ..
wget http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
tar xzf mpc-1.0.1.tar.gz ;cd mpc-1.0.1
./configure --prefix=/usr/local/mpc -with-mpfr=/usr/local/mpfr -with-gmp=/usr/local/gmp
make &&make install
cd ..
wget http://ftp.gnu.org/gnu/gcc/gcc-4.7.3/gcc-4.7.3.tar.bz2
tar jxf gcc-4.7.3.tar.bz2 ;cd gcc-4.7.3
./configure --prefix=/usr/local/gcc -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ -with-gmp=/usr/local/gmp -with-mpfr=/usr/local/mpfr/ -with-mpc=/usr/local/mpc/
if
[ $? -eq 0 ];then
echo "this gcc configure is success"
else
echo "this gcc configure is failed"
fi
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/
make && make install
[ $? -eq 0 ] && echo install success
vi /etc/ld.so.conf.d/gcc-4.7.3.conf
Paste the following lines
/usr/local/gcc/lib/
/usr/local/mpc/lib/
/usr/local/gmp/lib/
/usr/local/mpfr/lib/
Reload Config
ldconfig
Move Old GCC and Replace With New Version
mv /usr/bin/gcc /usr/bin/gcc_old
mv /usr/bin/g++ /usr/bin/g++_old
mv /usr/bin/c++ /usr/bin/c++_old
ln -s -f /usr/local/gcc/bin/gcc /usr/bin/gcc
ln -s -f /usr/local/gcc/bin/g++ /usr/bin/g++
ln -s -f /usr/local/gcc/bin/c++ /usr/bin/c++
cp /usr/local/gcc/lib64/libstdc++.so.6.0.17 /usr/lib64/.
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln -s -f /usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6
you could run gcc --version to check if the current gcc version is gcc4.7.3, and also need to check g++, to see if the version is changed to g++4.7.3 too.
The version of CMake which comes with CentOS6.3 is too old for the latest HHVM which requires CMake version >= 2.8.7. Either find another RPM from a nearby distro, or try using @jackywei's instructions for installing CMake 2.8.10.2 from https://github.com/jackywei/HOW-TO-BUILD-HHVM-WiKi/wiki/Build-&-Install-CMake-2.8.10.2-in-CentOS6.3
(This does not apply to Fedora 19.)
git clone git://github.com/facebook/hhvm.git
cd hhvm
export CMAKE_PREFIX_PATH=/usr
#export CMAKE_PREFIX_PATH=`pwd`/../usr
export HPHP_HOME=`pwd`
cd ..
git clone git://github.com/libevent/libevent.git
cd libevent
git checkout release-1.4.14b-stable
cat ../hhvm/hphp/third_party/libevent-1.4.14.fb-changes.diff | patch -p1
./autogen.sh
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
cd ..
Make sure that your system time is correct, otherwise ./configure will fail.
git clone git://github.com/bagder/curl.git
cd curl
./buildconf
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
cd ..
Note: If you're building a version of cURL older than 7.28.0 (for whatever reason), you'll need to apply the patch in src/third_party to update it prior to the make step.
cat ../hhvm/hphp/third_party/libcurl-7.22.1.fb-changes.diff | patch -p1
svn checkout http://google-glog.googlecode.com/svn/trunk/ google-glog
cd google-glog
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
cd ..
There may be issues with 1.0.17 and your version of centos. If so, use 1.0.16
wget https://launchpad.net/libmemcached/1.0/1.0.17/+download/libmemcached-1.0.17.tar.gz
tar -xzvf libmemcached-1.0.17.tar.gz
cd libmemcached-1.0.17
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
cd ..
wget http://www.canonware.com/download/jemalloc/jemalloc-3.0.0.tar.bz2
tar xjvf jemalloc-3.0.0.tar.bz2
cd jemalloc-3.0.0
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
cd ..
As of this writing, libdwarf is not available with CentOS 6.3, and the version of libtbb is much too old. Both these packages also suffer the problem of not having install targets, so getting them on your system is a bit more cumbersome.
wget 'http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20120613oss_src.tgz'
tar -zxf tbb40_20120613oss_src.tgz
cd tbb40_20120613oss
make
sudo mkdir -p /usr/include/serial
sudo cp -a include/serial/* /usr/include/serial/
sudo mkdir -p /usr/include/tbb
sudo cp -a include/tbb/* /usr/include/tbb/
sudo cp build/linux_intel64_gcc_cc4.7.3_libc2.12_kernel2.6.32_release/libtbb.so.2 /usr/lib64/
sudo ln -s /usr/lib64/libtbb.so.2 /usr/lib64/libtbb.so
cd ..
The exact path to your generated libtbb.so.2 may be slightly different depending on your version of gcc, libc, and the kernel, but that should be close.
git clone git://libdwarf.git.sourceforge.net/gitroot/libdwarf/libdwarf
cd libdwarf/libdwarf
./configure
make
sudo cp libdwarf.a /usr/lib64/
sudo cp libdwarf.h /usr/include/
sudo cp dwarf.h /usr/include/
cd ../..
ldconfig
cd hhvm
git submodule init
git submodule update --recursive
export HPHP_HOME=`pwd`
cmake .
make
The hhvm binary can be found in hphp/hhvm/hhvm
.
If any errors occur, it may be required to remove the CMakeCache.txt
directory in the checkout.
If your failure was on the make
command, try to correct the error and run make
again, it should restart from the point it stops. If don't, try to remove as explained above.
If you met some issues on build, You could also try to upgrade your Boost to 1.50 version and GCC to 4.6.1 version: You could follow this instruction for build BOOST: https://github.com/jackywei/HOW-TO-BUILD-HHVM-WiKi/wiki/Build-&-install-Boost-1.50-in-CentOS-(CentOS5.2-&-6.3-are-both-verified)