使用DNF管理软件包

    DNF 的主要配置文件是 /etc/dnf/dnf.conf,该文件包含两部分:

    • “main”部分保存着DNF的全局设置。

    • “repository”部分保存着软件源的设置,可以有一个或多个“repository”。

    另外,在/etc/yum.repos.d 目录中保存着一个或多个repo源相关文件,它们也可以定义不同的“repository”。

    所以openEuler软件源的配置一般有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是在/etc/yum.repos.d目录下增加.repo文件。

    配置main部分

    /etc/dnf/dnf.conf 文件包含的“main”部分,配置示例如下:

    常用选项说明:

    表 1 main参数说明

    配置repository部分

    repository部分允许您定义定制化的openEuler软件源仓库,各个仓库的名称不能相同,否则会引起冲突。配置repository部分有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是配置/etc/yum.repos.d目录下的.repo文件。

    • 下面是[repository]部分的一个最小配置示例:

      1. name=repository_name
      2. baseurl=repository_url

      选项说明:

      表 2 repository参数说明

      参数

      说明

      name=repository_name

      软件仓库(repository )描述的字符串。

      baseurl=repository_url

      软件仓库(repository )的地址。

      • 使用http协议的网络位置:例如
      • 使用ftp协议的网络位置:例如 ftp://path/to/repo
      • 本地位置:例如 file:///path/to/local/repo
    • 配置/etc/yum.repos.d目录下的.repo文件

      openEuler提供了多种repo源供用户在线使用,各repo源含义可参考系统安装。使用root权限添加openEuler repo源,示例如下:

      1. # vi /etc/yum.repos.d/openEuler.repo
      1. [OS]
      2. name=openEuler-$releasever - OS
      3. baseurl=https://repo.openeuler.org/openEuler-21.03/OS/$basearch/
      4. enabled=1
      5. gpgcheck=1
      6. gpgkey=https://repo.openeuler.org/openEuler-21.03/OS/$basearch/RPM-GPG-KEY-openEuler

    显示当前配置

    • 要显示当前的配置信息:

      1. dnf config-manager --dump
    • 要显示相应软件源的配置,首先查询repo id:

      1. dnf repolist

      然后执行如下命令,显示对应id的软件源配置,其中 repository 为查询得到的repo id:

      1. dnf config-manager --dump repository
    • 您也可以使用一个全局正则表达式,来显示所有匹配部分的配置:

      1. dnf config-manager --dump glob_expression

    创建本地软件源仓库

    要建立一个本地软件源仓库,请按照下列步骤操作。

    1. 安装createrepo软件包。在root权限下执行如下命令:

      1. dnf install createrepo
    2. 创建软件源,执行以下命令:

      1. createrepo /mnt/local_repo

    添加、启用和禁用软件源

    本节将介绍如何通过“dnf config-manager”命令添加、启用和禁用软件源仓库。

    添加软件源

    要定义一个新的软件源仓库,您可以在 /etc/dnf/dnf.conf 文件中添加“repository”部分,或者在/etc/yum.repos.d/目录下添加“.repo”文件进行说明。建议您通过添加“.repo”的方式,每个软件源都有自己对应的“.repo”文件,以下介绍该方式的操作方法。

    要在您的系统中添加一个这样的源,请在root权限下执行如下命令,执行完成之后会在/etc/yum.repos.d/目录下生成对应的repo文件。其中 repository_url 为repo源地址,详情请参见。

    1. dnf config-manager --add-repo repository_url

    启用软件源

    要启用软件源,请在root权限下执行如下命令,其中 repository 为新增.repo文件中的repo id(可通过dnf repolist查询):

    1. dnf config-manager --set-enable repository

    您也可以使用一个全局正则表达式,来启用所有匹配的软件源。其中 glob_expression 为对应的正则表达式,用于同时匹配多个repo id:

    1. dnf config-manager --set-enable glob_expression

    禁用软件源

    要禁用软件源,请在root权限下执行如下命令:

    1. dnf config-manager --set-disable repository

    同样的,您也可以使用一个全局正则表达式来禁用所有匹配的软件源:

    1. dnf config-manager --set-disable glob_expression

    使用dnf能够让您方便的进行查询、安装、删除软件包等操作。

    搜索软件包

    您可以使用rpm包名称、缩写或者描述搜索需要的RPM包,使用命令如下:

    1. dnf search term

    示例如下:

    列出软件包清单

    1. dnf list all

    要列出系统中特定的RPM包信息,使用命令如下:

    1. dnf list glob_expression...

    示例如下:

    1. $ dnf list httpd
    2. Available Packages
    3. httpd.aarch64 2.4.34-8.h5.oe1 Local

    要显示一个或者多个RPM包信息,使用命令如下:

    1. dnf info package_name...

    例如搜索,命令如下:

    1. $ dnf info httpd
    2. Available Packages
    3. Name : httpd
    4. Version : 2.4.34
    5. Release : 8.h5.oe1
    6. Arch : aarch64
    7. Size : 1.2 M
    8. Repo : Local
    9. Summary : Apache HTTP Server
    10. URL : http://httpd.apache.org/
    11. License : ASL 2.0
    12. Description : The Apache HTTP Server is a powerful, efficient, and extensible
    13. : web server.

    安装RPM包

    要安装一个软件包及其所有未安装的依赖,请在root权限下执行如下命令:

    1. dnf install package_name

    您也可以通过添加软件包名字同时安装多个软件包。配置文件/etc/dnf/dnf.conf添加参数strict=False,运行dnf命令参数添加--setopt=strict=0。请在root权限下执行如下命令:

    示例如下:

    1. # dnf install httpd

    下载软件包

    使用dnf下载软件包,请在root权限下输入如下命令:

    1. dnf download package_name

    如果需要同时下载未安装的依赖,则加上--resolve,使用命令如下:

    1. dnf download --resolve package_name

    示例如下:

    1. # dnf download --resolve httpd

    删除软件包

    要卸载软件包以及相关的依赖软件包,请在root权限下执行如下命令:

    1. dnf remove package_name...

    示例如下:

    1. # dnf remove totem

    软件包集合是服务于一个共同的目的一组软件包,例如系统工具集等。使用dnf可以对软件包组进行安装/删除等操作,使相关操作更高效。

    列出软件包组清单

    使用summary参数,可以列出系统中所有已安装软件包组、可用的组,可用的环境组的数量,命令如下:

    1. dnf groups summary

    使用示例如下:

    1. # dnf groups summary
    2. Last metadata expiration check: 0:11:56 ago on Sat 17 Aug 2019 07:45:14 PM CST.
    3. Available Groups: 8

    要列出所有软件包组和它们的组ID ,命令如下:

    使用示例如下:

    1. # dnf group list
    2. Last metadata expiration check: 0:10:32 ago on Sat 17 Aug 2019 07:45:14 PM CST.
    3. Available Environment Groups:
    4. Minimal Install
    5. Custom Operating System
    6. Server
    7. Available Groups:
    8. Development Tools
    9. Graphical Administration Tools
    10. Headless Management
    11. Legacy UNIX Compatibility
    12. Network Servers
    13. Scientific Support
    14. Security Tools
    15. System Tools

    要列出包含在一个软件包组中必须安装的包和可选包,使用命令如下:

    1. dnf group info glob_expression...

    例如显示Development Tools信息,示例如下:

    1. # dnf group info "Development Tools"
    2. Group: Development Tools
    3. Description: A basic development environment.
    4. Mandatory Packages:
    5. binutils
    6. glibc-devel
    7. make
    8. pkgconf
    9. pkgconf-m4
    10. pkgconf-pkg-config
    11. rpm-sign
    12. Optional Packages:
    13. expect

    安装软件包组

    每一个软件包组都有自己的名称以及相应的ID(groupid),您可以使用软件包组名称或它的ID进行安装。

    要安装一个软件包组,请在root权限下执行如下命令:

    1. dnf group install groupid

    例如安装Development Tools相应的软件包组,命令如下:

    1. # dnf group install "Development Tools"
    1. # dnf group install development

    删除软件包组

    要卸载软件包组,您可以使用软件包组名称或它的ID,在root权限下执行如下命令:

    1. dnf group remove group_name
    1. dnf group remove groupid

    例如删除Development Tools相应的软件包组,命令如下:

    1. # dnf group remove "Development Tools"
    1. # dnf group remove development

    dnf可以检查您的系统中是否有软件包需要更新。您可以通过dnf列出需要更新的软件包,并可以选择一次性全部更新或者只对指定包进行更新。

    检查更新

    如果您需要显示当前系统可用的更新,使用命令如下:

    1. dnf check-update

    使用实例如下:

    1. # dnf check-update
    2. Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:28:07 PM CST.
    3. anaconda-core.aarch64 19.31.123-1.14 updates
    4. anaconda-gui.aarch64 19.31.123-1.14 updates
    5. anaconda-tui.aarch64 19.31.123-1.14 updates
    6. anaconda-user-help.aarch64 19.31.123-1.14 updates
    7. anaconda-widgets.aarch64 19.31.123-1.14 updates
    8. bind-libs.aarch64 32:9.9.4-29.3 updates
    9. bind-libs-lite.aarch64 32:9.9.4-29.3 updates
    10. bind-license.noarch 32:9.9.4-29.3 updates
    11. bind-utils.aarch64 32:9.9.4-29.3 updates
    12. ...

    升级

    如果您需要升级单个软件包,在root权限下执行如下命令:

    1. dnf update package_name

    例如升级rpm包,示例如下:

    1. # dnf update anaconda-gui.aarch64
    2. Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:30:27 PM CST.
    3. Dependencies Resolved
    4. ================================================================================
    5. Package Arch Version Repository Size
    6. ================================================================================
    7. Updating:
    8. anaconda-gui aarch64 19.31.123-1.14 updates 461 k
    9. anaconda-core aarch64 19.31.123-1.14 updates 1.4 M
    10. anaconda-tui aarch64 19.31.123-1.14 updates 274 k
    11. anaconda-user-help aarch64 19.31.123-1.14 updates 315 k
    12. anaconda-widgets aarch64 19.31.123-1.14 updates 748 k
    13. Transaction Summary
    14. ================================================================================
    15. Upgrade 5 Package
    16. Total download size: 3.1 M
    17. Is this ok [y/N]:

    类似的,如果您需要升级软件包组,在root权限下执行如下命令: