Thursday 30 May 2013

Build memcached và php5-memcache with LAMPP 32bit on RetHat 64bit

Memcached vs Memcache? What’s different?


Setup Memcached

Để cài được Memcached server (http://memcached.org), trước tiên ta cần phải cài thư viện libevent (http://libevent.org)
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xvfz libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure && make && make install

wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
tar xvfz memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure  --enable-64bit --with-libevent=/usr/local/include/event/
make && make install
Trong một vài trường hợp sẽ xảy ra lỗi không tìm thấy libevent library, cách fix:
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
Start service
memcached -d -u nobody -m 256 127.0.0.1 -p 11211
Lampp là bộ cài đặt được tích hợp sẵn httpd, php, openssl, phpmyadmin,… nhưng điểm yếu của lampp là chỉ hỗ trợ 32bit.
Vì vậy vấn đề xảy ra khi cài đặt extension memcache cho php trong bộ Lampp trên OS x86_64 chính là architecture của php (32bit) và memcache (64bit). Do đó chúng ta cần phải build module này từ source.
Việc compile này đã làm mình mất 2 ngày để debug và tìm ra nguyên nhân. Cuối cùng rút ra được kinh nghiệm như sau:
Xác định version module extension API và php API.
/opt/lampp/bin/phpize –v
Output sẽ giống tương tự như thế này:
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
Việc xác định version như trên sẽ giúp ta debug được lỗi sau khi compile memcache ở bước tiếp theo.
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar xvfz memcache-2.2.7.tgz
cd memcache-2.2.7
/opt/lampp/bin/phpize
Để có thể compile được 32bit trên 64bit chúng ta cần phải có thư viện 32bit
yum install  glibc-devel.i686
Tiếp tục cài đặt với flag chỉ định là 32bit.
CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure --enable-memcache --with-php-config=/opt/lampp/bin/php-config
make && make install
Như vậy là build đã thành công. Bây giờ ta chỉ cần load module này vào php là xong.
vi /opt/lamp/etc/php.ini
Thêm vào trong 2 dòng sau trong phần Dynamic Extensions
extension_dir="/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525"
extension=memcache.so
Restart lại httpd.
/opt/lampp/bin/httpd –k restart

Check lại trang phpinfo sẽ xuất hiện như sau: