搭建本地 yum 源 并同步

来源:互联网 发布:notepad是什么软件 编辑:程序博客网 时间:2024/06/02 07:03

用rsync同步yum源到本地服务器

 学无止境  开心  1年前 (2014-12-13)  5205浏览  0评论

唠叨

大家都知道,使用yum来安装或者更新现有的包是最方便不过的了,但是有的时候服务器出于安全方面考虑,一般只许进不许出,那怎么办?那有同学就说了,这个简单啊,搞个本地源不就好了,其实这个方法不是不行,只不过ISO自带的包一般都比较旧,那我想更新咋办?所以还是不能满足需求。
既然服务器不让我通过互联网下载需要的包,那我直接把网上的源搬到我本地服务器不就好了,我局域网安装或者更新也快,前提是,你得准备一台放置yum源的服务器,磁盘空间要够大,500G以上,最最重要的是,能访问互联网!

准备

  1. yum install -y httpd rsync
  2. iptables开放80 873端口,关闭selinux

配置

首先打开httpd.conf

  1. vi /etc/httpd/conf/httpd.conf
  2.  
  3. #ServerName www.example.com:80
  4. 改成 ServerName localhost:80
  5.  
  6. 然后把欢迎页删除掉
  7. mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
  8.  
  9. 新建一个centos目录放置从互联网上同步下来的rpm
  10. mkdir /var/www/html/centos

脚本

把以下同步脚本放置到合适的目录下即可,别忘了添加执行权限

  1. #!/bin/bash
  2. YUM_SITE="rsync://mirrors.kernel.org/centos/"
  3. #存放路径,我这里直接用的是httpd默认根目录
  4. LOCAL_PATH="/var/www/html/centos/"
  5. #需要同步哪些目录
  6. LOCAL_VER='./'
  7. BW_limit=2048
  8. LOCK_FILE="/var/log/yum_server.pid"
  9. RSYNC_PATH=""
  10.  
  11. # check update yum server pid
  12. MY_PID=$$
  13. if [ -f $LOCK_FILE ]; then
  14. get_pid=`/bin/cat $LOCK_FILE`
  15. get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
  16. if [ $get_system_pid -eq 0 ] ; then
  17. echo $MY_PID>$LOCK_FILE
  18. else
  19. echo "Have update yum server now!"
  20. exit 1
  21. fi
  22. else
  23. echo $MY_PID>$LOCK_FILE
  24. fi
  25.  
  26. # check rsync tool
  27. if [ -z $RSYNC_PATH ]; then
  28. RSYNC_PATH=`/usr/bin/whereis rsync|awk ' ''{print $2}'`
  29. if [ -z $RSYNC_PATH ]; then
  30. echo 'Not find rsync tool.'
  31. echo 'use comm: yum install -y rsync'
  32. fi
  33. fi
  34.  
  35. # sync yum source
  36. for VER in $LOCAL_VER;
  37. do
  38. # Check whether there are local directory
  39. if [ ! -d "$LOCAL_PATH$VER" ] ; then
  40. echo "Create dir $LOCAL_PATH$VER"
  41. `/bin/mkdir -p $LOCAL_PATH$VER`
  42. fi
  43. # sync yum source
  44. echo "Start sync $LOCAL_PATH$VER"
  45. $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH
  46. done
  47.  
  48. # clean lock file
  49. `/bin/rm -f $LOCK_FILE`
  50.  
  51. echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/centos/centos_rsync_is_end.txt
  52. exit 1

同步的过程可能会很久,整个yum源有400多G,所以脚本会在全部同步完以后,生成一个时间文件在/var/www/html/centos_rsync_is_end.txt假设你已经全部同步完,就启动httpd服务

  1. service httpd start

然后把以下repo文件放置到你的yum源客户端的/etc/yum.repo.d/下,后缀名必须是repo,我这边yum源服务端IP是192.168.1.69

  1. [base]
  2. name=CentOS - base
  3. baseurl=http://192.168.1.69/centos/$releasever/os/$basearch/
  4. gpgcheck=1
  5. gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
  6.  
  7. [updates]
  8. name=CentOS - updates
  9. baseurl=http://192.168.1.69/centos/$releasever/updates/$basearch/
  10. gpgcheck=1
  11. gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
  12.  
  13. [extras]
  14. name=CentOS - extras
  15. baseurl=http://192.168.1.69/centos/$releasever/extras/$basearch/
  16. gpgcheck=1
  17. gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6

到这里你就基本上完成了一个本地yum源服务器的搭建,现在还少一个定时任务,让rsync每天凌晨3点去同步一次互联网上的yum源

  1. crontab -e
  2. 添加一条定时任务
  3. * 3 * * * /bin/bash /etc/yum.repos.d/centos.yum.sh > /dev/null &

附上opensuse源的脚本

方法请参照上面的yum源,脚本内容就改动了一些地方,内容基本相同

  1. #!/bin/bash
  2. YUM_SITE="rsync://mirrors.ustc.edu.cn/opensuse/"
  3. LOCAL_PATH="/var/www/html/opensuse/"
  4. LOCAL_VER='distribution factory-tested factory update'
  5. BW_limit=2048
  6. LOCK_FILE="/var/log/opensuse_server.pid"
  7. RSYNC_PATH=""
  8.  
  9. # check update yum server pid
  10. MY_PID=$$
  11. if [ -f $LOCK_FILE ]; then
  12. get_pid=`/bin/cat $LOCK_FILE`
  13. get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
  14. if [ $get_system_pid -eq 0 ] ; then
  15. echo $MY_PID>$LOCK_FILE
  16. else
  17. echo "Have update yum server now!"
  18. exit 1
  19. fi
  20. else
  21. echo $MY_PID>$LOCK_FILE
  22. fi
  23.  
  24. # check rsync tool
  25. if [ -z $RSYNC_PATH ]; then
  26. RSYNC_PATH=`/usr/bin/whereis rsync|awk ' ''{print $2}'`
  27. if [ -z $RSYNC_PATH ]; then
  28. echo 'Not find rsync tool.'
  29. echo 'use comm: yum install -y rsync'
  30. fi
  31. fi
  32.  
  33. # sync yum source
  34. for VER in $LOCAL_VER;
  35. do
  36. # Check whether there are local directory
  37. if [ ! -d "$LOCAL_PATH$VER" ] ; then
  38. echo "Create dir $LOCAL_PATH$VER"
  39. `/bin/mkdir -p $LOCAL_PATH$VER`
  40. fi
  41. # sync yum source
  42. echo "Start sync $LOCAL_PATH$VER"
  43. $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "iso" $YUM_SITE$VER $LOCAL_PATH
  44. done
  45.  
  46. # clean lock file
  47. `/bin/rm -f $LOCK_FILE`
  48.  
  49. echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/opensuse/opensuse_rsync_is_end.txt
  50. exit 1

转载请注明:闲来无事 » 用rsync同步yum源到本地服务器
0 0