zoukankan      html  css  js  c++  java
  • httpd2.4.27rpm包制作

    http2.4.27 rpm包制作
    1.安装rpm-build
    yum -y install rpm-build
    2.使用普通用户创建spec规则文件
    su - lxh
    vim httpd.spec

    Name: httpd
    Version: 2.4.27
    Release: 1%{?dist}
    Summary: compiled from 2.4.27 by lxh

    Group: System Environment/Daemons
    License: GPL
    URL: http://www.lxh.com
    Source0: httpd-2.4.27.tar.gz
    Source1: httpd
    Source2: httpd.init
    BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

    BuildRequires: gcc, gcc-c++, openssl-devel, make

    %description
    Apache web server. Compiled from 2.4.27 by lxh

    %prep
    %setup -q


    %build
    ./configure --prefix=/usr/local/apache
    --bindir=/usr/sbin
    --with-apr=/usr/local/apr
    --with-apr-util=/usr/local/apr-util
    --with-expat=builtin
    --with-pcre=builtin
    --enable-ssl
    --enable-modules=all
    make %{?_smp_mflags}


    %install

    %make_install


    %clean
    rm -rf %{buildroot}


    %files
    /usr/sbin/ab
    /usr/sbin/apxs
    /usr/sbin/dbmmanage
    /usr/sbin/htdbm
    /usr/sbin/htdigest
    /usr/sbin/htpasswd
    /usr/sbin/httxt2dbm
    /usr/sbin/logresolve
    %defattr(-,root,root,-)
    /usr/local/apache/bin/*
    /usr/local/apache/build/*
    /usr/local/apache/cgi-bin/*
    %config /usr/local/apache/conf/*
    /usr/local/apache/error/*
    /usr/local/apache/htdocs/*
    /usr/local/apache/icons/*
    /usr/local/apache/include/*
    %dir /usr/local/apache/logs
    %doc /usr/local/apache/man/*
    %doc /usr/local/apache/manual/*
    /usr/local/apache/modules/*
    %post
    cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
    sed -i '1a # chkconfig: 2345 85 15' /etc/init.d/httpd
    sed -i '2a # description: apache web server' /etc/init.d/httpd
    chkconfig --add httpd
    %preun
    /etc/init.d/httpd stop
    chkconfig --del httpd

    %changelog
    *Tue Mar 31 2017 lxh<lxh@lxh.com> 2.4.27
    --

    生成工作目录
    rpmbuild httpd.spec

    drwxr-xr-x 3 lxh lxh 4096 8月 1 15:24 BUILD
    drwxr-xr-x 2 lxh lxh 4096 8月 1 15:26 BUILDROOT
    drwxr-xr-x 3 lxh lxh 4096 8月 1 14:18 RPMS
    drwxr-xr-x 2 lxh lxh 4096 8月 1 14:01 SOURCES
    drwxr-xr-x 2 lxh lxh 4096 8月 1 15:22 SPECS
    drwxr-xr-x 2 lxh lxh 4096 8月 1 14:18 SRPMS
    ##############################################
    2.1定义rpm包的信息

    rpm包信息,主要定义用户查询rpm包信息时所显示的内容。它包含rpm包的功能描述、软件版本、版权信息和软件授权类型等等。

    详细信息如下:

    Name定义该rpm包的名字,必须要填写。

    Version定义该rpm包的版本号,建议和源码包的名称保持一致。

    Release定义rpm本身的版本号,使用默认值即可。

    Summary定义关于该rpm包的一些介绍。

    %description定义关于该rpm包的一些描述信息。

    Group标识软件包所属类型。

    License软件授权类型,比如GPL、Commercial、Shareware。

    URL定义软件作者的主页。

    rpm包信息中最重要的是NVR,也就是name、version、release。因为最后生成的rpm包的名称就是根据这三项来的。

    rpm名称形式,如下:name-version-release.rpm。

    2.2定义源码包

    Source0用来定义制作rpm包时所需要的源码包。如果制作rpm包时,有多个源码包,那么使用source和数字混合,比如:

    Source0: httpd-2.4.27.tar.gz
    Source1: httpd
    Source2: httpd.init

    注意:

    Source0必须要填写,而且填写的名字必须是和下载源码包名称要一模一样,还要注意只有tar.gz的源码包,才能制作rpm包。

    2.3定义rpm包的依赖关系

    rpm包在制作过程中会依赖基本库,而rpm包在安装时有时也需要其他软件包。这些我们都可以通过以下选项进行控制。

    BuildRequires定义制作rpm包时,所依赖的基本库。该选项可有可无。

    Requires定义安装该rpm包时,所依赖的软件包。该选项可有可无。

    注意:

    在这里要重点说明一点,Requires定义所依赖的软件包,在进行yum安装时的情况。

    我们在使用yum安装软件A时,yum会在下载完A的rpm包后,对该rpm包进行检查(rpm包中会给出安装该rpm包安装时,所依赖的基础库和软件)。

    如果检查出,A的安装还要依赖软件B,那么此时yum就会自动下载并安装B。B安装完毕后,就会继续安装A。如果是内网yum源的话,我们只需要把B放在内网yum源即可。

    如果检查出,A的安装不需要其他软件的支持,那么yum会自动安装A。

    2.4编译并安装rpm包

    这一步是非常重要,类似与源码安装的的./configure、make、make install。主要包括%build、%install等选项。如下:

    %build定义编译软件包时的操作

    %install定义安装软件包,使用默认值即可。

    BuildRoot定义安装或编译时使用的虚拟目录,建议使用默认值即可。如下:

    %(mktemp-ud%{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

    该参数非常重要,因为在生成rpm包的过程中,执行make install时就会把软件安装到上述的路径中。在打包的时候,同样依赖虚拟目录为根目录进行操作。

    2.5安装之后生成的文件

    rpm包在进行安装时,会创建相关的目录及文件,我们就可以在此定义。

    %files定义rpm包安装时创建的相关目录及文件。

    在该选项中%defattr (-,root,root)一定要注意。它是指定安装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755。

    2.6安装前后需要执行的脚本

    %prep指定rpm包安装前执行的脚本。在对软件进行打包前,我们还进行其他操作。比如解压tar.gz文件。%prep主要与%setup –q命令配合使用,建议使用默认值即可。

    %post指定rpm包安装后执行的脚本。我们在安装完毕rpm包后,执行软件初始化的动作,就可以通过%post来达到目的。比如:apache在安装后,将apachectl拷贝成httpd等操作。默认spec模版文件不存在此选项。

    %preun指定rpm包卸载前执行的脚本,该选项主要用于软件升级的时候会执行。默认spec模版文件不存在此选项。

    %postun指定rpm包卸载后执行的脚本。默认spec模版文件不存在此选项。

    2.7软件变更日志

    %changelog主要用于软件的变更日志。该选项可有可无。

    如果使用%changelog选项的话,一定要以*开头,以- -结尾。时间格式为,如下:

    * 星期 月 日 年 XXX

    --
    ##############################################
    3.源码包制作
    这里之所以解压并重新归档压缩,是因为httpd依赖于apr,在.spec中指定这个过程比较麻烦,所以就直接做到tar包里
    cd /usr/local/src
    下载apr-1.5.2.tar.gz apr-util-1.5.4.tar.gz httpd-2.4.27.tar.gz
    tar -zxvf apr-1.5.2.tar.gz
    tar -zxvf apr-util-1.5.4.tar.gz
    tar -zxvf httpd-2.4.27.tar.gz

    mv apr-1.5.2 httpd-2.4.27/srclib/apr
    mv apr-util-1.5.4 httpd-2.4.27/srclib/apr-util

    tar cxvf httpd-2.4.27.tar.gz httpd-2.4.27/

    mv httpd-2.4.27.tar.gz /home/lxh/rpmbuild/SOURCES/
    mv httpd-2.4.27/build/rpm/httpd.init /home/lxh/rpmbuild/SOURCES/
    chown -R lxh:lxh /home/lxh/rpmbuild/SOURCES/

    su - lxh
    vim /home/lxh/rpmbuild/SOURCES/httpd
    HTTPD=/usr/local/apache/bin/httpd
    PIDFILE=/usr/local/apache/logs/httpd.pid
    这个是为了提供给启动脚本httpd的配置,请根据自己实际情况来,这里我因为要把httpd安装在/usr/loacl/apache/中所以这么做
    cd /home/lxh/
    cp httpd.spec rpmbuild/SPECS/
    rpmbuild -ba rpmbuild/SPECS/httpd.spec
    4.测试
    su - root
    cd /home/lxh/rpmbuild/RPMS/x86_64
    rpm -ivh httpd-2.2.27-1.el6.x86_64.rpm
    [root@localhost x86_64]# rpm -ivh httpd-2.4.27-1.el6.x86_64.rpm
    Preparing... ########################################### [100%]
    1:httpd ########################################### [100%]
    service httpd start 正常
    完成!
    5.异常处理若出现
    [root@localhost x86_64]# rpm -ivh httpd-2.4.27-1.el6.x86_64.rpm
    error: Failed dependencies:
    libexpat.so.0()(64bit) is needed by httpd-2.4.27-1.el6.x86_64
    libpcre.so.1()(64bit) is needed by httpd-2.4.27-1.el6.x86_64
    需要安装相应依赖包:
    glibc-2.17-105.el7.x86_64.rpm
    glibc-common-2.17-105.el7.x86_64.rpm
    glibc-devel-2.17-105.el7.x86_64.rpm
    glibc-headers-2.17-105.el7.x86_64.rpm
    glibc-static-2.17-105.el7.x86_64.rpm
    glibc-utils-2.17-105.el7.x86_64.rpm
    pcre-8.32-15.el7.x86_64.rpm
    pcre-devel-8.32-15.el7.x86_64.rpm

    rpm -ivh glibc-* --force --nodeps
    rpm -ivh pcre-* --force --nodeps

  • 相关阅读:
    关于闹钟的题
    【历史】- UNIX发展史(BSD,GNU,linux)
    使用EF操作Mysql数据库中文变问号的解决方案
    javascript方法的方法名慎用close
    使用VS2013 + EF6 + .NET4.5 连接Mysql数据库
    ADO.NET生成的数据库连接字符串解析
    在WebBrowser控件使用js调用C#方法
    Mysql数据库之auto_increment
    Visual Studio插件Resharper 2016.1 及以上版本激活方法【亲测有效】
    Windows下Mysql5.7开启binlog步骤及注意事项
  • 原文地址:https://www.cnblogs.com/rohero/p/7268996.html
Copyright © 2011-2022 走看看