搭建私有yum仓库
前言
yum仓库,是一个集中的大数据库,存放两块重要的内容
- 存放所有的rpm软件包(安装包或依赖包)
- 仓库包的元数据(包的描述信息-版本-制作者、存放包和包之间的依赖性等一些信息)
yum/dnf 工作原理
- yum/dnf 是基于C/S 模式
- yum 服务器存放rpm包和相关包的元数据库
- yum 客户端访问yum服务器进行安装或查询等
实现过程 :
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
yum服务器的仓库可以多种形式存在:
- file:// 本地路径
- http:// 网络
- https:// 网络
- ftp:// 网络
注意:yum仓库指向的路径一定必须是repodata目录所在目录(repodata其实存放仓库软件包的元数据的地方\记录了包之间的依赖性以及包的描述信息)
yum客户端配置
/etc/yum.conf 为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为每个仓库的提供配置文件
CentOS7 yum配置文件常用选项讲解
范例:CentOS7的配置文件
[extras]
# 是否检查软件包签名 1为启用 0为不起用
gpgcheck=1
#签名秘钥地址
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
#是否启用该仓库 1为启用 0为不起用
enabled=1
#/URL访问路径(须指定到repodate数据文件夹的上级目录)
baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/
#仓库名称 可以自定义
name=Qcloud centos extras - $basearch
yum工具管理软件包
在CentOS 7 服务器中,yum工具是最常用的YUM客户端工具,由默认安装的yum-3.4.3-150.el7.centos.noarch软件包提供。
yum-config-manager命令
可以生成yum仓库的配置文件及启用或禁用仓库,来自于yum-utils包
格式:
#增加仓库
yum-config-manager --add-repo URL或file
#禁用仓库
yum-config-manager --disable “仓库名"
#启用仓库
yum-config-manager --enable “仓库名”
可以使用yum repolist [all|enabled|disabled]
查看仓库启用情况
为CentOS7用系统安装光盘作的本地yum仓库
#挂载光盘至某目录,如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
#创建配置文件
[root@mirror ~]#vim /etc/yum.repos.d/centos.repo
[CentOS7] name=CentOS 7
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
注意:CentOS8与之前的版本不同,CentOS 8 系统有两个yum 源:BaseOS和AppStream ,需要分别设置两个仓库 (Appstream存放额外的软件包,BaseOS存放操作系统核心包)
CentOS8制作的EPEL源仓库
Epel (extra packages for enterprise linux)源存放第三方红帽公司经过测试适合企业使用的仓库含有大量的包,它比我们光碟镜像自带的包多的多,增加许多非常丰富的工具
[root@mirror yum.repos.d]# cat epel.repo
[Epel]
name=Epel
#华为开源镜像网络路径,注意选择对的版本和平台 也可以通过网络路径夹带变量$releasever(系统版本)$basearch(平台)配置的yum仓库
baseurl=https://repo.huaweicloud.com/epel/8/x86_64/
gpgcheck=0
enabled=1
实现私用 yum仓库–epel镜像仓库
1. 首先安装nginx (此处使用yum安装 过程略过)
yum install nginx -y
2. 创建项目目录
mkdir -p /www/html/centos/8/epel/
3. 下载阿里云或华为云的Epel仓库到包本地做局域网仓库
①、首先本地主机配置好Epel源仓库,以华为Epel为例子
[root@mirror /]# cat /etc/yum.repos.d/epel.repo
[Epel]
name=Epel
baseurl=https://repo.huaweicloud.com/epel/8/x86_64/
gpgcheck=0
enabled=1
②. 通过yum repolist all 可以到设置的源的repo id
[root@yum /]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
Epel Epel enabled: 13,580
③、下载华为epel源的所有rpm包并且下载meta
#CentOS 8 dnf 工具集成
dnf reposync --help #查看帮助
#默认只下载rpm包,不下载meta数据,需要指定--download-metadata 才能下载meta
dnf reposync --repoid=Epel --download-metadata -p /www/html/centos/8/epel #指定源repoid进行仓库源同步 -p指定同步路径(按自己需求修改)
#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path
4. 添加nginx 子配置文件
vim /etc/nginx/conf.d/yum.conf
#添加以下内容
server {
listen 80; # 修改要监听的端口
server_name 10.10.10.254;
charset utf-8; #设置中文字符集
location / {
autoindex on; # 打开目录浏览
autoindex_exact_size off; #关闭字节显示(会以MB的方式显示)
root /www/html/centos; # 这里请换成你的实际目录路径
index index.html index.htm;
}
}
5. nginx 启动并设置开机自启并测试
注意:关闭selinux、防火墙 (或者放行指定端口)
nginx -t 检查nginx配置文件是否正确
systemctl enable --now nginx #启动并设置开机自启
通过http://10.10.10.254/centos/8/epel进行访问
客户端配置好yum配置文件即可使用例如
[Epel]
name=Epel
baseurl=https://10.10.10.254/centos/8/epel/
gpgcheck=0
enabled=1
6、 定时同步
用repoync 命令,reposync用于将远程yum存储库同步到本地存储库.(centos7 需要yum-utils包,centos8 集成 dnf reposync )
- -n: 只下载最新的包
- -p: 下载包的路径:默认为当前目录
vim /home/scripts/yum_update.sh
#!/bin/bash
echo 'Updating Source'
DATETIME=`date +%F_%T`
exec > /var/log/repo_$DATETIME.log
dnf reposync --repoid=Epel --download-metadata -np /www/html/centos/8/epel &>/dev/null
if [ $? -eq 0 ];then
echo "SUCESS: $DATETIME aliyum_yum update successful" >>/var/log/repo_$DATETIME.log
else
echo "ERROR: $DATETIME aliyum_yum update failed" >> /var/log/repo_$DATETIME.log
fi
#设定定时任务
crontab -e
30 1 * * 6 /bin/bash /home/scripts/yum_update.sh &>/dev/null
最后
如果为自建yum仓库为手动获取的RPM软件 (无repodata元数据)
每次添加rpm包到仓库时都要执行一遍(createrepo依赖于createrepo包)
cd /www/html/centos/8/epel// #进入rpm包所在的目录
createrepo .