设为首页 收藏本站
查看: 452|回复: 0

[经验分享] 制作RPM包:rpmbuild

[复制链接]

尚未签到

发表于 2017-6-9 10:48:02 | 显示全部楼层 |阅读模式
参考:

  • http://hlee.iteye.com/blog/343499
  • http://www.cnblogs.com/schangech/p/5641108.html
  • http://blog.chinaunix.net/uid-23069658-id-3944462.html
  • https://www.lvtao.net/tool/linux-rpm.html
  • https://yq.aliyun.com/articles/27261



#前期准备:       yum -y install rpmdevtools pcre-devel   
#-------------------------------------------------------
# 查看默认宏:   rpmbuild --showrc  |  grep  "_topdir"
#  _builddir      %{_topdir}/BUILD
#  _buildrootdir %{_topdir}/BUILDROOT
#  _rpmdir       %{_topdir}/RPMS
#  _sourcedir    %{_topdir}/SOURCES    --->  原材料,如源码包,文档所在目录,需事先将打包的源文件或脚本存放在此目录内......
#  _specdir      %{_topdir}/SPECS   --->  管理rpm制作过程的描述文件所在的目录
#  _srcrpmdir    %{_topdir}/SRPMS
#  _topdir        %{getenv:HOME}/rpmbuild   --->  rpmbuild目录的顶层入口
#-------------------------------------------------------

#生成~/rpmbuild及子目录:    rpmdev-setuptree
#生成rpmbuild的spec模板:    rpmdev-newspec -o Name-version.spec  --->   生成的SPEC文件主要用于描述RPM包的制作和生成过程
#eg:
#[iyunv@localhost ~]#  rpmdev-setuptree && cd rpmbuild ; tree
#.
#├── BUILD
#├── RPMS
#├── SOURCES
#├── SPECS
#└── SRPMS
#------------------------------------------------------------------------------------------------------------------------- 以下是spec文件内容:

#自定义宏,相当于Linux中"Key-Value"变量形式
%define Name nginx  #--->  名称
%define Version 1.2.2  #--->  版本
%define CONFIGFILE 1.conf   #--->   本rpm包中需更换的配置文件......
%define InstallPath /usr/local/nginx  #--->   本rpm包默认安装的路径

#定义软件包信息,即:"rpm -qi name.rpm " 查看到的内容
Name:           %{Name}   #--->   引用宏
Version:        %{Version}   #--->   引用宏
Release:        1%{?dist}   #--->   引用宏(自带宏)
Summary:        ....................................... #--->  一些描述信息
License:        GPLv2  #--->  授权协议
URL:            inmoonlight@.163.com
buildroot:      %{_topdir}/BUILDROOT   #--->  指定生产车间(非常重要,因在生成rpm过程中执行make install时会把软件安装到此路径,打包时同样依此目录为“根目录”进行操作)
Source0:        %{Name}-%{Version}.tar.gz   #---> 指定源码编译的文件,默认路径:%{_topdir}/SOURCES  
SOURCE1:        %{CONFIGFILE}  #---> 指定要替换的配置文件,默认路径:%{_topdir}/SOURCES  
BuildRequires:      gcc,make,automake,binutils  #--->  软件依赖信息
Requires:      bash >= 2.0 #--->  定义软件依赖信息,该rpm包所依赖的软件包名称,可用>=或<=表示大或小于特定版本
%description
This is %{Name} .....Just a test rpm suite.............

#安装前的准备工作,此处可写入执行脚本
%pre
useradd %{Name} -s /sbin/nologin

#安装前的准备:此段默认将Source目录内的源码包在BUILD目录解压为%{Name}-%{Version}格式的目录
%prep
%setup -q -n %{Name}-%{Version}  #---> 参数:-c 解压缩之前先产生目录,-n newdir 将软件包解压在newdir目录

#定义config动作
%build
./configure --prefix=%{InstallPath} --user=%{Name} --group=%{Name}
make %{?_smp_mflags}

#定义执行make install时的动作
%install
rm -rf %{buildroot} #---> 删除生产车间内的残留文件
%{__make} install DESTDIR=%{buildroot} #---> 将软件安装至指定的目录
%{__install} -p -D -m 0755  %{SOURCE1} %{buildroot}/usr/local/nginx/conf/%{CONFIGFILE} #--->  替换指定的配置文件

#赋予文件的默认权限及设置需在RPM包中保留的文件
%files
%doc
%defattr(-,root,root,-)  #---> 指定包装文件属性,分别是(mode,owner,group),- 表示默认值,文本文件是0644,可执行文件0755
%attr(0755,root,root) /usr/local/nginx/sbin/nginx  #--->  针对单一文件设置权限
%{_prefix}/*
%{_prefix}/local/nginx/conf/%{CONFIGFILE}

#制作完成后的清理工作
%clean
rm -rf %{buildroot}

#安装后的执行工作,此处可写入执行脚本
%post
chkconfig --add nginx
chkconfig --level 345 nginx on

#变更日志
%changelog

#---------------------------------------------------------------------------------------------
#    2.1 介绍区域的SOURCE0下增加如下
#    Source0:        %{name}-%{version}.tar.gz
#    Source1:        index.html
#    Source2:        init.nginx
#    Source3:        fastcgi_params
#    Source4:        nginx.conf

#    2.2 安装区域增加如下
#    make install DESTDIR=%{buildroot}
#    %{__install} -p -D %{SOURCE1} %{buildroot}/usr/html/index.html  #%{__install}这个宏代表install命令
#    %{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx
#    %{__install} -p -D %{SOURCE3} %{buildroot}/etc/nginx/fastcgi_params
#    %{__install} -p -D %{SOURCE4} %{buildroot}/etc/nginx/nginx.conf



将脚本制作成为RPM包的例子:

Name: eee
Version: 1
Release: 1%{?dist}
Summary:1111

License:GPLv2
URL:    inmoonlighy.11.cn
Source0: eee

%description
.....

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/bin/
cp -rf  %{SOURCE0} %{buildroot}/bin

%files
/bin/eee

%changelog

#注:安装时失败应加“rpm -ivh --force ***.rpm 进行尝试”

#---------------------------------------------------------------------------------------------
#rpmbuild:
#    -bl          检查spec中的%file段来查看文件是否齐全
#    -ba         建立二进制包&源码
#    -bb         建立二进制包
#    -bp        执行到 prep 阶段
#    -bc         执行到 build 阶段
#    -bi         执行到 install 阶段
#
#制作:    cd /usr/src/redhat/SPECS/ ; rpmbuild -ba nginx.spec   --> 生成:/usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm
#测试:    rpm -ivh /usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-385506-1-1.html 上篇帖子: linux下,R包安装时退出状态为0 下篇帖子: add swap
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表