Today a developer friend requested to trouble php mcrypt extension on his newly ordered VPS. Most of the time VPS by default comes up with very basic packages. For example, to build and add mcrypt php extension to existing php installation. You would required gcc, make, libtool, libmcrypt, libmcrypt-devel and may other packages.
Scenario :
Our client required mod_proxy module for their application. Apache is already installed on WHM/CPanel CentOS Linux Server that run few websites. We thought recompiling Apache is not a good option that will require a down time for maintenance window and a small error can put our contract at risk and lost for our client.
What is ModProxy?
Mod_proxy is an Apache module that implements a proxy for your Apache web server. It is divided into further modules for different purposes. For example mod_proxy_http, mod_proxy_connect, mod_proxy_ftp, mod_proxy_ajp, mod_proxy_balancer. In our case we will compile few of them that are required for our application.
Installation :
Check Apache current version :
/usr/local/apache/bin/httpd -v
Output : Server version: Apache/2.2.19 (Unix)
Server built: Jul 4 2011 06:24:27
Go to http://archive.apache.org/dist/httpd/ and pick your matched apache version. In our case it is Apache 2.2.19
cd /tmp/
wget http://archive.apache.org/dist/httpd/httpd-2.2.19.tar.bz2
tar -jxvf httpd-2.2.19.tar.bz2
cd httpd-2.2.19
./configure --enable-mods-shared="proxy proxy_http proxy_connect"
Note : You can add additional mod_proxy modules inside inverted commas.
In our case "proxy proxy_http proxy_connect"
cd modules/proxy/
/usr/local/apache/bin/apxs -i -a -o mod_proxy.so -c mod_proxy.c proxy_util.c
/usr/local/apache/bin/apxs -i -a -o mod_proxy_http.so -c mod_proxy_http.c proxy_util.c
/usr/local/apache/bin/apxs -i -a -o mod_proxy_connect.so -c mod_proxy_connect.c proxy_util.c
/etc/init.d/httpd restart
Installation is completed.
You can verify modules under Apache modules directory.
Overview : Installing a single php extension without recompiling PHP is never been a difficult job but most of the people doesn’t know it which leads to re-compile whole php.. In this article i will explain how can you add new php extension without recompiling whole php.
In our example, i will tell you how can you add iconv php extension without recompiling PHP.
A sample error for iconv php extension which was not installed Fatal error: Call to undefined function iconv() in /some/path/file.php line 12
iconv php extension necessary configuration & compilation :
View current php version php -v
Output : PHP 5.2.13 (cli) (built: Jun 23 2010 04:49:30)
Copyright (c) 1997-2010 The PHP Group
Downloading the same php version source code from php.net cd /tmp/
wget http://museum.php.net/php5/php-5.2.13.tar.bz2
tar -jxf php-5.2.13.tar.bz2
cd php-5.2.13/ext/iconv
Prepare php extension to compile it. phpize
Output : Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
aclocal
./configure
make
make install
You can can see iconv php extension is installed under php extensions directory: ls /usr/local/lib/php/extensions/no-debug-non-zts-20060613/iconv.so
Enable iconv PHP extension in php.ini echo "extension=iconv.so" >> /usr/local/lib/php.ini
Today I was migrating CPanel account to another server using a WHM/Cpanel Utility /scripts/pkgaccount. Package was successfully migrated to a new server and domain was live again on new server. But several functionality of the site was not working and the following error was appearing in apache error log constantly.
symbolic link not allowed or link target not accessible
There are two possibility of this error:
Your apache configuration doesn’t allow to Follow Sym Links.
Your SymLink owner doesn’t match (This usually happens on WHM/CPanel because CPanel uses unique user for unique domain)
Fix “symbolic link not allowed or link target not accessible” on WHM/CPanel Server :
Connect to your WHM/CPanel with root privileges from browser e.g http://example.com:2086
Go To
Main >> Service Configuration >> Apache Configuration >> Global Configuration
Check FollowSymLink
FollowSymLinks
Now, in our example your domain name is hackersgarage.com and your CPanel user is hacker. Simple change ownership of your symlink files to hacker
Jumple to document root of your domain cd /home/hacker/public_html/
Change ownership chown hacker:hacker *
If you are still having difficulties or unable to change ownership of files or its just not working. You can again Go To;
Main >> Service Configuration >> Apache Configuration >> Global Configuration
Uncheck SymLinksIfOwnerMatch
SymLinksIfOwnerMatch
Save it! It should rebuild Apache configuration and reload httpd daemon.
Fix “symbolic link not allowed or link target not accessible” on With Control Panel Server (CentOS/Ubuntu/RedHat):
vim /etc/httpd/conf/httpd.conf
Add
Options +FollowSymLinks -SymLinksIfOwnerMatch
Reload httpd /etc/init.d/httpd reload
on debian base distro; /etc/init.d/apache gracefull
If you don’t have access to httpd.conf, you can add this in your .htaccess of your document root. vim .htaccess
Options +FollowSymLinks -SymLinksIfOwnerMatch
Save it! Here you don’t need to reload httpd daemon.
Note : Using .htaccess method you need to make sure, your httpd.conf is configured/instructed to read .htaccess in your document root.
Few days back I was working for a client where I had to transfer one application to a new server. Application had memcache php extension need and the following error appeared in apache error log ;
PHP Fatal error: Class ‘Memcache’ not found in
If you are having difficulties in same situation you should stay away from recompiling your php using /scripts/easyapache – BAD IDEA.
Solution is simple, build memcache and include it in php.ini. Let see, how we do it.
Step 1 – Download memcache
mkdir repo
cd repo
wget http://pecl.php.net/get/memcache-3.0.6.tgz
tar -xvfz memcache-3.0.6.tgz
Step 2 – Compilation & installation
cd memcache-3.0.6 phpize
you should see something like this;
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
./configure
make
make install
Step 3 – Load in php.ini
Enable memcache in php.ini.
echo "extension=memcache.so" >> /usr/local/lib/php.ini service httpd restart