两种包管理机制RPM(Redhat Package Manager)DPKG(Debian Package)

RPM软件包管理

RPM软件包以rpm为拓展名,同时也是一种软件包管理器,可以让用户方便地进行软件的安装、更新和卸载。
RPM包通常包含二进制包源代码包
二进制包可以直接通过rpm命令安装在系统中
源代码包可以通过rpm命令提取对应软件的源代码

RPM提供了非常丰富的功能,是通过一定机制把二进制文件或其他文件打包在一起的单个文件。当使用RPM包进行安装的时候,通常是一个把二进制文件或其他文件复制到系统的指定路径的过程。
RPM包管理器可以让用户不必经过编译就使用软件,当软件遇到依赖的时候,RPM包就会中断当前的安装,提示用户依赖的软件包,不方便。

  1. [root@localhost ~]# rpm --help
  2. Usage: rpm [OPTION...]

安装软件

rpm -ivh  ***.rpm     #进行软件包的安装
rpm -qpl  ***.rpm     #查看软件包文件列表及文件安装路径
如果软件包已经安装,但是出于某些原因想重新安装,可以采用强制安装的手段,使用指定参数来实现这个功能
rpm -ivh --force ***.rpm
rpm -ivh --nodeps ***.rpm  # 忽略依赖关系
  • -i:安装软件的时候显示软件包的相关信息
  • -v:安装软件的时候显示命令的执行过程
  • -h:安装软件的时候输出hash记号:#
  • -q:使用询问模式,当遇到问题的时候,rpm指令会先询问用户
  • -p:查看软件包的文件
  • -l:显示软件包中的文件列表
  • —force:表示强制安装
  • —nodeps:表示忽略依赖关系

    升级软件包

    安装软件包之后随新功能的增加或者bug的修复,软件会持续更新。
    更新软件的时候如果遇到已有的配置文件,为保证新版本的运行,RPM包管理器会将该软件的对应的配置文件重命名,然后安装新的配置文件。新旧文件的保存会使得用户有更多的选择

    rpm -Uvh ***.rpm        #更新已经安装的软件
    
  • -U:升级指定的软件

    查看已经安装的软件包

    rpm -qa  #查看系统中安装的软件包
    rpm -qa | gerp ** # #查找指定的安装包
    
  • -a:显示安装的所有软件列表

  • -f:查询指定文件由哪个程序安装生成
  • —whatrequires /—whatprovisdes:查询指定包的依赖
  • -c:查询包的配置文件
  • -d:查询报包的程序文档
  • —i,—info:查询包的描述信息

    卸载软件包

    rpm -e  *** #卸载软件包
    
  • -e:从系统中移除指定的软件包

    校验安装包

  • —nofiledigest don’t verify digest of files 不检查包的摘要

  • —nofiles don’t verify files in package
  • —nodeps don’t verify package dependencies 不去验证包的依赖
  • —noscript don’t execute verify script(s) 不执行包的脚本片段

    所有参数

    - -a:查询和验证所有的包
    - -f:查询和验证已有的包
    - -g:查询和验证一组中的包
    - -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
    - -c:列出所有配置相关文件
    - -d:列出所有文档文件
    - -l:列出包的所有文件(包括路径)
    - -s:显示包的状态,本参数需配合"-l"参数使用
    - -R:显示套件的关联性信息
    - -h或--hash:套件安装时列出标记;
    - -i:安装
    - -e:卸载
    - -U:重新安装
    - -reinstall:重新安装
    - -v:打印调试信息
    - -vv:详细显示指令执行过程,便于排错。
    - --test:测试安装
    - --nodigest:不检查包的摘要
    - --noscript:不执行包的脚本片段
    - --nodeps:不去验证包的依赖
    - --nosignature:不去验证包的合法性
    

rpm 有一个问题,就是如果安装一个rpm包的时候,需要安装很多依赖,就还需要去找到这些个依赖的名字及版本号,然后挨个去安装,很麻烦。

yum包管理器

Yum (Yellow dog Updater,Modified)
Yum工具工作依赖一个源,源中包含了很多软件包和软件包的相关索引数据,通常位于网络上的主机中。当用户使用yum工具安装软件的时候,yum将通过索引数据搜索软件包的依赖关系,再从源中下载软件包并安装。
当用户将系统注册到Red Hat网络后,系统会自动配置源,因此无网络连接的计算机将无法使用Red Hat提供的源。
可以通过自建一个本地源

配置文件

  • /etc/yum.conf:为所有仓库提供的公共配置文件
  • /etc/yum.repos.d/*.repo:为仓库提供指定的配置

    建立本地源

    ## 1.建立挂载目录将光盘挂载到/cdrom
    mkdir -p /cdrom
    mount /dev/cdrom /cdrom
    ## 2.备份原来的源配置文件
    cd /etc/yum.repos.d/
    mv redhat.repo redhat.repo.bak
    ## 3.建立新的源配置文件
    cat -v  dvd.repo
    [ocata]  
    name=CentOS‐Ocata  
    baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack‐ocata/  
    enable=1  
    gpgcheck=0 
    ## 4. 清除yum中的所有缓存文件
    yum clear all
    ## 5.建立新的缓存文件 
    yum makecache
    

    ps:*.repo文件中,

    • 方括号中“[]”是源的名称,该名称再所有源中必须是独一无二的
    • name字段表示源的描述信息
    • enable表示是否启用源
    • gpgcheck表示是否对软件执行gpg检查,该检查可以验证软件包是否经过Red Hat的签名,未签名的软件可能会危害系统的稳定
    • baseurl表示源的路径
    • gpgkey表示签名使用的密钥文件位置

安装和卸载软件包

yum install ***
yum remove ***

常用的命令选项

  - 显示仓库列表:yum repolist a==
  - 显示程序包: yum list
  - 安装程序包:yum install [package_1]
  - 升级程序包:yum upadte [package_1] [package_2]
  - 降级程序包:yum downgrade [package_1] [package_2]
  - 检查可用升级:yum check-update
  - 卸载程序包:yum remove  [package_1]  # 先remove,再找find  maraidb
  - 查看程序包信息:yum info……
  - 查看指定的特性(可以是某个文件)是由哪个程序所提供: yum provide
  - 构建本地缓存:yum makecache
  - 检查可用仓库:yum repolist
  - 清理缓存:yum clean all
  - 搜索:yum search string 指定关键字搜索程序包名及summary信息
  - 查看yum相关历史:yum history
eg1:使用光盘当作本地yum仓库
mount:挂载命令
挂载本地光盘: 
[root@localhost ~]# mount /dev/cdrom /media/cdrom  备份yum配置:
[root@localhost ~]# mv /etc/yum.repos.d/* /mnt/  配置本地yum  
[root@localhost ~]# cat > /etc/yum.repos.d/local.repo <<EOF  
[base]  
name=Centos 7 Release 7.1.1503  
baseurl=file://media/cdrom  
enabled=1  
gpcheck=0  
EOF
eg2:自建yum仓库,构建服务器
1.如何区批量下载程序包 
2.本地目录生成一个文件 repoadta/repomd.xml
服务端配置: 备份源文件,编辑新文件 
[root@node1 ~]# mv /etc/yum.repos.d/CentOS‐Base.repo{,.bak}  
[root@node1 ~]# cat /etc/yum.repos.d/CentOS‐Base.repo  
[ocata]  
name=CentOS‐Ocata  
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack‐ocata/  
enable=1  
gpgcheck=0  
[ocata‐extras] 
name=CentOS‐Ocata‐extras  
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/  
enable=1  
gpgcheck=0  
[centos7]  
name=Centos‐7  
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/  
enable=1  
gpgcheck=0 
同步源 
[root@node1 ~]# reposync ‐‐repoid=ocata 
[root@node1 ~]# reposync ‐‐repoid=ocata‐extras  
[root@node1 ~]# reposync ‐‐repoid=centos7 
生成repodata 
[root@node1 ~]# createrepo ocata  
[root@node1 ~]# createrepo ocata‐extras  
[root@node1 ~]# createrepo centos7 
客户端配置: 验证并生成缓存 
[root@node1 ~]# yum repolist  
[root@node1 ~]# yum makecache 
备注:如果添加或者删除了个人的rpm包,不需要再次重新create,浪费时间,只需要‐‐update就可以了 
[root@node1 ~]# createrepo ‐‐update

dnf

新一代的RPM软件包管理器
首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。
DNF使用rpm、libsolv和hawkey库进行包管理操作,可以使用yum的同时使用DNF

安装

### 1.必须先安装并启用 epel-release 依赖。
yum install epel-release 或 yum install epel-release -y

### 2.安装dnf
yum install dnf

命令

1.查看系统中可用的 DNF 软件库

[root@lhuan ~]# dnf repolist
Docker CE Stable - x86_64                                          8.2 kB/s |  25 kB     00:03    
CentOS-7 - Base                                                    4.3 MB/s |  10 MB     00:02    
CentOS-7 - Updates                                                 248 kB/s | 5.0 MB     00:20    
CentOS-7 - Extras                                                  108 kB/s | 275 kB     00:02    
repo id                                   repo name                                          status
base                                      CentOS-7 - Base                                    10,070
docker-ce-stable                          Docker CE Stable - x86_64                              82
extras                                    CentOS-7 - Extras                                     413
updates                                   CentOS-7 - Updates                                  1,134
  1. 查看系统中可用和不可用的所有的 DNF 软件库

    dnf list
    
  2. 列出所有安装了的 RPM 包

    dnf list installed
    
  3. 列出所有可供安装的 RPM 包

    dnf  list available
    
  4. 搜索软件库中的 RPM 包 ```python [root@lhuan ~]# dnf search nano Last metadata expiration check: 0:11:40 ago on Sat 31 Oct 2020 10:16:45 AM CST. =================================== Name Exactly Matched: nano ==================================== nano.x86_64 : A small text editor


6. 查看软件包详情
```python
[root@lhuan ~]# dnf info  nano 
Last metadata expiration check: 0:13:11 ago on Sat 31 Oct 2020 10:16:45 AM CST.
Available Packages
Name         : nano
Version      : 2.3.1
Release      : 10.el7
Arch         : x86_64
Size         : 440 k
Source       : nano-2.3.1-10.el7.src.rpm
Repo         : base
Summary      : A small text editor
URL          : http://www.nano-editor.org
License      : GPLv3+
Description  : GNU nano is a small and friendly text editor.
  1. 安装软件包

系统将会自动安装对应的软件及其所需的所有依赖

[root@lhuan ~]# dnf install  nano
Last metadata expiration check: 0:14:01 ago on Sat 31 Oct 2020 10:16:45 AM CST.
Dependencies resolved.
===================================================================================================
 Package             Arch                  Version                       Repository           Size
===================================================================================================
Installing:
 nano                x86_64                2.3.1-10.el7                  base                440 k

Transaction Summary
===================================================================================================
Install  1 Package

Total download size: 440
  1. 升级软件包

    dnf update 或 dnf upgrade
    
  2. 删除软件包

    dnf remove nano 或 dnf erase nano
    
  3. 删除无用孤立的软件包

当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。

dnf autoremove
  1. 删除缓存的无用软件包

在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。

dnf clean all