一 学习RPMS制作rpm包目的
核心: 熟悉'spec'-->'配置文件'的语法
备注: 所有'能安装的软件包'都可以尝试下
二 友情提示
备注: 一般'*.src.rpm'都'自带'spec文件,大多数'直接安装'即可,部分需要'修改后'编译安装
主要: '*.tar.gz'之类的源代码分发包'制作rpm包'
最终: 扩充自己的'yum源'
三 基础环境安装
yum -y install rpm-build rpm-devel rpmdevtools
1: '初始化相应的目录'
rpmdev-setuptree
1) rpmdev-setuptree 程序将创建 ~/rpmbuild 目录,以及一系列'预设的子目录'(如 SPECS 和 BUILD),你将使用它们作为'打包目录',一般是5个
2) 另外,还会创建 ~/.rpmmacros 文件,它用于'设置各种选项'
不需要: 'rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS}'
2: '生成一个spec模板' -->'核心: 编译'
rpmdev-newspec nginx -->'nginx.spec'
############# 分割线 #############
补充:编译的时候'对版本有要求'的-->'比如gcc'
后续:rpmbuild命令
查看'rpm版本'-->因为rpmbuild的原因,所以rpm版本'最低'要与rumbuild保持一致
关于rpmbuild版本的问题
四 spec参考
(1) 重建源RPM
(2) 您真的'需要重建吗'?
(3) 在'哪里获取'SRPM软件包
五 进入主题
macros'翻译' --> '宏,巨大'
(1)原理
(1) RPM打包的时候需要'编译源码'
(2) 还需要把编译好的'配置文件(conf)、二进制命令文件(bin或sbin)、库函数之类(lib)的文件'按照安装好的样子放到'合适的位置'
(3) 还要根据需要'对RPM的包进行测试',这些都需要先有一个"工作空间"
rpmbuild命令使用一套'标准化'的工作空间
(2)大体框架
'宏变量'和'默认位置' --> '对应关系'
目录名('包含s') --> 宏代码('%_+目录名去S+然后小写+dir')
SPECS %_specdir
目录名('不包含s') --> 宏代码('%_+目录名小写+dir')
BUILD %_builddir
说明: 'BUILDROOT初始化'的时候'不存在',所以初始子目录'只有5个'
宏理解: '映射关系'
需求1:查询宏变量的含义
'精准查找'宏变量 --> rpm --eval %{...}
需求2:改变rpmbuild建立的目录
man rpmbuild -->'加载顺序'
后记:'后者'这4个文件都是rpmrc相关的内容,rpmrc主要是用来定义一些'跟平台特型相关的一些选项'
'改变次默认位置',可以修改配置文件:~/.rpmmacros中'变量_topdir对应的值' -->'实际是覆盖'
%_topdir /mnt/rpmbuild
测试
'/usr/lib/rpm/macros'文件中定义所有
自己:一些宏出处
spec中'Release的出处'
Release: 1%{?dist}
vim /usr/lib/rpm/rpmrc
(1)'rpm软件包'最终形式
569 %_build_name_fmt %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
(2)rpm --eval %{u2p}
'/'
再次提醒:有什么'不懂的宏'直接利用'上述命令查询即可'
'并行编译':充分利用cpu -->make的'时候'
x86_64架构'编译参数'
补充
标准 --> '系统定义的'