zoukankan      html  css  js  c++  java
  • Linux:Day9(下) 程序包管理

    API:Application Programming Interface 

      POSIX:Portable OS

      程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接

      静态编译:

      共享编译:.so

    ABI:Application Binary Interface

      Windows与Linux不兼容

      库级别的虚拟化:

        Linux:WINE

        Windows:Cywin

    系统级开发

      C

      C++

    应用级开发

      jave

      Python

      php   

    二进制应用程序的组成部分:

      二进制文件、库文件、 配置文件、帮助文件

      程序包管理器:

       debian:deb,dpt

          redhat:rpm,rpm

        rpm:Redhat Package Manager

          RPM is Package Manager

        Gentoo

        Archlinux

    源代码:name-VERSION.tar.gz

      VERSION:major.minor.release

    rpm包命令方式:

      name-VERSION-ARCH.rpm

        VERSION:major.minor.release

        ARCH:release.os.arch

        zlib-1.2.7-13.e17.i686.rpm

        常见的arch:

          x86:i386,i486,i586,i686

          x86_64:x64,x86_64,amd64

          powerpc:ppc

          跟平台无关:noarch

      testapp:拆包

        testapp-VERSION-ARCH.rpm:主包

        testapp-devel-VERSION-ARCH.rpm:支包

        testapp-testing-VERSION-ARCH.rpm

      包之间:存在依赖关系

        X,Y,Z

        yum:rpm包管理器的前端工具;

        apt-get:deb包管理器前端工具;

        zypper:suse上的rpm前端管理工具;

        dnf:Fedora 22+ rpm包管理器前端管理工具;

    查看二进制程序所依赖的库文件:

      ldd /PATH/TO/BINARY_FILE

    管理及查看本机装载的库文件:

      ldconfig

        /sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系;

        配置文件为:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf

        缓存文件:/etc/ld.so.cache

    程序包管理:

      功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;

      1、程序的组成清单(每个包独有)

        文件清单

        安装或卸载时运行的脚本

      2、数据库(公共)

        程序包名称及版本

        依赖关系;

        功能说明;

        安装生成的各文件的文件路径及校验码信息;

    管理程序包的方式:

      使用包管理器:rpm

      使用前端工具:yum,dnf

    获取程序包的途径:

      (1)系统发行版的光盘或官方的服务器;

        CentOS镜像:

          http://mirrors.aliyun.com

          http://mirrors.sohu.com

          http://mirrors.163.com

      (2)项目官方站点

      (3)第三方组织:

        Fedora-EPEL

        搜索引擎:

          http://pkgs.org

          http://rpmfind.net

          http://rpm.pbone.net

      (4)自己制作

    建议:检查其合法性

      来源合法性;

      程序包的完整性;

    CentOS系统上rpm命令管理程序包:

      安装、卸载、升级、查询、校验、数据库维护

      安装:

        rpm {-i|--install} [install-options] PACKAGE_FILE ...

          -v:verbose

          -vv:

          -h:以#显示程序包管理执行进度;每个#表示2%的进度

          rpm -ivh PACKAGE_FILE ...

            [install-options]

              --test:测试安装,但不真正执行安装过程;dry run模式;

              --nodeps:忽略依赖关系;

              --replacepkgs:重新安装;

              --nosignature:不检查来源合法性;

              --nodigest:不检查包完整性;

              --noscripts:不执行程序包脚本片断;

                %pre:安装前脚本;  --nopre

                #post:安装后脚本;  --nopost

                %preun:卸载前脚本;  --nopreun

                %postun:卸载后脚本;  --nopostun

      升级:

        rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

        rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

          upgrage:安装有旧版程序,则“升级”;如果不存在旧版程序包,则“安装”;

          freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

          rpm -Uvh PACKAGE_FILE ...

          rpm -Fvh PACKAGE_FILE ...

          --oldpackage:降级;

          --force:强行升级;

        注意:(1)不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版内核;

              (2)如果原程序包的配置文件安装后曾被悠,升级时,新版本提供的同一配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

      

      查询:

        rpm {-q|--query} [select-options] [query-options]

        [select-options]

          -a:所有包

          -f:查看指定的文件由哪个程序包安装生成

          --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;

          --whatrequires CAPABILITY:查询指定的CAPABILITY由哪个包所依赖;

        [qurey-options]

          --changelog:查询rpm包的changelog

          -c:查询程序的配置文件

          -d:查询程序的文档

          -i:information 查询一个程序包的简要信息;

          -l:查看指定的程序包安装后生成的所有文件;

          --scripts:程序包自带脚本片断

          -R:查询指定的程序包所依赖的CAPATBILITY;

          --provides:列出指程序包所提供的CAPATBILITY;

        用法:

          -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE

          -qpi PACKAGE_FILE,-qpl PACKAGE_FILE,....

          -qa

      

      卸载:

        rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

          [--notriggers] [--test] PACKAGE_NAME ...

      校验:

        rpm {-V|--verify} [select-options] [verify-options]

          S file Size differs
          M Mode differs (includes permissions and file type)
          5 digest (formerly MD5 sum) differs
          D Device major/minor number mismatch
          L readLink(2) path mismatch
          U User ownership differs
          G Group ownership differs
          T mTime differs
          P caPabilities differ

      包来源合法性验证及完整性验证:

        完整性验证:

        公钥加密:

          对称加密:加密、解密使用同一密钥;

          非对称加密:密钥是成对儿的;

            public key:公钥,公开所胡人

            secret key:私钥,不能公开

        导入所有需要公钥:

          rpm --import /PATH/FROM/GPG-PUBKEY-FILE

          CentOS 7发行版光盘提供的密钥文件;RPM-GPG-KEY-CentOS-7

      

      数据库重建:

        rpm {--initdb|--rebuilddb}

          initdb:初始化

            如果事先不存在数据库,则新建之;否则,不执行任何操作;

          rebuilddb:重建

            无论当前存在与否,直接重新创建数据库;

  • 相关阅读:
    AI---训练集(train set) 验证集(validation set) 测试集(test set)
    Kubernetes核心概念总结
    GoLang structTag说明
    GOROOT、GOPATH和project目录说明
    在iOS上实现二维码功能
    Page View Controllers
    ios 视图切换翻页效果
    iOS中scrollview自动滚动的实现
    关于Block的copy和循环引用的问题
    Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法
  • 原文地址:https://www.cnblogs.com/sq5288/p/10105239.html
Copyright © 2011-2022 走看看