使用本地更新源可以大大减少系统部署中安装更新软件的时间。
平台使用CENTOS7+apahce2.4+RSYNC(本文脚本适合centos6|centos7)
Centos公开的mirrors地址
https://www.centos.org/download/mirrors/
本文使用了“中国科学大学”的rsync源,这个源没在上面地址公开,提供的带宽是250M以上,我在家里200M的光纤可以满速进行同步。
https://mirrors.ustc.edu.cn/status/ 服务器状态页
https://mirrors.ustc.edu.cn/ mirrors index
系统我使用了最小安装
1、安装rsync、httpd
# yum install -y rsync httpd bash-completion psmisc
精简安装没有按tab可以自动补全命令和killall命令
bash-completion的作用是按tab可以自动补全命令
psmisc killall命令安装包
2、编定同步脚本
我个人喜欢直接放在root用户目录下
#vi /root/bin/mirrors.sh
#!/bin/bash
###结束现有rsync进程
killall `ps aux|grep rsync|awk -F" " '{print $11}'`
echo 结束时间 `date +%F_%H%M%S` >> /tmp/rsync_process.log
echo '###################结 束 时 间 ######################' >> /tmp/rsync_process.log
#http://mirrors.ustc.edu.cn/help/rsync-guide.html
#URL="rsync://mirrors.tuna.tsinghua.edu.cn"
URL="rsync://rsync.mirrors.ustc.edu.cn/repo"
rsync -avzPH --delete $URL/centos/ /data/centos/ >> /tmp/rsync_centos.log
rsync -avzPH --delete $URL/epel/ /data/epel >> /tmp/rsync_epel.log
rsync -avzPH --delete $URL/ceph/ /data/ceph >> /tmp/rsync_ceph.log
echo 完成时间 `date +%F_%H%M%S` >> /tmp/rsync_process.log
echo '###################完 成 时 间 ######################' >> /tmp/rsync_process.log
执行同步脚本
sh /root/bin/mirrors.sh
我用了两天才完成同步。
3.配置脚本自动执行
#crontab -euroot
添加任务
查看己添加任务
[root@mirrors html]# crontab -luroot
#* * * * * command
#分 时 日 月 周 命令
#第1列表示分钟1~59 每分钟用*或者 */1表示
#第2列表示小时1~23(0表示0点)
#第3列表示日期1~31
#第4列表示月份1~12
#第5列标识号星期0~6(0表示星期天)
#第6列要运行的命令
#每30分钟执行一次同步
*/30 * * * * sh /root/bin/mirrors.sh
4、配置apache服务
yum install -y httpd \
&& systemctl enable httpd \
&& ln -sf /data/* /var/www/html/ \
&& cd /etc/httpd/conf.d/ \
&& mv welcome.conf welcome.conf.bak \
&& systemctl restart httpd
5、关闭防火墙和selinux
#OSVERSION
OSVERSION=`cat /etc/redhat-release |awk -F "release " '{print $2}'|awk -F "." '{print $1}'`
echo $OSVERSION
#selinux
echo -n "正在关闭SELinux……"
setenforce 0 > /dev/null 2>&1
sed -i '/^SELINUX=/s/=.*/=disabled/' /etc/selinux/config
if [ $? -eq 0 ];then
echo -n "SELinux初始化完毕!"
fi
#iptables
if [ $OSVERSION -eq 6 ];then
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables save
fi
if [ $OSVERSION -eq 7 ];then
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
fi
ie上打开
客户端设置脚本:
[root@mirrors html]# cat /var/www/html/m.sh
cat /etc/hosts|grep 192.168.239.241
if [ $? == 1 ]; then
echo 192.168.239.241 mirror.centos.org >> /etc/hosts
echo 192.168.239.241 mirrors.fedoraproject.org >> /etc/hosts
fi
yum clean all && yum makecache
#安装epel
yum install -y epel-release
sed -e "s/^metalink=/#metalink=/g" \
-e "s/^mirrorlist=http/#mirrorlist=http/g" \
-e "s@^#baseurl=@baseurl=@g" \
-i /etc/yum.repos.d/*.repo
yum clean all && rm -rf /var/cache/yum/* && yum makecache
客户端配置:
curl 192.168.239.241/m.sh|sh -
4、配置网卡
我配置了三个IP,172开头的两个用来当路由转发的,其它电脑可以配成这个网段来上网
[root@yum ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=ed041532-69e7-4676-8882-eb6af659ce42
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.20.237
PREFIX=24
GATEWAY=192.168.20.254
DNS1=192.168.227.239
ZONE=external
[root@yum ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32:1
DEVICE=ens32:1
IPADDR=172.25.0.254
PREFIX=24
ZONE=internal
[root@yum ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32:2
DEVICE=ens32:2
IPADDR=172.25.2.254
PREFIX=24
ZONE=internal
6、防火墙配置
Centos7前的版本用iptable 防火墙设置路由转发 ;Centos7 以后的版本不能使用iptable 防火墙来设置路由器转发,而是得用firewall-cmd 来设置
## 网卡默认是在public的zones内,也是默认zones。永久添加源地址转换功能
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload
## 添加网卡的ip转发功能,添加如下配置
# vim /etc/sysctl.conf
----------------------------------------------------------------------------------------------------------
net.ipv4.ip_forward=1
----------------------------------------------------------------------------------------------------------
## 重载网络配置生效
# sysctl -p
firewall-cmd --list-all --zone=external
firewall-cmd --change-interface=ens32 --zone=external --permanent
firewall-cmd --change-interface=ens32:1 --zone=internal --permanent
firewall-cmd --change-interface=ens32:2 --zone=internal --permanent
firewall-cmd --set-default-zone=internal
firewall-cmd --zone=internal --add-service=dns --add-service=http --permanent
firewall-cmd --add-service=http --zone=external --per
firewall-cmd --per --add-port=0-65535/udp #内部使用我干脆开放所有端口
firewall-cmd --per --add-port=0-65535/tcp #内部使用我干脆开放所有端口
firewall-cmd --reload
# firewall-cmd --list-all --zone=external
external (active)
target: default
icmp-block-inversion: no
interfaces: ens32
sources:
services: ssh http
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@yum ~]# firewall-cmd --list-all --zone=internal
internal (active)
target: default
icmp-block-inversion: no
interfaces: ens32:1 ens32:2
sources:
services: ssh mdns samba-client dhcpv6-client dns http
ports: 0-65535/tcp 0-65535/udp
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
8、在客户机上测试
# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPADDR=172.25.0.1
PREFIX=24
GATEWAY=172.25.0.254
DNS1=192.168.227.239
DNS2=114.114.114.114
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="9ff129a4-88a6-480e-a4e4-80fac7d87f6d"
DEVICE="ens32"
ONBOOT="yes"
#systemctl restart network
试下ping
# ping www.pconline.com.cn
ok.
# curl http://192.168.20.237
........
ok
切换本地源,
sed -e "s/^metalink=/#metalink=/g" \
-e "s/^mirrorlist=http/#mirrorlist=http/g" \
-e "s@^#baseurl=@baseurl=@g" \
-e "s@http://mirror.centos.org@http://192.168.20.237@g" \
-i /etc/yum.repos.d/*.repo
运行以下命令生成缓存
yum clean all
yum makecache
试下飞速升级吧
yum update -y
如果要关闭某个yum源,如epel
sed -i "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
开启就是反过来
sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/epel.repo