0x01 前言
家里测试的虚拟机很多,而且生命周期很短,虽然有做虚拟机模版镜像,但我还是喜欢每次新建虚拟机的时候安装常用的包和进行系统升级。
那么问题来了,windows有WSUS服务(基于win server 2012配置WSUS服务)可供配置以达到节省流量的目的,可是Linux呢?
Linux肯定是镜像各种源服务器啦。
0x02 准备
首先要准备一台centos服务器并安装nginx与rsync,最重要的是,这台服务器需要有公网连接。
然后新建目录用于存放镜像文件:
[root@centos-test ~]# mkdir -p /usr/local/local_mirror/
首先配置nginx,nginx可以通过yum安装,也可以参考以下文章:
当然,如果你并没有特殊服务需要编译nginx,那么通过yum安装是最方便的:
[root@centos-test ~]# yum install nginx
安装完毕后直接直接修改nginx.conf即可,将server段修改为以下内容:
server { listen 80; server_name mirror.t.com; root /usr/local/local_mirror; access_log /var/log/nginx/access.log main; location / { autoindex on; autoindex_exact_size off; autoindex_localtime on; } }
请注意第三行(高亮行)中的mirror.t.com这个域名,如果你只想通过IP进行访问,请删除此行。如果需要通过域名访问,那么请修改为你的域名。
配置完成后请通过以下命令启动或重新加载nginx:
#启动 [root@centos-test ~]# nginx #重新加载 [root@centos-test ~]# nginx -s reload
最后就可以通过域名或IP尝试访问。
0x03 rsync
首先要确定你需要镜像的源,以下是我需要用到的源:
- epel
- centos7-base
- centos7-updates
- centos7-extras
- centos7-centosplus
- centos7.3.1611-base
- centos7.3.1611-updates
- centos7.3.1611-extras
- centos7.3.1611-centosplus
如果你经常更新系统或者安装软件,那么你肯定会觉得有些源特别特别慢,所以我一般使用清华大学的开源软件镜像站作为源站,他们的地址是:
在清华大学镜像站中,我找到我所需要的所有连接后,还需要根据实际情况,新建目录。例如epel源:
#镜像站地址 rsync://mirrors.tuna.tsinghua.edu.cn/epel/7/ #新建本地目录 /usr/local/local_mirror/epel/7/
当然,你也可以根据自己的实际情况进行目录命名。
如果你仔细查看源站中的目录结构会发现,里面很有许多你不需要的内容,尤其是安装镜像等文件大小极其庞大的文件。那么我们建立一个不同步文件与文件夹列表:
#新建文件 [root@centos-test ~]# vim /usr/local/local_mirror/exclude.list #填入内容 SRPMS aarch64 ppc64 ppc64le debug repodata EFI LiveOS images isolinux CentOS_BuildTag EULA GPL RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 drpms
为了方便运行,我们新建一个简易的shell脚本:
#建立文件 [root@centos-test ~]# /usr/local/local_mirror/rsync.sh #填入内容 #epel rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/epel/7/ /usr/local/local_mirror/epel/7/ createrepo /usr/local/local_mirror/epel/7/ #centos7-base rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ /usr/local/local_mirror/centos/7/os/x86_64/ createrepo /usr/local/local_mirror/centos/7/os/x86_64/ #centos7-updates rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7/updates/x86_64/ /usr/local/local_mirror/centos/7/updates/x86_64/ createrepo /usr/local/local_mirror/centos/7/updates/x86_64/ #centos7-extras rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/ /usr/local/local_mirror/centos/7/extras/x86_64/ createrepo /usr/local/local_mirror/centos/7/extras/x86_64/ #centos7-centosplus rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7/centosplus/x86_64/ /usr/local/local_mirror/centos/7/centosplus/x86_64/ createrepo /usr/local/local_mirror/centos/7/centosplus/x86_64/ #centos7.3.1611-base rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7.3.1611/os/x86_64/ /usr/local/local_mirror/centos/7.3.1611/os/x86_64/ createrepo /usr/local/local_mirror/centos/7.3.1611/os/x86_64/ #centos7.3.1611-updates rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7.3.1611/updates/x86_64/ /usr/local/local_mirror/centos/7.3.1611/updates/x86_64/ createrepo /usr/local/local_mirror/centos/7.3.1611/updates/x86_64/ #centos7.3.1611-extras rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7.3.1611/extras/x86_64/ /usr/local/local_mirror/centos/7.3.1611/extras/x86_64/ createrepo /usr/local/local_mirror/centos/7.3.1611/extras/x86_64/ #centos7.3.1611-centosplus rsync -avz --exclude-from=/usr/local/local_mirror/exclude.list rsync://mirrors.tuna.tsinghua.edu.cn/centos/7.3.1611/centosplus/x86_64/ /usr/local/local_mirror/centos/7.3.1611/centosplus/x86_64/ createrepo /usr/local/local_mirror/centos/7.3.1611/centosplus/x86_64/ #赋予权限 [root@centos-test ~]# chmod +x /usr/local/local_mirror/rsync.sh
最后运行脚本:
[root@centos-test ~]# /usr/local/local_mirror/rsync.sh
同步时间会很长,时间的长短视乎你的网络速度。一切顺利的话,完成后再次访问的界面如下:
0x04 客户机
需要先将客户机上原有的repo源做备份处理:
#备份到root目录 [root@centos-test ~]# cp -r /etc/yum.repos.d /root/ #删除原先内容 [root@centos-test ~]# rm -f /etc/yum.repos.d/*
然后新建home.repo:
#新建home.repo [root@centos-test ~]# vim /etc/yum.repos.d/home.repo #填入内容 [epel-home] name=name=Terence homebase mirror baseurl=http://mirror.t.com/epel/7/x86_64/ enabled=1 gpgcheck=0 [centos7-base] name=name=Terence homebase mirror baseurl=http://mirror.t.com/centos/7/os/x86_64/ enabled=1 gpgcheck=0 [centos7-updates] name=name=Terence homebase mirror baseurl=http://mirror.t.com/centos/7/updates/x86_64/ enabled=1 gpgcheck=0 [centos7.3.1611-base] name=name=Terence homebase epel mirror baseurl=http://mirror.t.com/centos/7.3.1611/os/x86_64/ enabled=1 gpgcheck=0 [centos7.3.1611-updates] name=name=Terence homebase epel mirror baseurl=http://mirror.t.com/centos/7.3.1611/updates/x86_64/ enabled=1 gpgcheck=0
完成后清除源先的缓存再建立缓存:
#清除缓存 [root@centos-test ~]# yum clean all #建立缓存 [root@centos-test ~]# yum makecache
最后查询一个rpm安装包进行验证:
[root@centos-test ~]# yum info rxjava 已加载插件:fastestmirror Loading mirror speeds from cached hostfile 可安装的软件包 名称 :rxjava 架构 :noarch 版本 :1.0.13 发布 :2.el7 大小 :698 k 源 :epel-home 简介 : Reactive Extensions for the JVM 网址 :https://github.com/ReactiveX/RxJava 协议 : ASL 2.0 描述 : RxJava a library for composing asynchronous and : event-based programs using observable sequences : for the Java VM.
在第10行(高亮行)中可以看到,安装源义经改为了epel-home这个源。
0x05 结语
上面我所同步的源,文件大小在32GiB左右。请预留出足够的空间用于存储文件。另外在同步简易shell脚本中的 createrepo 命令可能会导致高CPU使用率,第一次建立repo数据库后可以使用:
createrepo --update
这个命令来更新数据库,而不需要重新建立。
最新的配置文件请浏览我的私有gitlab:
0x06 相关视频
https://www.bilibili.com/video/av20423498/