CentOS6.x 源碼編譯搭建LAMP環境

源碼準備

由于本文搭建LAMP環境使用的是源碼安裝,在安裝過程中需要使用到許多的軟件安裝包,因此在安裝過程中應該首先把需要用到的安裝包進行下載,需要使用的軟件安裝包以及下載地址如下所示:

核心源碼文件

apache源碼包 httpd-2.4.9.tar.gz

http://httpd.apache.org/

mysql源碼包 mysql-5.7.4.tar.gz

http://dev.mysql.com/downloads/

php源碼包 php-5.5.14.tar.gz

http://cn2.php.net/downloads.php

可選源碼文件

Apache編譯依賴包

apr-1.5.1.tar.gz (Apache可移植運行庫的組件)

http://apr.apache.org/download.cgi

apr-util-1.5.3.tar.gz (Apache可移植運行庫的組件)

http://apr.apache.org/download.cgi

pcre-8.35.zip (支持正則表達式的函數庫)

http://sourceforge.net/projects/pcrehttpd-2.4.9.tar.gz

PHP編譯依賴包

libxml2-2.9.0.tar.gz (用于解析XML的跨平臺C語言庫)

ftp://xmlsoft.org/libxml2/

libmcrypt-2.5.8.tar.gz (用于實現加密算法的庫)

ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/

zlib-1.2.8.tar.gz (實現壓縮和解壓縮的庫)

http://www.zlib.net

freetype-2.5.3.tar.gz (開源免費的可移植的字體引擎)

http://download.savannah.gnu.org/releases/freetype/

libpng-1.6.12.tar.gz (用于讀寫png文件的庫)

ftp://ftp.simplesystems.org/pub/libpng/png/src/

jpegsrc.v9a.tar.gz (用于讀寫jpeg文件的庫)

http://www.ijg.org/files/

libgd-2.1.0.tar.gz (開源的圖像處理庫)

https://bitbucket.org/libgd/gd-libgd/downloads

MySQL編譯依賴包

bison-2.5.tar.gz(用于自動生成語法分析器程序)

http://www.gnu.org/software/bison/

ncurses-5.8.tar.gz(管理程序在字符終端顯示的函數庫)

http://www.gnu.org/software/ncurses

上述軟件可以使用源碼編譯安裝,也可以使用yum安裝,有些軟件可能系統自帶。其中和APR相關的內容和Autotools相關的內容會單獨寫文章進行介紹。另外有關運行庫和開發庫的區別也將另寫文章剖析。

環境準備

檢測并配置編譯環境

1.檢查系統中是否存在已安裝的LAMP環境,以Apache為例,輸入‘rpm -qa | grep -i httpd’,如果存在已安裝的Apache,則應使用‘rpm –e httpd-xxx -nodeps’卸載Apache(xxx為版本號),MySql與PHP操作與Apache相同。

2.LAMP環境搭建所需要的軟件都使用C語言開發的,所以安裝源代碼文件最少需要配置(configure)、編譯(make)、安裝(make install)三個步驟,在虛擬機上輸入‘gcc -v’命令,如果gcc已安裝,則如下圖所示:


圖片.png

否則應該首先安裝編譯工具,使用yum安裝,輸入命令行‘yum -y install make cmake gcc gcc-c++ ’。bison用于生成語法分析器程序,ncurses是字符終端下屏幕控制的基本庫,兩者被MySQL安裝所依賴。

防火墻和SELinux配置

編輯/etc/sysconfig/iptables文件,配置防火墻,添加如下兩條規則并保存退出

-A INPUT –m state –state NEW –m tcp –p tcp –dport 80 –j ACCEPT
-A INPUT –m state –state NEW –m tcp –p tcp –dport 3306 –j ACCEPT

由于SELINUX的開啟可能會對MySQL造成一定的影響,所以提前關閉SELINUX

編輯/etc/selinux/config文件,修改如下內容:

#SELINUX=enforcing      #將該行注釋
#SELINUXTYPE=targeted   #將該行注釋
SELINUX=disabled        #增加內容

完成上述操作后,重啟系統

開始編譯

編譯安裝Apache

編譯安裝apr和apr-util

cd /usr/local/src/lamp    
tar zxvf apr-1.5.1.tar.gz   # 解壓縮命令,tar zxvf apr-xxx.tar.gz(xxx為版本號)
cd apr-1.5.1            
./configure --prefix=/usr/local/apr-httpd  #配置apr安裝位置以及安裝目錄
make                   #編譯
make install           #安裝

tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
 make
 make install

編譯安裝pcre

 unzip –o pcre-8.35.zip
 cd pcre-8.35
./configure--prefix=/usr/local/pcre
 make
 make install

編譯安裝apache

tar zxvf httpd-2.4.9.tar.gz
cd httpd-2.4.9
./configure --prefix=/usr/local/apache2 \             #指定安裝目錄
--enable-mods-shared=all \                            #將所有模塊編譯為DSO模塊
--enable-deflate \                                    #壓縮發送給客戶端的內容
--enable-speling \                                    #自動糾正url拼寫中的錯誤
--enable-cache \                                      #基于uri鍵的內容動態緩沖
--enable-file-cache \                                 #提供文件描述符緩存支持,從而提高Apache性能
--enable-disk-cache \                                 #基于磁盤的緩沖管理器
--enable-mem-cache \                                  #基于內存的緩沖管理器  
--enable-so \                                         #讓apache可以支持DSO模式              
--enable-expires=shared \                             #配置expires信息和cache-control信息
--enable-rewrite=shared \                             #url重寫引擎模塊
--enable-static-support \                             #使用靜態連接編譯所有二進制支持程序
--sysconfdir=/etc/httpd \                             #指定配置文件路徑
--with-z=/usr/local/zlib/ \                           #指定zlib所在路徑
--with-apr=/usr/local/apr-httpd/ \                    #指定apr-httpd所在路徑
--with-apr-util=/usr/local/apr-util-httpd/ \          #指定apr-util-httpd所在路徑
--with-pcre=/usr/local/pcre/ \                        #指定pcre所在路徑    
--disable-userdir                                     #禁用用戶主目錄提供頁面訪問模塊      
make
make install

有關apache便宜安裝的configure詳細配置選項可以通過./configure --help命令來進行查看

修改配置文件

剛剛編譯安裝的apache服務器一般是沒有配置主機名的,這將在apache首次啟動的時候出現警告信息:

AH00558:httpd:Could not reliably determine the server's fully qualified domain
name, using::1.Set the ServerName' directive globally to suppress this message

修改apache配置文件httpd.conf,通常放在/usr/local/apache2/conf/下,配置ServerName項

ServerName localhost:80

進程控制方式

Apache啟動腳本通常放在/usr/local/apache2/bin/目錄下,其中httpd是可執行文件,apachectl是腳本文件,apachectl腳本會將apache運行時需要的一些參數和環境變量傳遞給httpd文件。因此官方推薦使用apchectl控制apache的啟動,停止和重啟。也可以配置apchectl啟動腳本中的配置項從而向httpd可執行文件中傳入指定的參數。

使用腳本控制

/usr/local/apache2/bin/apachectl -k start             #啟動命令
/usr/local/apache2/bin/apachectl -k restart           #強制重啟
/usr/local/apache2/bin/apachectl -k graceful          #平滑重啟
/usr/local/apache2/bin/apachectl -k stop              #強制關閉
/usr/local/apache2/bin/apachectl -l graceful-stop     #平滑關閉

使用信號控制

kill -TERM `cat /usr/local/apache2/logs/httpd.pid`    #強制關閉
kill -WINCH  `cat /usr/local/apache2/logs/httpd.pid`  #平滑關閉
kill -HUP `cat /usr/local/apache2/logs/httpd.pid`     #強制重啟
kill -USR1 `cat  /usr/local/apache2/logs/httpd.pid`   #平滑重啟

注意這里/usr/local/apache2/logs/httpd.pid文件保存的是apache主進程的進程id。有關軟重啟與硬重啟,軟關閉與硬關閉的工作模式在另行補充。

測試安裝結果

根據以上控制方式,我們啟動apache服務器,推薦使用apachectl腳本。

/usr/local/apache/bin/apachectl -k start

打開瀏覽器,在地址欄中輸入主機的IP地址,本次安裝為:http://192.168.78.2/如果瀏覽器中出現It works!則表明Apache服務器可以使用。

后續處理工作

每種服務器軟件都有必要制成開機時自動啟動,Apache服務器開機自動啟動,只要在“/etc/rc.d/rc.local”文件,加上Apache服務器的啟動命令即可。可以直接打開“/etc/rc.d/rc.local”文件,在最后一行寫入Apache啟動命令,也可以用echo命令追加進去,如下命令行示:

echo "/usr/local/apache243/bin/apachectl -k start" >> /etc/rc.d/rc.local

對于linux系統中的服務有時候會使用service命令或chkconfig命令進行管理,這兩個工具的操作目錄是/etc/init.d/下,因此為了將apache服務納入,我們將apache服務器的啟動腳本復制到該目錄下,并其設置開機自動啟動。

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd     #復制執行腳本
chmod +x /etc/init.d/httpd                               #賦予執行權限
chkconfig –add httpd                                     #設置開機自動啟動

編譯安裝MySQL

這里編譯mysql我們采用cmake,有關make和cmake的使用和區別我們另行介紹。

編譯安裝bison

tar zxvf bison-2.5.tar.gz  
cd bison-2.5  
./configure  
make  
make install  

編譯安裝ncurses

tar zxvf ncurses-5.8.tar.gz  
cd ncurses-5.8  
./configure  
make  
make install  

編譯安裝mysql

tar xvf mysql-5.6.14.tar.gz
cd mysql-5.6.14
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \                #指定安裝目錄
-DMYSQL_DATADIR=/usr/local/mysql/data \                  #指定數據存放目錄
-DSYSCONFDIR=/etc \                                      #指定配置文件路徑
-DWITH_MYISAM_STORAGE_ENGINE=1 \                         #指定MYISAM存儲引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                       #指定INNODB存儲引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \                         #指定MEMORY存儲引擎
-DWITH_READLINE=1 \                                      #提供行內編輯,歷史管理等功能。
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \            #指定mysql.sock文件位置
-DMYSQL_TCP_PORT=3306 \                                  #指定監聽端口
-DENABLED_LOCAL_INFILE=1 \                               #允許從本地導入數據
-DWITH_PARTITION_STORAGE_ENGINE=1 \                      #安裝支持數據庫分區
-DEXTRA_CHARSETS=all \                                   #使MySQL支持所有的擴展字符
-DDEFAULT_CHARSET=utf8 \                                 #指定字符集utf8
-DDEFAULT_COLLATION=utf8_general_ci                      #指定校對集utf8_general_ci
make
make install

修改配置文件

默認讀取的配置文件是/usr/local/mysql/下的my.cnf文件

[mysqld]
basedir = /usr/local/mysql                                   #mysql安裝主目錄
datadir = /usr/local/mysql/data                              #mysql存放數據的目錄
socket = /usr/local/mysql/mysql.sock                         #用于本地連接的sock文件
user = mysql                                                 #運行時的用戶身份
port = 3306                                                  #mysql綁定的端口

[mysqld_safe]
pid-file = /usr/local/mysql/data/node-2.pid                 #記錄mysql進程pid文件

配置mysql

創建系統用戶和用戶組

groupadd mysql
useradd -g mysql mysql

修改/usr/local/mysql目錄權限

chown -R mysql:mysql /usr/local/mysql

進入安裝目錄,執行初始化腳本,創建系統自帶的數據庫和表

cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

添加服務,拷貝服務腳本到init.d目錄,啟動并設置開機啟動

cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start 

在啟動MySQL服務時,會按照一定次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置

注意:在CentOS 6.4版操作系統的最小安裝完成后,在/etc目錄下會存在一個my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啟動。

此外在使用"yum update"更新系統后,需要檢查下/etc目錄下是否會多出一個my.cnf,如果多出,將它重命名成別的。否則,MySQL將使用這個配置文件啟動,可能造成無法正常啟動等問題。

添加環境變量

將mysql二進制文件添加到PATH中,要不不能直接調用mysql,修改/etc/profile文件,在文件末尾添加

PATH=/usr/local/mysql/bin:$PATH
export PATH

關閉文件,運行下面的命令,讓配置立即生效

source /etc/profile

在終端內直接輸入mysql進入mysql的環境,執行下面的命令修改root密碼

mysql -uroot  
mysql> SET PASSWORD = PASSWORD('123456');

或者使用mysql提供的mysql_admin二進制文件修改密碼

/usr/local/mysql/bin/mysqladmin -u root password 'new-password'

若要設置root用戶可以遠程訪問,執行

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%' IDENTIFIED BY 'password' WITH GRANT OPTION;

紅色的password為遠程訪問時,root用戶的密碼,可以和本地不同。

如果是生產環境,強烈推薦運行如下命令移除test數據庫和內建的匿名用戶

/usr/local/mysql/bin/mysql_secure_installation

你可以使用如下命令啟動mysql守護進程,使其進入后臺運行

/usr/local/mysql/bin/mysqld_safe &

你可以使用mysql-test目錄下的mysql-test-run.pl腳本測試mysql進程

perl /usrl/local/mysql-test/mysql-test-run.pl

輸入mysql -uroot -p回車,提示輸入密碼,輸入正確的密碼進入mysql的shell環境說明mysql安裝完成。

mysql.sock文件 是隨每一次 mysql server啟動生成的。其作用是mysql客戶端與服務器處于同一臺機器時,發起本地連接時采用unix domain socket方式進行連接。 對于本地連接這樣做的效率高于采用tcp/ip socket方式進行連接。而對于外部的遠程連接則只能采用tcp/ip socket方式建立連接。

有關tcp/ip socket連接方式和unix domain socket連接方式的比較另寫文章說明。

編譯安裝PHP

編譯安裝libxml2庫

libxml2是一個xml的c語言版的解析器,不僅支持c語言,還支持c++、php、Pascal、Ruby、Tcl等語言的綁定。

tar –zxvf libxml2-2.7.8.tar.gz
cd ./libxml2-2.7.8
./configure --prefix=/usr/local/libxml2/
make
make install

如果安裝成功以后,在/usr/local/libxml2/目錄下將生成bin,include,lib,share四個目錄。在后面安裝PHP5源代碼的配置時,會通過在configure命令的選項中加上"--with-libxml-dir=/usr/local/libxml2"選項,用于指定安裝libxml2庫文件的位置。

編譯安裝libmcrypt庫

tar –zxvf libmcrypt-2.5.8.tar.gz
cd ./libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt/
make
make install

如果安裝成功就會在/usr/local/libmcrypt/目錄下生成bin,include,lib,man,share五個目錄。然后在安裝PHP5源代碼包的配置時,就可以通過configure命令加上“--with-mcrypt-dir=/usr/local/libmcrypt”選項,指定這個libmcrypt庫文件的位置。

編譯安裝zlib庫

zlib是提供數據壓縮用的函式庫。

tar –zxvf zlib-1.2.5.tar.gz
cd ./zlib-1.2.5
./configure --prefix=/usr/local/zlib/
make
make install

如果安裝成功將會在/usr/local /zlib目錄下生成include,lib,share三個目錄。在安裝PHP5配置時,在configure命令的選項中加上“--with- zlib-dir=/usr/local/libmcrypt”選項,用于指定zlib庫文件位置。

編譯安裝libpng庫

tar –zxvf libpng-1.5.4.tar.gz
cd ./libpng-1.5.4
./configure --prefix=/usr/local/libpng/ --enable-shared 
make
make install

如果安裝成功將會在/usr/local/libpng目錄下生成bin,include,lib和share四個目錄。在安裝GD2庫配置時,通過在configure命令選項中加上“--with-png=/usr/local/libpng”選項,指定libpng庫文件的位置。

編譯安裝jpeg庫

tar –zxvf jpegsrc.v8c.tar.gz
cd ./jpeg-8c/
mkdir /usr/local/jpeg/
mkdir /usr/local/jpeg/bin/(創建存放命令的目錄)
mkdir /usr/local/jpeg/lib/(創建jpeg庫文件所在目錄)
mkdir /usr/local/jpeg/include/(創建存放頭文件目錄)
mkdir –p /usr/local/jpeg/man/man1(建立存放手冊的目錄) 
./configure --prefix=/usr/local/jpeg/ \
--enable-shared \
--enable-static(建立共享庫使用的GNU的libtool和靜態庫使用的GNU的libtool) 
make && make install

在安裝GD2庫配置時,可以在configure命令的選項中加上“--with-jpeg=/usr/local/jpeg8”選項,指定jpeg8庫文件的位置。安裝PHP時也要指定該庫文件的位置。

編譯安裝freetype庫

tar –zxvf freetype-2.4.6.tar.gz
cd ./freetype-2.4.6
./configure --prefix=/usr/local/freetype/ --enable-shared
make && make install

如果安裝成功將會在/usr/local/freetype目錄下存在bin,include,lib和share四個目錄。并在安裝GD2庫時,通過configure命令選項中加上“--with-freetype=/usr/local/freetype/”選項,指定freetype庫文件位置。

編譯安裝autoconf庫

tar –zxvf autoconf-2.68.tar.gz
cd ./autoconf-2.68
./configure
make && make install

唯一注意的地方是configure時,不用指定路徑。

編譯安裝gd庫

tar –zxvf gd-2.0.35.tar.gz
cd ./gd-2.0.35
./configure --prefix=/usr/local/gd \
--with-jpeg=/usr/local/jpeg/ \
--with-png=/usr/local/libpng/ \ 
--with-zlib=/usr/local/zlib/ \
--with-freetype=/usr/local/freetype/
make && make install

如果安裝成功會在/usr/local/gd/目錄下存在bin、include和lib這三個目錄。在安裝PHP5時,通過在configure命令選項中加上“--with-gd=/usr/local/gd”選項,指定GD庫文件的位置。

編譯安裝PHP

tar –zxvf php-5.4.11.tar.gz
cd./php-5.4.11
./configure --prefix=/usr/local/php                                   #指定PHP安裝目錄 
 --with-config-file-path=/usr/local/php/etc                           #指定配置文件目錄
 --with-apxs2=/usr/local/apache2/bin/apxs                             #指定apache所在目錄       
 --with-mysql=/usr/local/mysql                                        #指定mysql所在目錄 
 --with-mysqli=/usr/local/mysql/bin/mysql_config                      #指定mysqli擴展目錄
 --with-libxml-dir=/usr/local/libxml2                                 #指定libxml2安裝路徑
 --with-png-dir=/usr/local/libpng                                     #指定libpng安裝路徑
 --with-jpeg-dir=/usr/local/jpeg                                      #指定jpeg安裝路徑
 --with-freetype-dir=/usr/local/freetype                              #指定freetype安裝路徑
 --with-gd=/usr/local/gd                                              #指定gd庫安裝路徑
 --with-zlib-dir=/usr/local/zlib                                      #指定zlib安裝路徑
 --with-mcrypt=/usr/local/libmcrypt                                   #指定libmcrypt安裝路徑
 --with-xpm-dir=/usr/lib64                                            #指定libXpm安裝路徑
 --enable-soap                                                        #支持soap通信協議                 
 --enable-mbstring=all                                                #激活mbstring函數
 --enable-sockets                                                     #激活套接字支持

配置apache關聯php

編輯配置文件/usr/local/apache2/etc/httpd.conf,在LoadModule最后面添加以下內容

LoadModule php5_module     modules/libphp5.so

通常正確編譯安裝PHP后會自動增加,如果沒有,需要手工添加。

接下來要檢查apache目錄下生成的php動態連接庫文件,在目錄/usr/local/apache/modules,找到是否存在libphp5.so文件。若不存在則說明php安裝不正確。

在/etc/httpd/conf/httpd.conf文件中添加如下內容:

AddType application/x-compress.Z
AddType application/x-gzip .gz .tgz
Addtype application/x-httpd-php .php .phtml
Addtype application/x-httpd-php-source.phps
DirectoryIndex index.php index.html index.htm

配置結束后重啟Apache。

Apache服務器的根目錄默認為:/usr/local/apache2/htdocs/,此目錄下面存放資源:index.php添加內容為

<?php
    echo phpinfo();
?>

在客服端驗證,出現下圖說明環境搭建成功

圖片.png

至此,LAMP三個最重要的組件Apache,MySQL和PHP編譯完成,并進行了初步的配置工作。

后續工作

對于未在編譯安裝時指定的模塊,php提供了一個工具phpize來幫助我們編譯php模塊,我們只需使用此工具在php源碼包中找到并編譯所需的擴展,將生成的.so文件添加到配置文件的extension_dir目錄中,并在擴展中開啟該模塊即可。

對于未在編譯安裝時指定的模塊,apache提供了一個工具apxs來幫助我們在編譯其某一模塊時與其進行關聯。我們編譯的php就是基于此方法生成.so文件與apache關聯的。

接下來我們介紹使用PHP自帶的工具phpize編譯并安裝php擴展。我們以openssl和mysql兩套擴展為例。

phpize 命令是用來準備 PHP 擴展庫的編譯環境的。下面例子中,擴展庫的源程序位于源碼文件的ext目錄中

添加openssl擴展

cd /root/php-5.5.15/ext/openssl
/usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-openssl \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
Build complete.
Don't forget to run 'make test'.

編譯完成后將生成的openssl.so添加到php.ini中,重啟apache,重啟完成后即可調用openssl庫中的方法生成公鑰、私鑰對。

添加mysql擴展

cd /root/php-5.5.15/ext/mysql
/usr/local/webserver/php/bin/phpize 
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-php-config=/usr/local/webserver/php/bin/php-config \
 --with-mysql=/usr/local/webserver/mysql/
make && make install
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-
20121212/

mysql.so會自動添加extension_dir所指目錄中,修改php.ini添加 extension=mysql.so 重啟apache即可調用mysql擴展。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容