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.
Step 1: Downloading/installing Apache 2.4
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
The
cd httpd-2.4.17
part changes our current working directory tohttpd-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 withchmod 755
.
Congratulations, you’ve successfully installed Apache 2.4!
Step 2: Downloading/installing MySQL
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 -i
installs the RPM file. Finally, we’ll install MySQL from the official MySQL repository.
Step 3: Downloading/installing PHP
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 tophp-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 /usr/local/apache2/bin/apxs
.
nano /usr/local/apache2/bin/apxs
Change the first line to:
#!/usr/bin/perl -w
Step 4: Starting/stopping the LAMP stack
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 thechmod
command.
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
httpd
andmysqld
.
PHP is started with Apache, it doesn’t get started through a service.
Conclusion
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.
Want to contribute?
You could earn up to $300 by adding new articles
Suggest an update
Request an article