LAMP COMPILATION FROM SOURCE CODE_CENTOS7 for beginners

1:-APACHE Installation

 APACHE Version – httpd-2.4.33

Follow the below steps to install apache in CentOS 7

  • Install EPEL Repository

In order to install EPEL repository execute following command:

sudo yum install epel-release -y

  • Install required tools for compilation

sudo yum install autoconf expat-devel libtool libnghttp2-devel pcre-devel -y

  • Download and unpack source code

Here are the links to the packages:

Apache httpd – https://github.com/apache/httpd/releases

APR – https://github.com/apache/apr/releases

APR-util https://github.com/apache/apr-util/releases

 

wget https://github.com/apache/httpd/archive/2.4.33.tar.gz

wget https://github.com/apache/apr/archive/1.6.3.tar.gz

wget https://github.com/apache/apr-util/archive/1.6.1.tar.gz

 

  • Unpack

tar -zxvf 2.4.33.tar.gz

tar -zxvf 1.6.3.tar.gz

tar -zxvf 1.6.1.tar.gz

 

  • APR and APR-Util

Apache requires APR library for compilation. You need to copy the source codes to correct directory:

cp -r apr-1.6.3 httpd-2.4.33/srclib/apr

cp -r apr-util-1.6.1 httpd-2.4.33/srclib/apr-util

It’s important to not to include version number in APR directories. If you just copy apr-1.6.3 without changing the name, it will give you a warning about missing apr directory.

 

  • Compile source code

 

 # cd httpd-2.4.33

# ./buildconf

# ./configure –enable-so

# make

  • Install HTTPD

sudo make install

  • Add Apache executables to PATH

If you try to type httpd -v in your command line, it will result in command not found. That’s because httpd is not on your $PATH. I’d like to have all executables from Apache available from everywhere. In order to achieve that, create file

sudo vi /etc/profile.d/httpd.sh

and paste there following contents:

pathmunge /usr/local/apache2/bin

Save the file, log out and log in from your current session to reload your profile. After that you should be able to use httpd -v command:)

  • Add Systemd entry

Starting, restarting, and enabling Apache on server start via systemctl command is very important thing. You need to create another file:

sudo vi /etc/systemd/system/httpd.service

and paste there following contents:

 

[Unit]

Description=The Apache HTTP Server

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/apache2/bin/apachectl -k start

ExecReload=/usr/local/apache2/bin/apachectl -k graceful

ExecStop=/usr/local/apache2/bin/apachectl -k graceful-stop

PIDFile=/usr/local/apache2/logs/httpd.pid

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

 

  • Save the file and reload the systemctl daemon

sudo systemctl daemon-reload

Now you can try to start your Apache httpd server with following command:

sudo systemctl start httpd

 

  • Create dedicated user and group for Apache

sudo groupadd www

sudo useradd httpd -g www –no-create-home –shell /sbin/nologin

  • Edit the httpd.conf file and update the user ad group.

 

User httpd

Group www

 

Now restart the server service httpd restart

So that’s it. You have fully working Apache httpd in latest version installed on your system .

This process might take some time, but you will have full control over httpd.

 

 

2:-MYSQL Installation

 

Compile and Install Mysql 5.7.18 Configuration and Details

 

  1. Main features of MySQL 5.7

(1) Native Support Systemd

(2) Better performance: for multi-core CPU, solid-state hard disk, lock has better optimization

(3) Better InnoDB storage engine

(4) More robust replication: replication brings a solution that data is not lost at all. Traditional financial customers can also use mysql database.

(5) Added sys Library: This will be the most frequently accessed library by DBA in the future

(6.) Better optimizer: The significance of optimizer code refactoring will bring tremendous improvements in this and future versions. Oracle is officially addressing the biggest problem before mysql, native JSON type support (JavaScript object Notation)

Note: JSON (JavaScript Object Notation) is a lightweight data exchange format. JSON uses language-independent text formats, but also uses habits similar to the C language family (including c, c++, c#, java, JavaScript, Perl, Python, etc.). These features make JSON an ideal data exchange language. Easy to read and write, but also easy to machine parse and generation (generally used to improve network transmission rate).

Data in key-value pairs

Data is separated by commas

Curly brackets save objects

Square brackets save data

 

Installation of MySQL 5.7.18

 

  1. System environment: centos7.2 x86_64

[root@kang ~]# uname -r

3.10.0-327.el7.x86_64

[root@kang ~]# cat  /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

Because CentOS 7.2 installs mariadb-libs by default, all must be uninstalled first, if not uninstalled, the installation will be wrong.

Also avoid unnecessary files that have been generated by installing mariadb-libs.

First check to see if mariadb-libs are installed

 

[root@kang ~]# rpm  -qa | grep  mariadb-libs

mariadb-libs-5.5.44-2.el7.centos.x86_64

Uninstall mariadb-libs

[root@kang ~]# rpm  -e  mariadb-libs –nodeps

 

  1. Install mysql-related dependency packages

The role of dependency packages:

  • CMake: Since the conventional configure compilation method has been abandoned since version 5.5 of mysql, a CMake compiler is needed to set the compilation parameters of mysql. Such as: installation directory, data storage directory, character encoding, sorting rules, etc.
  • Boost: Starting with mysql 5.7.5, boost libraries are necessary. c++ boost libraries are used in mysql source code, requiring boost 1.59.0 or more to be installed.
  • GCC : is a C language compiling tool under Linux. The source code of mysql is compiled entirely by C and c++. It is required to install GCC.
  • Bison: C/C++ Parser under Linux
  • ncurses: Character Terminal Processing Library

 

Installation file preparation:

Download cmake-3.5.2.tar.gz.

wget https://src.fedoraproject.org/lookaside/extras/cmake/cmake-3.5.2.tar.gz/701386a1b5ec95f8d1075ecf96383e02/cmake-3.5.2.tar.gz

Download ncurses-5.9.tar.gz.

wget https://src.fedoraproject.org/repo/pkgs/ncurses/ncurses-5.9.tar.gz/8cb9c412e5f2d96bc6f459aa8c6282a1/ncurses-5.9.tar.gz

Download bison-3.0.4.tar.gz.

wget https://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.gz

Download mysql-5.7.18.tar.gz

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.18.tar.gz

Download Boost_1_59_0.tar.gz

Website: https://www.boost.org/users/history/version_1_59_0.html

wget  http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

 

  • Install required tools for compilation

yum install gcc-c++

 

(1) Install cmake

[root@kang ~]# tar -zxvf  cmake-3.5.2.tar.gz

[root@kang ~]# cd cmake-3.5.2/

[root@kang cmake-3.5.2]# ./bootstrap

[root@kang cmake-3.5.2]# gmake && gmake install

cmake  -version                     #View cmake version information

 

(2) Install ncurses

[root@kang ~]# tar -zxvf ncurses-5.9.tar.gz

[root@kang ~]# cd ncurses-5.9/

[root@kang ncurses-5.9]# ./configure && make && make install

 

(3) Installation of bison

[root@kang ~]# tar -zxvf bison-3.0.4.tar.gz

[root@kang ~]# cd  bison-3.0.4/

[root@kang bison-3.0.4]# ./configure && make && make install

 

(4) Install boost

[root@kang ~]# tar zxf boost_1_59_0.tar.gz

[root@kang ~]# mv boost_1_59_0 /usr/local/boost

 

(5) Create mysql users and groups and related directories

[root@kang ~]# groupadd  -r mysql && useradd -r -g mysql -s /bin/false -M mysql

[root@kang ~]# mkdir /usr/local/mysql

[root@kang ~]# mkdir /usr/local/mysql/data

 

(6.) Compile and install mysql

Decompress the source code package:

[root@kang ~]# tar -zxvf mysql-5.7.18.tar.gz

[root@kang ~]# cd mysql-5.7.18/

[root@kang mysql-5.7.18]#

Execute the cmake command to configure before compilation:

[root@kang mysql-5.7.18]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_SYSTEMD=1 -DWITH_BOOST=/usr/local/boost

Start compiling and installing:

[root@kang mysql-5.7.18]# make && make install

 

Note: Detailed configuration parameters:

– Root directory of DCMAKE_INSTALL_PREFIX=/usr/local/mysql#mysql installation

– DMYSQL_DATADIR=/usr/local/mysql/data#mysql database file storage directory

– The directory where the DSYSCONFDIR=/etc#mysql configuration file is located

– DWITH_MYISAM_STORAGE_ENGINE=1 # Add MYISAM Engine Support

– DWITH_INNOBASE_STORAGE_ENGINE=1 # Add InnoDB Engine Support

– DWITH_ARCHIVE_STORAGE_ENGINE=1 # Add ARCHIVE Engine Support

– DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock# Specifies the location of mysql.sock

– DWITH_PARTITION_STORAGE_ENGINE=1# Installation Support Database Partition

– DEXTRA_CHARSETS=all # Make mysql support all extended characters

– DDEFAULT_CHARSET=utf8 # Sets the default character set of mysql to utf8

– DDEFAULT_COLLATION=utf8_general_ci Sets default character set proofreading rules

– DWITH-SYSTEMD=1 # You can use system D to control mysql services

– DWITH_BOOST=/usr/local/boost # points to the directory where the boost library is located

 

(7) Setting environmental variables

[root@kang ~]# echo “export PATH=$PATH:/usr/local/mysql/bin” >> /etc/profile

[root@kang ~]# source /etc/profile

 

(8) Set relevant permissions for mysql data directory files

[root@kang ~]# chown  -R  mysql:mysql  /usr/local/mysql/

[root@kang ~]# cd /usr/local/mysql/

[root@kang mysql]# chmod  755  data/

 

(9.) Initialize mysql database

[root@kang mysql]# cd /usr/local/mysql/

[root@kang mysql]# mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data

Note down the password

(10) Create and modify mysql master configuration file

[root@kang ~]# cd /usr/local/mysql/

[root@kang mysql]# vi /etc/my.cnf

 

    [client]

    socket=/usr/local/mysql/mysql.sock

    [mysqld]

    basedir=/usr/local/mysql

    datadir=/usr/local/mysql/data

    pid-file=/usr/local/mysql/data/mysqld.pid

    socket=/usr/local/mysql/mysql.sock

    log-error=/usr/local/mysql/data/mysqld.err

~

 

Note: Rescan system D to scan new or changed units

[root@kang mysql]# systemctl daemon-reload

 

(11.) Configure mysql autostart

[root@kang mysql]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service  /usr/lib/systemd/system

mysql database service failed to start!

 

[root@kang mysql]# systemctl  start mysqld

Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.

View the error log file:

Through the above error discovery, in mysqld.service, the default pid file is assigned to / var/run/mysqld / directory, but the directory is not established beforehand, so it is necessary to establish the directory manually and assign permissions to mysql users, so that there will be no misreporting!!

 

[root@kang ~]# mkdir /var/run/mysqld

[root@kang ~]# chown  -R  mysql:mysql /var/run/mysqld/

#systemctl  daemon-reload

Start the mysql service again:  #systemctl  start mysqld

Check the status of mysqld servic: #systemctl status mysqld

View the port number: # netstat -tulpn | grep mysqld

Access mysql database:

mysql -uroot -p YGyr8jr=?,Ta       #Get the temporary password and go to the data directory to view cat mysqld.err | grep password in this way

 

(12) Setting the password of database administrator user root

[root@kang ~]# mysqladmin  -uroot -p password ‘pwd123’

Enter password:

 

Here you are, mysql-5.7.18 database is installed at this point!! _____________

Hope to help you!!

Installation process is a bit long to wait patiently!!

 

3:-PHP Installation

PHP 5.4.16

  • Install PHP

(1) Obtain the PHP source code: php-5.4.16.tar.gz

wget http://museum.php.net/php5/php-5.4.16.tar.gz

 

(2) Decompress source files:

#tar -zvxf php-5.4.16.tar.gz

 

(3) Install libxm12 and libxml2-devel, otherwise it will appear when compiling the source code.Configure: error: xml2-config not found. Please check your libxml2 installation.”problem.

#yum install libxml2

 #yum install libxml2-devel

 

(4) Compile the source code:

#cd /usr/local/php-5.4.16

#./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs

#make

 

(5) Installation

#make install

 

  • Configure PHP

 

(1) Copy the php.ini-development file from the PHP source package (/usr/local/php-5.4.16) to /usr/local/lib/ and rename it to Php.ini.

#cp /usr/local/php-5.4.16/php.ini-development /usr/local/lib/php.ini

 

(2) Modify the Apache configuration file (gedit /usr/local/apache2/conf/httpd.conf) to support parsing of PHP. If httpd.conf does not have the following statements, add them to the LoadModule and AddType items respectively.

      # vi /usr/local/apache2/conf/httpd.conf

LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php

 

Add index.php after the DirectoryIndex index.html index.html.var line, which means:

DirectoryIndex index.html index.html.var index.php

Restart the Apache server:

#/usr/local/apache2/bin/apachectl restart

 

(3) Test PHP:

Create a new PHP file test.php in the Apache server’s file root directory (/usr/local/apache2/htdocs/) and enter the following:

# vi /usr/local/apache2/htdocs/test.php

 

<?php

phpinfo();

?>

 

Enter in the browser http://localhost/test.php If you see the image below, it means that PHP has been successfully installed.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.