搭建本地 yum 源 並同步
阿新 • • 發佈:2018-12-26
學無止境 開心 1年前
(2014-12-13) 5205瀏覽 0評論
嘮叨
大家都知道,使用yum來安裝或者更新現有的包是最方便不過的了,但是有的時候伺服器出於安全方面考慮,一般只許進不許出,那怎麼辦?那有同學就說了,這個簡單啊,搞個本地源不就好了,其實這個方法不是不行,只不過ISO自帶的包一般都比較舊,那我想更新咋辦?所以還是不能滿足需求。
既然伺服器不讓我通過網際網路下載需要的包,那我直接把網上的源搬到我本地伺服器不就好了,我區域網安裝或者更新也快,前提是,你得準備一臺放置yum源的伺服器,磁碟空間要夠大,500G以上,最最重要的是,能訪問網際網路!
準備
- yum install -
- iptables開放80 873埠,關閉selinux
配置
首先開啟httpd.conf
- vi /etc/httpd/conf/httpd.conf
- 把 #ServerName www.example.com:80
- 改成 ServerName localhost:80
- 然後把歡迎頁刪除掉
- mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
- 新建一個centos目錄放置從網際網路上同步下來的rpm包
- mkdir /var/www/html/centos
指令碼
把以下同步指令碼放置到合適的目錄下即可,別忘了新增執行許可權
- #!/bin/bash
- YUM_SITE
- #存放路徑,我這裡直接用的是httpd預設根目錄
- LOCAL_PATH="/var/www/html/centos/"
- #需要同步哪些目錄
- LOCAL_VER='./'
- BW_limit=2048
- LOCK_FILE="/var/log/yum_server.pid"
- RSYNC_PATH=""
- # check update yum server pid
- MY_PID=$$
- if [ -f $LOCK_FILE ]; then
- get_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
- # check rsync tool
- if [ -z $RSYNC_PATH ]; then
- RSYNC_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
- # sync yum source
- for VER in $LOCAL_VER;
- do
- # Check whether there are local directory
- if [ ! -d "$LOCAL_PATH$VER" ] ; then
- echo "Create dir $LOCAL_PATH$VER"
- `/bin/mkdir -p $LOCAL_PATH$VER`
- fi
- # sync yum source
- echo "Start sync $LOCAL_PATH$VER"
- $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH
- done
- # clean lock file
- `/bin/rm -f $LOCK_FILE`
- echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/centos/centos_rsync_is_end.txt
- exit 1
同步的過程可能會很久,整個yum源有400多G,所以指令碼會在全部同步完以後,生成一個時間檔案在/var/www/html/centos_rsync_is_end.txt 假設你已經全部同步完,就啟動httpd服務
- service httpd start
然後把以下repo檔案放置到你的yum源客戶端的/etc/yum.repo.d/下,字尾名必須是repo,我這邊yum源服務端IP是192.168.1.69
- [base]
- name=CentOS - base
- baseurl=http://192.168.1.69/centos/$releasever/os/$basearch/
- gpgcheck=1
- gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
- [updates]
- name=CentOS - updates
- baseurl=http://192.168.1.69/centos/$releasever/updates/$basearch/
- gpgcheck=1
- gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
- [extras]
- name=CentOS - extras
- baseurl=http://192.168.1.69/centos/$releasever/extras/$basearch/
- gpgcheck=1
- gpgkey=http://192.168.1.69/centos/RPM-GPG-KEY-CentOS-6
到這裡你就基本上完成了一個本地yum源伺服器的搭建,現在還少一個定時任務,讓rsync每天凌晨3點去同步一次網際網路上的yum源
- crontab -e
- 新增一條定時任務
- * 3 * * * /bin/bash /etc/yum.repos.d/centos.yum.sh > /dev/null &
附上opensuse源的指令碼
方法請參照上面的yum源,指令碼內容就改動了一些地方,內容基本相同
- #!/bin/bash
- YUM_SITE="rsync://mirrors.ustc.edu.cn/opensuse/"
- LOCAL_PATH="/var/www/html/opensuse/"
- LOCAL_VER='distribution factory-tested factory update'
- BW_limit=2048
- LOCK_FILE="/var/log/opensuse_server.pid"
- RSYNC_PATH=""
- # check update yum server pid
- MY_PID=$$
- if [ -f $LOCK_FILE ]; then
- get_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
- # check rsync tool
- if [ -z $RSYNC_PATH ]; then
- RSYNC_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
- # sync yum source
- for VER in $LOCAL_VER;
- do
- # Check whether there are local directory
- if [ ! -d "$LOCAL_PATH$VER" ] ; then
- echo "Create dir $LOCAL_PATH$VER"
- `/bin/mkdir -p $LOCAL_PATH$VER`
- fi
- # sync yum source
- echo "Start sync $LOCAL_PATH$VER"
- $RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "iso" $YUM_SITE$VER $LOCAL_PATH
- done
- # clean lock file
- `/bin/rm -f $LOCK_FILE`
- echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/opensuse/opensuse_rsync_is_end.txt
- exit 1