yum及dnf仓库的实现及管理软件详解

笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述yum及dnf仓库的实现及管理软件详解相关的知识,希望能为你提供帮助。
一、yum介绍rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7


yum/dnf 是基于C/S 模式
yum 服务器存放rpm包和相关包的元数据库
yum 客户端访问yum服务器进行安装或查询等

1.
-h:显示帮助信息;
2.
-y:对所有的提问都回答“yes”;
3.
-c:指定配置文件;
4.
-q:安静模式;
5.
-v:详细模式;
6.
-d:设置调试等级(0-10);
7.
-e:设置错误等级(0-10);
8.
-R:设置yum处理一个命令的最大等待时间;
9.
-C:完全从缓存中运行,而不去下载或者更新任何头文件。
1.
install:安装rpm软件包;
2.
update:更新rpm软件包;
3.
check-update:检查是否有可用的更新rpm软件包;
4.
remove:删除指定的rpm软件包;
5.
list:显示软件包的信息;
6.
search:检查软件包的信息;
7.
info:显示指定的rpm软件包的描述信息和概要信息;
8.
clean:清理yum过期的缓存;
9.
shell:进入yum的shell提示符
10.
history    undo : 查看安装历史
11.
yum history info 《nomber》 #查看安装历史详细信息
12.
yum history undo 《nomber》#卸载安装历史
13.
yum history redo 《nomber》#重新安装历史操作过的安装
14.
yum repolist #显示仓库   
  yum repolist all  #  启用和禁用得都显示
15.   
yum porvides  cmd#查找命令来自哪个包
16.
yum reinstall #重新安装包
17.
yum remove    #卸载包
18.
yum search    #关键字搜索包名


yum 实现过程
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的
元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动
下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并
安装
yum服务器的仓库可以多种形式存在:
  • fifile:// 本地路径
  • http://
  • https://
  • ftp://
注意:yum仓库指向的路径一定必须是repodata目录所在目录
二、yum客户端配置yum客户端配置文件
/etc/yum.conf #为所有仓库提供公共配置
/etc/yum.repos.d/*.repo: #为每个仓库的提供配置文件
相关变量
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
centos8配置文件:
[root@centos8 ~]# ll /etc/yum.conf
lrwxrwxrwx. 1 root root 12 May 14   2019 /etc/yum.conf -> dnf/dnf.conf
[root@centos8 ~]#cat /etc/yum.conf
[main]
gpgcheck=1     #安装包前要做包的合法和完整性校验
installonly_limit=3 #同时可以安装3个包,最小值为2,如设为0或1,为不限制
clean_requirements_on_remove=True   #删除包时,是否将不再使用的包删除
best=True|False  #升级时,自动选择安装最新版,即使缺少包的依赖


范例:CentOS 7的配置文件
[root@centos7 ~]# ll /etc/yum.conf
-rw-r--r--. 1 root root 970 Aug   8 19:57 /etc/yum.conf
[root@centos7 ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=??http://bugs.centos.org/set_project.php???
project_id=23& ref=??http://bugs.centos.org/bug_report_page.php???category=yum
distroverpkg=centos-release
# in /etc/yum.repos.d
repo仓库配置文件指向的定义:
[repositoryID]    #库名称
name=Some name for this repository  #库名称
baseurl=url://path/to/repository/    #URL
enabled=1|0      #是否开启这个repo库,1开启,0关闭
gpgcheck=1|0    #是否校验rpm包,1开启,0关闭
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7  #导入检验密钥
enablegroups=1|0
failovermethod=roundrobin|priority
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
baseurl指向的路径
阿里云提供了写好的CentOS和ubuntu的仓库文件下载链接
??http://mirrors.aliyun.com/repo/??
CentOS系统的yum源
#阿里云
??https://mirrors.aliyun.com/centos/??$releasever/os/x86_64/
#华为云
??https://mirrors.huaweicloud.com/ ????
#清华大学
??https://mirrors.tuna.tsinghua.edu.cn/centos/??$releasever/os/x86_64/
EPEL的yum源
#阿里云
??????https://mirrors.aliyun.com/epel/$releasever/x86_64????????
阿里巴巴开源软件
??https://opsx.alibaba.com/??
范例:为CentOS7用系统安装光盘作的本地yum仓库
#挂载光盘至某目录,如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
#创建配置文件
[root@centos7 ~]#vim /etc/yum.repos.d/centos7.repo
[CentOS7]
name=CentOS 7
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1


范例:为CentOS 8 配置 yum 的系统和EPEL源仓库[root@centos8 ~]#cat /etc/yum.repos.d/base.repo
[BaseOS]
name=BaseOS
baseurl=file:///misc/cd/BaseOS
gpgcheck=1
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial                              


[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
gpgcheck=0
[epel]
name=EPEL
baseurl=???????http://mirrors.aliyun.com/epel/???$releasever/Everything/$basearch
gpgcheck=0
enabled=1
[extras]
name=extras
baseurl=???????https://mirrors.aliyun.com/centos/???$releasever/extras/$basearch/os
gpgcheck=0
注意:与之前的版本不同,CentOS 8 系统有两个yum 源:BaseOS和AppStream ,需要分别设置两个
仓库
范例:用脚本实现创建yum仓库配置文件


[root@centos7 ~]# cat yum.sh
#!/bin/bash
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo < < EOF
[base]
name=base
baseurl=??https://mirrors.aliyun.com/centos/\\$releasever/os/\\$basearch ????
gpgcheck=0
EOF
yum-confifig-manager命令
可以生成yum仓库的配置文件及启用或禁用仓库,来自于yum-utils包
格式:
#增加仓库
yum-config-manager --add-repo URL或file
#禁用仓库
yum-config-manager --disable “仓库名"
#启用仓库
yum-config-manager --enable “仓库名”


范例:利用elrepo源在CentOS 7 安装新版内核(长期维护版本lt,最新主线稳定版ml)
[root@centos7 ~]#yum install https://www.elrepo.org/elrepo-release-7.0-
4.el7.elrepo.noarch.rpm    #下载elre安装源
[root@centos7 ~]#rpm -ql elrepo-release-7.0-4.el7.elrepo #查看安装生成了哪些文件


[root@centos7 ~]#yum repolist  #查看elre源
[root@centos7 ~]#cat /etc/yum.repos.d/elrepo.repo
### Name: ELRepo.org Community Enterprise Linux Repository for el7
### URL: http://elrepo.org/
[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el7
baseurl=????http://elrepo.org/linux/elrepo/el7/????$basearch/
???? http://mirrors.coreix.net/elrepo/elrepo/el7/????$basearch/
???? http://mirror.rackspace.com/elrepo/elrepo/el7/????$basearch/
???? http://repos.lax-noc.com/elrepo/elrepo/el7/????$basearch/
mirrorlist=????http://mirrors.elrepo.org/mirrors-elrepo.el7 ????
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-testing]
name=ELRepo.org Community Enterprise Linux Testing Repository - el7
baseurl=????http://elrepo.org/linux/testing/el7/????$basearch/
???? http://mirrors.coreix.net/elrepo/testing/el7/????$basearch/
???? http://mirror.rackspace.com/elrepo/testing/el7/????$basearch/
???? http://repos.lax-noc.com/elrepo/testing/el7/????$basearch/
mirrorlist=????http://mirrors.elrepo.org/mirrors-elrepo-testing.el7 ????
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-kernel]
name=ELRepo.org Community Enterprise Linux Kernel Repository - el7
baseurl=????http://elrepo.org/linux/kernel/el7/????$basearch/
???? http://mirrors.coreix.net/elrepo/kernel/el7/????$basearch/
???? http://mirror.rackspace.com/elrepo/kernel/el7/????$basearch/
???? http://repos.lax-noc.com/elrepo/kernel/el7/????$basearch/
mirrorlist=????http://mirrors.elrepo.org/mirrors-elrepo-kernel.el7 ????
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0[elrepo-extras]
name=ELRepo.org Community Enterprise Linux Extras Repository - el7
baseurl=????http://elrepo.org/linux/extras/el7/????$basearch/
???? http://mirrors.coreix.net/elrepo/extras/el7/????$basearch/
???? http://mirror.rackspace.com/elrepo/extras/el7/????$basearch/
???? http://repos.lax-noc.com/elrepo/extras/el7/????$basearch/
mirrorlist=????http://mirrors.elrepo.org/mirrors-elrepo-extras.el7 ????
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[root@centos7 ~]#yum --disablerepo="*" --enablerepo="elrepo-kernel" list
available  #查看内核包
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
Available Packages
kernel-lt.x86_64                                       4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-devel.x86_64                                 4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-doc.noarch                                   4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-headers.x86_64                               4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-tools.x86_64                                 4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-tools-libs.x86_64                             4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                       4.4.207-1.el7.elrepo    
                elrepo-kernel
kernel-ml.x86_64                                       5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-devel.x86_64                                 5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-doc.noarch                                   5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-headers.x86_64                               5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-tools.x86_64                                 5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-tools-libs.x86_64                             5.4.6-1.el7.elrepo      
                elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                       5.4.6-1.el7.elrepo      
                elrepo-kernel
perf.x86_64                                             5.4.6-1.el7.elrepo      
                elrepo-kernel
python-perf.x86_64                                     5.4.6-1.el7.elrepo      
                elrepo-kernel
[root@magedu ~]#yum -y --enablerepo="elrepo-kernel" install kernel-ml安装
[root@centos7 ~]#ls /boot
config-3.10.0-957.el7.x86_64                             symvers-3.10.0-
957.el7.x86_64.gz4.3.4 卸载程序包
4.3.5 升级和降级
升级和降级
范例:
config-5.4.6-1.el7.elrepo.x86_64                         symvers-5.4.6-
1.el7.elrepo.x86_64.gz
efi                                                     System.map-3.10.0-
957.el7.x86_64
grub                                                     System.map-5.4.6-
1.el7.elrepo.x86_64
grub2                                                   vmlinuz-0-rescue-
907ef8572fc24762bcbaac846dd46fcc
initramfs-0-rescue-907ef8572fc24762bcbaac846dd46fcc.img vmlinuz-3.10.0-
957.el7.x86_64
initramfs-3.10.0-957.el7.x86_64.img                     vmlinuz-5.4.6-
1.el7.elrepo.x86_64
initramfs-5.4.6-1.el7.elrepo.x86_64.img
[root@centos7 ~]#ls /lib/modules
3.10.0-957.el7.x86_64   5.4.6-1.el7.elrepo.x86_64
[root@centos7 ~]#reboot
[root@centos7 ~]#uname -r
5.4.6-1.el7.elrepo.x86_64
仓库缓存
清除目录/var/cache/yum/缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all 
范例:管理yum缓存
[root@centos7 ~]#du -sh /var/cache/yum
93M /var/cache/yum
[root@centos7 ~]#ls /var/cache/yum/x86_64/7/
base epel extras timedhosts timedhosts.txt
[root@magedu ~]#yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras
Cleaning up list of fastest mirrors
[root@centos7 ~]#du -sh /var/cache/yum
4.0K /var/cache/yum
[root@centos7 ~]#yum makecache
......
Metadata Cache Created
[root@centos7 ~]#du -sh /var/cache/yum
276M /var/cache/yum
yum 执行安装卸载命令会记录到相关日志中
日志 文件:
#CentOS 7以前版本日志
/var/log/yum.log
#CentOS 8 版本日志
/var/log/dnf.rpm.log
/var/log/dnf.log


yum 和 dnf 失败最主要原因:
yum的配置文件格式或路径错误
解决方法:检查/etc/yum.repos.d/*.repo文件格式
yum cache
解决方法:yum clean all
网络不通:
解决方法:网卡配置
范例:强行删除rpm包,并恢复
[root@centos7 ~]#rpm -e rpm --nodeps
#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
#reboot
三、yum包组
yum grouplist [hidden] [groupwildcard] [...]
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]























【yum及dnf仓库的实现及管理软件详解】


    推荐阅读