zoukankan      html  css  js  c++  java
  • rhel7 rpmbuild 制作二进制程序安装包(.rpm) 简单示例

    下载rpm-build:

    # yum install rpm-build

    如果上述方式无法安装(没配置网络源,虚拟机下是安装媒介源) 可以用下列方式下载后再安装(实践结果可能版本问题引起的缺少太多的*.so,不可行)

    wget http://archive.download.redhat.com/pub/redhat/linux/7.0/en/os/i386/RedHat/RPMS/rpm-build-4.0-4.i386.rpm
    # rpm -ivh rpm-build-4.0-4.i386.rpm 

    使用此方式,配置个可用的RHEL7(=CentOS7)(163)网络源,具体做法 http://mirrors.163.com/.help/centos.html 有介绍

    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    # mv CentOS7-Base-163.repo /etc/yum.repos.d/rhel-source.repo
    # vim /etc/yum.repos.d/rhel-source.repo

    在vim命令模式下 将$releasever 替换为 版本号(7)

    :%s/$releasever/7/g
    :wq

    使用当前源

    # yum makecache

    然后重新回到主题(一路y)

    # yum install rpm-build

    rpmbuild默认的工作目录环境可以通过下面命令查看

    rpmbuild --showrc | grep topdir

     然后根据上述命令查看的结果创建文件夹(已经cd到_topdir 目录下)

    # mkdir BUILD RPMS SOURCES SPECS SRPMS BUILDROOT

    说明:

      由于该主题是二进制程序的打包,即不存在源码编译的情况,也因为是简单示例,所以没有做打包时的哪些文档之类的工作

    文件准备:

      1.将可执行目录里面的所需文件打包.tar.gz放进SOURCES目录

      2.编写简单的.spec文件放在SPECS目录下,还好在SPECS目录下vim *.spec 会自动生成一个简单的模板,按需补充该模板即可

      3.小工具mysqltransfer.spec的简单样例

    #DEFINES
    %define        appauthor    wjshan0808
    %define        appname        mysqltransfer
    %define        appversion    2.0.17.810
    %define        applibprefix    libmysqlcppconn
    %define        applibversion    7
    %define        appdirconfig    transconfig
    %define        appliblocaldir    /usr/local/lib64
    
    Name:        %{appname}
    Version:    %{appversion}
    Release:    1%{?dist}
    Summary:    %{appauthor}'s MySql Tools ...
    
    Group:        Development/Tools
    License:    GPL
    URL:        http://www.cnblogs.com/%{appauthor}
    Source0:    %{appname}.tar.gz
    
    Autoreq:    no
    #BuildRequires:    
    #Requires:    Boost >= 1.60
    
    BuildRoot:    /opt #%{buildroot}
    Packager:    %{appauthor}
    
    Prefix:     /opt
    #Prefixes:     /opt
    
    %changelog
    * Thu Aug 10 2017 %{author}
    Initial Version ...
    
    
    %description    
    It's just a rpmbuild demo ...
    
    
    %preun
    cd %{_libdir}
    libErase=$(find $(pwd) -name "%{applibprefix}*")
    if [ -n "$libErase" ]; then
        rm -rf $libErase
    fi
    cd %{appliblocaldir}
    liblocalErase=$(find $(pwd) -name "%{applibprefix}*")
    if [ -n "$liblocalErase" ]; then
        rm -rf $liblocalErase
    fi
    
    %prep
    %setup -c -n %{appname}
    
    
    %build
    ##%config{"name":"wjshan0808","Email":"420028080@qq.com"}ure
    ##make %{?_smp_mflags}
    
    
    %install
    ##install -d $RPM_BUILD_DIR/%{appname}
    %{__cp} -r $RPM_BUILD_DIR/%{appname}/ $RPM_BUILD_ROOT/
    
    
    %files
    %defattr(777,root,root)
    /%{appname}/%{appname}
    /%{appname}/%{applibprefix}*
    
    
    %dir    
    /%{appname}/%{appdirconfig}
    
    
    %check
    
    
    %clean
    %{__rm} -rf %{_builddir}/*
    %{__rm} -rf %{buildroot}
    
    
    %post
    cd %{appname}
    %{__ln_s} %{applibprefix}.so.%{applibversion}.* %{applibprefix}.so.%{applibversion}
    %{__ln_s} %{applibprefix}.so.%{applibversion} %{applibprefix}.so
    %{__cp} -fd %{applibprefix}* %{_libdir}
    %{__cp} -fd %{applibprefix}* %{appliblocaldir}
    
    
    %postun
    dirErase="%{appname}"
    if [ -d "$dirErase" ]; then
        rm -rf $dirErase
        #rmdir $dirErase
    fi

    然后通过运行rpmbuild命令进行打包

    $ rpmbuild -bb mysqltransfer.spec

    最终安装测试(最终rpm文件名称随意啦)

    # rpm -ivh wjshan0808.x.x.x.rpm

    问题:

      上述示例默认安装的目录是 / 。问题就是在编写spec文件时不知道如何修改默认的安装目录

    文档参考:

      相关文档: http://rpm5.org/docs/max-rpm.html   http://ftp.rpm.org/max-rpm/index.html 

  • 相关阅读:
    Markdown编辑器:Typora
    Makefile的编写
    【转】Java基础——成员变量、局部变量和静态变量的区别
    【转】jsp 和 servlet的联系和区别
    【转】keySet和entrySet的区别
    10月25日下午PHP静态、抽象、接口
    10月25日上午PHP继承多态
    10月24日下午PHP封装
    10月24日上午PHP面向对象
    MYSQL存储过程、游标、触发器
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/7091281.html
Copyright © 2011-2022 走看看