RedHat 8 DNF 仓库新特性
An introduction to AppStream and BaseOS in Red Hat Enterprise Linux 8
文件路径
-
/etc/yum.conf
,/etc/dnf/dnf.conf
主配置文件,对应全局仓库设置,例如设置全局代理。 -
/etc/yum.repos.d/
,仓库文件所在目录,仓库文件用.repo
做为扩展名。
命令中的注意事项
所有 yum
命令用到通配符的地方,都需要使用 \
或 单引号 来防止 Shell 转义。例如:
yum list nginx\*
yum module list 'postgresql*'
Yum 仓库管理
假设当前系统有以下三个 Yum 仓库
repo id | repo name | status |
---|---|---|
base/x86_64 | CentOS-7 - Base | enabled |
epel/x86_64 | Extra Packages for Enterprise Linux | enabled |
nginx-stable | nginx stable repo | disabled |
列出 Yum 仓库
# 列出已启用仓库
yum repolist [enabled]
# 列出未启用仓库
yum repolist disabled
# 列出所有已启用和未启用的仓库
yum repolist all
# 列出所有仓库详细信息
yum repolist -v all
# 可以使用 glob_expression 来匹配仓库名
# 例如列出 epel 和 nginx-stable 仓库
yum repolist epel nginx\*
注意:仓库名称前出现感叹号 !
的话,说明仓库信息已经过期,可以使用 yum makecache fast
命令更新。
显示 Yum 仓库详细信息
类似于命令 yum repolist -v
# 显示已启用仓库的详细信息
yum repoinfo
# 显示所有仓库的详细信息
yum repoinfo all
根据 yum 手册页中 yum repolist 的解释,仓库标识前有感叹号 !
,表示该仓库的元数据已经过期,yum 会自动重新下载 repomd.xml
。如果希望强制重新同步 repomd.xml
,可以使用命令
yum clean expire-cache
该命令会删除 /var/cache/yum/x86_64/*/*/
下的 cachecookies
文件,在下次执行 yum repolist
命令时,repomd.xml
文件会被重新下载。
dnf config-manager
RedHat 6 or 7
使用 yum-config-manager
sudo yum install -y yum-utils
# 显示全局配置参数 (main) 和所有已启用仓库配置参数
yum-config-manager
# 显示全局配置参数
yum-config-manager main
# 显示全局配置参数和仓库 nginx-stable 配置参数
yum-config-manager main nginx\*
RedHat 8
使用 dnf config-manager
sudo dnf install -y dnf-utils
# 显示全局配置参数 (main)
dnf config-manager --dump
# 显示 nginx-stable 配置参数
dnf config-manager --dump nginx\*
以下如果没有特殊说明,均可以使用 dnf config-manager
替代 yum-config-manager
。
修改 Yum 仓库配置信息
可以使用 dnf config-manager --setopt=option=value
修改 yum config 或 repo 文件中的配置。
- 修改全局配置使用
--setopt=option=value
; - 修改 repo 配置使用
--setopt=repoid.option=value
。repoid 可以使用通配符*
匹配多个仓库。(注意:*
要转义或使用引号以避免被 shell 解析)
# 修改 docker-ce-stable 仓库的 bash_url 配置
sudo dnf config-manager --setopt='docker-ce-stable.baseurl=https://download.docker.com/linux/centos/7/x86_64/stable' --save
# 修改匹配 docker-ce-* 的仓库中的 bash_url 配置
sudo dnf config-manager --setopt='docker-ce-*.baseurl=https://download.docker.com/linux/centos/7/x86_64/stable' --save
加速 dnf 下载
sudo dnf config-manager --setopt=max_parallel_downloads=5 --setopt=fastestmirror=true --save
设置 Yum 仓库代理
# 设置全局代理,修改 /etc/dnf/dnf.conf 中的配置
sudo dnf config-manager --setopt=proxy=http://127.0.0.1:7890 --save
# 设置单独仓库代理
dnf config-manager --setopt=epel.proxy=http://127.0.0.1:7890 --save
# 设置多个仓库代理
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save epel nginx-stable
# 设置所有已启用仓库代理
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save
# 设置所有仓库代理,包含未启用的仓库
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save '*'
添加 Yum 仓库
dnf config-manager --add-repo http://www.exmaple.com/example.repo
启用 Yum 仓库
dnf config-manager --enable epel
# 支持 glob_expression
dnf config-manager --enable nginx\*
禁用 Yum 仓库
dnf config-manager --disable epel
删除 Yum 仓库
进入 /ect/yum.repos.d
目录,删除对应的 repo 文件即可。
创建 Yum 仓库
-
安装
createrepo
包yum install createrepo
-
将需要的 rpm 包复制到某个目录,例如
/var/www/rpms/rhel/7Server/x86_64/
-
根据此目录下的所有 rpm 包生成 Yum 仓库的元数据(会创建一个 repomd 目录,里面是 xml-based rpm metadata)
createrepo /var/www/rpms/rhel/7Server/x86_64/
-
添加 repo 文件
[my_repo] name=my packages for $releasever - $basearch baseurl=https://www.example.com/rpms/rhel/$releasever/$basearch enabled=1 gpgcheck=0 sslverify=false
更新 Yum 仓库
如果 Yum 仓库中添加或删除了 rpm 包,可以使用 createrepo --update
来更新 Yum 仓库元数据。
createrepo --update /var/www/rpms/rhel/7Server/x86_64/
缓存 Yum 仓库数据
# 下载并缓存 yum 仓库数据
yum makecache
# 确保仓库数据是最新的,类似于使用 yum clean expire-cache 命令
yum makecache fast
安装包管理
查看 Yum 仓库中的安装包
# 列出所有已安装和可获取的包
yum list all
# 列出匹配 glob_expression 的已安装和可获取的包
yum list 'nginx*'
yum list --showduplicate 'nginx*'
# 列出匹配 glob_expression 的已安装的包
yum list installed 'nginx*'
# 列出匹配 glob_expression 的可获取的包
yum list available 'nginx*'
查看安装包信息
# 显示包信息,可使用 glob_expression
yum info nginx
查看安装包依赖
# 显示包的依赖
yum deplist nginx
查看安装包所在仓库
# 显示与包相关的仓库信息
yumdb info nginx
查询包含某个命令的安装包
# 显示包含 ip 命令的包
yum provides ip
# 显示包含 top 命令的包
yum provides '*/bin/top'
# 显示包含 'top.README' 文件的包
yum provides '*/top.README'
查询已经安装的命令属于哪个安装包
yum whatprovides /usr/bin/psql
搜索包含某个关键字的安装包
# 搜索名称或描述中包含 samba 的包
yum search samba
安装
# 安装 nginx 包
yum install nginx
# 从本地 rpm 安装包
yum install /tmp/nginx.rpm
# 从指定仓库安装特定版本的安装包
yum install postgresql96-server --repo pgdg96
更新
# 更新所有可更新的包
yum update
# 更新 nginx 的包
yum update nginx
卸载
# 卸载 nginx 的包和其依赖
yum remove nginx
remove 会连同该软件的依赖包一起删除,不同不希望删除这些依赖包,应该执行以下命令
rpm -e --nodeps nginx
卸载不再需要的包
# 卸载不再需要的包,这些包通常为 orphaned packages
yum autoremove
# 卸载 nginx 包和 orphaned packages
yum autoremove nginx
Module 管理
查看可用的 Module
dnf module list [module-name]
查看 module 详细信息
dnf module info module-name
安装 module
使用默认的 stream 和 profile
dnf module install module-name
dnf install @module-name
安装特定的 module stream
使用默认的 profile
dnf module install module-name:stream
dnf install @module-name:steram
安装特定的 module stream profile
dnf module install module-name:stream/profile
dnf install @module-name:stream/profile
禁用默认的 module
dnf -qy moudle disable postgresql
列出文件安装位置
如果需要知道安装包的文件路径,可以通过 rpm
命令来检查
# 列出系统中的所有安装包
rpm --query --all
# 找出相关安装包
rpm -qa | grep postgresql
# 列出安装包中的文件位置
# rpm --query --list
rpm -ql postgresql94-server-9.4.26-1PGDG.rhel8.x86_64