Saturday, March 27, 2010

How to install mcrypt in Linux (Cent OS) and recompile php?

SkyHi @ Saturday, March 27, 2010
I realized that I need to install mcrypt libraries in order to operate your php encryption. In addition to installing mcrypt, I will have to re-compile php in order to include the support for mcrypt. Initially, I struggled hard and finally made it work. Hence, I am sharing this information whatever I collected from internet and tested at my site.

This has worked for me numerous times without anything breaking or failing to operate. Obviously, I’m not responsible for whether you try this or not. A healthy and current backup is always a good idea before diving into the world of re-compiling software packages.


What is MCrypt?


MCrypt is a replacement for the old crypt() package and crypt(1) command, with extensions. It allows developers to use a wide range of encryption functions, without making drastic changes to their code. It allows users to encrypt files or data streams without having to be cryptographers. Above all, it allows you to have some really neat code on your machine.


Site Source: http://mcrypt.sourceforge.net/


Mcrypt is a powerful encryption library containing 22 block algorithms. Specifically, the following algorithms are supported:


Blowfish

Cast-256

DES

Enigma

Gost

LOKI97

Panama

RC2

RC4

RC4-iv

Rijndael-128

Rijndael-192

Rijndael-256

Safer-sk128

Safer-sk64 xtea

Saferplus

Serpent

Threeway

TripleDES

Twofish

Wake

Simple steps: follow these steps to compile Mcrypt and build the extension into your PHP distribution:


1. Download the Mcrypt library

2. gunzip mcrypt-x.x.x.tar.gz

3. tar -xvf mcrypt-x.x.x.tar

4. ./configure –disable-posix-threads

5. make

6. make install

7. cd to your PHP directory.

8. ./configure -with-mcrypt=[dir] [--other-configuration-directives]

9. make

10. make install

However, complex and complete steps are given below:


FYI – My machine stats are:

Cent OS 5.0

Apache 2.0

PHP 5.0


Ready? Here’s how you do it.


As root:


1) Install libmcrypt (2.5.x or better) http://mcrypt.hellug.gr/lib/index.html

-download and uncompress: tar z -xvf xxx.tar.gz

-cd into libmcrypt dir and type: ./configure

-when configure is done type: make

-when make is done type: make install


2) Add the library dir to /etc/ld.so.conf

-edit /etc/ld.so.conf and add: /usr/local/lib

-save file and then type the command: ldconfig


3) Update/Install Mhash (0.8.15 or newer) http://mhash.sourceforge.net/

-download and uncompress: tar z -xvf xxx.tar.gz

-cd into libmcrypt dir and type: ./configure

-when configure is done type: make

-when make is done type: make install

-when make install is done type: ldconfig


4) Install latest version of mcrypt (2.6.x or better) http://mcrypt.hellug.gr/mcrypt/index.html

-download and uncompress: tar z -xvf xxx.tar.gz

-cd into mcrypt dir and type: ./configure

-when configure is done type: make

-when make is done type: make install

-when make install is done type: ldconfig


5) Take note of your current php info

-create a file somewhere on your webserver called phpinfo.php

-edit the file and add the single line:

-make sure a normal user owns the file (not root – ie: chown user.user phpinfo.php)

-issue the command: chmod 755 phpinfo.php

-open the file in a web browser ie: www.yourserver.com/phpinfo.php

-copy the contents of “Configure Command” to a text file somewhere.

-It will look something like this (probably all on 1 line – leave it on 1 line):

‘./configure’ ‘–with-apxs=/usr/local/apache/bin/apxs’ ‘–with-xml’ ‘–enable-bcmath’

‘–enable-calendar’ ‘–enable-ftp’ ‘–enable-magic-quotes’ ‘–with-mysql’ ‘–with-pear’

‘–enable-sockets’ ‘–enable-track-vars’ ‘–enable-versioning’ ‘–with-zlib’

-edit the command to remove all the ‘ ‘ marks so it looks like this:

./configure –with-apxs=/usr/local/apache/bin/apxs –with-xml –enable-bcmath –enable-calendar

–enable-ftp –enable-magic-quotes –with-mysql –with-pear –enable-sockets –enable-track-vars

–enable-versioning –with-zlib

-at the end, add the following (assuming mcrypt is actually found in /usr/local/bin/mcrypt):

–with-mcrypt=/usr/local/bin/mcrypt

-save the text file.


6) Go into your php source directory: /home/cpapachebuild/buildapache/php-4.3.1/

-type: make clean

-type: rm config.cache (yes, remove that file)

-issue your command you saved in the text file. Something like this:

./configure –with-apxs=/usr/local/apache/bin/apxs –with-xml –enable-bcmath –enable-calendar

–enable-ftp –enable-magic-quotes –with-mysql –with-pear –enable-sockets –enable-track-vars

–enable-versioning –with-zlib –with-mcrypt=/usr/local/bin/mcrypt

-when that is done, type: make

-when that is done, type: make test (most tests will fail… about 50%-60% or so)

-when that is done, type make install


or


enable support for php. requires php-mcrypt and php-mhash packages:


yum install php-mcrypt*

yum install php-mhash*

7) Restart Apache

-issue the command: service httpd restart

-go back to your phpinfo.php page and check to see that –with-mcrypt now shows up in the “Configure Command”


Question:

I am trying to have mcrypt support in php. I installed libmcrypt and mhash using yum. They installed okay, but they weren’t added to phpinfo(), so they do not work.

Reading mcrypt info it says I need to recompile php.


Answer: It is working!


While I was requiring to recompile php according to the information on the mcrypt package to enable mcrypt support. I found an alternative.


There are 2 solutions to this problem:

A) This is the painless way to do it.

After a lot of research, as I couldn’t find answers on forums and other places. I found on sourceforge.net they released some rpm packages to integrate mcrypt and mhash with php.


First we need to install mcrypt and mhash as follows:


1) Install mcrypt & mhash


yum install mcrypt*

yum install mhash*

answer y to the question if matched your system (it should).


If it comes out


Setting up Install Process

Parsing package install arguments

No package mcrypt available.

Nothing to do

Manually install from the source after compiling as indicated from the start or the post.


2) enable support for php. requires php-mcrypt and php-mhash packages:


yum install php-mcrypt*

yum install php-mhash*

If you get an error saying packages not signed (unsigned packages), do the following:

edit /etc/yum.conf

change:

gpgcheck=1 to gpgcheck=0


attempt step 2 again. Once completed change back yum.conf


REFERENCE
http://www.notesbit.com/index.php/web-mysql/web-scripts/how-to-install-mcrypt-in-linux-cent-os-and-recompile-php/