下载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