zoukankan      html  css  js  c++  java
  • 编译安装apache-2.4.18

    apache安装时, 必须要apr和apr-util, 这两个包是必须的

    当下载apache的版本过高, 如: apache-2.4.18, 那么要求的apr或apu=apr-util版本将至少在1.4 later, 原来的1.3将不能使用.
    这时,就只有重新下载并安装高版本的apr, apu的源码包, 这两个软件都支持relocate, 安装时指定: ./configure --prefix=/usr/local/apr154类似的

    报错configure: error: pcre-config for libpcre not found.
    什么是pcre: pc-re: perl compatible regular expressions 与perl兼容的正则表达式.
    为什么需要pcre? 因为http的编译选项中有--with-rewrite=shared, 地址重写, 需要正则支持.
    perl语言兼容正则表达式,是一个用C语言编写的正则表达式函数库

    当安装号pcre210后, 仍然报错找不到pcre-config?
    [root@localhost pcre210]# ls
    bin include lib share
    [root@localhost pcre210]# cd bin
    [root@localhost bin]# ls
    pcre2-config pcre2grep pcre2test
    [root@localhost bin]# cp pcre2-config pcre2-config.bak
    [root@localhost bin]# mv pcre2-config pcre-config
    [root@localhost bin]#
    原因是: BECAUSE 这时候的configure只认 pcre-config这个配置文件名, 所以改一下 pcre2-config-->pcre-config文件名称就好了.

    ./configure会自动忽略错误的配置参数, 所以要判断 配置/编译/安装过程是否正确, ** 都可以在命令执行完毕后检查一下: echo $?

    这时, httpd完整的编译命令就是
    /configure --with-apr=/usr/local/apr-152 --with-apr-util=/usr/local/apr-util-154 --with-pcre=/usr/local/pcre210 --enable-dav --disabe-usrdir --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared
    指定文件的时候, 不一定非要指定到精确的路径, 只要指定到它的 "安装目录"就可以.

    但是! 将pcre2-config改名为pcre-config出现很多关于util-pcre的错误,而且是文件内部 关于函数的错误 ,这个就很麻烦了!###

    错误如下所示:
    server/.libs/libmain.a(util_pcre.o): In function ap_regfree': /opt/httpd-2.4.18/server/util_pcre.c:104: undefined reference to pcre_free'
    至此, 感觉有时候,自己编译安装,而且需要的支持功能更多的时候, 还是比较麻烦的.

    所以, 如果没有特殊的需求, 还是yum安装比较容易, 因为自己手动的来解决dependencies确实比较麻烦的
    看看安装一些较低版本的apache怎么样?

    下载httpd-2.2.31的源码包中, 就已经包含了 srclib/apr, apr-util, pcre目录,以及相对应的安装文件.
    而httpd-2.4.18中的srclib/目录下, 就没有apr, apu, pcre...
    

    配置./configure httpd的三个方面中, 实际上最重要的是: 启用哪些功能? --enable部分

    其中 --prefix, --sysconfdir等部分保持默认的就可以,
        --enable...启用功能, 如--enable-rewrite=shared
        而--with...是为了支持enable功能,而必须要提供的库和配置文件, 比如,你--enable-rewrite就需要提供--with-pcre=PATH, 但是
            如果你不需要rewrite功能,大可不必提供--with-pcre.
                ** 而且, 如果源码包中本身就包含了相应的 --enable支持包/库(一般在 srclib/ 目录中, 那么甚至可以不用指定 --with-pcre等等)
    

    总之, 用httpd-2.2.31源码安装就很容易安装成功, 而且不必自己去下载寻找额外的支持包/库.
    ./configure --enable-dav --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared

    xargs命令: /usr/bin/xargs

    场景: 有些命令支持通配符, 有些命令不支持通配符. 在不支持通配符的命令中, 要一次性操作多个对象:文件, 参数等等, 就可以使用xargs
    命令, 将文件列表/ 参数列表传递给后面的 命令, 让命令循环处理 列表中的 文件/参数对象.
    如: rpm -e apr* 这样的命令是错误的, 提示 没有apr* 这样的包
    要批量卸载rpm包, 就要用xargs:
    rpm -qa| grep apr | xargs rpm -e [--nodeps]

    实际操作显示:

    [root@localhost Desktop]# rpm -qa | grep apr
    apr-devel-1.3.9-5.el6_2.i686
    apr-util-pgsql-1.3.9-3.el6_0.1.i686
    apr-util-odbc-1.3.9-3.el6_0.1.i686
    apr-util-sqlite-1.3.9-3.el6_0.1.i686
    apr-util-mysql-1.3.9-3.el6_0.1.i686
    apr-util-ldap-1.3.9-3.el6_0.1.i686
    apr-util-devel-1.3.9-3.el6_0.1.i686
    [root@localhost Desktop]# rpm -qa | grep apr |xargs rpm -e 
    error: Failed dependencies:
    	apr-devel is needed by (installed) httpd-devel-2.2.15-47.el6.centos.i686
    	apr-util-devel is needed by (installed) httpd-devel-2.2.15-47.el6.centos.i686
    [root@localhost Desktop]# rpm -qa | grep apr |xargs rpm -e --nodeps
    [root@localhost Desktop]# rpm -qa | grep apr
    [root@localhost Desktop]# 
    

    用xargs批量更改件名称

    • mv 命令只能一个文件一个文件的更改名称, 也不接受通配符*
    • 要批量更改名称,xargs命令 的 **-i **参数是必不可少的, 它表示用后面给定的符号 来代替前面的文件列表
    • 其中 -p是询问-yes or -no, -t是打印要执行的命令
    • 替换符合好像只能是大括号 {}, 不能是?, [], ()等等.
        [root@localhost Desktop]# ls | xargs -t -p -i  mv {} {}.bak
        ## 如果不加 -t 将不 **打印** 要执行的命令
        ## 如果不加 -p, 将不 **提示prompt** 是否 -y, -n
        ## 如果不加 -i, 将出错,因为 -i是替换!
    
    -p     **Prompt** the user about whether to run each command line and read a line from the terminal.  Only run the command line if the re-
                  sponse starts with ‘y’ or ‘Y’.  **Implies -t**.
           --verbose
           -t     **Print**  the command line on the standard error output before executing it.
    

    使用xargs的一点心得: 最好是切换到你要操作的目录中,否则可能会带来麻烦
    如下面的例子:

    [root@localhost pcre]# ls bin |grep pcre2 |xargs -p -i rm {} 
    rm pcre2-config.bak ?...y
    rm pcre2grep ?...rm: cannot remove `pcre2-config.bak': No such file or directory
    y
    rm pcre2test ?...rm: cannot remove `pcre2grep': No such file or directory
    y
    rm: cannot remove `pcre2test': No such file or directory
    [root@localhost pcre]# ls bin
    pcre2-config.bak  pcre2grep  pcre2test  pcre-config
    [root@localhost pcre]# cd bin
    [root@localhost bin]# ls
    pcre2-config.bak  pcre2grep  pcre2test  pcre-config
    [root@localhost bin]# ls |grep pcre2 |xargs -p -i rm {} 
    rm pcre2-config.bak ?...y
    rm pcre2grep ?...y
    rm pcre2test ?...y
    [root@localhost bin]# ls
    pcre-config
    [root@localhost bin]# 
    #本来是想批量删除pcre/bin下的pcre2...文件, 结果在xargs -p -i rm {}中,由于在pcre目录中, 而要删除的文件在pcre/bin中,
    ## 自然就在pcre目录下找不到pcre2...文件, 而报错了
    

    文件的mime类型

    mime(Content-type)格式: "text/plain; charset=utf-8"
    主要有: text/plain, text/html, text/javascript
    application/x-bzip2, application/x-symlink, application/x-rpm..
    image/png, image/jpeg..
    audio/mpeg,...
    video/3gpp...

    file 命令

        file命令是用来查看文件属性和文件元信息的工具,参数有:
            -i  用来查看mime信息
            -L    直接显示symlink目标的信息
            -b    不显示文件/对象名称
    

    man命令

    man命令要想有条目,需要满足条件: 要有对应的文件: /usr/share/man/man?/cmd.?.gz , 其中man下有多个目录man1, man2, man3..., 然后
    还要有对应的文件, 如 man1/tree.1.gz, man2/tree.2.gz , 不只是文件名,还要求其文件格式 也 是真正的 gz格式

    shell如何处理多个参数?

    -----使用循环内shift------

        #! /bin/bash
        ## 下面这段代码打印出大于0 的脚本参数.
        # shift 从左到右依次循环处理参数, 在事先不知道参数个数的情况下很有用
    
        while test $# -gt 0 ; do 
            if test $1 -gt 0; then
                echo $1
            fi        
            shift    
        done
    

    使用apache-2.2.31源码编译安装时, 虽然源码包中包含srclib/pcre, 但是在编译该pcre时提示错误: 找不到/build/ltlib.mk

    Makefile:7: /build/ltlib.mk: No such file or directory
    make: *** No rule to make target `/build/ltlib.mk'. Stop.

    这时, 由于pcre是为了支持rewrite功能的, 所以, 把 --enable-rewrite=shared这个选项去掉, 可以成功安装apache!

    但是, 总觉的没道理啊,

    于是决心重新来一遍, 重新安装pcre和apache.

    1. 删除已经安装好了的apache : 由于是编译安装的, 所以就直接删除 /usr/local/apache2这个目录就好了

    2. 重新安装pcre,因为这个是rewrite模块生效的 不可绕过的障碍, 这次, 将原来编译生成的目标文件:包括 *.o, *.lo等等, 都清除:
      make clean

    3. 重新进行编译/安装, make && manke install, 这次顺利通过编译和安装! 在/usr/local/pcre下有了 **pcre-config **文件!

  • 相关阅读:
    《学技术练英语》PPT分享
    某网站漏洞排查经验
    【原创】如何写一个框架:模式
    【原创】如何写一个框架:步骤(下)
    【原创】如何写一个框架:步骤(上)
    CentOS 6.5 x64相关安全,优化配置
    CentOS 6.5 x64下查看服务版本
    Xshell设置密钥登录CentOS6.5_64位(文字命令版)
    CentOS 6.5 x64下安装宝塔面板、阿里安骑士
    CentOS 6.5 x64下查找依赖包,或用YUM安装
  • 原文地址:https://www.cnblogs.com/bkylee/p/5053410.html
Copyright © 2011-2022 走看看