一肪获、背景前言
在網(wǎng)絡(luò)上,每一個(gè) Linux 分發(fā)版本的安裝教程在文末都不忘提醒讀者“請(qǐng)使用 yum(或者 apt)為你的系統(tǒng)進(jìn)行更新柒傻,安裝最新的更新和補(bǔ)丁孝赫,以修復(fù)安全漏洞和獲取最新功能“,更新的過程也基本上一番風(fēng)順:用戶無需修改配置红符,便能輕易地連接到最快的站點(diǎn)青柄,下載到最新的更新,仰仗互聯(lián)網(wǎng)的開放和便捷预侯,這一切都顯得如此理所應(yīng)當(dāng)致开。
然而如果你是一個(gè)規(guī)模龐大且封閉的生產(chǎn)環(huán)境的管理員,你的設(shè)備沒有公網(wǎng)的訪問權(quán)限萎馅,獲取更新双戳、甚至哪怕是裝一個(gè) vim 的過程都可能變得十分曲折。你可能會(huì)想到從光盤中安裝軟件包糜芳,但遇到關(guān)鍵更新飒货、或者嚴(yán)重 Bug 時(shí),這種方法又失效了峭竣。
如果你也遇見了上面的問題塘辅,那么在你自己管理的環(huán)境中,很可能也需要一個(gè)隨時(shí)更新的鏡像站皆撩。本文就來分享一下扣墩,如何搭建一個(gè)鏡像站,以及如何高效的利用這個(gè)鏡像站。
鑒于生產(chǎn)環(huán)境中的 Linux 分發(fā)版本普及度呻惕,本文介紹的鏡像站安裝和使用主要針對(duì) CentOS盘榨;Ubuntu 另有其獨(dú)特的搭建思路,但因?yàn)閼?yīng)用較少蟆融,本文暫不涉及草巡。
二、搭建鏡像站
初識(shí)公共鏡像站
在 CentOS 的官網(wǎng)上型酥,可以找到所有各個(gè)鏡像站的源頭山憨,也就是最權(quán)威的官方站點(diǎn):http://mirror.centos.org,里面保存了 CentOS 各個(gè)版本的鏡像文件和 rpm 包弥喉。但是郁竟,世界上絕大多數(shù)的鏡像站,同步的都是這個(gè)官方站點(diǎn)的一個(gè)子目錄:http://mirror.centos.org/centos由境。這個(gè)“centos”子目錄有一個(gè)特點(diǎn)棚亩,就是只提供了各個(gè)大版本下面最新的鏡像文件和最新的 rpm 包,比如當(dāng)前的 5.11虏杰,6.8 和 7.2讥蟆。舊版本的文件夾已經(jīng)空了。如果需要下載舊版本的鏡像文件纺阔,則需要去另外一個(gè)地方:http://vault.centos.org瘸彤。這里面將各個(gè)版本的 CentOS 鏡像都做了歸檔,可以通過鏈接和種子的方式下載到笛钝。
雖然鏡像有小版本之分质况,但 rpm 安裝包則是大版本內(nèi)通用的,比如你的系統(tǒng)版本是 CentOS 6.3玻靡,使用 CentOS 6 的最新鏡像源是完全沒有問題的结榄,即便最新版本已經(jīng)到了 6.8。因此通用的鏡像站囤捻,已經(jīng)完全能夠滿足日常更新的需要了臼朗。
還有一件不得不提的事情:有一個(gè)叫做?EPEL(Extra Packages for Enterprise Linux)的軟件源,是由 Fedora 用戶組維護(hù)的面向紅帽系列分發(fā)版的軟件源最蕾,里面包含了諸多優(yōu)質(zhì)的軟件依溯,nginx 就是其中之一。一般地瘟则,我們也會(huì)將這個(gè)軟件源同步在自己的環(huán)境中黎炉。
使用 Nginx, rsync 和 cron 搭建鏡像站
下面我們就來聊一聊如何搭建一個(gè)簡(jiǎn)約的鏡像站。整個(gè)過程大概僅需 20 分鐘醋拧。
首先我們要安裝 Nginx慷嗜。而正如前文所說,安裝 Nginx 首先需要配置 EPEL 源,然后再安裝 Nginx庆械。
#??yum install -y epel-release
#??yum install -y? nginx
然后薇溃,我們要為鏡像站的文件規(guī)劃一個(gè)合適的存放路徑缭乘,用來接收更新沐序,以及對(duì)外提供服務(wù)堕绩。本例中,我們?cè)诟夸浵聞?chuàng)建一個(gè)新文件夾/mirrors奴紧,文件夾內(nèi)的結(jié)構(gòu)如下:
在 Nginx 中特姐,將 Nginx 的根目錄設(shè)置為?"/mirrors/data"黍氮,同時(shí)還要開啟?autoindex。
下面是一個(gè) Nginx 配置文件樣例沫浆,將下面這段配置復(fù)制在?/etc/nginx/conf.d/mirror-site.conf?中捷枯,重啟 Nginx 后即可生效。
#? vim??mirror-site.conf
####################################
server {
? ? listen? ? ? 80;
? ? server_name? {服務(wù)器的名稱};
? ? # 鏡像站的主要數(shù)據(jù)
? ? location / {
? ? ? ? root? ? ? ? /mirrors/data/;
? ? ? ? autoindex? on;
? ? }
? ? # repo文件
? ? location /repo {
? ? ? ? root? ? ? ? ? /mirrors;
? ? ? ? autoindex? ? on;
? ? }
? ? # 自動(dòng)配置腳本
? ? location /sh {
? ? ? ? root? ? ? ? ? /mirrors;
? ? }
}
####################################
為我們的鏡像站安好“新家”之后铜靶,接下來就要把他們“請(qǐng)來”了。這里我們使用了?rsync他炊,一個(gè) Linux 下的高效的文件同步工具。
在 CentOS 網(wǎng)站中已艰,有一個(gè)專門提供第三方鏡像站的頁面:https://www.centos.org/download/mirrors/痊末。
用戶可以在這個(gè)頁面查詢到有哪些鏡像站,以及每一個(gè)鏡像站是否支持 rsync —— 不是所有的鏡像站都開啟了這個(gè)功能哩掺,使用 HTTP 同步則會(huì)相對(duì)麻煩一點(diǎn)凿叠。
這里我們推薦您使用清華大學(xué)和中國科學(xué)技術(shù)大學(xué)的鏡像站。這兩個(gè)鏡像站相對(duì)穩(wěn)定嚼吞,提供了多種豐富的鏡像庫盒件,而且還支持 rsync 協(xié)議。
我們這里就以清華大學(xué)的鏡像站為例舱禽,編寫如下兩個(gè) 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/
###############################################################################
參數(shù)說明:
r 表示遞歸同步炒刁,也就是將文件夾內(nèi)的所有文件都同步
l 表示同步鏈接文件,t表示保留時(shí)間戳誊稚,z表示開啟壓縮
--progress和--delete分別表示使用現(xiàn)實(shí)詳細(xì)進(jìn)度翔始,和刪除源地址中沒有的文件(也就是和上游保持完全的一致)
--log-file能指定一個(gè)日志位置
我們將其保存成兩個(gè) Shell 腳本罗心。放在 /mirrors/scripts 文件夾中,隨意執(zhí)行一下城瞎,可以看見 rsync 已經(jīng)在歡快地進(jìn)行同步了渤闷!
#? sh???/mirrors/scripts/tuna-centos.sh?
注意,這里僅是一個(gè)演示脖镀,一切的操作都是在 root 用戶名下進(jìn)行的飒箭;如果您是在實(shí)際環(huán)境中搭建,強(qiáng)烈建議您使用普通用戶進(jìn)行操作蜒灰。
接下來我們將這個(gè)腳本放在 cron 中定時(shí)執(zhí)行即可弦蹂。
#? 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
第一次同步需要耗費(fèi)的時(shí)間較長(zhǎng)。如果您的網(wǎng)絡(luò)質(zhì)量不理想卷员,還有可能斷掉盈匾,所以請(qǐng)?jiān)诘谝淮瓮綍r(shí)多加注意。
好了毕骡,現(xiàn)在你的專屬鏡像站已經(jīng)搭建完成了削饵。如果你愿意,還可以為它制作一份首頁和幫助文檔未巫,方便他人使用窿撬。
三、使用鏡像站
?“.repo” 文件范例
有了鏡像站只是第一步叙凡,接下來我們就要聊一聊如何使用了劈伴。
眾所周知,YUM 源的信息都會(huì)存放在?/etc/yum.repos.d/?這個(gè)文件夾內(nèi)握爷,以后綴為?.repo?的形式存在跛璧。我們可以預(yù)先寫好標(biāo)準(zhǔn)的?.repo?文件,在部署機(jī)器的時(shí)候直接下載新啼,省時(shí)省力追城。
最簡(jiǎn)單的方法是找一個(gè)系統(tǒng)自帶的?.repo?文件。然后我們把它改成我們的內(nèi)容燥撞。下面就是用在 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
################################################################################
每一段的以下兩個(gè)地方都需要我們修改:
1.注釋掉?mirrorlist?一行,這個(gè)地方會(huì)幫我們尋找最快的鏡像站物舒,但僅適用于能連外網(wǎng)的情況色洞,我們已經(jīng)有了我們的鏡像站,所以這一行已經(jīng)不需要了
2.打開?baseurl?這一行冠胯,并且將域名修改為我們剛剛建立的鏡像站地址火诸,其他的東西就不用修改了。
如果有的段落里有?enabled=0?的涵叮,也無需做改動(dòng)惭蹂。僅在需要時(shí)臨時(shí)打開即可伞插。
有的運(yùn)維人員可能喜歡將?gpgcheck?設(shè)置為?0,也就是不用密鑰校驗(yàn)軟件包的真實(shí)性盾碗,但這樣的做法有非常大的風(fēng)險(xiǎn)性媚污,因此我們還是建議開啟這個(gè)功能。
EPEL 的?.repo?文件獲取方式也很簡(jiǎn)單廷雅。只要執(zhí)行了?yum install epel-release耗美。
你的?/etc/yum.repos.d/?文件夾下就會(huì)有?epel.repo?和?epel-testing.repo?這兩個(gè)文件,要修改的內(nèi)容和上面的大致相同航缀。
有一點(diǎn)區(qū)別是商架,如果使用了 EPEL 源,且打開了?gpgckech?在首次使用時(shí)芥玉,YUM 會(huì)詢問用戶是否導(dǎo)入配置中說明的密鑰蛇摸。
插件的取舍
在我們使用了內(nèi)部的鏡像站之后灿巧,便可以禁用掉一些不再適用的 YUM 插件了。比如?fastestmirror:如果配置了?mirrorlist抠藕,這個(gè)插件會(huì)幫我們測(cè)算最快的鏡像站。但我們此時(shí)已經(jīng)無需再測(cè)速了盾似,在?/etc/yum/pluginconf.d/fastestmirror.conf?中,將?enabled?改為?0即可零院。
四、參考
大規(guī)模封閉的生產(chǎn)環(huán)境告抄?你需要一個(gè)鏡像站
http://v.colinlee.fish/posts/how-to-set-up-a-centos-mirror-site.html
List of CentOS Mirrors
https://www.centos.org/download/mirrors