zoukankan      html  css  js  c++  java
  • linux RPM manager

    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.2    
    Release:    1%{?dist}
    Summary:  nginx web server     
    
    Group:    Applications/Internet
    License: fuck
    URL:    http://www.feixiangwl.cn    
    Source0:    nginx-1.10.2.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 0755 %{SOURCE1} %{buildroot}/readme
    
    %files
    %defattr(-,root,root,0755)
    /usr
    /etc
    /var
    
    %files readme       #(定义上面的子包包含哪些文件)
    %defattr(-,root,root,0755)
    /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         #公钥的路径
     
  • 相关阅读:
    Django 数据库常用字段类型、选项参数、外键约束
    Django 项目基础配置
    MySQL连接列值
    SQL 限制查询结果
    python+appium+真机测试
    P3089 [USACO13NOV]POGO的牛Pogo-Cow
    P2889 [USACO07NOV]挤奶的时间Milking Time
    P2679 子串
    P3932 浮游大陆的68号岛
    P1514 引水入城
  • 原文地址:https://www.cnblogs.com/dufeixiang/p/10649152.html
Copyright © 2011-2022 走看看