-
Notifications
You must be signed in to change notification settings - Fork 3k
Building and installing HHVM on CentOS 6.6
Wael AlNahari edited this page Nov 16, 2015
·
95 revisions
The following has been tested a few times and is working great afaik, if issues, feel free to tag @Sydney_o9 in the issue
- Install GCC Version 5.2.0
- Install Dependencies
- Get HHVM
- Install CMake
- Install Boost
- Install Google Glog
- Install Libmemcached
- Install JEMalloc
- Install SQLite
- MySQL
- Install TBB
- Install Libdwarf
- Install OCaml
- Install Image Magick
- Install HipHop
Appendix A. List of Dependencies for GCC
Appendix B. List of Dependencies for HHVM
Appendix C. Install HHVM & Hack Man Pages
We need to install a newer version of GCC as the version which comes with CentOS is too old.
1 Install Tools & Packages necessary for building GCC
sudo yum install gcc-c++ libgcc glibc-devel libgcc.i686 glibc-devel.i686 binutils gzip bzip2 make tar perl zip unzip wget
```
Note: Here we also installs 32-bit ('i386') C library and headers (`libgcc.i686` `glibc-devel.i686`). If you don't need to compile programs in 32-bits on your system, just configure with `--disable-multilib`
<kbd>2</kbd> # Download GCC v5.2.0
cd /tmp
wget ftp://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.gz -O gcc-current.tar.gz
mkdir gcc-current
sudo tar -zxvf gcc-current.tar.gz -C /tmp/gcc-current --strip-components=1
#Download Support Libraries: GMP, MPFR, MPC, ISL, CLOOG
### gmp
cd /tmp/gcc-current && sudo wget https://gmplib.org/download/gmp-6.1.0/gmp-6.1.0.tar.bz2 -O gmp-current.tar.bz2 && \
sudo mkdir gmp && sudo tar -jxvf gmp-current.tar.bz2 -C /tmp/gcc-current/gmp --strip-components=1
### mpfr
cd /tmp/gcc-current && sudo wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.3.tar.bz2 -O mpfr-current.tar.bz2 && \
sudo mkdir mpfr && sudo tar -jxvf mpfr-current.tar.bz2 -C /tmp/gcc-current/mpfr --strip-components=1
### mpc
cd /tmp/gcc-current && sudo wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz -O mpc-current.tar.gz && \
sudo mkdir mpc && sudo tar -zxvf mpc-current.tar.gz -C /tmp/gcc-current/mpc --strip-components=1
### isl
cd /tmp/gcc-current && sudo wget ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/infrastructure/isl-0.15.tar.bz2 -O isl-current.tar.bz2 && \
sudo mkdir isl && sudo tar -jxvf isl-current.tar.bz2 -C /tmp/gcc-current/isl --strip-components=1
### cloog
cd /tmp/gcc-current && sudo wget http://bastoul.net/cloog/pages/download/cloog-0.18.4.tar.gz -O cloog-current.tar.gz && \
sudo mkdir cloog && sudo tar -zxvf cloog-current.tar.gz -C /tmp/gcc-current/cloog --strip-components=1
###4 Compile GCC
sudo mkdir /tmp/gcc-build && cd /tmp/gcc-build
sudo ../gcc-current/configure --enable-languages=c,c++,fortran --enable-multilib --prefix=/usr/local/gcc
sudo make
sudo make install
####5 Move Old GCC and Replace With New Version
yum remove -y gcc gcc-c++ cpp
sudo mv /usr/bin/g++ /usr/bin/g++_old
sudo mv /usr/bin/c++ /usr/bin/c++_old
sudo ln -s -f /usr/local/gcc/bin/gcc /usr/bin/gcc
sudo ln -s -f /usr/local/gcc/bin/g++ /usr/bin/g++
sudo ln -s -f /usr/local/gcc/bin/c++ /usr/bin/c++
sudo ln -s -f /usr/local/gcc/bin/cpp /usr/bin/cpp
sudo ln -s -f /usr/local/gcc/bin/gfortran /usr/bin/gfortran
sudo ln -s -f /usr/local/gcc/bin/gcov /usr/bin/gcov
sudo cp /usr/local/gcc/lib64/libstdc++.so.6.0.20 /usr/lib64/.
sudo mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
sudo ln -s -f /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6
sudo yum install -y -q git svn autoconf automake patch memcached cmake wget mysql-devel mysql-server 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 libxslt-devel libevent-devel libcurl-devel libmcrypt-devel tbb-devel ncurses-devel python-devel gperf gmp-devel
cd /tmp && \
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz -O libtool-current.tar.gz > /dev/null 2>&1
mkdir libtool-current && tar -zxvf libtool-current.tar.gz -C /tmp/libtool-current --strip-components=1 > /dev/null 2>&1 && \
cd libtool-current
./configure && make && sudo make install
Install Newer version of libcurl (Needed recent version for HHVM to compile properly - see here)
rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
yum install -y libcurl
cd /usr/local
sudo git clone git://github.com/facebook/hhvm.git --depth=1
cd hhvm
export CMAKE_PREFIX_PATH=/usr/local
# Get CMake
cd /tmp && \
wget http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz -O cmake-current.tar.gz
# Untar CMake
mkdir cmake-current && \
tar -zxvf cmake-current.tar.gz -C /tmp/cmake-current --strip-components=1 && \
cd cmake-current
# Install CMake
./configure --prefix=$CMAKE_PREFIX_PATH
sed -i '1 s/$/-ltinfo/' Source/CMakeFiles/cmake.dir/link.txt
make
sudo make install
# Export CMake Path for current session
export PATH=/usr/local/cmake/bin:$PATH
# (Optional) Add CMake Path for following sessions (using Bash in this case)
sed -i '/export PATH/i PATH=$PATH:/usr/local/cmake/bin' ~/.bash_profile
# Get Boost
cd /tmp && \
wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz/download -O boost-current.tar.gz
# Untar Boost
mkdir boost-current && tar -zxvf boost-current.tar.gz -C /tmp/boost-current --strip-components=1 && \
cd boost-current
# Install Boost
sudo ./bootstrap.sh --prefix=/usr/local/boost
sudo ./b2 --layout=system install
# Export Boost PATH for current session
export PATH=/usr/local/boost/include:$PATH
export PATH=/usr/local/boost/lib:$PATH
# (Optional) Add Boost Path for following sessions (using Bash in this case)
sed -i '/export PATH/i PATH=$PATH:/usr/local/boost/include' ~/.bash_profile
sed -i '/export PATH/i PATH=$PATH:/usr/local/boost/lib' ~/.bash_profile
# Get Google Glog
cd /tmp && \
wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz -O glog-current.tar.gz
# Untar Google Glog
mkdir glog-current && tar -zxvf glog-current.tar.gz -C /tmp/glog-current --strip-components=1 && \
cd glog-current
svn checkout http://google-glog.googlecode.com/svn/trunk/ google-glog && \
cd google-glog
# Install Google Glog
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
# Get Libmemcached
cd /tmp && \
wget http://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz -O libmemcached-current.tar.gz
# Untar Libmemcached
mkdir libmemcached-current && tar -zxvf libmemcached-current.tar.gz -C /tmp/libmemcached-current --strip-components=1 && \
cd libmemcached-current
# Install Libmemcached
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
# Get JEMalloc
cd /tmp && \
wget http://www.canonware.com/download/jemalloc/jemalloc-3.5.1.tar.bz2 -O jemalloc-current.tar.gz
# Untar JEMalloc
mkdir jemalloc-current && tar -xjvf jemalloc-current.tar.gz -C /tmp/jemalloc-current --strip-components=1 && \
cd jemalloc-current
# Install JEMalloc
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
# Get SQLite
cd /tmp && \
wget http://ftp.osuosl.org/pub/blfs/conglomeration/sqlite/sqlite-autoconf-3071502.tar.gz -O sqlite-current.tar.gz
# Untar SQLite
mkdir sqlite-current && tar -zxvf sqlite-current.tar.gz -C /tmp/sqlite-current --strip-components=1 && \
cd sqlite-current
# Install SQLite
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo make install
# Start MySQL
sudo service mysqld start
# Start MySQL automatically on system startup
sudo chkconfig mysqld on
# Get TBB
cd /tmp && \
wget http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20120613oss_src.tgz -O tbb-current.tar.gz
# Untar TBB
mkdir tbb-current && tar -zxvf tbb-current.tar.gz -C /tmp/tbb-current --strip-components=1 && \
cd tbb-current
# Install TBB
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.9.2_libc2.12_kernel2.6.32_release/libtbb.so.2 /usr/lib64/
sudo ln -s /usr/lib64/libtbb.so.2 /usr/lib64/libtbb.so
# Get Libdwarf
cd /tmp && \
wget http://www.prevanders.net/libdwarf-20140413.tar.gz -O libdwarf-current.tar.gz
# Untar Libdwarf
mkdir libdwarf-current && tar -zxvf libdwarf-current.tar.gz -C /tmp/libdwarf-current --strip-components=1 && \
cd libdwarf-current
# Install Libdwarf
./configure --prefix=$CMAKE_PREFIX_PATH
make
sudo cp libdwarf/libdwarf.a /usr/lib64/
sudo cp libdwarf/libdwarf.h /usr/include/
sudo cp libdwarf/dwarf.h /usr/include/
# Get Ocaml
cd /tmp && \
wget http://caml.inria.fr/pub/distrib/ocaml-4.01/ocaml-4.01.0.tar.gz -O ocaml-current.tar.gz
# Untar OCaml
mkdir ocaml-current && tar -zxvf ocaml-current.tar.gz -C /tmp/ocaml-current --strip-components=1 && \
cd ocaml-current
# Install OCaml (will install in /usr/local)
./configure
sudo make world.opt
sudo make install
sudo make clean
# Would be great to avoid that...
sudo ln -s /usr/local/bin/ocamlbuild /usr/bin/ocamlbuild
sudo ln -s /usr/local/bin/ocamlopt /usr/bin/ocamlopt
# Get [Image Magick](http://www.imagemagick.org/)
cd /tmp && \
wget http://www.imagemagick.org/download/ImageMagick.tar.gz -O ImageMagick-current.tar.gz
mkdir ImageMagick-current && tar -zxvf ImageMagick-current.tar.gz -C /tmp/ImageMagick-current --strip-components=1 > /dev/null 2>&1 && \
cd ImageMagick-current
sudo mkdir -p /usr/local/imageMagick
./configure
make
sudo make install
cd /usr/local/hhvm
# For list of submodules, cat /usr/local/hhvm/.gitmodules
# which leads to https://github.com/hhvm/hhvm-third-party
sudo git submodule update --init --recursive
sudo cmake .
sudo sed -i -e 's/$/..\/..\/..\/lib\/libmemcached.so/g' hphp/hhvm/CMakeFiles/hhvm.dir/link.txt
sudo make
sudo make install
# Export HHVM Path for current session
export PATH=/usr/local/hhvm/hphp/hhvm:$PATH
# Add HHVM Path for following sessions (using Bash in this case)
sed -i '/export PATH/i PATH=$PATH:/usr/local/hhvm/hphp/hhvm' ~/.bash_profile
To make sure HHVM is installed and correctly in the path, run from terminal:
$ which hhvm
/usr/local/hhvm/hphp/hhvm/hhvm
$ hhvm --version
HipHop VM 3.8.0-dev (rel)
Dependency | Version | Installation Type | Needed For | Links |
---|---|---|---|---|
gcc-c++ | /// | RPM | GCC | /// |
libgcc | /// | RPM | GCC | /// |
glibc-devel | /// | RPM | GCC | /// |
libgcc.i686 | /// | RPM | GCC | /// |
glibc-devel.i686 | /// | RPM | GCC | /// |
binutils | /// | RPM | GCC | /// |
gzip | /// | RPM | GCC | /// |
bzip2 | /// | RPM | GCC | /// |
make | /// | RPM | GCC | /// |
tar | /// | RPM | GCC | /// |
perl | /// | RPM | GCC | /// |
zip | /// | RPM | GCC | /// |
unzip | /// | RPM | GCC | /// |
GMP | 6.0.0 | From Source | GCC | GMP Doc |
MPFR | 3.1.2 | From Source | GCC | MPFR Doc |
MPC | 1.0.3 | From Source | GCC | MPC Doc |
ISL | 0.12.2 | From Source | GCC | ISL Doc |
CLOOG | 0.18.2 | From Source | GCC | CLOOG Doc |
Dependency | Version | Installation Type | Needed For | Links |
---|---|---|---|---|
GCC (GNU Compiler Collection) | 4.9.2 | From Source | HHVM | Main Doc / Manuals / Prerequisites |
git | /// | RPM | HHVM | /// |
svn | /// | RPM | HHVM | /// |
autoconf | /// | RPM | HHVM | /// |
automake | /// | RPM | HHVM | /// |
libtool | /// | RPM | HHVM | /// |
patch | /// | RPM | HHVM | /// |
memcached | /// | RPM | HHVM | /// |
cmake | /// | RPM | HHVM | /// |
wget | /// | RPM | HHVM | /// |
mysql-devel | /// | RPM | HHVM | /// |
mysql-server | /// | RPM | HHVM | /// |
pcre-devel | 8.20 | RPM | HHVM | /// |
gd-devel | /// | RPM | HHVM | /// |
libxml2-devel | /// | RPM | HHVM | /// |
expat-devel | /// | RPM | HHVM | /// |
libicu-devel | /// | RPM | HHVM | /// |
bzip2-devel | /// | RPM | HHVM | /// |
oniguruma-devel | /// | RPM | HHVM | /// |
openldap-devel | /// | RPM | HHVM | /// |
readline-devel | /// | RPM | HHVM | /// |
libc-client-devel | /// | RPM | HHVM | /// |
libcap-devel | /// | RPM | HHVM | /// |
binutils-devel | /// | RPM | HHVM | /// |
pam-devel | /// | RPM | HHVM | /// |
elfutils-libelf-devel | /// | RPM | HHVM | /// |
libxslt-devel | /// | RPM | HHVM | /// |
libevent-devel | /// | RPM | HHVM | /// |
libcurl-devel | /// | RPM | HHVM | /// |
libmcrypt-devel | /// | RPM | HHVM | /// |
tbb-devel | /// | RPM | HHVM | /// |
ncurses-devel | /// | RPM | HHVM | /// |
python-devel | /// | RPM | HHVM | /// |
gperf | /// | RPM | HHVM | /// |
CMake | 3.0.2 | From Source | HHVM | Main Doc |
Boost | 1.58.0 | From Source | HHVM | Main Doc |
Google Glog | 0.3.3 | From Source | HHVM | Main Doc |
Libmemcached | 1.0.18 | From Source | HHVM | Main Doc |
JEMalloc | 3.5.1 | From Source | HHVM | Main Doc |
SQLite | /// | From Source | HHVM | Main Doc |
TBB (Threading Building Blocks) | /// | From Source | HHVM | Main Doc |
Libdwarf | /// | From Source | HHVM | Main Doc |
OCaml | 4.01.0 | From Source | HHVM | Main Doc / INSTALL |
Image Magick | /// | From Source | HHVM | Main Doc |
cd /usr/local/hhvm/hphp/doc/man && sudo mkdir man1
sudo find . -maxdepth 1 -type f -exec mv {} man1/ \;
sed -i '/export MANPATH/i MANPATH=$MANPATH:/usr/local/hhvm/hphp/doc/man' ~/.bash_profile
cd /usr/local/hhvm/hphp/hack/man && sudo mkdir man1
sudo find . -maxdepth 1 -type f -exec mv {} man1/ \;
sed -i '/export MANPATH/i MANPATH=$MANPATH:/usr/local/hhvm/hphp/hack/man' ~/.bash_profile
Source your .bash_profile
(or whatever startup file your shell is using)
source ~/.bash_profile
You can now look up hhvm & other commands in your man pages normally
man hhvm
man hh-server