第一次干这种事,一开始对镜像和源的了解并不足,走了不少弯路,所以在这里做一个记录。

应用场景

位于内网的CentOS服务器不能连接外网,因此在配置的时候存在各种麻烦,我们需要在服务器上安装一个docker以及各种开发工具,由于docker的安装存在多种依赖,如果不能使用yum自动安装的话,自己逐个解决依赖会显得过于繁琐。所以最好的方法就是在内网上搭建一个yum源,不仅可以解决现在的问题,也可以方便以后的学弟学妹们进行部署(虽然实验室大多服务器是用的windows server)。

方法概述

Yum是CentOS上负责打包和安装rpm包的工具(类似的有apt-get/homebrew等),它将所有的软件都存储在服务器上(一般称之为源),这些服务器的地址都以*.repo的文件形式存储在本地PC的/etc/yum.repos.d。每次使用指令 yum install **时,yum就会根据本地的repo文件找到服务器的地址,根据名称找到服务器上的软件进行打包下载。

所以我们要做的就是,在内网上使用一台服务器用来存储所有的软件,当作源;将需要使用Yum源的服务器中的*.repo文件中的ip地址指向源服务器。

为了方便,我在虚拟机上连外网搭建源,搭建成功后再切换到内网,并找一台内网的服务器充当永久的源。

具体步骤

  1. 使用httpd服务器来作Web容器安装:

    yum install httpd

    启动服务:

    service httpd start

    图1.httpd启动成功后的默认页面

    默认监听的是80端口,如果需要使用其他端口,在配置文件/etc/httpd/conf/httd.conf中进行修改。为确认服务器已经启动,可以使用浏览器打开localhost网页,如果出现图1则表示启动。

    如果本机浏览器能访问而其他电脑无法访问,一般是防火墙的问题。推荐直接关闭防火墙。

     

    CentOS 7中关闭防火墙:

    systemctl stop firewalld.service

    如果是使用的iptable的CentOS,指令是:

    service iptables stop

    httpd中的web应用都放在/var/www/html/文件夹中(类似tomcat 中的webapp)

  2. 制作Yum源
  • 2.1 挂载CentOS镜像

CentOS的镜像中包含了一些常用的软件,都存储在其根目录下的repodata中。这种方法非常简单,但问题在于镜像中包含的软件实在太少,即使使用了最全的everything版的镜像,其中的软件也难以满足日常开发需求。但如果对于网络不好的情况,手边又只有镜像(能装上CentOS的虚拟机当然有CentOS的镜像),这种方法则比较适合。

步骤如下(系统环境为MacOS上的Paralles Desktop中CentOS虚拟机,默认系统已经装好,网络正常):

  • 2.1.1 挂载镜像其实在PD上装好虚拟机后,已经默认挂载了镜像,如果没有挂载的话,先将镜像上传到虚拟机中(由于pd的Paralles Tool不能安装,就不能共享文件夹和剪切板,所以我使用的是很原始的网络上传),执行:

    mount -o loop {path to iso} /var/www/html/CentOS

    因为CentOS镜像中的rpm包都已经打包好了,所以现在就已经配置好了,所有软件都在repodata目录中.可以从浏览器中进行访问。

图2.浏览器中的访问效果

  • 2.2 同步远程镜像源到本地

感谢my大大和Les1ie学弟给我指出了这种方法,确实比挂载镜像好多了。

网上有很多公开的源的镜像,我们只需要将这些镜像同步到本地就可以快速搭建一个本地的源,并且还可以通过定时同时来实现软件的更新。这里我选择的是阿里云的镜像源。

  • 2.2.1 安装需要的工具:yum-utils、createrepo

    yum install yum-utils
    yum install createrepo

其中yum-utils提供reposync服务,可以将远程的源同步到本地,createrepo可以将rpm包创建为Yum仓库,生成repodata目录

  • 2.2.2 查看镜像 可以使用 yum repolist指令查看本地存在的镜像 默认状态下存在以下镜像:

    图3. YUM源列表

    可以看到存在三个源,base\extras\updates, 它们分别指向不同的服务器地址。三个源一共有11620个包。

  • 2.2.3 同步镜像

    reposync -r base -p /var/www/html/

    将base源同步到本地的/var/www/html,同理,如果想同步extras中的包,只需要将 ‘base’ 替换为’extras’。

图3.YUM源同步过程

  • 2.2.4 获取其他的镜像repo文件(可选)除了三个自带的源之外,还可以根据需要添加其他的镜像源,有多种方式可以添加,比如:添加阿里云的镜像:

    wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

    添加docker的镜像

    sudo yum-config-manager –add-repo https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo

    可以到/etc/yum.repos.d目录下查看本地的repo文件:

  • 2.2.5 创建YUM仓库使用指令createrepo创建本地YUM仓库,生成repodata目录和索引信息。

    createrepo -pdo /var/www/html/epel/ /var/www/html/epel/  #第一个目录是repodata存放目录,第二个目录是需要生成索引信息yum源仓库目录

图5. 根据自己需要获取YUM源

根据自己需要使用reposync进行同步

3.使用Yum源

  • 3.1 查询本地源服务器的ip,确保可以访问

    ifconfig

进行局域网的其他CentOS服务器,更改*.repo文件中的服务器地址。一个常规的repo文件如下:

图6.repo文件截图

主要更改其中的baseurl为本地源服务器的ip,最简单的写法如下:

[docker-main]
name=Docker
baseurl=http://130.1.67.145:80/docker-main/
enabled=1
gpgcheck=0

这表示一个叫docker-main的源,它的地址是http://130.1.67.145:80/docker-main/,其中ip为内网Yum源服务器的ip,enbaled=1表示这个源是启用的,如果设置为0则表示不启用,gpgcheck表示是否启用GPG验证,这里设置的是不启用,如果启用的话,还需要添加一个字段gpgkey,指明密钥的存储位置。

  • 3.2 测试测试安装vsftpd,输入指令yum install vsftpd,结果如下:

 

至此,在局域网内的Yum源就搭建完成了,接下来要做的就是把它从虚拟机上移植到永久的服务器上。

总结

所以,总得来说,就3步:

安装web容器(httpd) –> 根据需要同步远程镜像源到本地的web容器 –> 修改配置文件

做完之后感觉还是蛮简单的,步骤不是很多,但我还是折腾了整整一天,主要是开始的难点在于我根本就不知道原来可以这么方便的同步镜像到本地,en,所以及时向大佬们请教很重要!

参考博客

1.CentOS搭建本地yum源(http方式)
2.docker探索-CentOS7中配置Docker的yum源并升级安装docker1.13(十)
3.Get Docker for CentOS
4.Centos7部署本地局域网yum源

点击量:1650

分类: 开发笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注