搭建本地 yum 源 並同步

用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

發佈了327 篇原創文章 · 獲贊 12 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章