欢迎加入王导的VIP学习qq群:==>932194668<==
RPM包能制作什么
- 一个应用程序
- 库文件
- 配置文件
- 文档包
制作步骤
创建制作目录
- BUILD
源代码解压以后,放在这个目录,不用用户参与,只需提供这个目录,真正的制作车间。
- RPMS
制作完成的RPM包放在这个目录。有子目录,跟硬件架构相关,特定平台子目录,i386,ARM等等。交叉编译。
- SOURCES
所有的原材料。
- SPECS
spec文件存放目录,制作RPM包的纲领性文件。软件包名.spec。
- SRPMS
SRC格式的RPM包存放目录。没有平台相关的概念。
注意:一般制作RPM包,建议不要用root用户,所以,以上制作目录结构,建议使用普通用户创建,不要用系统默认的。
- 宏定义
macrofiles:~/.rpmmacros,以最后这个为准
rmpbuild –showrc|grep _topdir
所以切换普通用户1
%_topdir /home/xxx/rpmbuild
命令:
1 | # mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} |
把源文件放进适当目录
制作spec文件(至关重要)
信息说明段(introduction section)Name,Version,Release,Group必须,其他可选。
rpm -qpi 可以查看一个rpm包的相关信息
定义各种tag
- Name:软件包的名字
- Relocations:是否可换安装地址。not relocatable
- Version:版本号,至关重要,只能用X.XX.XXX不能使用-
- Release:发行版本号 1%{?dist}
- License:声明版权,例如:GPLv2
- Group:属于那个组,不要自己定义,在以下组里找,只要存在的组就可以 less /usr/share/doc/rpm-4.4.2.3/GROUPS
- URL
- Packager:制作者<邮箱>
- Vendor:提供商
- Summary:概要
- %description:描述
- Source:源文件,链接,Source0:解压缩主原材料,Source1:脚本等等
- BuildRoot:编译好的程序,临时安装根目录,配合file section,收集哪些文件,打包到RPM包,最后在clean section中删除。可以规定任意目录:/%{_tmppath}/%{name}-%{version}-%{release}-root
- BuildRequires:定义依赖关系,编译依赖和安装依赖。
准备段prep section
解压缩源码包到制作目录,cd进去,设定工作环境、宏,等等。
单独的宏来定义:
- %prep
- %setup -q 静默模式
制作段build section
1 | %build |
安装段install section
1 | %install |
补充:Linux系统install命令:类似于cp
install /etc/fstab /tmp
install -d /tmp/test 创建目录
install -D /etc/fstab /tmp/noexistsdir/fstab
可以直接指定安装目标处不存在的目录,但是要把安装的源文件名也指定
脚本段script section
1 | %pre安装前 $1=0,1,2 卸载,安装,升级 |
清理段clean cection
1 | %clean |
文件段files section
除了debug信息,都要做进RPM包
1 | %files -f %{name}.lang |
更改日志段change log section
1 | %changelog |
制作RPM包
rpmbuild命令
-bp 只执行到prep段
-bi 只执行到install段
-bc 只执行到build段
-bb 制作二进制格式的RPM包
-bs 制作源码格式的RPM包
-ba 既制作二进制格式又制作源码格式
-bl 检查files字段和buildroot文件是否一一对应,不一致则报错
展开rpm源码包
rpm2cpio xxxx-src.rpm | cpio -id
到哪去找源码包呢?
rpmfind.net
rpm.pbone.net
YUM后的rpm包保留在本地的方法
1 | # sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf |
rpm包默认存放路径
1 | /var/cache/yum/base/packages |
fpm制作rpm包
1 | # yum install ruby |