• 软件包管理


    软件包管理

    包管理
    • 二进制应用程序的组成部分:
      二进制文件、库文件、配置文件、帮助文件
    • 程序包管理器:
      debian: deb文件, dpkg包管理器
      redhat: rpm文件, rpm包管理器
      rpm: Redhat Package Manager
                 RPM Package Manager
    包命名
    • 源代码:name-VERSION.tar.gz|bz2|xz
      VERSION: major.minor.release
    • rpm包命名方式: name-VERSION-release.arch.rpm
      例:bash-4.2.46-19.el7.x86_64.rpm
      VERSION: major.minor.release
      release:release.OS
      常见的arch:
      x86: i386, i486, i586, i686
      x86_64: x64, x86_64, amd64
      powerpc: ppc
      跟平台无关:noarch
    包命名和工具
    • 包:分类和拆包
      Application-VERSION-ARCH.rpm: 主包
      Application-devel-VERSION-ARCH.rpm 开发子包
      Application-utils-VERSION-ARHC.rpm 其它子包
      Application-libs-VERSION-ARHC.rpm 其它子包
    • 包之间:可能存在依赖关系,甚至循环依赖
    • 解决依赖包管理工具:
      yum:rpm包管理器的前端工具
      apt-get:deb包管理器前端工具
      zypper: suse上的rpm前端管理工具
      dnf: Fedora 18+ rpm包管理器前端管理工具
    库文件
    • 查看二进制程序所依赖的库文件 ldd /PATH/TO/BINARY_FILE
    • 管理及查看本机装载的库文件
      ldconfig 加载库文件
      /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径
    • 映射关系
      配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
      缓存文件:/etc/ld.so.cache
    包管理器
    • 程序包管理器:
      功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而 方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
    • 包文件组成 (每个包独有)
      RPM包内的文件
      RPM的元数据,如名称,版本,依赖性,描述等 安装或卸载时运行的脚本
    • 数据库(公共):/var/lib/rpm
      程序包名称及版本
      依赖关系
      功能说明
      包安装后生成的各文件路径及校验码信息
    rpm包管理
    • centOS系统上使用rpm命令管理程序包:
      安装、卸载、升级、查询、校验、数据库维护
      安装:
      rpm {-i|--install} [install-options] PACKAGE_FILE…
      -i 安装软件包
      -v: verbose 可视化,提供更多的详细信息的输出 -h: 以#显示程序包管理执行进度
      rpm -ivh PACKAGE_FILE ...
    rpm包安装
    • [install-options]
      --test: 测试安装,但不真正执行安装,即dry run模式
      --nodeps:忽略依赖关系
      --replacepkgs | replacefiles
      --nosignature: 不检查来源合法性
      --nodigest:不检查包完整性
      --noscripts:不执行程序包脚本
      %pre: 安装前脚本 --nopre
      %post: 安装后脚本 --nopost
      %preun: 卸载前脚本 --nopreun
      %postun: 卸载后脚本 --nopostun
    rpm包升级
    • 升级:rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
    • rpm {-F|--freshen} [install-options] PACKAGE_FILE... upgrade:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则“安装”
      freshen:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则不执行升级操作
      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: 查看指定的文件由哪个程序包安装生成
      -p rpmfile:针对尚未安装的程序包文件做查询操作
      --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
      --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
    • rpm2cpio 包文件|cpio –itv 预览包内文件
    • rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
    • [query-options]
      --changelog:查询rpm包的changelog
      -c: 查询程序的配置文件
      -d: 查询程序的文档
      -i: information
      -l: 查看指定的程序包安装后生成的所有文件
      --scripts:程序包自带的脚本
      --provides: 列出指定程序包所提供的CAPABILITY
      -R: 查询指定的程序包所依赖的CAPABILITY
    • 常用查询用法:
      -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 MD5改变
      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
    • 包来源合法性验正及完整性验证
      完整性验证:SHA256
      来源合法性验证:RSA
    • 公钥加密
      对称加密:加密、解密使用同一密钥
      非对称加密:密钥是成对儿的
      public key: 公钥,公开所有人
      secret key: 私钥, 不能公开
    • 导入所需要公钥
      rpm -K|checksig rpmfile 检查包的完整性和签名
      rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
      rpm -qa “gpg-pubkey*”
    rpm数据库
    • 数据库重建:
      /var/lib/rpm
    • rpm {--initdb|--rebuilddb}
      initdb: 初始化
      如果事先不存在数据库,则新建之 否则,不执行任何操作
      rebuilddb:重建已安装的包头的数据库索引目录
    yum
    • YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依 赖性,可在多个库之间定位软件包,up2date的替代工具
    yum配置文件
    • yum客户端配置文件:
      /etc/yum.conf:为所有仓库提供公共配置
      /etc/yum.repos.d/*.repo:为仓库的指向提供配置
      仓库指向的定义:
      [repositoryID]
      name=Some name for this repository
      baseurl=url://path/to/repository/
      enabled={1|0}
      gpgcheck={1|0}
      gpgkey=URL
      enablegroups={1|0}
      failovermethod={roundrobin|priority}
      roundrobin:意为随机挑选,默认值
      priority:按顺序访问
      cost= 默认为1000
    yum仓库
    yum命令
      • yum命令的用法:
        yum [options] [command] [package ...]
      • 显示仓库列表:
        yum repolist [all|enabled|disabled]
      • 显示程序包: yum list
        yum list [all | glob_exp1] [glob_exp2] [...]
        yum list {available|installed|updates} [glob_exp1] [...]
      • 安装程序包:
        yum install package1 [package2] [...]
        yum reinstall package1 [package2] [...] (重新安装)
      • 升级程序包:
        yum update [package1] [package2] [...]
        yum downgrade package1 [package2] [...] (降级)
      • 检查可用升级:
        yum check-update
      • 卸载程序包:
        yum remove | erase package1 [package2] [...]
      • 查看程序包information:
        yum info [...]
      • 查看指定的特性(可以是某文件)是由哪个程序包所提供:
        yum provides | whatprovides feature1 [feature2] [...]
      • 清理本地缓存:
        清除/var/cache/yum/$basearch/$releasever缓存
        yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
      • 构建缓存:
        yum makecache
      • 搜索:yum search string1 [string2] [...]
        以指定的关键字搜索程序包名及summary信息
      • 查看指定包所依赖的capabilities:
        yum deplist package1 [package2] [...]
      • 查看yum事务历史:
        yum history [info|list|packages-list|packages-info|
        summary|addon-info|redo|undo|
        rollback|new|sync|stats]
        yum history
        yum history info 6
        yum history undo 6
      • 日志 :/var/log/yum.log
      • 安装及升级本地程序包:
        yum localinstall rpmfile1 [rpmfile2] [...]
        (用install替代)
        yum localupdate rpmfile1 [rpmfile2] [...]
        (用update替代)
      • 包组管理的相关命令:
        yum groupinstall group1 [group2] [...]
        yum groupupdate group1 [group2] [...]
        yum grouplist [hidden] [groupwildcard] [...]
        yum groupremove group1 [group2] [...]
        yum groupinfo group1 [...]
      • yum的命令行选项:
        --nogpgcheck:禁止进行gpg check
        -y: 自动回答为“yes”
        -q:静默模式
        --disablerepo=repoidglob:临时禁用此处指定的repo
        --enablerepo=repoidglob:临时启用此处指定的repo
        --noplugins:禁用所有插件
  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/AloneSea/p/9885799.html
Copyright © 2020-2023  润新知