RPM manage:
rpm2cpio package_name | cpio -id #将一个rpm包解压至当前目录
rpm -qi package_name #查看一个已安装的rpm包信息
rpm -qpi package_name #查看一个文件系统上的制定rpm包信息
rpm -Uvh package_name #升级一个rpm包
rpm -e package_name #卸载rpm包 -ivh 显示详细信息 --nodpes 忽略依赖
rpm -i package_name #安装rpm包 -ivh 显示详细信息
rpm -qd package_name #查看rpm包生成的文档路径
rpm -qc package_name #查看rpm包生成的配置文件路径
rpm -q --scripts package_name #查看安装rpm包前运行的脚本 RPM Build:
构建rpm需要创建指定的文件夹:
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
可以手动创建,也可以在任何目录下直接运行rpmbuild test.spec
error: failed to stat /root/test.spec: 没有那个文件或目录
虽然会报错,但是这时已经自动在当前目录下生成了rpmbuild目录结构了:

rpmbuild
├── BUILD                 #当我们rpmbuild -ba 构建rpm时会自动在这个目录下进行编译
├── BUILDROOT       #会当成临时根,会将编译好的软件包生成在这个目录下
├── RPMS                 #编译好的rpm包会存放在这个文件夹
├── SOURCES          #放源码包,一般为tar.gz格式
├── SPECS               #.sepc 文件
└── SRPMS               #存放src.rpm包【rpm格式的源码包,可以在不同平台上进行build】

rpmbuild  --showrc                #显示系统定义的macros
rpmbuild --showrc | grep _topdir #显示系统默认的rpmbuild工作路径
NOTE: 在macros中 ‘__’表示命令别名(不同的os命令路径可能不一样,所以需要使用命令别名),'_'表示环境变量。 SPEC FILE:

macros:

#开头为注释,注释中不能使用%等宏关键字,如要使用#,可以写成##
%define nginx_user nginx    #define macros
%{nginx_user}                      #use macro

spec文件必须字段:
name:
  不能包含“-”
version:
  不能包含“-”
release:

  发行号

group:
所属组,/usr/share/doc/rpm-version/GROUPS 中任意一个

定义能力:
Provides: webserver
#如果定义了能力,别人如果安装软件需要依赖的话可以依赖我们自己定义的能力,如果没有定义默认就是软件包的名字。

所有步骤:

1.准备阶段:

%prep:
1.切换工作目录,解压软件包
2.设置权限,设置环境变量等
#可以用%setup 控制默认prep的动作

2.编译阶段:

%build:
#如果不需要编译可以留空。

3.安装阶段:

%install:
#安装

4.清理阶段:

%clean
#删除build中的文件

%file
#包含哪些文件,如果未完全包含编译生成的所有文件,那么构建rpm包时会报错

  %doc file                  #后面文件类型为文档

%docdir dir_name    #目录下所有内容都为文档

%config(noreplace)  #内容为配置文件(noreplace)

%defattr                    #定义文件默认权限

%attr(mode,user,group)  #定义文件权限,如果不定义则使用定义的默认权限

  eg:  %attr(-,root,-)

%defattr(-,root,root,0755)

额外选项:

%pre
#安装前运行的脚本
%post
#安装后运行的脚本
%preun
#卸载前运行的脚本
%postun
#卸载后运行的脚本

子包:将一个程序拆分为多个子包

如:将mysql拆分为主包和开发包:

mysql-server.rpm

mysql-devel.rpm

spec file 实例:

Name:  nginx
Version: 1.10.
Release: %{?dist}
Summary: nginx web server Group: Applications/Internet
License: fuck
URL: http://www.feixiangwl.cn
Source0: nginx-1.10..tar.gz
Source1: readme
BuildRoot: %_topdir/BUILDROOT
#BuildRequires:
#Requires: %description
this is my first rpm %package readme #子包(将readme单独作为一个包)
Summary: readme files
Group: Applications/Internet
%description readme
this is my first rpm %prep
%setup -q %build
./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx --conf-path=/etc/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --without-http_rewrite_module --without-http_gzip_module
make %install
make install DESTDIR=%{buildroot}
%{__install} -p -D -m %{SOURCE1} %{buildroot}/readme %files
%defattr(-,root,root,)
/usr
/etc
/var %files readme #(定义上面的子包包含哪些文件)
%defattr(-,root,root,)
/readme %changelog

签名:防止程序传播过程中被别人篡改

1.生成密钥对:

gpg --gen-key

NOTE:必须正确输入REAL NAME(真实姓名)选项,后期此项作为KEY_NAME使用。

2.查看系统已有的GPG KEY:

gpg --list-key

3.修改rpm宏使用我们刚才生成的密钥对:

# echo %_signature gpg >> ~/.rpmmacros
# echo "%_gpg_name <key_name>" >> ~/.rpmmacros
 
4.对已经存在的rpm包签名:
rpm --addsign <rpm_name>
 
5.导出公钥,以备后期其他客户端对包签名进行验证:
gpg --export -a "<key_name>" > RPM-GPG-KEY-ECDATA

6. 导入公钥(要验证rpm包的机器上导入):

rpm --import RPM-GPG-KEY-ECDATA   #RPM-GPG-KEY-ECDATA是公钥名称

7.查看已导入的公钥:

rpm -q gpg-pubkey-*

8.校验rpm包签名:

rpm -K <RPM_NAME>

NOTE:但是此时yum安装还不行,如果想要yum安装,必须在repo中定义:

enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ECDATA         #公钥的路径
 

linux RPM manager的更多相关文章

  1. linux RPM软件包管理

    linux RPM软件包管理 目录 1.软件包的介绍 2.rpm包管理 3.rpm包管理前端工具 1.软件包的介绍 在我们在对软件包管理前,先对软件包有个很好的了解,这样更方便我们来对其进行管理. 软 ...

  2. Sublime Text - Linux Package Manager Repositories

    Linux Package Manager Repositories http://www.sublimetext.com/docs/linux_repositories.html Sublime T ...

  3. linux rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpm

    linux rpm 安装mysql异常: [root@localhost upload]# rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpmerror: Fail ...

  4. Linux rpm安装问题解决

    1.安装时提示:warning: *.rpm: Header V3 RSA/SHA256 Signature, keykey ID c105b9de: NOKEY 解决的方法就是在rpm 语句后面加上 ...

  5. linux RPM/YUM包管理

    linux RPM/YUM包管理 目录 linux RPM/YUM包管理 RPM RPM包管理 查询rpm包 卸载rpm包 安装rpm包 YUM 查看yum服务器是否有需要安装的软件 下载安装指定的y ...

  6. Linux rpm 命令参数使用详解[介绍和应用]

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包(Binary)以及源代码包(Source)两 ...

  7. Linux rpm 命令参数使用详解[介绍和应用](转)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  8. Linux rpm 命令参数使用详解[介绍和应用](转)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  9. Linux RPM、YUM、APT包管理工具

    ⒈rpm包的管理 1)介绍 rpm是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件,RPM是RedHat Package Manager(RedH ...

随机推荐

  1. [20180423]flashback tablespace与snapshot standby.txt

    [20180423]flashback tablespace与snapshot standby.txt --//缺省建立表空间是打开flashback on,如果某个表空间flashback off, ...

  2. [20171124]bbed的使用问题2.txt

    [20171124]bbed的使用问题2.txt --//bbed 是探究oracle数据块的好工具,有时候不用转储,直接可以它看oracle内部块的内部结构.--//在使用中要注意一些问题,昨天又犯 ...

  3. [SequenceFile_3] MapFile

    0. 说明 MapFile 介绍 && 测试 1. 介绍 对 MapFile 的介绍如下: MapFile 是带有索引的 SequenceFile MapFile 是排序的 Seque ...

  4. windows下设置JupyterNotebook默认目录

    目录 windows下设置JupyterNotebook默认目录 生成配置文件 设置默认工作目录 设置快捷方式中的目标与起始位置 直接修改anaconda中的相关配置文件 windows下设置Jupy ...

  5. mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)

    首先sql_mode用于mysql的行为,sql_mode的多个值之间用','分隔: 如果想使用双引号就这样做: 1. 修改/etc/my.cnf文件 ,  双引号模式是ANSI_QUOTES 或   ...

  6. Python进阶(一)

    完成慕课网的python基础学习以后,大约花了三天时间,平均每天一个小时,总结了一些比较好的例题和思想方法,下面来学习python进阶吧 参考廖雪峰官方课程 函数 python官方函数调用文档 定义默 ...

  7. 个人技术博客(α)------javaweb的学习路程

    该博文大致内容是学习的一个过程,心得,并不是以技术博客为主,在此说明. 关于javaweb的学习开始的时间大概是从大二下(2017年6.7月份)的暑假开始的,在学长的介绍下加入了实验室进行学习,由于是 ...

  8. 【ArcGIS】安装ArcEngine 10的顺序

    Step1.安装VS 2010Step2.安装ArcGIS Desktop(不可跳过这步),如果直接安装ArcEngine,将出现如下错误提示因此必须首先安装ArcGIS Desktop或者ArcGI ...

  9. Python字符串操作之字符串分割与组合

    12.字符串的分割和组合 12.1 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s ...

  10. forever start app.js 启动node时,服务访问一次后第二次就不能访问了

    开始总是找不到原因,是因为在启动服务时,没有设置日志文件.突然想到了是不是forever安装的有问题,就重新安装forever , 这时候提示系统 no space left on device  , ...