博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux之rpm包管理
阅读量:5894 次
发布时间:2019-06-19

本文共 10335 字,大约阅读时间需要 34 分钟。

  • 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://、:///
      enabled={1|0} 是否启用 1启用 ,去掉默认启动
      gpgcheck={1|0} 1 检查其来源合法、完整
      gpgkey=URL 密钥文件
      [docker-ce-stable]name=Docker CE Stable - $basearchbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled=1gpgcheck=1gpgkey=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] 
    选项: -o --outputdir
    指定元数据输出位置 -v:详细信息 -q:静默模式 -g ,--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 pkgsSpawning worker 1 with 1 pkgsSpawning worker 2 with 0 pkgsSpawning worker 3 with 0 pkgsWorker 0: reading crmsh-3.0.0-6.2.noarch.rpmWorker 1: reading ldirectord-3.9.6-0rc1.1.2.x86_64.rpmWorkers FinishedSaving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsStarting other db creation: Thu Jan 10 14:59:06 2019Ending other db creation: Thu Jan 10 14:59:06 2019Starting filelists db creation: Thu Jan 10 14:59:06 2019Ending filelists db creation: Thu Jan 10 14:59:06 2019Starting primary db creation: Thu Jan 10 14:59:06 2019Ending primary db creation: Thu Jan 10 14:59:06 2019Sqlite DBs complete[root@xt data]# lsrepodata  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  
    [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: fastestmirrorRepository base is listed more than once in the configurationLoading mirror speeds from cached hostfilebase: mirrors.aliyun.comextras: mirrors.tuna.tsinghua.edu.cnupdates: mirrors.163.comepel/7/x86_64/filelists                                                                     |  10 MB  00:00:01     gdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disksRepo        : baseMatched from:Filename    : /usr/sbin/gdiskgdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disksRepo        : @baseMatched 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 、
      代码托管: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-gnuchecking host system type... x86_64-unknown-linux-gnuchecking target system type... x86_64-unknown-linux-gnuchecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... /usr/bin/mkdir -pchecking for gawk... gawkchecking whether make sets $(MAKE)... yeschecking whether make supports nested variables... yeschecking whether to enable maintainer-specific portions of Makefiles... nochecking for style of include used by make... GNUchecking for gcc... no  #gcc等开发工具没有,需要先安装,通常提供Development Tools即可(需要看安装版本)checking for cc... nochecking for cl.exe... noconfigure: error: in `/root/data/ntfs-3g_ntfsprogs-2017.3.23':configure: error: no acceptable C compiler found in $PATHSee `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]# lsbin  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]# lscrmsh-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

你可能感兴趣的文章
javascript继承方式详解
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
【转】EDK简单使用流程(3)
查看>>
仿射变换
查看>>
视频直播点播nginx-rtmp开发手册中文版
查看>>
PHP队列的实现
查看>>
单点登录加验证码例子
查看>>
[T-SQL]从变量与数据类型说起
查看>>
occActiveX - ActiveX with OpenCASCADE
查看>>
BeanUtils\DBUtils
查看>>
python模块--os模块
查看>>
linux下单节点oracle数据库间ogg搭建
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
python编译exe用于别的电脑上_Python安装教程(推荐一款不错的Python编辑器)
查看>>