Compiling your own LAMP stack allows you to use the latest versions of Apache, MySQL, and PHP. Using the CentOS 6 package manager, you receive Apache 2.2, MySQL 5.1, and PHP 5.3. The package manager only installs security updates from the CentOS team.
As a system administrator, you know that keeping software updated is key. And with your webserver facing the internet, you need to make sure the web server software is updated to prevent vulnerabilities.
This article teaches you how to compile your own LAMP stack. Each of the commands will be explained using the following format.
# Commands will be listed here
An explanation of the commands will be stated here.
For this article, we will be using a preset mirror; but if you'd like, you may use another mirror from the Apache mirror page with a call from your VPS.
curl -q -s apache.org/dyn/closer.cgi > /tmp/closer sed -e 151b -e '$!d' /tmp/closer
The curl command sends an HTTP request to the URL, and retrieves its contents. We redirect the output to
/tmp/closer, and then the sed command cuts it down to something you can read.
You will see a mirror link contained within the
href="" section. Just replace any links specified in this article with that mirror.
Download the source to Apache 2.4.
cd /usr/src && wget http://apache.mirrors.ionfish.org/httpd/httpd-2.4.17.tar.gz && tar xvf httpd-2.4.17.tar.gz
The first part of this command will change our current directory to
/usr/src, then the wget section will download the source. The last part of this command unzips the source.
Since Apache requires APR and APR-util, do the following:
wget http://apache.mirrors.ionfish.org/apr/apr-1.5.2.tar.gz && tar xvf apr-1.5.2.tar.gz && mv apr-1.5.2 httpd-2.4.17/srclib/apr wget http://apache.mirrors.ionfish.org/apr/apr-util-1.5.4.tar.gz && tar xvf apr-util-1.5.4.tar.gz && mv apr-util-1.5.4 httpd-2.4.17/srclib/apr-util
These commands will download the sources for APR and APR-util, and unzip them. Then, we move the source into Apache's build directory so that Apache will build properly.
As we need a proper C compiler, we'll need to install one using the package manager.
yum groupinstall 'Development Tools' -y yum install gcc-c++ -y yum install pcre-devel -y yum install bison bison-devel -y yum install ncurses-devel -y yum install perl-devel -y
As I've mentioned above, we still need to obtain Apache's prerequisites, so we'll be installing them using the package manager.
Great job! Now, it's time to configure and build Apache.
cd httpd-2.4.17 && ./configure
cd httpd-2.4.17part changes our current working directory to
httpd-2.4.17/. When we run
./configure, we're configuring our system to build Apache.
Allow the system to configure the source for installation, it shouldn't take too long. Once complete, execute:
make && make install cp support/apachectl /usr/sbin chmod 755 /usr/sbin/apachectl
The make section of these commands will build the software. When we run
make install, we effectively install Apache onto our system. Now, we need to copy it to the secure bin directory (cp signifies copy). Finally, we'll give it permissions to execute with
Congratulations, you've successfully installed Apache 2.4!
Now, let's install MySQL, a database used by many web applications. Because MySQL already provides the latest version in the form of an RPM, it's easier to use their pre-built installation file then configuring it. We will use the official MySQL repository.
cd /usr/src && wget http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm && rpm -i mysql57-community-release-el6-7.noarch.rpm yum install mysql-community-server -y
The first command is where we download the RPM file to enable the MySQL repository on our system. Then,
rpm -iinstalls the RPM file. Finally, we'll install MySQL from the official MySQL repository.
PHP has some dependencies that we need to install, so let's get to that first.
yum install -y libxml2-devel libcurl-devel libmcrypt libmcrypt-devel
We're using the package manager once more - but this time, we're installing some components to allow PHP applications to run properly.
Download the source for PHP, which is done by executing the following commands:
wget http://docs.php.net/distributions/php-5.6.15.tar.gz && tar xvf php-5.6.15.tar.gz cd php-5.6.15 ./configure --with-pear=/usr/lib/pear --enable-libxml --with-pdo-mysql --with-mysqli --with-mysql --enable-mbstring --with-mcrypt --with-apxs2=/usr/local/apache2/bin/apxs --enable-maintainer-zts --with-curl=/lib make && make install
The first part,
wget, is where we download the source to PHP 5.6.15. Then, we change our working directory to
php-5.6.15. Finally, we configure PHP with the features required to run various web applications, such as e-commerce websites.
Do note, if you receive a message that contains "/path/to/perl", you'll need to edit the file
Change the first line to:
As we've built Apache from scratch, it does not include a pre-built service. We will need to setup the init script ourselves.
cd /usr/src && wget https://gist.githubusercontent.com/anonymous/62b0b788f86e7773e901/raw/6bcc88f9354f7139916272ac7a4eb998b1f26fdd/httpd-init mv httpd-init /etc/init.d/httpd chmod 755 /etc/init.d/httpd
The first part, where we
cd, changes our working directory to the directory where we build/compile software. Then, with
&&, we execute anything after it as well, which in this case, downloads the service file for Apache. Finally, we give permission for it to be executed with the
Done, and done!
Now, let's start Apache + MySQL + PHP:
service httpd start service mysqld start
With the service commands, we can manage the status of services. In this case, we've started the services
PHP is started with Apache, it doesn't get started through a service.
In this article, we covered how to setup a LAMP stack from scratch using updated versions of Apache/PHP/MySQL. Although it requires more administration to manage, this technique is useful when we want a newer stack than what the operating system vendor offers.