Skip to content

Instantly share code, notes, and snippets.

@tegansnyder
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tegansnyder/0cef28289203b24b6b51 to your computer and use it in GitHub Desktop.
Save tegansnyder/0cef28289203b24b6b51 to your computer and use it in GitHub Desktop.
Building HHVM on RHEL 7

Make sure you are sudo user before proceeding.

sudo -s
# rhel option rpms repos needed
subscription-manager repos p--enable=rhel-7-server-optional-rpms
# packages needed
yum install -y git svn cpp make autoconf automake libtool patch memcached \
bzip2 gcc-c++ cmake wget boost-devel mysql-devel pcre-devel gd-devel \
libxml2-devel expat-devel libicu-devel bzip2-devel openldap-devel \
libedit-devel libcap-devel binutils-devel pam-devel elfutils-libelf-devel \
libcurl-devel libmemcached-devel tbb-devel libdwarf-devel \
ImageMagick-devel libxslt-devel ocaml libevent-devel libyaml-devel \
readline-devel libzip-devel sqlite-devel gmp-devel
# Google Glog
cd /opt
wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz &&
tar xvzf glog-0.3.3.tar.gz && cd glog-0.3.3 &&
./configure && make && make install
# Oniguruma
cd /opt
wget http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.9.5.tar.gz &&
tar xvzf onig-5.9.5.tar.gz && cd onig-5.9.5 &&
./configure && make && make install
# Mcrypt
cd /opt
wget http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz &&
tar zxvf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8 &&
./configure && make && make install
# Jemalloc
cd /opt
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2 &&
tar jxvf jemalloc-3.6.0.tar.bz2 && cd jemalloc-3.6.0 &&
./configure && make && make install
# LZ4
cd /opt
wget https://github.com/Cyan4973/lz4/archive/r124.tar.gz &&
tar zxvf r124.tar.gz && cd lz4-r124 &&
make && make install PREFIX=/usr/local
# Getting HHVM source code and building
cd /opt
git clone git://github.com/facebook/hhvm.git --depth=1
export CMAKE_PREFIX_PATH=`pwd`
cd hhvm
git submodule update --init --recursive
cmake -DMYSQL_UNIX_SOCK_ADDR=/dev/null . #dont need mysql socket support
make -j3 # with N being numcores+1
make install

Install PHP and Nginx

# EPEL
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install epel-release-7-0.1.noarch.rpm

# Remi
wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install remi-release-7.rpm

# Webstatic
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# Install PHP and Nginx
yum --enablerepo=remi install nginx php55w-fpm php55w-common php55w-opcache

RHEL Service Daemon

create a startup script:

vi /usr/lib/systemd/system/hhvm.service

hhvm.service

[Unit]
Description=HipHop Virtual Machine

[Service]
ExecStart=/usr/local/bin/hhvm -m daemon -u nginx -c /etc/hhvm/server.ini
ExecStop=rm /var/run/hhvm/hhvm.pid
PIDFile=/var/run/hhvm/hhvm.pid

[Install]
WantedBy=multi-user.target

Create a configuration script:

vi /etc/hhvm/server.ini

server.ini

; HHVM server settings
hhvm.pid_file = /var/run/hhvm/hhvm.pid
hhvm.repo.central.path = /var/run/hhvm/.hhvm.hhbc

hhvm.server.type = fastcgi
hhvm.server.port = 9000
hhvm.server.user = nginx
hhvm.admin_server.port = 9001

hhvm.server.hhvm.source_root = /var/www/sites/test
hhvm.server.default_document = index.php

;;; please update 2 * number of CPUs
hhvm.server.thread_count = 4

hhvm.log.level = Warning
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.header = 1
hhvm.log.natives_stack_trace = 1
hhvm.log.always_log_unhandled_exceptions = 1
hhvm.log.use_log_file = 1
hhvm.log.file = /var/log/hhvm.log

; HHVM tuning
hhvm.mysql.typed_results = 0
hhvm.http.slow_query_threshold = 30000

Start HHVM

chown nginx:root /var/run/hhvm -R
chmod 755 /var/run/hhvm

systemctl start hhvm

Enable HHVM on boot

systemctl enable hhvm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment