rpm构建流程学习总结
rpm构建流程
学习链接:
b站马哥: https://www.bilibili.com/video/BV1ai4y1N7gp
RedHat:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/index
小记
#自定义宏命令
rpmbuild -bp xx.spec --define="_topdir /root/rpmbuild"
#查找
yum provides /usr/lib/rpm/redhat/redhat-hardened-ld
#安装
yum install rpmdevtools
#创建rpmbuild文件夹
rpmdev-setuptree
#自定义宏配置
vi .rpmmacros
#查宏配置
rpmbuild --showrc
制作过程
- introduction section
- prep section |解压,宏,
%prep
%setup - build section
%build - install section
%install - clean section
%clean
rm -rf %{buildroot} - 脚本段 在install之后
%pre 安装前
%post 安装后
%preun 卸载前
%postun 卸载后
1 install
2 upgrade
0 remove
7. file section
%file
定义文件如何包含进rpm包,包含哪些文件,文件的权限,这些文件被当作什么 %doc %dir %config(noreplace) .rpmnew .orig
主要目录【标准化的工作空间】
- SOURCES |源码包,Unzip to BUILD
- SPEC | .spec文件
- BUILD |解压到该目录
- BUILDROOT |安装软件后,以该目录为根生成的路径 files[] 把buildroot里有用的部分拿出来,放到rpm里 最后clean会清除 buildroot、build
- RPMS
- SRPMS
BuildRequires
制作软件包需要的依赖 gcc binutils
Requires
安装软件包需要的依赖
Tips:
release 指第几次制作,跟version无关
制作过程:
rpm build:首先解压SOURCE里的文件到BUILD,在BUILD里生成一个子目录,编译过程会跳到子目录里去执行./config/make,编译之后安装,不是安装到系统上,而是安装到一个临时目录中去,install安装到buildroot目录下,把buildroot目录当作操作系统目录。下一步:file section ,rpm 命令根据file section中列出的文件,把BUILD目录中的那些file文件压缩成rpm包。打包完成后执行clean过程,清除BUILDROOT和BUILD目录。
BUILDROOT里除了debug的文件,其他的都必须做进rpm包%prep
解压到BUILD,cd进去,设置一些环境变量,设置一些宏,为编译做准备
%setup -q 像是prep的扩展
-q 静默模式 不显示过程 以最少输出显示
%patch打补丁%setup -q -a 1
-a 1 ==> unpack source1 after change directory 先cd到build目录下 ?
-b 2 ==> befor
-c creat %{BUILD}/%Name-%Version
-T 不展开 Disable the automatic unpacking of the archives%build
./configure
--etcdir="%{_sysconfdir}"
--mandir="%{_mandir}"
--il8n="0"
--scrip="0"
%{_make} %{?_smp_mflags} ==>对称多处理器上,可以加快编译过程%install
%{__rm} -rf %{buildroot} 删除之前安装的,没有也不影响
%{__make} install DESTDIR="%{buildroot}"
%find_lang %{name}
在buildroot目录下会生成一堆
6。 %clean
%{__rm} -rf %{buildroot}
清理此前制作过程中的buildrootrpmbuild --clean xxx.spec可以执行spec的clean过程
%file
%defattr(-,root,root,-) 权限
%doc 文档
%config %{_sysconfigdir}/axelrc 配置文件
/usr/local/bin/axel
%dir 目录
%conf(noraplace) 指的是新的配置文件是否替换,如果原来的旧的配置没有修改,会替换,修改了,不会替换,会把原来的改成比如xxx.conf.orig,再去生成新的。- usr/src下的debug是不用包含进来的
- %attr(0755, root, root) /etc/rc.d/init.d/nginx %attr表示单个属性,如果不这样写,会继承默认属性 %defattr (-,root,root,-)
%attr(-,root,-) - ==> 保持原有的
rpmbuild --showrc|grep _tmppath
rpmdev-setuptree命令相当于 mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
#家目录 vi ~/.rpmmacros
%_topdir %(echo `pwd`)/rpmbuild
%{?_smp_flag} ?:有的话就用,没有的话就不用
rpmbuild
-ba all ==> bb + bs
-bb 表示制作二进制格式的rpm包
-bc %build
-bp %prep
-bi %install
-bl check 有多余的文件或者文件没有被放到rpm包里都会error。==>
Check the listing of filee for the RPM and generate errors if the buildroot is missing any of the file to be installed.-bs 表示制作源码格式的rpm包 src.rpm
rpm常用命令
netstat -tnlp 查看端口
rpm -ivh xxx.rpm 安装
rpm -qi xxx.rpm 查看rpm包信息
rpm -e xxx.rpm 卸载
rpm -Uvh xxx.rpm 升级
rpm2cpio xxx.src.rpm > xxx.cpio 解包
rpm2cpio xx | cpio -t
rpm2cpio xx | cpio -id 展开在当前目录下xxx.src.rpm 对源码包rebuild
rpmbuild --rebuild xxx.src.rpmtar -xf xx.tar -C /var/tmp
jcf/zcf 压缩
tar -jcf xxx.tar.bz2 xxx/*lftp ip 一个下载工具,支持很多访问文件的协议:ftp, ftps, http, https, hftp, fish
rpm -K |-- checksig 检查签名 所以构建要有数字签名 非对称加密 openssl gpg
PGP OpenPGP ===> GUN PG对rpm签名使用gpg命令
gpg --gen-key
gpg --list-keys
gpg --export -a 'xxx' > RPM-GPG-KEY-MAGE 导出公钥
rpm --addsign xx.rpm 签名rpm --import RPM-GPG-KEY-MAGE
rpm -K xxx.rpm 检查签名rpm --checksig xx.rpm
rpm -api xxx.rpm Signature 可以看到签名信息
制作过程中签名
~/.rpmmacros
%_signature gpg
%_gpg_name MAGE
最好在普通用户下执行rpmbuild,防止spec文件里写一些rm -rf /
spec文件编写
TagName: value
用户自定义宏
%define macro_name value
%{macro_name} %macro_name# 注释 注释里不能使用% 非要使用的话 %%
不可省略
Name
Version
Release
Group ==> /usr/share/doc/rpm-4.11.3/GROUPS
关于公司- Vender
-URL
-Package
License
Summary
%description-Requires 安装时
-Provide 能力,未定义则使用Name
-BuildRequires 编译时buildroot 安装时作为假想的根目录 %{}/%{name}-%{version}-%{release} == $RPM_BUILD_ROOT
Source1: 必须位于SOURCE 可能是链接 但是不会去跟着下载
Source2:
...Patch1:
Patch2:- Vender
rpm构建流程学习总结的更多相关文章
- [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2
之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...
- PyTorch如何构建深度学习模型?
简介 每过一段时间,就会有一个深度学习库被开发,这些深度学习库往往可以改变深度学习领域的景观.Pytorch就是这样一个库. 在过去的一段时间里,我研究了Pytorch,我惊叹于它的操作简易.Pyto ...
- webpack前端构建工具学习总结(一)之webpack安装、创建项目
npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器 ...
- webpack前端构建工具学习总结(二)之loader的使用
Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为 ...
- webpack前端构建工具学习总结(四)之自动化生成项目中的html页面
接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...
- rpm的specs学习
参考 制作rpm包: https://wangbin.io/blog/it/yum-rpm-make.html linux rpm安装mysql: https://www.jianshu.com ...
- Tcp客户端构建流程
tcp客户端构建流程 tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机.查手机卡.设置铃声.等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多 示 ...
- 廖雪峰Java12maven基础-1maven入门-3构建流程
maven是一个Java项目管理和构建工具: 标准化项目结构 标准化构建流程(编译.打包.发布) 依赖管理 Maven的构建流程 clean 删除所有编译生成的文件 compile 编译源码.编译测试 ...
- webpack的构建流程
一.运行流程 webpack 的运行流程是一个串行的过程,它的工作流程就是将各个插件串联起来 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条webpack机制中,去改变webpa ...
随机推荐
- Struts2-获取值栈对象与结构
1.获取值栈对象有多种方式 (1)使用ActionContext类里面的方法获取值栈对象 @Override public String execute(){ //1.获取ActionContext类 ...
- QT-进制转换计算器
适合初学者练手 用QT做的一个进制转换工具,主要涉及数据类型转换.//后面再加上基本的计算. Github地址:https://github.com/wsdassssss/Calculate.git ...
- openoffice将word转pdf中文乱码或消失的坑
将windows系统下的中文字体文件(C:\Windows\Fonts),放到/usr/share/fonts下,必须重启openoffice.
- 洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜
题目链接 P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目 dp代码 #include <iostream> #includ ...
- C# 中托管内存与非托管内存之间的转换
c#有自己的内存回收机制,所以在c#中我们可以只new,不用关心怎样delete,c#使用gc来清理内存,这部分内存就是managed memory,大部分时候我们工作于c#环境中,都是在使用托管内存 ...
- Msf路由转发
Msf路由转发 前言 在内网渗透中,我们拿下了一台机器A的权限,再通过A做一个跳板来做横向渗透,这时我们对于内网中的其他机器是无法连接的.我们在A上做横向渗透是很困难的,因为在这台机器一般为web服务 ...
- 共读《redis设计与实现》-单机(一)
上一章我们讲了 redis 基本类型的数据结构 和 对象系统 ,这篇来说一下单机redis 的知识点. 一.数据库 一个数据库在redis中就有一个结构体,而数据库的结构体是由redisServer这 ...
- 使用 shell 脚本自动获取发版指标数据
问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...
- Linux命令篇 - sed 命令
sed sed - stream editor for filtering and transforming text: sed:利用脚本来处理.编辑文本文件: 格式:sed [OPTION]... ...
- Python 函数进阶-递归函数
递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...