【rpm】如果在大规模封闭的生产环境搭建rpm镜像站

一、背景前言

在网络上,每一个 Linux 分发版本的安装教程在文末都不忘提醒读者“请使用 yum(或者 apt)为你的系统进行更新,安装最新的更新和补丁,以修复安全漏洞和获取最新功能“,更新的过程也基本上一番风顺:用户无需修改配置,便能轻易地连接到最快的站点,下载到最新的更新,仰仗互联网的开放和便捷,这一切都显得如此理所应当。

然而如果你是一个规模庞大且封闭的生产环境的管理员,你的设备没有公网的访问权限,获取更新、甚至哪怕是装一个 vim 的过程都可能变得十分曲折。你可能会想到从光盘中安装软件包,但遇到关键更新、或者严重 Bug 时,这种方法又失效了。

如果你也遇见了上面的问题,那么在你自己管理的环境中,很可能也需要一个随时更新的镜像站。本文就来分享一下,如何搭建一个镜像站,以及如何高效的利用这个镜像站。

鉴于生产环境中的 Linux 分发版本普及度,本文介绍的镜像站安装和使用主要针对 CentOS;Ubuntu 另有其独特的搭建思路,但因为应用较少,本文暂不涉及。


二、搭建镜像站


初识公共镜像站

在 CentOS 的官网上,可以找到所有各个镜像站的源头,也就是最权威的官方站点:http://mirror.centos.org,里面保存了 CentOS 各个版本的镜像文件和 rpm 包。但是,世界上绝大多数的镜像站,同步的都是这个官方站点的一个子目录:http://mirror.centos.org/centos。这个“centos”子目录有一个特点,就是只提供了各个大版本下面最新的镜像文件和最新的 rpm 包,比如当前的 5.11,6.8 和 7.2。旧版本的文件夹已经空了。如果需要下载旧版本的镜像文件,则需要去另外一个地方:http://vault.centos.org。这里面将各个版本的 CentOS 镜像都做了归档,可以通过链接和种子的方式下载到。

虽然镜像有小版本之分,但 rpm 安装包则是大版本内通用的,比如你的系统版本是 CentOS 6.3,使用 CentOS 6 的最新镜像源是完全没有问题的,即便最新版本已经到了 6.8。因此通用的镜像站,已经完全能够满足日常更新的需要了。

还有一件不得不提的事情:有一个叫做 EPEL(Extra Packages for Enterprise Linux)的软件源,是由 Fedora 用户组维护的面向红帽系列分发版的软件源,里面包含了诸多优质的软件,nginx 就是其中之一。一般地,我们也会将这个软件源同步在自己的环境中。


使用 Nginx, rsync 和 cron 搭建镜像站


下面我们就来聊一聊如何搭建一个简约的镜像站。整个过程大概仅需 20 分钟。

首先我们要安装 Nginx。而正如前文所说,安装 Nginx 首先需要配置 EPEL 源,然后再安装 Nginx。

#  yum install -y epel-release

#  yum install -y  nginx

然后,我们要为镜像站的文件规划一个合适的存放路径,用来接收更新,以及对外提供服务。本例中,我们在根目录下创建一个新文件夹/mirrors,文件夹内的结构如下:

在 Nginx 中,将 Nginx 的根目录设置为 "/mirrors/data",同时还要开启 autoindex。

下面是一个 Nginx 配置文件样例,将下面这段配置复制在 /etc/nginx/conf.d/mirror-site.conf 中,重启 Nginx 后即可生效。

#  vim  mirror-site.conf

####################################

server {

    listen      80;

    server_name  {服务器的名称};

    # 镜像站的主要数据

    location / {

        root        /mirrors/data/;

        autoindex  on;

    }

    # repo文件

    location /repo {

        root          /mirrors;

        autoindex    on;

    }

    # 自动配置脚本

    location /sh {

        root          /mirrors;

    }

}

####################################


为我们的镜像站安好“新家”之后,接下来就要把他们“请来”了。这里我们使用了 rsync,一个 Linux 下的高效的文件同步工具。


在 CentOS 网站中,有一个专门提供第三方镜像站的页面:https://www.centos.org/download/mirrors/

用户可以在这个页面查询到有哪些镜像站,以及每一个镜像站是否支持 rsync —— 不是所有的镜像站都开启了这个功能,使用 HTTP 同步则会相对麻烦一点。

这里我们推荐您使用清华大学中国科学技术大学的镜像站。这两个镜像站相对稳定,提供了多种丰富的镜像库,而且还支持 rsync 协议。


我们这里就以清华大学的镜像站为例,编写如下两个 rsync 命令:

#  vim  /mirrors/scripts/tuna-centos.sh

###########################################################################

#!/bin/bash

/usr/bin/rsync  -rltz4 \

 --progress  \

--delete  \

--log-file=/mirrors/log/tuna-centos.log  \

rsync://mirrors.tuna.tsinghua.edu.cn/centos/    /mirrors/data/centos/

#############################################################################


# vim  /mirrors/scripts/tuna-epel.sh

##############################################################################

#!/bin/bash

/usr/bin/rsync -rltz4  \

--progress  \

--delete \ 

--log-file=/mirrors/log/tuna-epel.log \

rsync://mirrors.tuna.tsinghua.edu.cn/epel/ /mirrors/data/epel/

###############################################################################

参数说明:

r 表示递归同步,也就是将文件夹内的所有文件都同步

l 表示同步链接文件,t表示保留时间戳,z表示开启压缩

--progress和--delete分别表示使用现实详细进度,和删除源地址中没有的文件(也就是和上游保持完全的一致)

--log-file能指定一个日志位置


我们将其保存成两个 Shell 脚本。放在 /mirrors/scripts 文件夹中,随意执行一下,可以看见 rsync 已经在欢快地进行同步了!


#  sh   /mirrors/scripts/tuna-centos.sh 


注意,这里仅是一个演示,一切的操作都是在 root 用户名下进行的;如果您是在实际环境中搭建,强烈建议您使用普通用户进行操作。

接下来我们将这个脚本放在 cron 中定时执行即可。

#  crontab  -l

0 23 * * 1,3,5 sh /mirrors/scripts/epel-ustc.sh >> /dev/null

0 23 * * 2,4,6 sh /mirrors/scripts/centos-ustc.sh >> /dev/null


第一次同步需要耗费的时间较长。如果您的网络质量不理想,还有可能断掉,所以请在第一次同步时多加注意。

好了,现在你的专属镜像站已经搭建完成了。如果你愿意,还可以为它制作一份首页和帮助文档,方便他人使用。


三、使用镜像站


 “.repo” 文件范例

有了镜像站只是第一步,接下来我们就要聊一聊如何使用了。

众所周知,YUM 源的信息都会存放在 /etc/yum.repos.d/ 这个文件夹内,以后缀为 .repo 的形式存在。我们可以预先写好标准的 .repo 文件,在部署机器的时候直接下载,省时省力。

最简单的方法是找一个系统自带的 .repo 文件。然后我们把它改成我们的内容。下面就是用在 CentOS 7 的原始 CentOS-Base.repo 文件的一部分。

# cat     /etc/yum.repos.d/CentOS-Base.repo

#############################################################################

[base]

name=CentOS-$releasever - Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

################################################################################

每一段的以下两个地方都需要我们修改:

1.注释掉 mirrorlist 一行,这个地方会帮我们寻找最快的镜像站,但仅适用于能连外网的情况,我们已经有了我们的镜像站,所以这一行已经不需要了

2.打开 baseurl 这一行,并且将域名修改为我们刚刚建立的镜像站地址,其他的东西就不用修改了。


如果有的段落里有 enabled=0 的,也无需做改动。仅在需要时临时打开即可。

有的运维人员可能喜欢将 gpgcheck 设置为 0,也就是不用密钥校验软件包的真实性,但这样的做法有非常大的风险性,因此我们还是建议开启这个功能。

EPEL 的 .repo 文件获取方式也很简单。只要执行了 yum install epel-release。

你的 /etc/yum.repos.d/ 文件夹下就会有 epel.repo 和 epel-testing.repo 这两个文件,要修改的内容和上面的大致相同。

有一点区别是,如果使用了 EPEL 源,且打开了 gpgckech 在首次使用时,YUM 会询问用户是否导入配置中说明的密钥。


插件的取舍

在我们使用了内部的镜像站之后,便可以禁用掉一些不再适用的 YUM 插件了。比如 fastestmirror:如果配置了 mirrorlist,这个插件会帮我们测算最快的镜像站。但我们此时已经无需再测速了,在 /etc/yum/pluginconf.d/fastestmirror.conf 中,将 enabled 改为 0即可。



四、参考

大规模封闭的生产环境?你需要一个镜像站

http://v.colinlee.fish/posts/how-to-set-up-a-centos-mirror-site.html


List of CentOS Mirrors

https://www.centos.org/download/mirrors

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容