rpm包制作
来源:互联网 发布:相对论知乎 编辑:程序博客网 时间:2024/05/27 03:29
RPM包制作简介
----00096871
1 简介
RPM 是 Red HatPackage Manager 的缩写,原意是Red Hat软件包管理。 先介绍一下rpm命令的一些基本用法:
1)、对系统中已经安装的软件查询:rpm -q softwarename
2)、查询系统中已安装的包:rpm -qa[softwarename]
3)、查询已安装软件包都安装到何处:rpm -qlsoftwarename
4)、安装 rpm -ivh softwarename.rpm
5)、删除 rpm -e softwarename
其余更多的用法参照man rpm
2 打包
使用rpmbuild打包,流程分为如下三步
1)、安装打包套件rpm-build
yuminstall rpm-build
2)、建立打包环境:
手动创建打包目录:
mkdir-p ~/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
或者通过rpm命令解src压源码包:
rpm –i*.src.rpm
通过命令解压源码包,在/root/rpmbuild/目录下生成SPEC SOURCE两个文件夹
目录说明:
--BUILD #编译之前,如解压包后存放的路径,编译时所用的暂存目录
--BUILDROOT #编译后存放的路径
--RPMS #打包完成后生成的rpm包存放的路径
--SOURCES #源包所放置的路径,放置原始码及修补档等等
--SPECS #spec文档放置的路径
--SRPMS #生成的rpm源码包放置的路径
注:一般我们都把源码打包成tar.gz格式然后存放于SOURCES路径下,而在SPECS路径下编写spec文档,通过命令打包后,默认会把打包后的rpm包放在RPMS下,而生成的源码包会被放置在SRPMS下
3)执行打包脚本
输入如下命令运行 /root/rpmbuild/目录下的spec脚本,生成rpm包:
rpmbuild-ba filename.spec
执行打包脚本后生成的rpm包路径:
/root/rpmbuild/RPMS/
生成的源码包路径:
/root/rpmbuild/SRPMS/
3 SPEC文档
specs文件由如下几个部分组成:
%preample(定义常用的宏,如Summary软件说明、Name软件名称、Version版本等)、%prep (准备部分,比如创建目录,解压源码包等,可使用%setup内部函数)、 %setup、 %patch、%build (在BUILD目录编译,可使用%configure内部函数,或者其他编译工具,如cmake, perl等)、%install(安装到BUILDROOT虚拟目录)、%uninstall、%verify、%clean、%file list、%changelog等。
3.1 分段说明
1) preample 定义宏,以下为常用的宏:
Summary:说明
Name:版本包名称
Version:版本号
Release:发布次数
Copyright:
Group:
Source:
Patch:
URL:
Distribution:
Vendor:
Packager:
%description
其他宏:
icon:
dependency:
requires:
conflicts:
patch:
Serial:
AutoReqProv:[yes/no]
ExcludeArch:
ExclusiveArch:
ExcludeOs:
ExclusiveOs:
2) %prep 预处理脚本
这个阶段包含%setup语句,格式如下:
%setup -q -n %{name}-%{version}
%setup将会执行如下命令:
rm-rf
tarzxf
mv/usr/src/linpus/BUILD
chown
umask
...
说明:
%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。
3) %build
./configure
make
4 )%install 开始把软件安装到虚拟的根目录中
make install
5 )%clean
make clean
6 )%files
%doc 将文档导入$RPM_DOC_DIR
%dir 导入目录并文件
spec文件中用到的宏
用rpmbuild制作rpm包时用到很多宏变量。
rpm --showrc或rpmbuild --showrc可以显示所有rpmrc和macros定义的变量值。
大部分宏在/usr/lib/rpm/macros定义。不过在/usr/share/vim/vimfiles/template.spec有一个变量%{?dist}例外,单独包含在下面文件中/etc/rpm/macros.dist
3.2 名称不一致
用spec文件打包时,经常遇到源码的*.tar.gz包与预期生成的rpm名称不一致的情况,比如python-olso-messaging,它的源码包为oslo.messaging.tar.gz,与rpm包不一致,打包的名称冲突怎么解决呢?
Spec文件中
%setup字段中增加-n选项,比如
setup -n %{pypi_name}-%{upstream_version} -S git
如果不加-n,且源码的*.tar.gz包与预期生成的rpm包不一致,将打包失败提示找不到*包。
注意, -n 后面的字符串要填写tar.gz包的名称。
3.3 控制打包的文件
%files字段定义了哪些文件添加到rpm包,如果在打包的目录中有文件不希望被打包进去,该如何做到呢?这就用到%exclude啦,如下:
%files
%doc LICENSE
%{_bindir}/packstack
%{_datadir}/packstack
%{python_sitelib}/packstack
%{python_sitelib}/packstack-*.egg-info
%exclude%{python_sitelib}/packstack/mytest.py
不想将packstack目录下的mytest.py文件打包到rpm包中的,就可以这样使用%exclude,注意%exclude后面要有一个空格。
4 Python方式制作rpm包
在setup.py所在目录输入打包命令
python setup.py bdist_rpm
在当前目录会生成一个dist目录,里面存放生成的rpm包
Python还可以生成spec文件,命令:
python setup.py bdist_rpm –spec_only
生成的spec文件同样存放在dist目录下。
- 如何制作rpm包
- 如何制作rpm包
- 制作Linux RPM包
- RPM包的制作
- 制作rpm包
- 如何制作rpm包
- rpm包制作
- rpm包制作过程
- [整理] RPM包制作
- 如何制作rpm包
- rpm包制作
- rpm包制作实例
- RPM包制作
- 自己动手制作RPM包
- linux rpm 包制作
- 制作RPM包
- rpm包制作详解
- 如何制作rpm包
- 程序员快围观!2016年最受欢迎中国开源软件TOP 20
- Educational Codeforces Round 9 E. Thief in a Shop
- Linux 查看系统信息 常用命令集合
- JCOP Shell常用指令
- C# 实现WebSocket服务端
- rpm包制作
- IOS如何解决ARC后出现的PerformSelector may cause a leak because its selector is unknown
- Android ButterKnife导入之后编译报错或者空指针问题
- HDU5618 Jam's problem again
- Error creating document instance. Cause: org.xml.sax.SAXParseException报错
- 编程修养(三)
- IntelliJ IDEA 问题总结之一 —— jar包、assets、maven、git
- DEDECMS之301重定向
- SAP发布S4/HANA 意义超过R3