LAMP純原始碼編譯安裝日誌

餘二五發表於2017-11-15

一.LAMP構架的安裝與經驗技巧(原始碼安裝好處。是便於管理,可以選定引數,可以使用新版本)

相關軟體列表:

# ls /soft/ | grep -E “*.gz|*.zip|*.xz|*.bz2”

    apr-1.4.5.tar.gz

    apr-util-1.3.12.tar.gz

    autoconf-2.61.tar.gz

    freetype-2.3.12.tar.gz

    httpd-2.4.18.tar.bz2

    jpegsrc.v6b.tar.gz

    libgd-2.1.1.tar.xz

    libmcrypt-2.5.8.tar.gz

    libpng-1.4.1.tar.gz

    libxml2-2.7.6.tar.gz

    mysql-5.6.17.tar.gz

    pcre-8.10.zip

    php-5.6.18.tar.gz

    zlib-1.2.5.tar.gz

參考解壓方式:  for n in *.tar.gz; do tar zxf $n;done;

其餘用:              tar xf filename

  1. apache 的安裝與使用經驗

            動態編譯與靜態編譯(每次啟動服務的時候都載入)

        (apache的擴充套件外掛是通過模組機制擴充套件的。apache支援PHP是通過編譯模組然後載入模組實現的。)

    (1) apache 需要的相關庫檔案 apr  apr-util  pcre(支援rewrite功能)

        cd apr-1.4.5

        ./configure –prefix=/usr/local/apr

        make && make instal

        cd apr-util-1.3.12

        ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr/bin/apr-1-config

        make && make install

        cd pcre-8.10

        ./configure –prefix=/usr/local/pcre 

        make&&make install

    下面是功能模組(使apache支援功能起到壯大apache的作用)

    (2) 安裝libxml2

        cd libxml2-2.7.6

        ./configure –prefix=/usr/local/libxml2

        make && make install

    (3)安裝libmcrypt 

        cd libmcrypt-2.5.8

        ./configure –prefix=/usr/local/libmcrypt

        make && make install

    (4)安裝zlib

        cd zlib-1.2.5

        ./configure 

        make && make install

    (5)安裝 libpng

         cd libpng-1.4.1

         ./configure –prefix=/usr/local/libpng

         make && make install

    (6)安裝jpeg6

        此安裝包無法自動建立目錄需要手動新增

        mkdir /usr/local/jpeg6

        mkdir -p /usr/local/jpeg6/{lib,bin,include}

        mkdir -p /usr/local/jpeg6/man/man1

        cd jpeg-6b

         ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static

         make && make install

     錯誤checking host system type… Invalid configuration `x86_64-unknown-linux-gnu`: machine `x86_64-unknown` not recognized

     或者出現make: ./libtool: Command not found

        一般原因是 所以來的libtool 庫檔案版本低或缺失。

        解決方法:安裝高版本的libtool 然後拷貝2個檔案

        cp /usr/share/libtool/config/config.sub .

        cp /usr/share/libtool/config/config.guess .

        繼續 make && make install

    (7)安裝freetype

         cd freetype-2.3.12

         ./configure –prefix=/usr/local/freetype

         make && make install

    (8)安裝autoconf

        cd autoconf-2.61

        ./configure

        make && make install

    (9)安裝GD庫

        cd libgd-2.1.1

        ./configure

        –prefix=/usr/local/gd2/

        –enable-m4_pattern_allow

        –with-zlib=/usr/local/zlib/

        –with-jpeg=/usr/local/jpeg6/

        –with-png=/usr/local/libpng/

        –with-freetype=/usr/local/freetype/

        make && make install

    主題(一)apache原始碼編譯安裝

        cd httpd-2.4.18

     ./configure –prefix=/usr/local/apache2

    –enable-mods-shared=all

    –enable-so

    –enable-proxy-ajp

    –enable-rewrite

    –with-apr=/usr/local/apr

    –with-apr-util=/usr/local/apr-util

    –with-pcre=/usr/local/pcre

        make && make install

        # /usr/local/apache2/bin/apachectl start

        # curl 127.0.0.1

        <html><body><h1>It works!</h1></body></html>

    apache下的的主要目錄;

    bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules

        (1)bin 是一些命令的存放位置。如httpd 提供apache服務管理如啟動關閉。

        使用:./bin/httpd -k {start |restart|stop}

        apxs是編譯模組相關的命令(PHP模組)

        apachectl是呼叫httpd服務的指令碼。

        例如檢視靜態編譯的模組

        # ./bin/apachectl -l

        Compiled in modules:

          core.c

          mod_so.c

          http_core.c

          worker.c

        # ./bin/httpd -l  (進一步證實http和apachectl關係)

            Compiled in modules:

              core.c

              mod_so.c

              http_core.c

              worker.c)

        (2) htdocs 這個目錄是存放程式設計師編寫的程式的目錄

        (3) modules 放置apache編譯模組的目錄。 .so(模組的字尾名)

        (4) logs 日誌檔案目錄 包含 pid 檔案(包含apache父程式)

        *****ps -ef | grep httpd****

        檢視子程式如果出現不連續可能是apache出現問題。出現重新啟動。

        (5)conf 包含apache的所有配置檔案

        (6)cgi-bin 提供一些線上表格的功能。如果不需要需要把這個目錄下檔案清空(減小安全隱患)

    apache 解析PHP語句http.conf裡面的主要引數

        DirectoryIndex index.html index.php

        LoadModule php5_module        modules/libphp5.so

        AddType application/x-httpd-php .php

  2. 主題(二)mysql原始碼編譯安裝

        cd mysql-5.6.17

    cmake

    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

    -DMYSQL_DATADIR=/usr/local/mysql/data

    -DSYSCONFDIR=/etc

    -DWITH_MYISAM_STORAGE_ENGINE=1

    -DWITH_INNOBASE_STORAGE_ENGINE=1

    -DWITH_MEMORY_STORAGE_ENGINE=1

    -DWITH_READLINE=1

    -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock

    -DMYSQL_TCP_PORT=3306

    -DENABLED_LOCAL_INFILE=1

    -DWITH_PARTITION_STORAGE_ENGINE=1

    -DEXTRA_CHARSETS=all

    -DDEFAULT_CHARSET=utf8

    -DDEFAULT_COLLATION=utf8_general_ci


        Mysql編譯安裝屬性值解析

        #cmake

        -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

        #指定安裝路徑

        -DMYSQL_DATADIR=/usr/local/mysql/data

        #指定mysql資料(庫)檔案的存放路徑

        -DSYSCONFDIR=/etc

        #配置檔案

        -DWITH_MYISAM_STORAGE_ENGINE=1

        #引擎支援myisam

        -DWITH_INNOBASE_STORAGE_ENGINE=1

        #引擎支援 innodb

        -DWITH_MEMORY_STORAGE_ENGINE=1

        #引擎支援 memory-storage

        -DWITH_READLINE=1


        -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock

        #指定mysql的sock檔案路徑

        -DMYSQL_TCP_PORT=3306

        #指定mysql埠號

        -DENABLED_LOCAL_INFILE=1

        -DWITH_PARTITION_STORAGE_ENGINE=1

        -DEXTRA_CHARSETS=all

        -DDEFAULT_CHARSET=utf8

        -DDEFAULT_COLLATION=utf8_general_ci

        #指定字符集

        錯誤:

        CMake Error at cmake/readline.cmake:85 (MESSAGE):

          Curses library not found.  Please install appropriate package,

         remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev,

          on Redhat and derivates it is ncurses-devel.

        解決辦法: yum install ncurses-devel -y 

                mv  mv CMakeCache.txt /tmp

            然後重新 cmake(上面的指令如果沒有錯誤提示)

            make && make install

        檢視是否有mysql使用者和組沒有建立。

             useradd  mysql -s /sbin/nologin -M

        修改mysql許可權:

            chown -R mysql.mysql /usr/local/mysql

        進入mysql安裝目錄下,執行初始化配置指令碼,建立系統自帶的資料庫和表

        # ./scripts/mysql_install_db –basedir=/usr/local/mysql/ –datadir=/usr/local/mysql/data –user=mysql

        啟動mysql服務:# ./support-files/mysql.server start

     錯誤提示:

        Starting MySQL…. ERROR! The server quit without updating PID file (/usr/local/mysql/data/swallow.pid)

     可能出現的原因和解決方法:

        (1).如果是初次安裝。可能是初始化沒有成功。在執行初始化命令的時候。提示裡面包含2個OK (代表成功。這種情況重新初始化

        (2)可能原來系統安裝過mysql 。可以用ps -ef | grep msyql 檢視。然後結束程式:pkill mysql

        (3)data 目錄許可權可能不對。 chmod  755 data

        (4)檢視屬主或屬組 一般 在 建立mysql使用者 的後面就會 chown -R mysql:mysql /usr/local/mysql (這個可能性不大)

        啟動mysql程式:

            ./bin/mysql

        可以產看mysql狀態:

        mysql> status

        ————–

        ./bin/mysql  Ver 14.14 Distrib 5.6.17, for Linux (x86_64) using  EditLine wrapper


        Connection id:          1

        Current database:

        Current user:           root@localhost

        SSL:                    Not in use

        Current pager:          stdout

        Using outfile:          “

        Using delimiter:        ;

        Server version:         5.6.17 Source distribution

        Protocol version:       10

        Connection:             Localhost via UNIX socket

        Server characterset:    utf8

        Db     characterset:    utf8

        Client characterset:    utf8

        Conn.  characterset:    utf8

        UNIX socket:            /var/lib/mysql/mysql.sock

        Uptime:                 7 min 7 sec

        Threads: 1  Questions: 5  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.011

        ————–

    主題(三) PHP原始碼編譯安裝

        cd php-5.6.18

    ./configure

    –prefix=/usr/local/php

    –with-config-file-path=/usr/local/php/etc

    –with-apxs2=/usr/local/apache2/bin/apxs

    –with-mysql=/usr/local/mysql/

    –with-libxml-dir=/usr/local/libxml2/

    –with-png-dir=/usr/local/libpng/

    –with-jpeg-dir=/usr/local/jpeg6/

    –with-freetype-dir=/usr/local/freetype/

    –with-gd=/usr/local/gd2/

    –with-zlib-dir=/usr/local/zlib/

    –with-mcrypt=/usr/local/libmcrypt/

    –with-mysqli=/usr/local/mysql/bin/mysql_config

    –with-xpm-dir=/usr/lib64/

    –enable-soap 

    –enable-mbstring=all

    –enable-sockets

        引數詳解;

            ./configure

            –prefix=/usr/local/php

            #安裝路徑

            –with-config-file-path=/usr/local/php/etc

            #PHP的配置檔案路徑

            –with-apxs2=/usr/local/apache2/bin/apxs

            #與apache連線需要的支援模組(工具)

                    –with-mysql=/usr/local/mysql/

                    –with-libxml-dir=/usr/local/libxml2/

                    –with-png-dir=/usr/local/libpng/

                    –with-jpeg-dir=/usr/local/jpeg6/

                    –with-freetype-dir=/usr/local/freetype/

                    –with-gd=/usr/local/gd2/

                    –with-zlib-dir=/usr/local/zlib/

                    –with-mcrypt=/usr/local/libmcrypt/

                    # PHP需要的所有前面安裝的連線模組

            –with-mysqli=/usr/local/mysql/bin/mysql_config

            #指定PHP程式去連線mysql的方式

            #PHP5.3。3以後開發了mysqlnd。是PHP新的連線mysql的驅動配置方式:

                –with-mysql=mysqlnd

                –with-mysqli=mysqlnd

                –with-pdo-mysql=mysqlnd

            如果想把這3種都載入可以把

            –with-mysqli=/usr/local/mysql/bin/mysql_config

            這句換成上面3句。

            #這裡需要注意的是;mysql的連線mysql方式有3種。分別是:mysql,mysqli和pdo

            #這裡需要關注2個;mysqli 和pdo。(他們是主流的支援高版本的)

            –with-xpm-dir=/usr/lib64/

            –enable-soap 

            –enable-mbstring=all

            –enable-sockets

        錯誤:configure: error: xpm.h not found.

        解決方法:yum install libXpm-devel -y

        make && make install

     PHP動態載入模組的方法:如果在靜態編譯的時候那個模組沒有編譯進去可以動態載入。

        舉例:檢視原始碼下的模組目錄;

            cd /soft/php-5.6.18/ext/

            下面的模組都可以通過動態載入,編譯進去。以ftp 為例;

            cd ftp

            /usr/local/php/bin/phpize (藉助這個命令生成所需的configure 等一系列的安裝檔案)

            ./configure –with-php-config=/usr/local/php/bin/php-config

            make && make install

            至此,就把ftp這個模組編譯安裝完成了。然後,需要去載入檔案(修改php.ini)

            cd /usr/local/php/etc/

            vim php.ini (初次安裝沒有這個檔案可以去/soft/php-5.6.18/原始碼目錄去拷貝 

            php.ini-development php.ini-production 一般這兩個檔案運維常用第二個)

            查詢到 extension 相關的註釋地方

            新增一下兩句:(模組在PHP程式下的位置{一般編譯動態模組後會提示的}和模組的名稱)

            extension_dir = “/usr/local/php/lib/php/extensions/no-debug-zts-20131226/”

            extension = ftp.so

            如果要載入模組需要重新啟動apache伺服器。

             /usr/local/apache2/bin/httpd -k restart

            檢視PHP模組載入成功與否;可以用php 命令顯示看是否有新增

            /usr/local/php/bin/php -m

        測試lamp是否搭建成功:

        在apach2的htdocs目錄下新建.php檔案

         vim ./htdocs/info.php

         <?php

         phpinfo();

         ?>

         瀏覽器測試:http://192.168.1.140/info.php

    結果顯示空白。

         解決思路:檢視 /usr/local/apache2/modules/ 是否含有 libphp5.so這個模組。

         (這個模組是apache負責PHP解析的)

         修改配置檔案:http.conf

            ServerName loacalhost:80

        (仿照這行新增AddType application/x-gzip .gz .tgz)

         AddType application/x-httpd-php .php

        載入pdo-mysql 的錯誤:make 錯誤

        /soft/php-5.6.18/ext/pdo_mysql/php_pdo_mysql_int.h:27:34: error: ext/mysqlnd/mysqlnd.h: No such file or directory

        解決方法:cp -a /soft/php-5.6.18/ext/pdo_mysql /usr/local/php/include/php/ext/

        這裡的思路是 :make 是在安裝目錄下操作。不是在原始碼目錄操作。需要把依賴的檔案放置到安裝路徑下。方便應用。

        但是:遺憾的是安裝完成後,不可以載入。用常規方法:

            extension_dir = “/usr/local/php/lib/php/extensions/no-debug-zts-20131226/”

            extension = pdo_mysql.so

        重新啟動了好多httpd 也沒載入成功。用 bin/php -m 一直沒有檢視到。我可以確定修改php.ini檔案生效,把那個ftp模組註釋掉後

        就看不到那個模組出現。所以,只好重新編譯的。

        將編譯的–with-mysqli=/usr/local/mysql/bin/mysql_config 語句換成了:

                –with-mysql=mysqlnd

                –with-mysqli=mysqlnd

                –with-pdo-mysql=mysqlnd

        這幾句。支援3種方式連線mysql。這裡mysqlnd是PHP5.3以上的預設連線mysql的引擎

        PHP不在支援擴充套件mysql(mysqli) 編譯的時候可以是:–with-pdo-mysql=mysqlnd

        附上PHP連線的3個指令碼

        cat mysqli.php mysql-pdo.php mysql.php 

            <?php 

            $conn = mysqli_connect(`localhost`, `root`, “, `mysql`);

            if(!$conn){ 

            die(“資料庫連線錯誤” . mysqli_connect_error());

            }else{ 

            echo”資料庫連線成功”; 

            }

            ?>

            <?php

            try{

            $pdo=new pdo(“mysql:host=127.0.0.1;dbname=mysql”,”root”,””); 

            }catch(PDDException $e){ 

            echo “資料庫連線錯誤”; 

            }

            echo “恭喜!資料庫連線成功”;

            ?>

            <?php 

            $conn = @ mysql_connect(“localhost”, “root”, “”) or die(“資料庫連線錯誤”);

            mysql_select_db(“bbs”, $conn);

            mysql_query(“set names `utf8`”);

            echo “資料庫連線成功”; 

            ?>

    檢視 phpinfo() 資訊來檢視PHP 詳細情況。

        上傳檔案關注如下幾個引數:

        post_max_size = 128M

        upload_max_filesize = 128M

        #這兩個設定一樣即可,可以更大但要注意超時

        max_execution_time = 30

        max_input_time = 600

        memory_limit = 32M



    my.cnf 的執行順序:

        1. /etc 

        2.”$basedir/my.cnf” (需要把/etc/my.cnf 更改)

    php.ini生效路徑問題

    PHP將按照如下順序依次查詢該檔案:

    1.當前工作目錄;

    2.環境變數PHPRC指明的路徑;

    3.編譯時指定的路徑。

本文轉自 swallow_zys  51CTO部落格,原文連結:http://blog.51cto.com/12042068/1895793,如需轉載請自行聯絡原作者


相關文章