1. 程式人生 > >搭建本地 yum 源 並同步

搭建本地 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. #ServerName www.example.com:80
  3. 改成 ServerName localhost:80
  4. 然後把歡迎頁刪除掉
  5. mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
  6. 新建一個centos目錄放置從網際網路上同步下來的rpm
  7. 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. # check update yum server pid
  11. MY_PID=$$
  12. if [ -f $LOCK_FILE ]; then
  13. get_pid=`/bin/cat $LOCK_FILE`
  14. get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
  15. if [ $get_system_pid -eq 0 ] ; then
  16. echo $MY_PID>$LOCK_FILE
  17. else
  18. echo "Have update yum server now!"
  19. exit 1
  20. fi
  21. else
  22. echo $MY_PID>$LOCK_FILE
  23. fi
  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. # sync yum source
  33. for VER in $LOCAL_VER;
  34. do
  35. # Check whether there are local directory
  36. if [ ! -d "$LOCAL_PATH$VER" ] ; then
  37. echo "Create dir $LOCAL_PATH$VER"
  38. `/bin/mkdir -p $LOCAL_PATH$VER`
  39. fi
  40. # sync yum source
  41. echo "Start sync $LOCAL_PATH$VER"
  42. $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH
  43. done
  44. # clean lock file
  45. `/bin/rm -f $LOCK_FILE`
  46. echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/centos/centos_rsync_is_end.txt
  47. 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. [updates]
  7. name=CentOS - updates
  8. baseurl=http://192.168.1.69/centos/$releasever/updates/$basearch/
  9. gpgcheck=1
  10. gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
  11. [extras]
  12. name=CentOS - extras
  13. baseurl=http://192.168.1.69/centos/$releasever/extras/$basearch/
  14. gpgcheck=1
  15. 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. # check update yum server pid
  9. MY_PID=$$
  10. if [ -f $LOCK_FILE ]; then
  11. get_pid=`/bin/cat $LOCK_FILE`
  12. get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
  13. if [ $get_system_pid -eq 0 ] ; then
  14. echo $MY_PID>$LOCK_FILE
  15. else
  16. echo "Have update yum server now!"
  17. exit 1
  18. fi
  19. else
  20. echo $MY_PID>$LOCK_FILE
  21. fi
  22. # check rsync tool
  23. if [ -z $RSYNC_PATH ]; then
  24. RSYNC_PATH=`/usr/bin/whereis rsync|awk ' ''{print $2}'`
  25. if [ -z $RSYNC_PATH ]; then
  26. echo 'Not find rsync tool.'
  27. echo 'use comm: yum install -y rsync'
  28. fi
  29. fi
  30. # sync yum source
  31. for VER in $LOCAL_VER;
  32. do
  33. # Check whether there are local directory
  34. if [ ! -d "$LOCAL_PATH$VER" ] ; then
  35. echo "Create dir $LOCAL_PATH$VER"
  36. `/bin/mkdir -p $LOCAL_PATH$VER`
  37. fi
  38. # sync yum source
  39. echo "Start sync $LOCAL_PATH$VER"
  40. $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "iso" $YUM_SITE$VER $LOCAL_PATH
  41. done
  42. # clean lock file
  43. `/bin/rm -f $LOCK_FILE`
  44. echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/opensuse/opensuse_rsync_is_end.txt
  45. exit 1