zoukankan      html  css  js  c++  java
  • lamp编译详解

    首先确认系统环境:centos6.4 min版本

    1、安装需要的开发环境
    yum groupinstall "Development Tools" "Server Platform Development" -y
    2、下载并安装依赖的包(由于编译的是httpd2.4的版本对apr有更高要求)
    3、开始编译安装依赖包
    同步时间:ntpdate time.nist.gov
    tar -xf apr-1.6.2.tar.gz
    cd apr-1.6.2
    ./configure --prefix=/usr/local/apr
    make && make install
     
    tar xf apr-util-1.6.0.tar.gz
    cd apr-util-1.6.0
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    make && make install
    如果在apr-util编译时报错:
    解决办法:yum install expat-devel
    4、编译httpd2.4
    tar xf httpd-2.4.25.tar.gz
    cd httpd-2.4.25
    由于系统上已经安装了rpm包的httpd所以存在用户apache
    [root@zabbix httpd-2.4.25]# id apache
    uid=48(apache) gid=48(apache) groups=48(apache)
    [root@zabbix httpd-2.4.25]# rpm -qa pcre*
    pcre-7.8-6.el6.x86_64
    安装依赖包pcre-devel
    yum -y install pcre-devel
    ./configure --prefix=/usr/local/apache2.4 --sysconf=/etc/httpd2.4 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
    make && make install
     
    将2.4启动的脚本添加到环境变量:
    [root@zabbix local]# vim /etc/profile.d/apache2.sh
    export PATH=/usr/local/apache2.4/bin:$PATH
     
    [root@zabbix local]# . /etc/profile.d/apache2.sh
    [root@zabbix local]# echo $PATH
    /usr/local/apache2.4/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
     
    启动httpd2.4服务:
    apachectl start
     
    编译安装mysql:
    1、创建相应的账户和组
    cat /etc/passwd|grep mysql 查看是否存在mysql账号
    groupadd -r mysql
    useradd -g mysql -r -s /sbin/nologin -M mysql 创建mysql组和mysql账号
    2、创建mysql数据目录,并授权
    mkdir /data/mydata -pv 创建mysql数据目录
    chown -R mysql:mysql /data/mydata 将数据目录的所属组所属用户修改
    由于编译的是mysql5.6的版本,所以需要使用cmake
    3、下载并安装cmake
    下载cmake:
    安装cmake:
    tar xf cmake-3.7.2.tar.gz
    cd cmake-3.7.2
    ./bootstrap
    gmake
    make install
    4、编译安装mysql
    下载mysql源文件:
    tar xf mysql-5.6.36.tar.gz
    cd mysql-5.6.36
    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
    -DMYSQL_DATADIR=/data/mydata
    -DSYSCONFDIR=/etc
    -DWITH_INNOBASE_STORAGE_ENGINE=1
    -DWITH_ARCHIVE_STORAGE_ENGINE=1
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1
    -DWITH_READLINE=1
    -DWITH_SSL=system
    -DWITH_ZLIB=system
    -DWITH_LIBWRAP=0
    -DWITH_UNIX_ADDR=/tmp/mysql.sock
    -DDEFAULT_CHARSET=utf8
    -DDEFAULT_COLLATION=utf8_general_ci
    make && make install
    5、初始化mysql
    chown -R mysql:mysql /usr/local/mysql 修改属组属主
    cd /usr/local/mysql/scripts 执行数据初始化
    ./mysql_install_db --user=mysql --datadir=/data/mydata 执行此步报错:
    [root@wadeson scripts]# ./mysql_install_db --user=mysql --datadir=/data/mydata
    FATAL ERROR: Could not find ./bin/my_print_defaults
     
    If you compiled from source, you need to run 'make install' to
    copy the software into the correct location ready for operation.
     
    If you are using a binary release, you must either be at the top
    level of the extracted archive, or pass the --basedir option
    pointing to that location.
    解决办法:
    解决办法:加上--basedir=/usr/local/mysql
    ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mydata
     
    cp support-files/my-default.cnf /etc/my.cnf 复制配置文件
    增加到配置文件:
    【mysqld】
    basedir = /usr/local/mysql
    datadir = /data/mydata
    socket = /tmp/mysql.sock 增加套接字文件
    cp support-files/mysql.server /etc/init.d/mysqld 复制启动脚本
    vim /etc/profile.d/mysqld.sh      
    export PATH=$PATH:/usr/local/mysql/bin
    . /etc/profile.d/mysqld.sh
    chkconfig --add mysqld
    chkconfig --list|grep mysqld
    [root@wadeson mysql]# service mysqld start
    Starting MySQL.Logging to '/data/mydata/wadeson.err'.
    . SUCCESS!
    [root@wadeson mysql]# netstat -tunlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4086/sshd
    tcp 0 0 :::22 :::* LISTEN 4086/sshd
    tcp 0 0 :::3306 :::* LISTEN 87380/mysqld
     
    编译安装php5.6版本:
    1、下载php源码包:http://php.net/releases/

    tar xf php-5.6.30.tar.bz2 

    cd php-5.6.30

    编译前yum安装必要的环境

    yum install -y libxml2 libxml2-devel bzip2-devel
    然后执行编译:
    ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-mcrypt --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-gd
    报错如下:
    configure: error: jpeglib.h not found.
    解决办法:
    yum -y install libjpeg-devel
    继续执行,依然报错:
    configure: error: png.h not found.
    解决办法:
    yum -y install libpng-devel
    再次执行,还是报错:
    configure: error: freetype-config not found
    解决办法:
    yum install freetype-devel
    依然执行./configure,报错:
    configure: error: mcrypt.h not found. Please reinstall libmcrypt.
    解决办法:
    tar xf libmcrypt-2.5.7.tar.gz
    cd libmcrypt-2.5.7
    ./configure
    make && make install
    最后再次执行编译参数,成功
    make && make install
     
    上述部分编译参数解释:
    --prefix=/usr/local/php:定义安装的路径
    --with-mysql=/usr/local/mysql :指定mysql安装目录
    --with-mysqli=/usr/local/mysql/bin/mysql_config
    --enable-xml :支持扩展标记语言
    --enable-sockets :支持sockets
    --with-mcrypt :提供加密支持
    --with-config-file-path=/etc :在/etc目录下生成配置文件/etc/php.ini
    --with-config-file-scan-dir=/etc/php.d :在/etc/php.d目录下有分配置文件
    --with-bz2 :支持bz2压缩
    --enable-maintainer-zts:支持线程的模块,如果使用prefork请不要加入该选项,可通过命令httpd -V显示当前加载的模块
    查看当前编译的httpd2.4支持的mpm:
    [root@wadeson ~]# /usr/local/apache2.4/bin/httpd -V
    AH00557: httpd: apr_sockaddr_info_get() failed for wadeson
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
    Server version: Apache/2.4.25 (Unix)
    Server built: Jul 7 2017 00:38:29
    Server's Module Magic Number: 20120211:67
    Server loaded: APR 1.6.2, APR-UTIL 1.6.0
    Compiled using: APR 1.6.2, APR-UTIL 1.6.0
    Architecture: 64-bit
    Server MPM: prefork 支持的prefork模块,于是php没有上述选项
    threaded: no
    forked: yes (variable process count)
    Server compiled with....
    -D APR_HAS_SENDFILE
    -D APR_HAS_MMAP
    -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
    -D APR_USE_SYSVSEM_SERIALIZE
    -D APR_USE_PTHREAD_SERIALIZE
    -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
    -D APR_HAS_OTHER_CHILD
    -D AP_HAVE_RELIABLE_PIPED_LOGS
    -D DYNAMIC_MODULE_LIMIT=256
    -D HTTPD_ROOT="/usr/local/apache2.4"
    -D SUEXEC_BIN="/usr/local/apache2.4/bin/suexec"
    -D DEFAULT_PIDLOG="logs/httpd.pid"
    -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
    -D DEFAULT_ERRORLOG="logs/error_log"
    -D AP_TYPES_CONFIG_FILE="/etc/httpd2.4/mime.types"
    -D SERVER_CONFIG_FILE="/etc/httpd2.4/httpd.conf"
     
    复制php.ini主配置文件:
    cp php.ini-production  /etc/php.ini
    然后将httpd与php进行连接,因为httpd是编译安装的2.4的版本:
    [root@wadeson httpd2.4]# pwd
    /etc/httpd2.4
    [root@wadeson httpd2.4]# ll
    total 124
    drwxr-xr-x. 2 root root 4096 Jul 7 00:40 extra
    -rw-r--r--. 1 root root 18991 Jul 7 16:22 httpd.conf
    -rw-r--r--. 1 root root 18759 Jul 7 15:46 httpd.conf.bak
    -rw-r--r--. 1 root root 13077 Jul 7 00:40 magic
    -rw-r--r--. 1 root root 60855 Jul 7 00:40 mime.types
    drwxr-xr-x. 3 root root 4096 Jul 7 00:40 original
    在http.conf配置文件中加入以下:
    DirectoryIndex index.html index.php
    AddType application/x-httpd-php-source .phps
    AddHandler php5-script .php
    AddType text/html .php
    并且确认php的模块已经被启用:(因为这种模式是和httpd模块的方式)
    LoadModule php5_module modules/libphp5.so (这是针对prefork模式)
    区分:
    <IfModule prefork.c>
    LoadModule php5_module modules/libphp5.so
    </IfModule>
    <IfModule worker.c>
    LoadModule php5_module modules/libphp5-zts.so
     
    然后在网站目录编写index.php测试页面:
    [root@wadeson htdocs]# cat index.php
    <?php
    phpinfo();
    ?>
    然后测试是否与数据库mysql连接:
    [root@wadeson htdocs]# vim index.php
    <?php
    phpinfo();
    $link = mysql_connect('127.0.0.1','root','');
    if ($link)
    echo "successful";
    else
    echo "failure";
    mysql_close()
    ?>
    /usr/local/php/bin/php -i:查看所有配置信息
     
    为php5.6增加xcache模块:
    tar xf xcache-3.0.1.tar.gz
    cd xcache-3.0.1
    /usr/local/php/bin/phpize
    ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
    make && make install 后执行报错
    报错如下:
    .0.1/xcache.c -fPIC -DPIC -o .libs/xcache.o
    /root/tools/xcache-3.0.1/xcache.c: In function ¡®zif_xcache_get_special_value¡¯:
    /root/tools/xcache-3.0.1/xcache.c:324: error: ¡®IS_CONSTANT_ARRAY¡¯ undeclared (first use in this function)
    /root/tools/xcache-3.0.1/xcache.c:324: error: (Each undeclared identifier is reported only once
    /root/tools/xcache-3.0.1/xcache.c:324: error: for each function it appears in.)
    make: *** [xcache.lo] Error 1
    上面的内容会报错,原因是php5.6  xcache3.0并不支持,所以官网下载最新版,所以还是多去官网或权威网站比较好
    于是下载新版本:
    tar xf xcache-3.2.0.tar.gz
    cd xcache-3.2.0
    /usr/local/php/bin/phpize
    ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
    make && make install
    出现下面所示:
    Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
    [root@wadeson xcache-3.2.0]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
    total 1264
    -rwxr-xr-x. 1 root root 589332 Jul 7 15:46 opcache.so
    -rwxr-xr-x. 1 root root 701379 Jul 7 16:48 xcache.so
     
    把主配置文件放到php的碎片配置小分队
    [root@wadeson xcache-3.2.0]# mkdir /etc/php.d
    [root@wadeson xcache-3.2.0]# cp xcache.ini /etc/php.d/
    修改/etc/php.d/xcache.ini文件中的指定地方
    extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xcache.so
    重启服务:
    [root@wadeson httpd2.4]# /usr/local/apache2.4/bin/apachectl restart

    于是整个lamp环境已经编译成功

    note:

    如果在编译php遇见了其他错误可以参考如下内容:

    http://www.poluoluo.com/jzxy/201505/364819.html

  • 相关阅读:
    Uva1595 对称轴
    Uva712 S树
    Uva673 平衡的括号
    leetcode102 二叉树的层次遍历
    Uva10191 复合词
    C++ multimap的用法
    Uva1103 古代象形符号
    UVa10763 交换学生
    C++ 优先级队列 priority_queue
    ios,zepto穿透解决方案
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7134053.html
Copyright © 2011-2022 走看看