zoukankan      html  css  js  c++  java
  • 编译搭建Lamp服务器

    Lamp 是目前倍受欢迎的一种网站服务器。其主要有linux+apache+mysql+php 组成。由于其组成成员都是开源免费的产品,所以被作为中小型网站服务器的选择。
    LZ之前在学校学linux的时候搭建过一次PHP。那时只知道Lamp是由什么组成的,却不知道其中的联系,最后在搭建lamp的时候,用rpm的方式安装,几个模块之间相互独立,根本就达不到服务器的效果,后来尝试用yun搭建,成功了,却不明其原理。
    这篇文章,是LZ理清思路,用源码编译安装Lamp之后的笔记。

    首先,理清思路。Lamp的组成,其实也是我们网站开发初期所需要考虑的四大要素:系统、环境、数据库、开发语言。而在搭建这的个环境的过程中,有两点是需要提到的。一、在apache 刚安装的时候,它是不支持PHP的。Apache 要支持PHP需要加载PHP指定的模块,这个模块,是不会默认加载的,所以如果源码编译的话,后期是要手动加载模块的。二、PHP在安装的时候,不仅要安装PHP本身,还要安装相应的库文件,否则很多功能会得不到实现或者制约。同时,PHP在安装的过程中,需要产生支持apache 的模块文件,同时还有mysql。所以PHP的安装,是整个Lamp安装的最重要的一个环节。

    因为是源码编译,所以有些环境需要体检准备。Linux下的源码,大都是用c编写的,所以在编译的时候,需要查看是否安装了gcc编译环境。
    Linux 下 控制台输入 gcc -v 如果出现以下结果,就说明已经安装了gcc 了

       使用内建 specs。
       COLLECT_GCC=gcc
       COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.7/lto-wrapper
       目标:i686-linux-gnu
       配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc --enable-targets=all --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
       线程模型:posix
    gcc 版本 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) 
    

     
    大部分情况下linux会默认带有gcc的,如果没有,需要自行下载安装

    接下来,需要卸载已经安装的低版本的PHP,Mysql,Apache,以免在安装过程中出现冲突。

    Redhat 版本的linux 可以如下卸载:
    查询是否安装 :rpm -qa|grep -i httpd ·「 mysql,php」
    停止服务:service httpd 「 mysql,php」 stop 
    卸载软件包:rpm -e 查询到的软件包名 --nodep

    Debian 版本的linux 可以如下卸载:
    显示软件信息 :apt-cache show 软件名 或者dpkg -l |grep -i "软件包名" 
    卸载软件包: apt-get remove 软件包 或者dpkg -r 卸载软件包

    建议卸载之后,查看配置文件或者文件夹是否存在,并一并删除,免得干扰
       
    卸载完成后,接下来下载所需要的安装包。以下是所需要的源码包,其中包括安装PHP 时需要的库文件和主要的安装包
    PHP所需要的库文件,需要先安装,安装的顺序建议按排序安装
    libxml2-2.9.0 
    libmcrypt-2.5.8
    zlib-1.2.7
    libpng-1.5.14
    jpegsrc.v8b
    freetype-2.4.10
    autoconf-2.69
    gd-2.0.35
    主要安装包
    httpd-2.4.3
    mysql-5.0.41
    php-5.4.11
    phpMyAdmin-3.5.6-all-languages
    额外代码包:
    apr-1.4.6
    apr-util-1.5.1
    m4-1.4.9
    pcre 
    以上安装包都可以从开源网站下载,以下是网上找到的比较全的安装包下载地址:http://pan.baidu.com/share/link?shareid=1389731276&uk=437486341

    下载完安装包后,建议将安装包存放在统一的目录(如/usr/local )下,然后将其解压。以上面给出的资源为例:

    Unzip Lamp_All_file.zip -d /usr/local/src //将文件解压到指定目录
    cd /usr/local/src  
    ls *.tar.gz |xargs -n1 tar xzvf //解压该目录下所有的tar.gz 包。(有点占内存)

    解压完成后,开始对源代码进行配置与安装。


    Linux 下源代码的配置与安装大体都是使用 ./configure 、make 和 make install命令
    在源码包的目录下,首先./configure 配置相应的路径,如:
    ./configure --prefix=/usr/local/lamp/libxml2
    然后就运行make 命令 在运行make install 进行安装,make和make install 安装可以同时进行,如:
    make && make install

     顺序安装源码包:
    libxml2-2.9.0
    ./configure --prefix=/usr/local/lamp/libxml2-2.9.0
    make && make install
    libmcrypt-2.5.8
    ./configure --prefix=/usr/local/lamp/libmcrypt-2.5.8
    make && make install

    zlib-1.2.7
    ./configure --prefix=/usr/local/lamp/zlib-1.2.7
    make && make install

    libpng-1.5.14
    ./configure --prefix=/usr/local/lamp/libpng-1.5.14
    make && make install

    jpegsrc.v8b(注意;jpeg 源码包安装的时候是不会自动生成目录的,所以需要在安装之前先创建相应的目录。同时需要将其设置成共享库和静态库,因为接下来gd安装的时候需要用到jpeg库,如果没有设置的话,最后检测的时候会检测不到jpeg库的)

    mkdir /usr/local/lamp/jpeg
    mkdir /usr/local/lamp/jpeg/bin
    mkdir /usr/local/lamp/jpeg/lib
    mkdir /usr/local/lamp/jpeg/include
    mkdir /usr/local/lamp/jpeg/man
    mkdir /usr/local/lamp/jpeg/man/man1
    ./configure --prefix=/usr/local/lamp/jpeg/ --enable-shared --enable-static
    make && make install

    freetype-2.4.10
    ./configure --prefix=/usr/local/lamp/freetype
    make && make install
    autoconf-2.69(autoconf 安装的时候,可能会提示找不到M4,如果出现这样的情况的话,需要下载M4 的源文件并安装)
    ./configure --prefix=/usr/local/lamp/autoconf
    make && make install

    gd-2.0.35(gd库在安装的时候,除了需要配置安装路径,还需要将前面安装jpeg库和freetype库的路径也给附上)

    ./configure --prefix=/usr/local/lamp/gd2 --with-jpeg=/usr/local/lamp/jpeg8/ --with-freetype=/usr/local/lamp/freetype/
    make && make install

    以上是PHP所需的库文件的安装过程,接下来需要安装主要的代码包:
    Apache (在安装apache 之前,为了保证成功,建议配置apr和apr-util,主要是将下载原来的源代码包放到apache 的源代码包的指定目录中去。同时还要编译安装pcre 包)

    cp -r apr httpd-2.4.3/srclib/apr
    cp -r apr-util httpd-2.4.3/srclib/apr-util

    进入pcre目录
    ./configure --prefix=/usr/local/pcre
    make && make install
    进入apache目录
    ./configure --prefix=/usr/local/lamp/httpd/ --sysconfdir=/etc/httpd --with-included-apr --disable-userdir --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-static-support --with-pcre=/usr/local/pcre/
    make && make install

    mysql数据库的安装在http://www.cnblogs.com/Seanit/p/3706238.html  中已经说过,在此不做赘述。接下来便是安装PHP

    ./configure 
    --prefix=/usr/local/lamp/php/
    --with-config-file-path=/usr/local/lamp/php/etc/ --with-apxs2=/usr/local/lamp/httpd/bin/apxs
    --with-mysql=/usr/local/lamp/mysql/
    --with-libxml-dir=/usr/local/lamp/libxml2/
    --with-jpeg-dir=/usr/local/lamp/jpeg/
    --with-freetype-dir=/usr/local/lamp/freetype/
    --with-gd=/usr/local/lamp/gd2/
    --with-mcrypt=/usr/local/lamp/libmcrypt/ --with-mysqli=/usr/local/lamp/mysql/bin/mysql_config
    --enable-soap --enable-mbstring=all --enable-sockets

    make && make install(此处可能会出错)

    安装完成后,需要拷贝php.ini 文件到php的安装目录下
    cp php.ini-dist(php.ini-production) /usr/local/lamp/php/etc/php.ini
       
    最后,整合lamp 环境。Apache 和PHP安装完成之后,其实并没有相互关联,apache并没有加载PHP模块,所以并不能打开php。因此,接下来需要配置apache 加载php模块。
    vi /etc/httpd/httpd.conf
    在文件中加入如下语句:
    AddType application/x-httpd-php .php .phtml
    重启apache 服务器
    /usr/local/lamp/apache2/bin/apachectl restart(注意,httpd 默认情况下开启的是80端口,可是linux默认情况下开启1024以内端口号,需要用到root权限,所以此处如果用普通账户可能会报bind错误。)
       
    至此,Lamp的开发环境就搭建成功了
    后期配置:
    配置默认首页(在DirectoryIndex 中加入index.php):
    vi /etc/httpd/httpd.conf
    DirectoryIndex index.php index.Html index.html

       

    以下是LZ 安装时曾经遇到过的错误以及解决方案:
    1、安装php时出错:
       

    In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putc’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:51: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putbuf’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:58: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_ctxfree’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:67: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:68: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:69: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_output_ctx’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:153: 错误:‘gdIOCtx’没有名为‘data’的成员
       make: *** [ext/gd/gd.lo] 错误 1

     
    这个是php5.4的一个bug,需要修改gd的一个文件
    解决方法:
       

    vi /usr/local/gd2/include/gd_io.h
        typedef struct gdIOCtx
      
      {
       int (*getC) (struct gdIOCtx *);
      
       int (*getBuf) (struct gdIOCtx *, void *, int);
      
       void (*putC) (struct gdIOCtx *, int);
      
       int (*putBuf) (struct gdIOCtx *, const void *, int);
      
       int (*seek) (struct gdIOCtx *, const int);
      
       long (*tell) (struct gdIOCtx *);
       void (*gd_free) (struct gdIOCtx *);
      
       void (*data);
      
      }
      
      gdIOCtx;
      

    在该文件中加入红色字体的语句,在重新make即可
       

    2、httpd 启动时错误
       

    (98)Address already in use: make_sock: could not bind to address [::]:80 
       (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 
       no listening sockets available, shutting down 
       Unable to open logs


    解决方案:
    此处显示的是80端口已被调用,需要kill掉进程即可
       
    3、访问php 文件时打开下载窗口显示下载该PHP页面
    这种情况是PHP模块未被加载的原因造成的
    解决方案:
    在httpd.conf 中查看是否存在以下语句:
    LoadModule php5_module modules/libphp5.so
    如果不存在,则添加,然后重启
       
    4、http 无法加载模块错误
    Httpd 启动的时候提示
    Cannot load /usr/local/apache/modules/libphp5.so
    这个显示的是httpd 无法加载libphp5.so模块,libphp5.so是php安装的时候生成的。
    解决方案:
    查看modules/libphp5.so 文件是否存在,如果不存在,既有可能是在配置php的时候出错了,可能在--with-apxs2=/usr/local/lamp/apache2/bin/apxs 上面出错,重新配置一下,在make 就能产生libphp5.so文件了。
         
    5、编译PHP 时出现libtool 错误
    libtool: link: `ext/date/lib/astro.lo' is not a valid libtool object
     解决方案:重新安装libtool 然后make clean 再 make 即可
      
    本文是在LZ参考了网络上的一些博文和视频之后实践后写的,主要参考了Lamp兄弟连视频教程和http://www.cnblogs.com/hanganglin/articles/3328223.html这篇文章,在此进行声明与感谢

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/Seanit/p/3749168.html
Copyright © 2011-2022 走看看