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

Posted 一起学IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:进入yumshell提示符

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仓库的实现及管理软件详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux中部署YUM仓库及NFS共享服务

在CentOS上使用yum或dnf安装Ansible需要具备哪些软件仓库

部署yum仓库及NFS共享服务

#13 yum编译安装与sed命令的使用

Yum仓库常见目录用途及软硬连接

搭建yum仓库脚本