制作本地yum仓库

邮差的信 提交于 2020-02-16 01:24:53

制作本地(局域)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仓库操作的更多知识。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!