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 

原文地址:https://www.cnblogs.com/wjshan0808/p/7091281.html