环境准备:centos7虚拟机
一、Yum简介
YUM(Yellowdog Updater Modified):是一个基于RPM的软件包管理器,能够从指定服务器自动下载RPM包并安装,可以处理软件之间的依赖关系,一次性安装所有依赖的安装包,无需一个个下载安装
1、配置文件
$ cat /etc/yum.conf
[main]
cachedir=/var/cache/yum # yum下载的RPM包的缓存目录
keepcache=0 # 缓存是否保存,1保存,0不保存。
debuglevel=2 # 调试级别(0-10),默认为2。
logfile=/var/log/yum.log # yum的日志文件所在的位置
exactarch=1 # 有两个选项1和0,1代表是否只升级和你安装软件包cpu体系一致的包,
# 如果设为1则如你安装了一个i386的rpm,则yum不会用i686的包来升级
obsoletes=1 # 这是一个update的参数,具体请参阅yum(8),
# 简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1 #有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
plugins=1 #是否允许使用插件,默认是0不允许,
#但是我们一般会用yum-fastestmirror这个插件。
installonly_limit=5 #允许保留多少个内核包。
# 一个错误追踪的网页,BugTracker是一个用于软件开发和测试阶段的缺陷跟踪、过失跟踪和问题跟踪工具。你可以自动地向适当的开发者指出缺陷并且可以使用带有与、或运算符的过滤器和通配符快速地找到你的缺陷
bugtracker_url=ht tp://bugs.centos.org/set_project.php?project_id=23&ref=ht tp://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release #指定从哪里获取系统版本相关的信息,是从centos-release这个包里的文件获取的
2、repo文件
yum的repo文件一般保存在/etc/yum.repos.d
目录下,我们常用的是CentOS-Base.repo
[root@lhy-05 yum.repos.d]# ll total 52 -rw-r--r--. 1 root root 1664 Nov 23 2020 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Nov 23 2020 CentOS-CR.repo -rw-r--r--. 1 root root 649 Nov 23 2020 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Nov 23 2020 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 Nov 23 2020 CentOS-Media.repo -rw-r--r--. 1 root root 1331 Nov 23 2020 CentOS-Sources.repo -rw-r--r--. 1 root root 8515 Nov 23 2020 CentOS-Vault.repo -rw-r--r--. 1 root root 616 Nov 23 2020 CentOS-x86_64-kernel.repo
cat /etc/yum.repos.d/CentOS-Base.repo
[base] name=CentOS-$releasever - Base mirrorlist=ht tp://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=ht tp://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates [updates] name=CentOS-$releasever - Updates mirrorlist=ht tp://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=ht tp://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#ad ditional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=ht tp://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=ht tp://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#ad ditional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=ht tp://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=ht tp://mirror.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
repo 配置解释
[base] 容器的名字,也叫repoid,中括号必须要有,名字可以随意取,但是两个容器的名字不能相同,否则yum不知道去那个容器去找。
name= 说明容器的意义 重要性不高
mirrorlist= 列出该容器可以使用的镜像站点,如果不想使用可以注释掉这行
baseurl= 这个最重要,后面接的是容器的实际网址。mirrorlist是yum自行去找镜像站点,baseurl是指定一个固定的容器网址。
enable=1 启动该容器,不想启动设为0
gpgcheck=1 是否需要查阅RPM文件内的数字证书,1是0否。对于自己制作的yum源一般设置为0,如果更新源到公网上需要检查gpg签名,保证客户端得到来源的可靠性.
gpgkey= 数字证书的公钥文件所在的位置。使用默认值即可。
$releasever 表示当前系统的发行版本,使用rpm -qi centos-release
查看
$basearch 表示系统硬件架构(CPU指令集) ,使用命令arch
查看,如 i386、x86_64
# 查看系统发行版本
[root@lhy-05 yum.repos.d]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# 查看系统发行版本
[root@lhy-05 yum.repos.d]# rpm -qi centos-release
Name : centos-release
Version : 7
Release : 9.2009.1.el7.centos
Architecture: x86_64
Install Date: Tue 28 Jun 2022 12:49:39 PM CST
Group : System Environment/Base
Size : 44787
License : GPLv2
Signature : RSA/SHA256, Thu 03 Dec 2020 12:35:28 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : centos-release-7-9.2009.1.el7.centos.src.rpm
Build Date : Mon 23 Nov 2020 11:08:41 PM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <ht tp://bugs.centos.org>
Vendor : CentOS
Summary : CentOS Linux release file
Description :
CentOS Linux release files
# 使用arch查看系统架构
[root@lhy-05 yum.repos.d]# arch
x86_64
因此 ht tp://mirror.centos.org/centos/$releasever/os/$basearch/
对应的url为:ht tp://mirror.centos.org/centos/7/os/x86_64
二、配置云镜像源
1、基础镜像源
系统默认使用的是Centos官方的基础yum源,可以配置其他的镜像源
yum -y install wget # 确保wget工具可用
mkdir -p /etc/yum.repos.d/bak # 创建repo备份目录
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/bak # 备份系统的repo文件
wget -O /etc/yum.repos.d/CentOS-Base.repo ht tps://mirrors.aliyun.com/repo/Centos-7.repo
2、增加epel源
什么是epel?
EPEL 的全称叫 Extra Packages for Enterprise Linux。EPEL 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL 之后,就相当于添加了一个第三方源。
为什么需要Epel?
那是因为 CentOS 源包含的大多数的库都是比较旧的。并且,很多流行的库也不存在。EPEL 在其基础上不仅全,而且还够新。EPEL 这两个优点,解决了很多人安装库的烦恼。
yum install -y epel-release # 安装epel
3、更新缓存
yum clean all # 清除yum缓存
yum makecache # 更新yum缓存
yum repolist # 查看repo列表
三、制作Yum源
1、制作yum源
机器无法连接外网的时候需要制作本地yum源进行离线安装软件,前提需要准备好rpm包。比如将rpm包放到目录下/soft/yumPath/my-rpms
。
# 1、安装createrepo
yum install createrepo -y
# 2、创建yum源目录
mkdir -p /soft/yumPath/my-rpms
# 3、下载nginx安装包,并指定报rpm包保存目录
yumdownloader --destdir=/soft/yumPath/my-rpms --resolve nginx
# 4、生成元数据,执行之后会在/soft/yumPath/my-rpms下创建repodata目录,里面保存了yum源的数据
createrepo -d /soft/yumPath/my-rpms
2、更新yum源
如果/soft/yumPath/my-rpms
目录下有rpm包更新,必须使用以下命令更新元数据才能生效
createrepo --update /soft/yumPath/my-rpms
四、Yum源的使用
1、本地使用yum源
上一个步骤制作好了yum源,现在可以在本机上使用了,在/etc/yum.repo.d
目录下创建my-rpms.repo
,内容如下
[my-rpms] name=my-rpms baseurl=file:///soft/yumPath/my-rpms enabled=1 gpgcheck=0
yum clean all # 清除yum缓存 yum makecache # 创建yum缓存 yum repolist # 查看yum仓库列表 yum repo-pkgs my-rpms list # 查看my-rpms仓库下的rpm列表
2、提供ht tp服务的yum源
2.1、使用python提供服务
cd /soft/yumPath python -m SimpleHT TPServer 8069 curl localhost:8069/rpms/
2.2、使用ht tpd提供服务
ht tpd的数据根目录默认是/var/www/html
,默认监听80端口,具体配置在/etc/ht tpd/conf/ht tpd.conf
安装ht tpd
yum -y install ht tpd
修改配置文件的数据目录和端口
vi /etc/ht tpd/conf/ht tpd.conf修改如下内容:
DocumentRoot "var/www/html" --> DocumentRoot "/soft/yumPath" Listen 80 --> Listen 8079
增加数据目录访问权限规则
vi /etc/ht tpd/conf/ht tpd.conf文件追加如下内容:
<Directory "/soft/yumPath/my-rpms"> Options Indexes FollowSymlinks AllowOverride None Require all granted </Directory>
启动ht tpd
setenforce 0 systemctl start ht tpd
访问
# 访问yum目录 curl localhost:8089/my-rpms/
2.3、使用nginx提供服务
编辑nginx配置文件
# 查看nginx安装路径 whereis nginx # 编辑 yum.conf,添加内容见下文 vi /conf.d/yum.conf # 重新加载nginx systemctl reload nginx # 查看端口 ss -ntlp | grep 8089 # 访问 curl localhost:8099/my-rpms/
yum.conf
server{ listen 8089; location /{ root /soft/yumPath; autoindex on; } }
3、配置repo指向yum源
在同一个局域网的其他主机使用这个yum源,vi /etc/yum.repo.d/myrepo.repo
[myrepo] name=myrepo baseurl=ht tp://192.168.62.139:8069/my-rpms enabled=1 gpgcheck=0
测试:
yum clean all # 清除yum缓存 yum makecache # 创建yum缓存 yum repolist # 查看repo列表 yum repo-pkgs my-rpms list # 查看my-rpms仓库下的rpm列表
五、下载Yum仓库的rpm包
一般使用下面3种方法将安装包及其依赖包下载到本地
1、downloadonly
# 安装 yum-plugin-downloadonly yum install yum-plugin-downloadonly # 下载nginx安装包,如果不指定位置,默认保存到/var/cache/yum/ 下repo源目录的packages文件夹下 yum install --downloadonly --download dir=/tmp/rpms nginx
2、yumdownloader
yum install yum-utils # 安装 # 下载nginx安装包,如果不指定位置,默认保存到当前目录 yumdownloader --destdir=/soft/yumPath/my-rpms --resolve nginx
3、reposync
# 创建目录 mkdir -p ./base/os ./base/updates ./base/extras # 下载base所有包 reposync --repoid base --download_path ./base/os --norepopath --delete --newest-only # 下载uodate所有包 reposync --repoid updates --download_path ./base/updates --norepopath --delete --newest-only # 下载extras所有包 reposync --repoid extras --download_path ./base/extras --norepopath --delete --newest-only
reposync 参数解析:
--repoid
:表示同步哪个repoid的rpm包,ustc.repo文件中[base]
、[updates]
、[extras]
就是repoid,所有.repo文件的repoid不能冲突
--download_path
:表示把rpm下载到哪个目录下
--norepopath
表示不在--download_path
下新建以--repoid
为名字的目录;比如上面的命令就不会在base/os/
下再新建base
目录
--delete
:如果本地base/os/
目录下有rpm包,但是在远程yum源已经没有了,则删除本地的rpm包
--newest-only
:对于同一个软件,只下载最新的rpm包
4、简单总结
downloadonly、yumdownloader
一般都用于下载单个软件的rpm及其依赖包,reposync
一般用于yum源制作,比如某个机器无法连外网需要制作本地yum源可以使用reposync下载全量包后上传并制作本地yum源实现软件的安装。
六、Yum配置代理
如果主机不能连外网,解决方法一般是制作本地yum源,如果主机所在的内网中存在一台能连外网的机器就可以使用更方便的方式--配置yum代理,而实际中这种情况在实际中更常见,这样我们就可以通过配置yum代理使用yum安装软件了。
1、全局代理
全局代理对/etc/yum.repo.d
下的所有仓库设置代理可以修改 /etc/yum.conf文件,在该文件尾部添加一行:
测试:
情景模拟:机器A与B同属一个内网,机器A可以连接外网并配置了国内云镜像,机器B无法连接外网,现需要在机器B上使用yum安装软件
1、将yum源拷贝到B上
scp /etc/yum.repos.d/CentOS-Base.repo root@192.168.62.102:/etc/yum.repos.d/2、机器A安装nginx,增加如下配置
server { listen 8090; server_name yum.com; location / { # 用于查看日志,是否代理 access_log /var/log/mirrors.log; proxy_pass ht tp://mirrors.aliyun.com; } }3、机器B设置全局代理
# 在/etc/yum.conf最后一行添加代理配置 sed '$i proxy=ht tp://192.168.62.139:8090' /etc/yum.conf
2、指定某个仓库不走代理
假设我们已经设置了全局代理,但是又希望某个仓库不走代理,可以在特定仓库候后面增加一句proxy=_none_
即可。比如CentOS-Base.repo
中存在多个仓库比如:base、updates、extras等,我们希望base不走代理。
[base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=ht tp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ ht tp://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ ht tp://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=ht tp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 proxy=_none_
#released updates [updates] ...
3、指定某个仓库走代理
假设我们不设置全局代理,只给base仓库设置代理,则只需在base仓库后面添加一行proxy=ht tp://ip:port
即可
[base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=ht tp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ ht tp://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ ht tp://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=ht tp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 proxy=ht tp://ip:port
#released updates [updates] ...