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

制作过程

  1. introduction section
  2. prep section |解压,宏,

    %prep

    %setup
  3. build section

    %build
  4. install section

    %install
  5. clean section

    %clean

    rm -rf %{buildroot}
  6. 脚本段 在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:

  1. release 指第几次制作,跟version无关

  2. 制作过程:

    rpm build:首先解压SOURCE里的文件到BUILD,在BUILD里生成一个子目录,编译过程会跳到子目录里去执行./config/make,编译之后安装,不是安装到系统上,而是安装到一个临时目录中去,install安装到buildroot目录下,把buildroot目录当作操作系统目录。下一步:file section ,rpm 命令根据file section中列出的文件,把BUILD目录中的那些file文件压缩成rpm包。打包完成后执行clean过程,清除BUILDROOT和BUILD目录。

    BUILDROOT里除了debug的文件,其他的都必须做进rpm包

  3. %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

  4. %build

    ./configure

    --etcdir="%{_sysconfdir}"

    --mandir="%{_mandir}"

    --il8n="0"

    --scrip="0"

    %{_make} %{?_smp_mflags} ==>对称多处理器上,可以加快编译过程

  5. %install

    %{__rm} -rf %{buildroot} 删除之前安装的,没有也不影响

    %{__make} install DESTDIR="%{buildroot}"

    %find_lang %{name}

    在buildroot目录下会生成一堆

    6。 %clean

    %{__rm} -rf %{buildroot}

    清理此前制作过程中的buildroot

    rpmbuild --clean xxx.spec可以执行spec的clean过程

  6. %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,-) - ==> 保持原有的
  7. 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.rpm

  • tar -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文件编写

  1. TagName: value

  2. 用户自定义宏

    %define macro_name value

    %{macro_name} %macro_name

  3. # 注释 注释里不能使用% 非要使用的话 %%

  4. 不可省略

    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:

rpm构建流程学习总结的更多相关文章

  1. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

  2. PyTorch如何构建深度学习模型?

    简介 每过一段时间,就会有一个深度学习库被开发,这些深度学习库往往可以改变深度学习领域的景观.Pytorch就是这样一个库. 在过去的一段时间里,我研究了Pytorch,我惊叹于它的操作简易.Pyto ...

  3. webpack前端构建工具学习总结(一)之webpack安装、创建项目

    npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器 ...

  4. webpack前端构建工具学习总结(二)之loader的使用

    Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为 ...

  5. webpack前端构建工具学习总结(四)之自动化生成项目中的html页面

    接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...

  6. rpm的specs学习

    参考 制作rpm包:    https://wangbin.io/blog/it/yum-rpm-make.html linux rpm安装mysql: https://www.jianshu.com ...

  7. Tcp客户端构建流程

    tcp客户端构建流程 tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机.查手机卡.设置铃声.等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多 示 ...

  8. 廖雪峰Java12maven基础-1maven入门-3构建流程

    maven是一个Java项目管理和构建工具: 标准化项目结构 标准化构建流程(编译.打包.发布) 依赖管理 Maven的构建流程 clean 删除所有编译生成的文件 compile 编译源码.编译测试 ...

  9. webpack的构建流程

    一.运行流程 webpack 的运行流程是一个串行的过程,它的工作流程就是将各个插件串联起来 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条webpack机制中,去改变webpa ...

随机推荐

  1. Python-初见

    目录 概述 关键字 标准数据类型 Number String List Tuple Set Dictionary 删除对象 数据类型转换 推导式 运算符 迭代器与生成器 迭代器 生成器 函数 参数传递 ...

  2. Markdown练习

    这是一级标题 这是二级标题 这是三级标题 这是无序列表1 这是无序列表2 有序1 有序2 重点 计网 1. 第一章 第一部分 1.概念.组成.功能和分类 1. 概念 计算机网络是互连的.自治的计算机的 ...

  3. Python 中的鸭子类型和猴子补丁

    原文链接: Python 中的鸭子类型和猴子补丁 大家好,我是老王. Python 开发者可能都听说过鸭子类型和猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这 ...

  4. 前台主页搭建、后台主页轮播图接口设计、跨域问题详解、前后端互通、后端自定义配置、git软件的初步介绍

    今日内容概要 前台主页 后台主页轮播图接口 跨域问题详解 前后端打通 后端自定义配置 git介绍和安装 内容详细 1.前台主页 Homeviwe.vue <template> <di ...

  5. Dapr 远程调试之 Nocalhost

    虽然Visual studio .Visual studio code 都支持debug甚至远程debug ,Dapr 搭配Bridge to Kubernetes 支持在计算机上调试 Dapr 应用 ...

  6. Prim 最小生成树 图解

    ​ 什么是生成树 子图:G=<V,E>,G'=<V', E'>,为两个图(V为点集,即图中点的集合,E为边集),如果V'是V的子集且E'是E的子集,则G'是G的子图. 如果V' ...

  7. BottomNavigationView点击刷新问题

    BottomNavigationView点击刷新问题 问题: 项目中使用了BottomNavigationView作为底部导航栏. 点击item切换的时候发现会有闪烁现象出现. 原因: BottomN ...

  8. IE 浏览器将停止服务,这是真的吗?

    浏览器通常是指用来检索.展示以及传递 Web 资源信息的一种应用程序,它能将网页.图片.视频等等 Web 上的信息呈现给我们. 如果现在发起一个投票:"你觉得好用的浏览器是什么?" ...

  9. MAC系统下破解WIFI密码(亲测可用,含wifi密码字典)

    出差第二天,住的小区因为疫情被封,宿舍又没有wifi,看着附近满满的WIFI信号列表,wifi万能钥匙却一个都连接不上,心中一万匹CNM...于是电脑连上手机热点,然后各种折腾,终于破解了一个隔壁的w ...

  10. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...