制作本地(局域)yum仓库
前言
我们为什么要制作本地的yum源呢?
如何制作?
首先简单了解一下yum工具:
yum工具是基于rpm的,最重要的特性就是可以自动解决以来关系。
yum的本质是:把xxx.rpm
的包下载到本地,然后在进行安装。但是在执行yum install xxx
安装完成之后就会自动删除rpm包。
在做实验或生产环境中无法连接外网的情况下,安装某些软件就会变得很复杂,还需要安装依赖包。
比如当安装比较大的服务的适合,如安装MySQL,文件很大,当搭建MySQL集群的适合,就需要每台机器都去重新下载在安装,是很浪费实践的。
所以,在某些情况下,就有必要自己搭建一个局域网或测试环境的本地yum源,来提供内部访问,我们知道,局域网的传输速度是很快的。
有了这样的需求,如果制作?:
- 1.首先我们需要有rpm包,并下载到本地。
- 2.有包了,需要生成yum仓库数据文件信息,记录这些数据
- 3.需要存在一个提供局域网其他机器访问的服务,可以是http或者ftp
- 4.当上面都有了,就可以进行测试
- 5.完成后,还需要对本地仓库进行自动更新
多说一句:不要觉得第一步很麻烦,这是必要的,一台机器下载总比每台机器都要下载速度来的快多了。
下面开始进行具体的实施
一.下载rpm包到本地
使用阿里云的镜像仓库来同步到本地。
1.使用reposync来进行同步阿里云镜像
vim /etc/yum.repos.d/aliyun.repo # 配置阿里云yum源
[Aliyun]
name=Aliyun
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
enabled=1
yum repolist # 来查看各镜像的repo id
mkdir /yum # 本地仓库目录
reposync -r "$repoid" -p /yum # $repoid就是镜像的id
此时,就将镜像仓库下载到了本地。同步速度与网速有关。
2.可以只把需要的rpm包下载到本地
使用yum命令加上参数
--downloadonly:只下载
--downloaddor:指定下载目录
yum install --downloadonly --downloaddir=/yum/ mysql-community-server
此时,就将MySQL的相关安装包和依赖包下载到了/yum/
目录。
完成上面的步骤,第一步本地rpm包准备好了
二:生成yum仓库数据文件信息(repodate信息)
1.createrepo生成repodate信息
没有生成仓库数据信息,在使用yum的时候会报错,使用仓库需要有repomd.xml这个文件。
repomd.xml
:文件就是仓库rpm包的索引信息。
使用createrepo生成即可,默认是没有这个命令的。
yum install createrepo -y # 安装createrepo
createrepo /yum/ # 生成repomd.xml文件
# 使用完成后会在/yum/目录里面生成repodate,这个文件里面存放的就是仓库的各项信息
2.检查本地仓库信息是否正常
1): 配置本地yum仓库
vim /etc/yum.repos.d/local.repo
[local]
name=local repository
baseurl=file:///yum
enabled=1
gpgcheck=0
2): 检查本地仓库信息
yum repoinfo local
# 这里的local可以是Repo-id,也可以是Repo-name
# Repo-id :配置文件[]里面的内容
# Repo-name :配置文件name的字段
# 输出正常表示可以进行正常使用
三:配置HTTP服务,提供局域网下载
上面的步骤完成,只能在本地使用的,当局域网机器也需要使用肯定不满足。
本地安装HTTP服务:
yum -y install nginx
getenforce # 当为enforcing时,可以使用下面的命令,不是可以忽略。
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl status firewalld # 状态为running时,建议关闭
systemctl stop firewalld
systemctl disable firewalld
## 在进行配置文件,将配置文件里面的root设置为自己的yum仓库地址
下面粘贴一下自己Nginx的配置:
server {
listen 80;
listen [::]:80 default;
server_name www.repo.com;
root /yum;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# 启动服务
nginx -t
systemctl start nginx
systemctl enable nginx
提示: 可以将本地仓库防止在Nginx的默认网页目录下 /usr/share/nginx/html
当使用Nginx作为web服务时,需要有Nginx的yum包或者源码包。
可以参考连接 LNMP环境搭建
四:测试局域网其他机器是否能够访问
创建repo文件:
vim /etc/yum.repos.d/local.repo
[loacl]
name=local repository
baseurl=http://www.repo.com
gpgcheck=0
enabled=1
# 修改host
vim /etc/hosts
$ipaddress www.repo.com
yum repolist # 查看local是否有包
当local包之后,说明局域yum搭建成功。
五:本地yum仓库更新
当本地仓库有其他包加入或者同步网络yum源的时候有变动,就需要更新本地yum仓库
更新yum仓库
reposync -r "$repoid" -p /yum # $repoid就是镜像的id,同步并更新
createrepo --update /yum # 更新repodate信息
yum clean all && yum repolist # 清除缓存
局域网其他机器重新生成yum缓存
yum clean all && yum repolist
可以在本地机器写脚本来自定更新检查
1.本地仓库自动执行更新脚本
vim /root/yum-update.sh
#!/bin/bash
datetime=`date +"%Y-%m-%d %H:%M:%S"`
reposync -d -r "$repoid" -p /yum # 请将这里的$repoid换成镜像的id
if [[ $? -eq 0 ]];then
createrepo --update /repo/CentOS/7/os/x86_64/
echo "SUCCESS:$datetime epel update YES"
else
echo "ERROR: $datetime epel Updatem NO"
fi
# 创建一个自动执行任务
crontab -e
0 3 * * * 3 /bin/bash /root/yum-update.sh
crontab -l # 查看计划任务是否存在
2.局域网客户端重新创建缓存
vim /root/yum-update.sh
#!/bin/bash
yum clean all
yum repolist
crontab -e
0 4 * * * 3 /bin/bash /root/yum-update.sh
crontab -l
总结
为此,本地yum仓库搭建完成。
并不复杂,望能帮助到大家。
可以了解yum仓库操作的更多知识。