Linux之rpm包管理

  • rpm包管理器
  • yum工具使用
  • 构建私有仓库
  • 源码包编译安装

程序包管理器:RPM-redhat package manager, c语言编写。将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序的安装、升级、卸载和查询等管理操作;

  • rpm包命名格式:以rpm结尾
    name-version-release.arch.rpm
    version:major.minor.release
    release:rpm包发行号
    arch:架构:x64,i386,i686,noarch
  • 获取程序包的方法:
    1.系统发行的光盘ISO镜像、镜像站点、系统发行官方网站
    2.项目的官方站点,如Apache下的众多项目
    3.第三方组织:epel...
    4.下载源码包自己编译

  • rpm命令使用:

    • 安装:
      rpm {-i|--install} [install-options] PACKAGE_FILE ...
      通用选项:
      -v: 详细信息
      -vv:更详细信息
      安装选项:
      -h: hash mask显示进度条,,每个#表示2%进度
      --test:仅测试安装,检查报告是否有冲突
      --nodeps:忽略依赖关系
      --replacepkgs:重新安装
      --force:强制安装
      --nosignture:不检查包签名信息,不检查来源合法性
      --nodigest:不检查包完整性信息
    • 卸载:
      rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
      选项:
      --allmatches:卸载所有匹配指定名称的程序包的各版本;
      --nodeps:忽略依赖关系
      --test:测试卸载模式
    • 升级:
      rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
      rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
      -U:升级或者安装
      -F:仅升级
      选项:
      --oldpackage:降级
      --force:强制更新
    • 查询:
      rpm {-q|--query} [select-options] [query-options]
      [select-options]:
      PACKAGE_NAME:查询指定已安装的程序包
      -a.--all:查看所有已安装的程序
      -f,--file FILE_NAME:查询文件是由那个程序提供
      -p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
      [query-options]:
      --changelog:查询rpm包的changlog;
      -l, --list:程序安装生成的所有文件列表;
      -i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
      -c, --configfiles:查询指定的程序包提供的配置文件;
      -d, --docfiles:查询指定的程序包提供的文档;
      --provides:列出指定的程序包提供的所有的CAPABILITY;
      -R, --requires:查询指定的程序包的依赖关系;
      --scripts:查看程序包自带的脚本片断;
    • 校验:
      rpm {-V|--verify} [select-options] [verify-options]
      检查包来源是否安全:来源合法性与完整性
      获取并导入信任的包制作者的公钥:发行商的提供的包附带在光盘内
      对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      验正:
      (1) 安装此组织签名的程序时,会自动执行验正;
      (2) 手动验正:rpm -K PACKAGE_FILE
  • yum工具能够自动解决依赖关系,底层的实现还是依赖于rpm,要使用yum安装需要先配置file.repo结尾的仓库配置文件,存储了众多rpm包,以及包的相关的元数据文件(repodata)
    其他版本:
    yum:rhel系列系统上rpm包管理器的前端工具;
    apt-get (apt-cache):deb包管理器的前端工具;
    zypper:suse的rpm管理器前端工具;
    dnf:Fedora 22+系统上rpm包管理器的前端工具;
    • yum配置文件:
      /etc/yum.conf:主配置文件为所有仓库提供公共配置
      /etc/yum.repos.d/*.repo:为仓库的指向自定义配置
    • 配置文件格式:
      [repositoryID] #仓库名称
      name=Some name for this repository#仓库描述信息
      baseurl=url://path/to/repository/ #可以多个,指向源的有效路径,可以是:ftp://、http://、nfs://、file:///
      enabled={1|0} 是否启用 1启用 ,去掉默认启动
      gpgcheck={1|0} 1 检查其来源合法、完整
      gpgkey=URL 密钥文件
      [docker-ce-stable]
      name=Docker CE Stable - $basearch
      baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable 
      enabled=1
      gpgcheck=1
      gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
      文件中可用的变量:
      $releasever: 当前OS的发行版的主版本号; 6 7
      $arch: 平台架构;
      $basearch:基础平台;
  • 构建私有仓库

    createrepo-0.9.9-28.el7.noarch ,创建仓库元数据repodata
    用法:createrepo [options] <directory>
    选项:
            -o --outputdir <url> 指定元数据输出位置
            -v:详细信息
            -q:静默模式
            -g ,--groupfile <groupfile>#指定本地软件仓库的组划分 ,组文件和包需放在一起
            # createrepo -g  comps.xml  ./

    1.创建元数据

    [root@xt data]# ls rpm/
    crmsh-3.0.0-6.2.noarch.rpm  ldirectord-3.9.6-0rc1.1.2.x86_64.rpm  repodata
    [root@xt data]# man createrepo
    [root@xt data]# createrepo -v ./rpm/ -o ./
    Spawning worker 0 with 1 pkgs
    Spawning worker 1 with 1 pkgs
    Spawning worker 2 with 0 pkgs
    Spawning worker 3 with 0 pkgs
    Worker 0: reading crmsh-3.0.0-6.2.noarch.rpm
    Worker 1: reading ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
    Workers Finished
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Starting other db creation: Thu Jan 10 14:59:06 2019
    Ending other db creation: Thu Jan 10 14:59:06 2019
    Starting filelists db creation: Thu Jan 10 14:59:06 2019
    Ending filelists db creation: Thu Jan 10 14:59:06 2019
    Starting primary db creation: Thu Jan 10 14:59:06 2019
    Ending primary db creation: Thu Jan 10 14:59:06 2019
    Sqlite DBs complete
    [root@xt data]# ls
    repodata  rpm

    2.配置yum源文件
    baseurl需要指定到repodata目录即可

  • yum命令使用:
    用法:yum [options] [command] [package ...]

    command is one of:
        * install package1 [package2] [...]
        * update [package1] [package2] [...]
        * update-to [package1] [package2] [...]
        * update-minimal [package1] [package2] [...]
        * check-update
        * upgrade [package1] [package2] [...]
        * upgrade-to [package1] [package2] [...]
        * distribution-synchronization [package1] [package2] [...]
        * remove | erase package1 [package2] [...]
        * autoremove [package1] [...]
        * list [...]
        * info [...]
        * provides | whatprovides feature1 [feature2] [...]
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
        * makecache [fast]
        * groups [...]
        * search string1 [string2] [...]
        * shell [filename]
        * resolvedep dep1 [dep2] [...]
           (maintained for legacy reasons only - use repoquery or yum provides)
        * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
        * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
        * reinstall package1 [package2] [...]
        * downgrade package1 [package2] [...]
        * deplist package1 [package2] [...]
        * repolist [all|enabled|disabled]
        * repoinfo [all|enabled|disabled]
        * repository-packages  <enabled-repoid>  <install|remove|remove-or-reinstall|remove-or-distribution-syn‐
       chronization> [package2] [...]
        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
        * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
        * load-transaction [txfile]
         *  updateinfo  [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-
       kernel]
        * fssnapshot [summary | list | have-space | create | delete]
        * fs [filters | refilter | refilter-cleanup | du]
        * check
        * help [command]
    • 命令选项:
      --nogpgcheck:禁止进行gpg check;
      -y:自动回答为“yes”;
      -q:静默模式;
      --disablerepo=repoid glob:临时禁用此处指定的repo;
      --enablerepo=repoid glob:临时启用此处指定的repo;
    • 清空本地缓存
      yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    • 构建缓存
      yum makecache fast

    • 显示仓库列表:
      yum repolist [all|enabled|disabled]
    • 显示程序包
      yum list [all | glob_exp1] [glob_exp2] [...]
      yum list {available|installed|updates} [glob_exp1] [...]
    • 安装|重新安装:
      yum {install | reinstall} package1 [package2] [...]
    • 拆卸
      yum remove | erase package1 [package2] [...]
      注:卸载也会把依赖的包删除,需要看清楚,否则可能删除与系统相关的包

    • 升级
      update [package1] [package2] [...]
      downgrade package1 [package2] [...] (降级)
    • 查看程序包信息
      yum info [...]
    • 搜索:以关键字符搜索
      yum search string1 [string2] [...]
    • 查看指定的特性(可以是某文件)是由哪个程序包所提供:
      yum provides file
      [root@xt ~]# yum provides "*/gdisk"
      Loaded plugins: fastestmirror
      Repository base is listed more than once in the configuration
      Loading mirror speeds from cached hostfile
      base: mirrors.aliyun.com
      extras: mirrors.tuna.tsinghua.edu.cn
      updates: mirrors.163.com
      epel/7/x86_64/filelists                                                                     |  10 MB  00:00:01     
      gdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disks
      Repo        : base
      Matched from:
      Filename    : /usr/sbin/gdisk
      gdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disks
      Repo        : @base
      Matched from:
      Filename    : /usr/sbin/gdisk
    • 包组相关命令管理:7+groups包含所有子命令
      yum groups install group1 [group2] [...]
      yum info group1 [group2] [...]
      yum list [groupwildcard] [...]
      yum remove group1 [group2] [...]
      yum summary :快速查看有哪些包组可用或已安装
  • 源码包编译安装
    有时候别人做好的包不一定满足需求,需要定制某些功能,可以下载程序的源代码自己编译符合需求的程序。
    • 开源代码的获取:
      官方站点:apache.org 、 https://www.kernel.org/
      代码托管:SourceForge、Github.com、code.google.com
      比如从ntfs-3g下载源码包:里面包含一切需要的文件
      Linux之rpm包管理
      安装编译前查看INSTALL,README,文件里描述了安装步骤及功能详细说明
    • 通常C代码编译安装三步骤:
      ./configure:
      (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
      (2) 检查依赖到的外部环境;
      make [-j #]:根据makefile文件编译,构建应用程序,启用cpu多线程任务
      make install:安装
      [root@xt ntfs-3g_ntfsprogs-2017.3.23]# ./configure --prefix=/root/data #指定默认安装位置,默认为/usr/local/
      checking build system type... x86_64-unknown-linux-gnu
      checking host system type... x86_64-unknown-linux-gnu
      checking target system type... x86_64-unknown-linux-gnu
      checking for a BSD-compatible install... /usr/bin/install -c
      checking whether build environment is sane... yes
      checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
      checking for gawk... gawk
      checking whether make sets $(MAKE)... yes
      checking whether make supports nested variables... yes
      checking whether to enable maintainer-specific portions of Makefiles... no
      checking for style of include used by make... GNU
      checking for gcc... no  #gcc等开发工具没有,需要先安装,通常提供Development Tools即可(需要看安装版本)
      checking for cc... no
      checking for cl.exe... no
      configure: error: in `/root/data/ntfs-3g_ntfsprogs-2017.3.23':
      configure: error: no acceptable C compiler found in $PATH
      See `config.log' for more details
      =============================
      yum groups install Development\ Tools 
      =============================
      ./configure --prefix=/root/data重新检查
      ....................
      /usr/bin/rm: cannot remove 'libtoolT': No such file or directory#个别警告或者错误可以忽略
      You can type now 'make' to build ntfs-3g.#进行下一步操作编译
      =============================
      # make -j 4
      ......................
      libtool: link: gcc -DFUSE_USE_VERSION=26 -I../include/fuse-lite -I../include/ntfs-3g -DPLUGIN_DIR=\"/root/data/lib/
      ntfs-3g\" -g -O2 -Wall -o .libs/lowntfs-3g lowntfs_3g-lowntfs-3g.o lowntfs_3g-ntfs-3g_common.o  -ldl ../libfuse-lite/.libs/libfuse-lite.a -lpthread ../libntfs-3g/.libs/libntfs-3g.so -Wl,-rpath -Wl,/root/data/libmake[2]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23/src'
      make[2]: Entering directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
      make[2]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
      make[1]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
      =============================编译完成即可安装
      make install
      [root@xt data]# ls
      bin  include  lib  sbin  share
    • 安装完后的文件:
      Linux之rpm包管理
    • 安装后配置一些文件便于使用
      (1) 导出二进制程序目录至PATH环境变量中;不导出执行命令需要用绝对路径!
              编辑文件/etc/profile.d/NAME.sh
              export PATH=/PATH/TO/BIN:/root/data/ntfs-3g
      (2) 导出库文件路径
              编辑/etc/ld.so.conf.d/ntfs-3g.conf,   添加/root/data/ntfs-3g/lib 到文件中;
              让系统重新生成缓存:
                  ldconfig [-v]
      (3) 导出头文件
              基于链接的方式实现:一般用于二进制包名称比较长
              ln -sv 
      (4) 导出帮助手册
              编辑/etc/man_db.config文件,添加一个MANPATH
                  #MANPATH  /root/data/ntfs-3g/share/man

  • 当某个程序中的某个文件丢失或者误删,重装程序带来不便,有没有多余备份
    rpm2cpio - Extract cpio archive from RPM Package Manager (RPM) package.
[root@xt rpm]# rpm2cpio ldirectord-3.9.6-0rc1.1.2.x86_64.rpm | cpio -id #注意展开的目录会覆盖原有的目录
382 blocks
[root@xt rpm]# ls
crmsh-3.0.0-6.2.noarch.rpm  etc  ldirectord-3.9.6-0rc1.1.2.x86_64.rpm  repodata  test  usr
[root@xt rpm]# ls etc/
ha.d/        logrotate.d/ 
[root@xt rpm]# ls etc/ha.d/resource.d/ldirectord 
crmsh-3.0.0-6.2.noarch.rpm            ldirectord-3.9.6-0rc1.1.2.x86_64.rpm  test/
etc/                                  repodata/                             usr/

转载于:https://blog.51cto.com/12580678/2341013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值