HipHop for PHP – instalacja w Ubuntu 11.04

Postanowiłem opisać instalację oraz sposób użycia tego kompilatora, gdyż nie znalazłem zbyt wielu materiałów w języku polskim na ten temat.

Na początek uaktualniamy istniejące oprogramowanie:

sudo apt-get update
sudo apt-get upgrade

Pobieramy niezbędne programy oraz biblioteki:

sudo apt-get install git-core cmake g++ libboost-dev libmysqlclient-dev libxml2-dev libmcrypt-dev libicu-dev openssl binutils-dev libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev autoconf libtool libcurl4-openssl-dev libboost-system-dev libboost-program-options-dev libboost-filesystem-dev wget memcached libreadline-dev libncurses-dev libmemcached-dev libicu-dev libbz2-dev libc-client2007e-dev php5-mcrypt php5-imagick

Teraz tworzymy na dysku katalog, do którego będziemy pobierali wszystkie potrzebne do instalacji pliki:

mkdir sources
cd sources

Wszystkie polecenia należy uruchamiać właśnie z tego katalogu. Skrypty będą automatycznie powracać do katalogu, z którego zostały wywołane.

Pobieramy źródła kompilatora (w chwili obecnej zajmują ok. 23 MB):

git clone git://github.com/facebook/hiphop-php.git
cd hiphop-php
export CMAKE_PREFIX_PATH=`/bin/pwd`/../
export HPHP_HOME=`/bin/pwd`
export HPHP_LIB=`/bin/pwd`/bin
cd ..

HipHop for PHP potrzebuje również bibliotek „libevent” oraz „curl”. Nie instalujemy ich jednak z oficjalnych repozytoriów, gdyż obie wymagają poprawek wprowadzonych przez programistów Facebooka.

Kompletne skrypty instalujące obie biblioteki poniżej:

wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
tar -xzvf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
cp ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff .
patch -p1 < libevent-1.4.14.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..
wget http://curl.haxx.se/download/curl-7.21.2.tar.gz
tar -xvzf curl-7.21.2.tar.gz
cd curl-7.21.2
cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .
patch -p1 < libcurl.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..

Teraz czas na kompilację kompilatora. Osobom które testują HipHopa na maszynie wirtualnej polecam uprzednie przydzielenie trochę większej ilość pamięci RAM niż zwykle. W przeciwnym wypadku system będzie korzystał z pliku wymiany co znacząco wydłuży cały proces.

HipHop był tworzony dla systemów 64-bitowych. W chwili obecnej wsparcie dla 32-takich systemów jest eksperymentalne i nie wszystko może poprawnie działać.

cd hiphop-php
cmake .
make

Po zakończonej kompilacji dodamy alias, aby nie trzeba było za każdym razem wpisywać pełnej ścieżki do programu:

alias hphp=`pwd`/src/hphp/hphp

Teraz czas na test. Przed rozpoczęciem pracy z kompilatorem należy zdefiniować trzy zmienne. Zrobiliśmy już to wcześniej, ale podam odpowiednie polecenia jeszcze raz:

export HPHP_HOME=`pwd`
export HPHP_LIB=`pwd`/bin
export CMAKE_PREFIX_PATH=`/bin/pwd`/../

W chwili obecnej struktura katalogów wygląda u mnie w taki sposób:

.
├── bin
├── curl-7.21.2
├── curl-7.21.2.tar.gz
├── hiphop-php
├── include
├── lib
├── libevent-1.4.14b-stable
├── libevent-1.4.14b-stable.tar.gz
├── php_files
└── share

8 directories, 2 files

Na dysku tworzymy katalog, a w nim przykładowy skryptem PHP, który wypisze słowa „Hello, World” na ekranie (zakładam, że nadal znajduje się w katalogu „hiphop-php”):

cd ..
mkdir php_files
cd php_files
echo "<?php echo 'Hello, World', \"\n\";" > test.php
php test.php

Najprostszym sposobem na uruchomienie kompilatora jest uruchomienie programu hphp:

hphp test.php

Drugi sposób uruchamiania kompilatora zachowuje skompilowane programy w katalogach tymczasowych co pozwala na późniejsze uruchomienie aplikacji oraz podgląd źródeł C++:

hphp test.php --keep-tempdir=1 --log=3

Na ekranie powinniśmy uzyskać podobny wydruk:

running hphp...
creating temporary directory /tmp/hphp_BZhZSg ...
parsing inputs...
parsing inputs took 0'00" (15 ms) (null)
pre-optimizing...
pre-optimizing took 0'00" (2 ms) (null)
inferring types...
inferring types took 0'00" (0 ms) (null)
post-optimizing...
post-optimizing took 0'00" (2 ms) (null)
creating CPP files...
creating CPP files took 0'00" (154 ms) (null)
compiling and linking CPP files...

compiling and linking CPP files took 3'44" (224574 ms) (null)
running executable /tmp/hphp_BZhZSg/program --file test.php...
Hello, World
all files saved in /tmp/hphp_BZhZSg ...

Jak widać skrypt skompilował oraz uruchomił się poprawnie. Ostatnia linia zawiera katalog, w którym znajduje się skompilowany program oraz źródła. Interesujący jest rozmiar pliku wykonywalnego. Plik zajmuje ok. 25 MB, choć jego jedynym zadaniem jest wypisanie tekstu na ekranie ;)

Teraz możemy uruchomić aplikację:

/tmp/hphp_BZhZSg/program

oraz podejrzeć źródła C++:

cat /tmp/hphp_BZhZSg/php/test.cpp

Program możemy uruchomić również jako serwer. Do tego celu służy polecenie:

sudo /tmp/hphp_BZhZSg/program -m server -p 8080

Powinniśmy uzyskać potwierdzenie uruchomienia serwera. Teraz wystarczy odwiedzić poniższy adres w przeglądarce, aby uruchomić aplikację:

http://localhost:8080/test.php

Tak uruchomionym serwerem możemy sterować przy pomocy wiersza poleceń. Pełną listę poleceń znajdziemy pod adresem (korzystam z polecenia curl, gdyż wydruk jest czytelniejszy w konsoli):

curl http://localhost:8088

Serwer zatrzymujemy poleceniem „stop”:

curl http://localhost:8088/stop

Po pełną listę poleceń oraz więcej przykładów użycia odsyłam w chwili obecnej na oficjalne Wiki.

Linki

https://github.com/facebook/hiphop-php/wiki/Building-and-Installing-on-Ubuntu-10.10
https://github.com/facebook/hiphop-php/wiki/Running-HipHop
http://php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/

Ten wpis został opublikowany w kategorii Linux, PHP. Dodaj zakładkę do bezpośredniego odnośnika.