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