• RPM包制作与实战


    1、安装RPM软件

    yum install rpm-build

    2、建立目录结构

    mkdir /usr/src/RedHat/{SOURCES,SPECS,BUILD,RPMS,SRPMS} -p

    相关目录介绍:

    /usr/src/redhat/SOURCES    #存放源代码、补丁等文件 

    /usr/src/redhat/SPECS      #存放用于管理rpm制作进程的spec文件 

    /usr/src/redhat/BUILD      #解压后的文件存放目录 

    /usr/src/redhat/RPMS       #存放由rpmbuild制作好的二进制包 

    /usr/src/redhat/SRPMS      #存放由rpmbuild制作好的源码包 

    3、把源码包放在SOURCES目录下

    cd /usr/src/redhat/SOURCES
    wget http://nginx.org/download/nginx-1.2.0.tar.gz

    4、生成nginx.spec文件

    cd /usr/src/redhat/SPECS 
    cat nginx.spec 
    # 
    # spec file for nginx 
    # Build 2012-07-17 
    # By opsren 
    # 
    Summary: High performance web server 
    Name: Nginx 
    Version: 1.2
    Release: 0.el5.ngx 
    License: 2-clause BSD-like license 
    Group: Applications/Server 
    Source: http://nginx.org/download/nginx-1.2.0.tar.gz 
    URL: http://nginx.org 
    Distribution: Centos/Redhat 
    Packager: qiuzhijun <250621008@qq.com> 
      
    %description 
    Nginx ("engine x") is a high performance HTTP and reverse proxy server, as well as a mail(IMAP/POP3/SMTP) proxy server. 
    %prep 
    tar zxf $RPM_SOURCE_DIR/nginx-1.2.0.tar.gz 
    %build 
    cd nginx-1.2.0 
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
    make 
    %install 
    cd nginx-1.2.0 
    make install 
    %preun 
    if [ -z "`ps aux | grep nginx | grep -v grep`" ];then 
    pkill nginx >/dev/null 
    exit 0 
    fi 
    %files 
    /usr/local/webserver/nginx 

    5、

    RPM包制作
    首先系统要安装好必备的制作工具:gcc、rpmbuild等
    yum -y install gcc rpm-build pcre-devel 
    cd /usr/src/redhat/SPECS/ 
    rpmbuild -bb nginx.spec 

    通过上面这条命令,会在/usr/src/redhat/RPMS/x86_64/下面生成nginx-1.2.0-1.el5.ngx.x86_64.rpm这个文件

    -bb 这个选项就是制作二进制包(build binary package only from <specfile>)
     
    对spec文件内容进行简单说明:
    spec文件是制作rpm包的核心!
    1. 以#开头的是注释信息; 
    2. Summary:对相关软件进行简单描述说明 
    3. Name:定义rpm包的名称 
    4. Version:定义软件的版本号 
    5. Release:发行版本 
    6. License:定义许可证 
    7. Group:说明软件属于哪种应用类型 
    8. Source:软件源码下载地址 
    9. URL:软件相关官方站点 
    10. Distribution: 发行版系列 
    11. Packager: 制作人的简单信息 
    12.   
    13. %description:软件详细描述信息 
    14. %prep:软件编译之前的处理 
    15. %build:编译软件 
    16. %install:安装软件 
    17. %preun:定义卸载之前的动作 
    18. %files:指定要打包的软件包,这里是/usr/local/nginx 

    下面是一个经典的事例:

    vi .rpmmacros 

    %_topdir /home/wb-liqiu/rpm
    %packager  wb-liqiu
    %vendor TaoBao Inc.
    %_svn_path Unknown_path
    %_svn_revision Unknown_revision
    %_version 0.0.1
    %_release 6
    %_crondir /etc/cron.d
    %_crontab .//etc/cron.d/%{name}
    %_unpackaged_files_terminate_build 0
    %build_root %{_topdir}/BUILDROOT

    然后

    mkdir rpm 
    mkdir rpm/{SOURCES,SPECS,BUILD,RPMS,SRPMS} -p

    spec事例:

    Name:       gearmand
    Version:    0.14
    Release:    1
    Summary:    --
    
    Group:      Productivity/Networking
    License:    BSD
    Url:        http://launchpadlibrarian.net/51244438/gearmand-0.14.tar.gz
    Vendor:     公司
    Packager:   姓名 <邮箱>
    
    Source:     gearmand-%{version}.tar.gz
    
    BuildRoot:  %{_tmppath}/{%name}-%{version}
    BuildArch:  x86_64
    
    Requires: lz-libdrizzle>=1.0
    Requires: boost libevent
    BuildRequires: gcc libevent-devel
    
    %description
    ---
    
    
    %prep
    %setup -q
    
    %build
    ./configure PREFIX=%{buildroot} --disable-libmemcached --disable-libsqlite3
    make
    %install
    make install DESTDIR=$RPM_BUILD_ROOT
    cur_dir=`pwd`
    cd $RPM_BUILD_ROOT && (find . -type f | sed -e 's|^./|/|g' > $cur_dir/%{name}.manifest)
    cd $RPM_BUILD_ROOT && (find . -type l | sed -e 's|^./|/|g' >> $cur_dir/%{name}.manifest)
    %clean
    rm -rf %{buildroot}
    
    %files -f %{name}.manifest
    %defattr(-,admin,users,-)
    
    %changelog
  • 相关阅读:
    Go语言- import 导入包的语法
    go语言学习入门篇 3-- 程序执行流程
    go语言学习入门篇 2--轻量级线程的实现
    go语言学习入门篇1---go语言的主要特性与发展
    网络传输中的各种加密算法+SSL+CA证书详解
    压测工具 jmeter入门教程及汉化修改
    Array.isArray and Object.prototype.toString.call
    trim() 方法
    回文字符串判断
    监听微信返回按钮事件
  • 原文地址:https://www.cnblogs.com/liqiu/p/2759146.html
Copyright © 2020-2023  润新知