rpm包制作(待实验)
- 作者:firefoxbug
- 时间:July 18, 2014
rpm包命名规范
对于rpm包的命名符合如下规范。
%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm NAME: rpm包名字
VERSION: rpm包版本号(主版本号.次版本号.测试号)
RELEASE: rpm包编译发布次数(第几次编译发布)
ARCH: cpu架构(比如i386和x86_64,i386兼容x86_64,noarch的代表一些列脚本) 比如nginx-1.4.0-24.x86.rpm,nginx-1.4.0-24.x86_64.rpm
实现目标
有一个test.py,去读取当前conf目录下的test.conf文件中的版本号,然后1秒打印一次日志到/tmp/test_rpm.log
---------test.py------------
#!/usr/bin/python print "Hello World" --------conf/test.conf------------
Version=0.1
再看下路径结构
.
|-- conf
| `-- test.conf
`-- test.py
制作成一个rpm包,安装之后出现这样的目录结构
/usr/local/rpm_test
.
|-- conf
| `-- test.conf
`-- test.py
基础环境
制作rpm包是通过rpmbuild来生成的。
安装rpmbuild工具
$ sudo yum install rpm-build $ rpmbuild --version
RPM version 4.4.2.3 建立独立的打包目录
$ cat >${HOME}/.rpmmacros << EOF
%_topdir $HOME/rpmbuild
EOF
$ mkdir ${HOME}/rpmbuild/
$ cd ${HOME}/rpmbuild/
$ mkdir BUILD RPMS SOURCES SPECS SRPMS 1. 把要打包的配置文件放到 ${HOME}/rpmbuild/SOURCES/ 下面
2. 在${HOME}/rpmbuild/SPEC下面建立一个test.spec文件,建立好后目录如下
.
|-- BUILD
|-- RPMS
|-- SOURCES
| |-- test.conf
| `-- test.py
|-- SPECS
| `-- test.spec
`-- SRPMS
编写spec文件
spec文件是打rpm包的关键环节,spec文件里指定了rpm包的基本信息,安装好后的环境
Name: rpm_test
Version: 0.0.1
Release: 3
Buildarch: noarch
Group: tools
Summary: rpm_test
License: Commercial
BuildArch: noarch
BuildRoot: %{_buildrootdir}
Prefix: /usr/local/rpm_test
AutoReqProv: no %define _build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}-%%{ARCH}.rpm
#编译需要的依赖
#BuildRequires: gcc,make,gcc-c++,pcre-devel
#安装运行需要的依赖
Requires: python >= 2.4.3 Source0: test.py
Source1: test.conf #description 软件详细描述,可多行
%description
rpm_test by Wanghua #解压源文件
%prep
#%setup -q #build 开始编译软件,如make
%build #install 开始安装软件,如make install
%install
rm -rf ${buildroot} #建立目录
install -p -d -m 0755 %{buildroot}%{prefix}
install -p -d -m 0755 %{buildroot}%{prefix}/conf #copy文件
install -p -m 0755 %{SOURCE0} %{buildroot}%{prefix}
install -p -m 0755 %{SOURCE1} %{buildroot}%{prefix}/conf %files
%defattr(-,root,root,-)
%{prefix}/conf
%{prefix}/test.py #%config(noreplace) %{prefix}/conf/test.conf #封装rpm包后清空虚拟根目录
%clean
rm -rf %{buildroot} #rpm安装前执行命令,$1==1其中1代表安装,0代表卸载
%pre
if [ $1==1 ]; then
echo "Now start install rpm package."
fi #rpm包安装后执行命令
%post
if [ $1==1 ]; then
echo "/sbin/chkconfig --add rpm_test"
fi #rpm包卸载前
%postun
rm -rf %{prefix} #rpm包卸载后执行命令
%preun
if [ $1==0 ]; then
echo "rpm pkg has been remove"
echo "/sbin/chkconfig --del rpm_test"
fi %changelog
* Tue Jul 17 2014 firefoxbug
+ rpm test
生成rpm包
$ rpmbuild -bb test.spec .
|-- BUILD
|-- RPMS
| `-- noarch
| `-- rpm_test-0.1-20140716.noarch.rpm
|-- SOURCES
| |-- test.conf
| `-- test.py
|-- SPECS
| `-- test.spec
`-- SRPMS
查看rpm包相关信息
查看安装信息(已经安装)
$ rpm -ql rpm_test
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py 查看rpm包
$rpm -qlp rpm_test-0.1-20140716.noarch.rpm
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py
查看rpm包安装前后执行的脚本,其实就是spec文件的几个部分
$ rpm -qpl --scripts rpm_test-0.1-20140716.noarch.rpm
preinstall scriptlet (using /bin/sh):
if [ $1==1 ]; then
echo "Now start install rpm package."
fi #rpm包安装后执行命令
postinstall scriptlet (using /bin/sh):
if [ $1==1 ]; then
echo "/sbin/chkconfig --add rpm_test"
fi #rpm包卸载前
preuninstall scriptlet (using /bin/sh):
if [ $1==0 ]; then
echo "rpm pkg has been remove"
echo "/sbin/chkconfig --del rpm_test"
fi
postuninstall scriptlet (using /bin/sh):
rm -rf /usr/local/rpm_test #rpm包卸载后执行命令
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py
rpm包指定格式输出
$ rpm -qa --queryformat "%{NAME}_|-%{VERSION}_|-%{RELEASE}_|-%{ARCH}\n"
python-simplejson_|-2.0.3_|-3.el5_|-x86_64
根据文件查询所在的rpmbao
$rpm -qf /path/nginx.conf
参考文档
rpm包制作 http://my.oschina.net/sylee/blog/167640
RPM包制作原理 http://my.oschina.net/guol/blog/182310
转自大牛博客:http://www.firefoxbug.com/index.php/archives/2776/
rpm包制作(待实验)的更多相关文章
- php-7.1.0 rpm包制作
nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: ...
- RPM包制作教程
一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...
- RPM包制作方法
一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...
- rpm包制作介绍
RPM(Rpm Package Management)在ReadHat等发行版下被用作软件包管理程序,其将某个软件相关的文件置入一个.rpm包中,用rpm命令,我们可以方便地完成Linux下软件安装. ...
- 【Linux】【Services】【Package】rpm包制作
1. 概念 1.1. BUILD:源代码解压之后存放的位置 1.2. RPMS:制作完成之后的RPM包的存放位置,包括架构的子目录,比如x86,x86_64 1.3. SOURCES:所有的原材料都应 ...
- nginx-1.8.0 rpm包制作
1.安装rpm-build # yum install rpm-build 2.创建制作RPM包目录 # cat /root/.rpmmacros %_topdir /root/rpmbuild %_ ...
- 实战RPM包制作
在开发中经常会用到一些rpm包,但是一直没有自己手动制作过.今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo ...
- RPM包制作过程(一)
本机环境:centos7,64位 1. 首先安装工具,rpmbuild可能在rpmdevtools里已经包含 #yum install rpm-devel.x86_64 #yum install rp ...
- 简单介绍RPM包制作方法
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中.它生成具有.RPM扩展名的文件.使用r ...
随机推荐
- linux下解压命令大全
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...
- 详细整合教程(Spring+SpringMVC+MyBatis)
详细整合教程(Spring+SpringMVC+MyBatis) http://blog.csdn.net/gebitan505/article/details/44455235/
- JAVA利用Zip4j解压缩【转】
官方地址:http://www.lingala.net/zip4j/(需要FQ) jar包:http://pan.baidu.com/s/145hwI 演示包:http://pan.baidu.com ...
- 如何在html中做圆角矩形和 只有右边的"分隔线"
这个网站满好的,可以常看看 css-matic中有几个很好的写css可视化的工具 其实做css 版式布局等都可以有工具的 推荐40个优秀的免费CSS工具 debugger正则表达式在线 其实是对(理论 ...
- NetBeans如何关联两个项目
在实际工作中,有的项目需要关联其他项目 找到项目-->右键-->属性-->包含路径-->添加文件夹 添加你要的项目即可.
- 使用jQuery的Scrollify插件实现鼠标滚轮或者手势滑动到页面下一节点部分
有时我们需要做一个单页面介绍产品特性,而单页面内容非常多且页面非常长,为了快速定位到产品特性节点,我们使用js侦听用户滚轮事件,当用户触发滚轮滑动或者使用手势触屏滑动时,即可定位到相应的节点.一款jQ ...
- Pattern Recognition and Machine Learning (preface translation)
前言 鉴于机器学习产生自计算机科学,模式识别却起源于工程学.然而,这些活动能被看做同一个领域的两个方面,并且他们同时在这过去的十年间经历了本质上的发展.特别是,当图像模型已经作为一个用来描述和应用概率 ...
- 字符编码-UNICODE,GBK,UTF-8区别【转转】
字符编码介绍及不同编码区别 今天看到这篇关于字符编码的文章,抑制不住喜悦(总结的好详细)所以转到这里来.转自:祥龙之子http://www.cnblogs.com/cy163/archive/2007 ...
- solrcloud
@Test public void querySolrCloud(){ String zkHost = "127.0.0.1:2181"; String defaultCollec ...
- 什么是H标签?H1,H2,H3标签?以及和strong标签使用的方法及重要性
大家都知道,seo的一个很重要的一点就是要把网站做的条理清晰,让搜索引擎很容易的读明白,这个条理清晰不仅体现在网站的物理路径,url等地 方.在<h1><h2><h3&g ...