构建本地yum服务器

软件包管理器中,分别有Ubuntu上的apt软件包管理器,MacOS上的brew包管理器,而在我们经常作为服务器的CentOS上的包管理器为yum!在如今各大云计算厂商的崛起中,为了不断的提高用户的体验,分别在自家内网中构建软件包源,比如知名的aliyun源,相信很多小伙伴都已经很是熟悉了,下面我就为大家分享一下怎样构建一个和互联网每天保持同步的内网软件源服务器。我们这里以yum为例。特别提醒:所有机器一定能够上网并保持网络畅通!

环境准备,所有机器都为最小安装

IPaddress Role CPU Memory Version172.16.30.100 Yum_Server 1 1G CentOS 7.3 172.16.30.100 DNS_Server 1 1G CentOS 7.3 172.16.30.100 HTTP_Server 1 1G CentOS 7.3 172.16.30.211 Test_Computer 1 1G CentOS 7.3 在开始之前需要确定哪家的公网yum源是可以同步的,在这里选取的是清华大学yum服务器。 域名为: 选取好同步对象之后那就开始干活啦!~

书写爬取软件源的脚本 这里采用rsync技术实现同步,因为要与同步对象保持一样的变化,而rsync恰好具备“敌不动我不动,敌若动我跟着你动”的特性,所以选择它作为同步工具。脚本如下:

#!/usr/bin/env bash # BeiJing QFcloud office mode. # @date @time # author: YOUR_NAME if [ -f /var/log/yum_server.pid ];thenrm -rf /var/log/yum_server.pidelse echo "Ok. Continue rsync yum server." fi # 指定yum同步的公网地址YUM_SIZE="rsync://http://mirrors.tuna.tsinghua.edu.cn/centos/" # 指定存放的路径,路径为Apache默认主页目录LOCAL_PATH="/var/www/html/centos/" # 指定同步目录,需要哪个同步哪个LOCAL_VER=6* 7* # 带宽的限制BW_LIMIT=2048 # 指定yum进程文件路径LOCK_FILE=/var/log/yum_server.pid # 指定rsync命令的执行路径,若没有源码编译安装则为空RSYNC_PATH= # 获取yum_server的进程文件,检测是否能够同步,若被占用则无法同步MY_PID=$$if [ -f $LOCK_FILE ]; thenget_pid=`/bin/cat $LOCK_FILE`get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`if [ $get_system_pid -eq 0 ] ; then echo $MY_PID>$LOCK_FILE else echo "Have update yum server now!" exit 1 fi else echo $MY_PID>$LOCK_FILE fi # 检测rsync程序及命令是否存在,若不存在则安装 if [ -z $RSYNC_PATH ]; thenRSYNC_PATH=`/usr/bin/whereis rsync|awk {print $2}`if [ -z $RSYNC_PATH ]; then echo Not find rsync tool. echo use comm: yum install -y rsync fi fi # 同步及基本检查 for VER in $LOCAL_VER;do # 检查指定同步到本地的目录是否存在,若不存在创建 if [ ! -d "$LOCAL_PATH$VER" ] ; then echo "Create dir $LOCAL_PATH$VER"`/bin/mkdir -p $LOCAL_PATH$VER`fi # 开始同步yum源,但舍弃掉镜像目录 echo "Start sync $LOCAL_PATH$VER" $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH done # 清理yum的pid文件`/bin/rm -f $LOCK_FILE`# 书写同步日志,方便以后维护及查阅工作是否正常 echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/centos/centos_rsync_is_end.txtexit 1

构建web服务器 大家在搭建前可以先去下载http://mirrors.aliyun.com中的CentOS的repo文件观察一下,里面采用的是http协议的远程服务,而且域名也是阿里自己的。在本文中为了增加效果,域名请直接采用默认的配置文件中的CentOS官网的域名,即http://mirror.centos.org。接下来开始安装软件并构建虚拟主机来实现远程服务!

# 安装Apache服务依赖软件> yum -y install httpd# 编辑配置文件> vim /etc/httpd/conf.d/mirror.centos.org.conf<VirtualHost *:80>ServerName http://mirror.centos.orgDocumentRoot /var/www/html/centos<Directory /var/www/html/centos>AllowOverride AllOrder allow,denyAllow from All</Directory>ErrorLog /var/log/mirror.centos.org_error.logCustomLog /var/log/mirror.centos.org_access.log combined</VirtualHost># 设置Apache主页目录权限> chmod -R 2755 /var/www/html/*

构建本地解析DNS服务器 在上一步构建了http服务器,但是如果我们想访问到域名http://mirror.centos.org就需要增加一个域名解析的服务。让这个域名在内网中被别的机器认识它,需要这样做:

# 安装DNS服务依赖软件> yum -y install bind bind-utils# 编辑配置文件> vim /etc/named.confoptions {listen-on port 53 { any; };//listen-on-v6 port 53 { any; };directory "/var/named";dump-file "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";allow-query { any; }; /* dns_forward.*/forwarders { 114.114.114.114;202.106.0.20; };zone "http://centos.org" IN {type master;file "centos.org.zone";};> vim /var/named/centos.org.zone$TTL 86400@ INSOA centos.org. root.centos.org. ( 1H15M1W1D )@ INNSnsnsINA 172.16.30.100mirrorlistINA 172.16.30.100mirrorINA 172.16.30.100

测试yum

# 修改文件CentOS-Base.repo> sed -ri s/^#baseurl/baseurl/g /etc/yum.repos.d/CentOS-Base.repo> sed -ri s/^mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-Base.repo

# 修改DNS地址 > echo "nameserver 172.16.30.100" >> /etc/resolve.conf # 执行测试 > yum clean all > yum makecache # 感受前所未有得速度吧! Warning: 1.关闭selinux 2.关闭Firewalld

The end.