Monday, June 9, 2014

My custom optimized build of PHP 5.5 & PHP 5.4

Everyone has their own requirements of what they need enabled or not, this is my setup that I've used over the last couple of years. I have had the option of both PHP 5.4 and 5.5, but my personal preference is to go with the latest 5.5 releases.

apt-get install autoconf libxml2-dev libcurl3-dev libmysqlclient-dev libbz2-dev libsnmp9-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libc-client-dev snmp

export PHP_VER=5.4.29
export PHP_PREFIX=php5.4

-- for php 5.3 - 5.4
wget "$PHP_VER.tar.gz" -O php-$PHP_VER.tar.gz
tar xfz "php-$PHP_VER.tar.gz"
cd "php-$PHP_VER"

export PHP_VER=5.5.13
export PHP_PREFIX=php5.5

cd /app/sources/
rm php* -fr

-- for php 5.5
wget "$PHP_VER.tar.bz2/from/" -O php-$PHP_VER.tar.bz2
tar xjf "php-$PHP_VER.tar.bz2"
cd "php-$PHP_VER"

### compile
touch ac*;
./buildconf --force
./configure \
--enable-fpm \
--enable-opcache \
--prefix=/app/${PHP_PREFIX} \
--disable-all \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-snmp \
--with-zlib \
--with-openssl \
--with-snmp \
--with-gd \
--with-freetype-dir=/usr \
--enable-gd-native-ttf \
--with-jpeg-dir=/usr/lib32 \
--with-png-dir=/usr/lib32 \
--with-gettext \
--enable-pdo \
--enable-inline-optimization \
--enable-mbstring \
--enable-filter \
--enable-session \
--enable-json \
--enable-hash \
--disable-debug \
--without-sqlite3 \
--enable-bcmath \
--enable-ctype \
--enable-libxml \
--enable-simplexml \
--enable-xml \
--enable-xmlwriter \
--enable-xmlreader \
--enable-sockets \
--enable-dom \
--with-mcrypt \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--enable-ftp \
--enable-zip \
--enable-xmlwriter \
--with-curl \
--enable-hash \
--with-iconv \
--enable-soap \

make -j4
make install


### PHP 5.4 -> 5.5
<< --enable-opcache ln -s /app/${PHP_PREFIX}/bin/php /usr/bin/php ln -s /app/${PHP_PREFIX}/bin/pear /usr/bin/pear ln -s /app/${PHP_PREFIX}/bin/pecl /usr/bin/pecl cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm update-rc.d -f php-fpm defaults

Most things should be self-explained, but note that if you go with PHP 5.4 that you should add --enable-opcache to the compile to use 'now' standard opcache of PHP.

Happy pasting!

Thursday, June 5, 2014

How to compile Percona XtraDB Cluster 5.6 on Ubuntu 14.04 Trusty Tahr

Getting a new server with the latest LTS started out like great news, but soon turned out to be a "couple" of hours wasted on google'n without success.

#percona on freenode is sadly still very very idle and of no help, and after reading different sources such as

I managed to get it all working and wanted to share the success.

Note: There might be more packages that need to be installed that I already had when installing another application, if you get an error along the way, leave a comment and I'll help out and update the blog as we go along.

apt-get install bzr openssl cmake libncurses5-dev bison xinetd socat build-essential flex bison automake autoconf bzr libtool libaio-dev zlib1g-dev libboost-dev

Next, we'll go on with the compile & install. Note if you are (for some reason) compiling on a 32bit machine use ./BUILD/compile-pentium else use ./BUILD/compile-pentium64 as the paste below does.
mkdir /app/sources -p
cd /app/sources
rm -fr percona
mkdir percona
cd percona

bzr checkout --lightweight lp:percona-xtradb-cluster/5.6
make install

# only needed for clusterchek (haproxy)
cp scripts/clustercheck /usr/bin/
cp scripts/mysqlchk /etc/xinetd.d/

# standard debian packages
cp build-ps/debian/additions/debian-start /etc/mysql/
cp build/debian/percona-xtradb-cluster-server-5.6.mysql.init /etc/init.d/mysql
chmod +x /etc/init.d/mysql

# make the debian scripts work with our compiled folders
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe
ln -s /usr/local/mysql/bin/mysqld /usr/sbin/mysqld
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin

groupadd mysql
useradd -r -g mysql mysql

chown -R mysql:mysql /usr/local/mysql

The symlinks are added to make the installment as close as possible to the default MySQL for Ubuntu. That way we don't need to update the standard scripts of init.d, xinet.d, clustercheck and others.

Last thing that we are missing is the galera module, you know - the one we point in our config file: wsrep_provider=/usr/lib/
So after compiling it from source as specified by a document I found on MariaDB, I found that it was very time consuming while the result was the same as using the galera-module from Perconas sources which was luckely in the repo.

(remember to add perconas repo before doing the next step

apt-get install percona-xtradb-cluster-galera-3.x

That's it! Now you have a fresh MySQL installment ready to be tested with your own my.cnf file.
Remember to restart xined if you will use tools such as HaProxy to monitor the clusterstatus.

Happy Pasting!