Linux基础15 yum概述,yum仓库搭建, DNF介绍

YUM管理:
yum是RedHat以及CentOS中的软件包管理器,能够通过互联网下载以rpm结尾的包,并且安装,并可以自动处理依赖性关系,无需繁琐的一次次下载安装。

yum install nginx

1.联网获取软件
2.基于RPM管理
3.自动解决依赖
4.命令简单好记
5.生产最佳实践

 

yum/dnf 工作原理

yum/dnf 是基于C/S 模式

yum 实现过程

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元 数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载 repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安 装。

Packages/
    ---------------- 具体的 rpm 包
repodata/
    ---------------- 当前仓库的元数据,比如说当前仓库有多少个包,每个包的版本,大小,相互依赖关系 等
    
客户端
    配置源指向  ---->  https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/
    
    yum install httpd
        首先把 repodata 下载到本地
        然后分析 repodata, 有没有我们想要的包 httpd
        如果从 repodata 中找到了,就说明这个仓库中有包,并且能读到相关依赖信息
        然后根据 repodata 中给出的信息,把包,及依赖包下载到本地
        调用 rpm 进行安装
        安装完成后删除相关信息

 

yum客户端配置 (换源)

yum客户端配置文件
/etc/yum.conf #为所有仓库提供公共配置
/etc/yum.repos.d/*.repo #为每个仓库的提供配置文件 (换源)


[root@rocky86 ~]# cat /etc/yum.conf 
[main]
gpgcheck=1 #安装包前要做包的合法和完整性校验
installonly_limit=3 #同时可以安装3个包,最小值为2,如设为0或1,
为不限制
clean_requirements_on_remove=True #删除包时,是否将不再使用的包删除
best=True #升级时,自动选择安装最新版,即使缺少包的依
赖
skip_if_unavailable=False #跳过不可用的


repo仓库配置文件指向的定义(换源)
[root@rocky yum.repos.d]# vim Rocky-AppStream.repo
[appstream]
name=Some name for this repository #仓库名称
#(指向路径有repodata就行,package会根据repodata去下载)
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/AppStream/$basearch/os/ #仓库地址 mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=AppStream-$releasever #仓库地址列表,在这里写了多个 baseurl指向 的地址 enabled={1|0} #是否启用,默认值为1,启用 gpgcheck={1|0} #是否对包进行校验,默认值为1 gpgkey={URL|file://FILENAME} #校验key的地址 enablegroups={1|0} #是否启用yum group,默认值为 1 failovermethod={roundrobin|priority} #有多个baseurl,此项决定访问规则, #roundrobin 随机,priority:按顺序访问 cost=1000 #开销,或者是成本,YUM程序会根据此值来决定 #优先访问哪个源,默认为1000 --------------------------------- mirrorlist这个地址其实是个中转地址,会获取到一堆下载地址,自动从中选一个最快的下载 如果不想用中转的,就写baseurl,相当于mirrorlist返回的列表中选一个。baseurl也可以写多条,如下 baseurl=http://dl.rockylinux.org/$contentdir/$releasever/AppStream/$basearch/os/ xxxxxxxxx xxxxxxxxx

 

 

什么是yum源:

要成功的使用yum工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软件仓库我们习惯称之为yum源或者yum 仓库这个源可以是本地的也可以是网络的。

各大镜像源:
阿里云:https://opsx.alibaba.com/mirror
清华源:https://mirrors.tuna.tsinghua.edu.cn/
163源:http://mirrors.163.com/
华为源:https://mirrors.huaweicloud.com/
科大源:http://mirrors.ustc.edu.cn/

查看 源列表

[root@zlsedu yum.repos.d]# yum repolist # repolist表示一共有多少个包


最基础的2个源

-rw-r--r-- 1 root root 2523 Jul 30 2019 CentOS-Base.repo  # 基础仓库
-rw-r--r-- 1 root root 664 May 11 2018 epel.repo       # 扩展源

所有的 repo 都位于 /etc/yum.repos.d/目录下,该目录下存在多个。
其实,这些 repo 并没有全都启用,可以使用 yum repolist all 查看你拥有的所有repo及其状态(当前会否启用,启用的会将其标识为 enable)
参考: https://blog.csdn.net/weixin_39094034/article/details/127561524

 

编辑repo文件
name: 描述
baseurl: 仓库地址(http协议, ftp协议, file也是协议) 如果是本地文件(用file协议file://) file:///var/ftp/pub... file:///最后/一个为路径
enabled: 0表示不启用, 1表示启用(默认是启用)
gpgcheck: 检查签名(可以做个密钥对检查) 0表示关闭

 

yum命令

yum [options] COMMAND
#常用选项
-c file|--config file #指定配置文件,默认使用
/etc/yum.conf
-v|--verbose #显示详细信息
-b|--best #尝试在可用包中寻找最匹配的版
-y|--assumeyes #自动回答为 yes
--nogpgcheck #不进行包校验
--repo repoid|--repoid repoid #指定repo源
--enablerepo repoid #临时启用repo源,可用通配符
--disablerepo repoid #临时禁用repo源,可用通配符
--nodocs             #不安装文档
--skip-broken #跳过有问题的包
--enable #启用源,配合 configmanager
--disable #禁用源,配合 configmanager
-x package|--exclude package|--excludepkgs package #排除指定包,可用通配符
--downloadonly #只下载,不安装

#常用子命令
autoremove               #卸载包,同时卸载依赖
check-update             #检查可用更新
clean                     #清除本地缓存
downgrade                 #包降级
group                     #包组相关
help                     #显示帮助信息
history                   #显示history
info                     #显示包相关信息
install                   #包安装
list                     #列出所有包
makecache                 #重建缓存
reinstall                 #重装
remove                   #卸载
repolist                 #显示或解析repo源
search                   #包搜索,包括包名和描述

显示程序包

yum list [options] [PACKAGE [PACKAGE ...]
#常用选项 --all #显示所有包,包括己安装的和repo源 中的可用包 --available #所有可用包 --installed #所有己安装的包 --extras #所有额外包 --updates #所有可更新的包 #上述选项可以替换成对应的 all,installed 这种子命令,但要注意位置 --showduplicates #相同的包,显示所有版本 #参数写法,位置不一样,但结果相同 [root@rocky86 ~]# yum list sos --installed Installed Packages sos.noarch 4.2-15.el8 @anaconda [root@rocky86 ~]# yum list --installed sos Installed Packages sos.noarch 4.2-15.el8 @anacond

#通配符写法
[root@rocky86 yum.repos.d]# yum list --installed *sos*
Installed Packages
sos.noarch                           4.2-15.el8                                    
  @anacond

显示仓库列表

yum repolist [options]

#常用选项
-v|--verbose #显示详细信息
--repo repoid|--repoid repoid #指定repo源
--all #显示所有源
--enabled #所有enabled状态的源,默认项
--disabled #所有disabled 的源

#查看源具体信息(会下载对应repodata)
[root@rocky yum.repos.d]# yum repolist -v

#默认显示所有 enable 的 repo
[root@rocky86 yum.repos.d]# yum repolist
repo id                                                         repo name
aliyun-baseos                                                   aliyun baseos
cdrom-appstream                                                 cdrom appstream
nju-extras                                                       nju extras

安装程序包

yum install [options] PACKAGE [...]
yum reinstall [options] PACKAGE [...]

#常用选项
--installroot path #指定安装目录
--downloadonly #只下载,不安装
--downloaddir path|--destdir path #指定下载目录,如果下载目录不
存在,则自动创建

[root@rocky86 yum.repos.d]# rpm -q httpd
package httpd is not installed

#安装
[root@rocky86 yum.repos.d]# yum install httpd

查看yum事务历史

yum 执行安装卸载命令会记录到相关日志中
日志文件 /var/log/dnf.log ( /var/log/yum.log )

yum history [options] [info|list|redo|undo]
yum history #默认查看所有
yum history list #同上
yum history package #查看与指定包有关的日志 
info N #查看第N条记录的具体执行内容
undo N #回滚第N条记录
redo N #重新执行第N条记录

仓库缓存

缓存目录为 /var/cache/dnf/ ( /var/cache/yum/ )

yum clean [options] {metadata,packages,dbcache,expire-cache,all} #清空缓存
yum makecache #构建缓存

例:
[root@rocky86 ~]# yum clean all
[root@rocky86 ~]# yum makecache

 

搭建yum仓库

仓库机器操作

通过nginx搭建文件服务器,用于查看仓库内容

下载nginx的rpm包

wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm

安装nginx

rpm -ivh nginx-1.16.0-1.el7.ngx.x86_64.rpm

修改nginx的配置

vim /etc/nginx/conf.d/yum_canku.conf

server {
        listen  80;
        server_name 10.0.0.200;
        location / {
                root /data/yum_cangku;  # 从这个地址开始展示
                index index.html index.htm;
                autoindex on;
                access_log off;
        }
}
# 启动nginx命令
nginx
# 重启nginx
/usr/sbin/nginx -s reload
# 关闭nginx
nginx -s stop

搭建yum仓库,把包含rpm的文件夹变为yum仓库

# 安装createrepo命令(用于根据目录的rpm包生成repodata元数据,如果拷贝阿里的数据和元数据,或者用挂载光驱中的包路径,都已存在就不用自己生成了)
[root@localhost yum.repos.d]# yum install -y createrepo
# 创建yum仓库(把该路径变成yum仓库)
createrepo 库文件夹  (会在文件夹内创建xml文件,将文件夹内的rpm文件转为yum软件包索引,让访问机器yum可以识别到,使用yum repolist可以识别)

 

访问机器操作

访问机器配置repo文件,即可通过yum去配置仓库下载

# 进入仓库
cd /etc/yum.repos.d/
# 新建对应包配置
vim nginx.repo
[nginx-zls]  # 仓库名随便写
name=This is zls's yum cangku  # 注释随便写
baseurl=http://10.0.0.200/  # 也可以是ftp协议,或者是本地文件file协议(yum仓库地址)
enable=1  # 弃用
gpgcheck=0  # 不检查

通过 yum repolist 看是否可以识别

 

搭建本地远程yum仓库实例(base源,zabbix,nginx)

仓库服务器

创建仓库

mkdir -p /data/zls/yum_repo
cd /data/zls/yum_repo
mkdir base zabbix nginx

将rpm包放入

# base的rpm包
(用vm创建centos的话,在虚拟机选项,设置选项中,可以看到硬件挂载centos镜像。镜像里rpm包。
mount /dev/cdrom /mnt
在/mnt/Packages中可以看到镜像中的rpm包)
cp /mnt/Packages/* base/    (拷贝全部,此处模拟只拷贝1个rpm即可)
cp /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm base/

# nginx的rpm包
# 去https://nginx.org/官网查找
cd nginx/
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm

# zabbix的rpm包
# 进入中科大源,采用它的同步方式
cd zabbix/
rsync -avzP rsync://rsync.mirrors.ustc.edu.cn/repo/zabbix ./     #(文件地址有问题,无法同步)
# 采用阿里源下载(此处就下载一个)
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.8-1.el7.x86_64.rpm

搭建仓库

createrepo /data/zls/yum_repo/base/
createrepo /data/zls/yum_repo/nginx/
createrepo /data/zls/yum_repo/zabbix/

给仓库目录协议

# 删除原本的源(防止干扰)
cd /etc/yum.repos.d
# 删除里面所有问题,以免干扰
rm -rf *
# 编辑本地yum源
vim local_base.repo
[local_base_zls]
name='123'
baseurl=file:///data/zls/yum_repo/base
enable=1
gpgcheck=0
# 此时,可通过yum repolist 可以识别当前源

vim local_zabbix.repo
[local_zabbix_zls]
name='456'
baseurl=file:///data/zls/yum_repo/zabbix
enable=1
gpgcheck=0

vim local_nginx.repo
[local_nginx_zls]
name='789'
baseurl=file:///data/zls/yum_repo/nginx
enable=1
gpgcheck=0

本地测试,安装

yum install -y tree

远程访问电脑yum下载

仓库服务器操作

# nginx配置(把文件路径暴露访问机)
vim /etc/nginx/conf.d/yum_canku.conf
server {
        listen  80;
        server_name 10.0.0.200;
        location / {
                root /data/zls/yum_repo;
                index index.html index.htm;
                autoindex on;
                access_log off;
        }
}

访问服务器操作

cd /etc/yum.repos.d/
# 备份内容并清除开始测试
# 编辑本地yum源
vim local_base.repo
[local_base_zls]
name='123'
baseurl=http://10.0.0.200/base/
enable=1
gpgcheck=0

vi local_nginx.repo
[local_nginx_zls]
name='789'
baseurl=http://10.0.0.200/nginx/
enable=1
gpgcheck=0

...

安装测试

yum install -y nginx

 

注意: 修改仓库内rpm包,或者增加rpm包后需要执行下方命令

# 对方配置完repo文件后,执行代码刷新缓存
yum makecache
# 服务器目录下的rpm文件增减后,需要在服务器端执行以下命令,更新一下库才能正常在客户机下载rpm包
createrepo --update /yum/local 

 

DNF介绍

DNF,即 DaNdiFied,是新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理
器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代
了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分
析,运行速度等;

yum程序在安装的过程中,如果被终止,下次再执行将无法解决依赖,DNF可解决此问题;
#配置文件
/etc/dnf/dnf.conf
#仓库文件
/etc/yum.repos.d/ *.repo
#日志
/var/log/dnf.rpm.log 
/var/log/dnf.log
#使用帮助
man dnf

dnf 用法与yum一致
dnf [options] <command> [<arguments>...] 
dnf --version
dnf repolist 
dnf reposync 
dnf install httpd 
dnf remove httpd 
dnf clean all 
dnf makecache 
dnf list installed 
dnf list available 
dnf search nano 
dnf history undo 1

 

posted @ 2023-03-31 18:04  战斗小人  阅读(223)  评论(0编辑  收藏  举报