天天看點

搭建區域網路CentOS Yum伺服器

對于企而言,假設有一批CentOS 5.7伺服器需要更新到CentOS 5.8,每一台機都使用yum update指令從外網下載下傳更新包的話,既費時間,也占流量,實在不劃算。而對于虛拟機玩家而言,可能需要更新的系統不多,也就三四台,但倘若都從外網下載下傳更新包,也是件很費勁的的事情,而且,有時候會遇到實體機不友善聯網的情況,那就加無奈。

是以,在區域網路内搭建yum伺服器,應該是每個Linux從業者必須懂的基本功。SQ不才,直到現在才弄懂,實在慚愧,在此分享一下經驗。其實操作很簡單,注意一些細節就行了。

本文作業環境:

注:以下的操作是在VirtualBox虛拟機環境下進行的。

提供Yum源的伺服器,以下簡稱為Yum伺服器:

CentOS 5.8,主機名為luffy,IP為192.168.56.123

(注:Yum伺服器也可以為CentOS 5.7系統)

需要更新的伺服器,以下簡稱為用戶端:

CentOS 5.7,主機名為zoro,IP為192.168.56.124

一、

到官網查找并下載下傳最新的CentOS 5.8鏡像(國内也有放多鏡像源,比如http://mirrors.163.com/centos/ ,更新得也蠻快的),下載下傳CentOS-5.8-i386-bin-DVD-1of2就可以了,DVD-2of2用不到。

如果Yum伺服器是實體機,需将DVD-1of2鏡像刻錄到DVD光碟,然後将放進Yum伺服器光驅;

如果是虛拟機,則在虛拟機光驅設定中,選擇實體機上存放的DVD-1of2鏡像即可。

Yum伺服器加載光驅

[root@luffy ~]# mount /dev/cdrom /media

mount: block device /dev/sr0 is write-protected, mounting read-only

二、

為使區域網路内其他CentOS伺服器可以通路到Yum 伺服器上的資源,需要在Yum伺服器上架設http伺服器或者ftp伺服器。鑒于http伺服器設定簡易、流行,本文使用http伺服器。

如果Yum伺服器是聯網的,可使用yum 指令直接安裝Appache伺服器,即軟體包httpd

[root@luffy ~]#yum install httpd

這裡由于虛拟機不友善連接配接外網(采用了Host-only Adapter模式,并且内網IP位址是固定,懶得改了,虛拟機玩家都有遇到過這種情形吧~),需要手動安裝rpm包(直接在系統鏡像裡找,也可以到http://rpm.pbone.net/ 等網站找,然後再從實體機上傳到虛拟機裡),由于rpm指令無法解決包的依賴性問題,故需要安裝若幹個包,包括httpd-2.2.3、apr-1.2.7、apr-util-1.2.7,postgresql-libs-8.1.23。

具體過程如下(為說清楚包的依賴性,我把報錯也列出來了):

[root@luffy ~]# rpm -ivh /media/CentOS/httpd-2.2.3-63.el5.centos.i386.rpm 

error: Failed dependencies:

        libapr-1.so.0 is needed by httpd-2.2.3-63.el5.centos.i386

        libaprutil-1.so.0 is needed by httpd-2.2.3-63.el5.centos.i386

[root@luffy ~]# rpm -ivh /media/CentOS/apr-1.2.7-11.el5_6.5.i386.rpm 

Preparing...                ########################################### [100%]

   1:apr                    ########################################### [100%]

[root@luffy ~]# rpm -ivh /media/CentOS/apr-util-1.2.7-11.el5_5.2.i386.rpm 

        libpq.so.4 is needed by apr-util-1.2.7-11.el5_5.2.i386

[root@luffy ~]# rpm -ivh /media/CentOS/postgresql-libs-8.1.23-1.el5_7.3.i386.rpm 

   1:postgresql-libs        ########################################### [100%]

   1:apr-util               ########################################### [100%]

   1:httpd                  ########################################### [100%]

啟動httpd服務,并設定為開機時啟動

[root@luffy ~]# service httpd start

[root@luffy ~]# chkconfig httpd on

三、

在Appache根目錄下建立檔案夾yum及其子檔案夾CentOS,将CD光牒内CentOS檔案夾下的所有内容拷貝到/var/www/html/yum/CentOS目錄下(光碟内其他的資料不需要)。

[root@luffy ~]# mkdir -p /var/www/html/yum

[root@luffy ~]# mkdir -p /var/www/html/yum/CentOS

[root@luffy ~]# cp -prf /media/CentOS/* /var/www/html/yum/CentOS/

可以彈出光碟了

[root@luffy~]# umount /dev/cdrom

[root@luffy~]# eject

四、Yum伺服器安裝createrepo并建立倉庫

createrepo是Linux下的建立倉庫的軟體包,這個軟體包在系統鏡像CentOS-5.8-i386-bin-DVD-1of2裡是有的。這裡已經拷貝到/var/www/html/yum/CentOS目錄下了。

[root@luffy ~]# rpm -ivh /var/www/html/yum/CentOS/createrepo-0.4.11-3.el5.noarch.rpm 

   1:createrepo             ########################################### [100%]

(注:在CentOS 5.7下安裝會有如下警告,但不影響後續操作:

warning: /var/www/html/yum/CentOS/createrepo-0.4.11-3.el5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID e8562897)

安裝完成之後,在/usr/bin/目錄下會有一個createrepo指令。使用createrepo 生成XML metadata,在/var/www/html/yum/CentOS目錄下生成repodata 檔案夾(具體有何作用,還沒弄明白)

[root@luffy ~]# createrepo /var/www/html/yum/CentOS/

2669/2669 - compat-gcc-34-g77-3.4.6-4.1.i386.rpm                                

Saving Primary metadata

Saving file lists metadata

Saving other metadata

五、

用戶端修改Centos-Base.repo,建議先備份一個副本,以後若要從外網更新的話,可以再使用。

[root@zoro ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 

[root@zoro ~]# vi /etc/yum.repos.d/CentOS-Base.repo

##############Centos-Base.repo内容修改後,以下#######################

# CentOS-Base.repo

#

# The mirror system uses the connecting IP address of the client and the

# update status of each mirror to pick mirrors that are updated to and

# geographically close to the client.  You should use this for CentOS updates

# unless you are manually picking other mirrors.

# If the mirrorlist= does not work for you, as a fall back you can try the 

# remarked out baseurl= line instead.

[base]

name=CentOS-$releasever - Base

baseurl=http://192.168.56.123/yum/CentOS

enabled=1

gpgcheck=0

#released updates 

[updates]

name=CentOS-$releasever - Updates

gpgcheck=1

#packages used/produced in the build but not released

[addons]

name=CentOS-$releasever - Addons

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras

#additional packages that extend functionality of existing packages

[centosplus]

name=CentOS-$releasever - Plus

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus

#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users

[contrib]

name=CentOS-$releasever - Contrib

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib

#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/

##############Centos-Base.repo内容修改後,以上#######################

注:[centosplus]和[contrib]的内容不需要修改,它們的enabled值預設值是0,即子產品不啟用。

操作基本完成了,運氣好的話,可以直接從Yum伺服器拿軟體、更新包。

不過,并不排除意外發生。比如有報錯,提示找不着路由。

以安裝mc為例:

[root@zoro ~]# yum install mc

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

http://192.168.56.123/yum/CentOS/repodata/repomd.xml: [Errno 4] IOError: <urlopen error (113, 'No route to host')>

Trying other mirror.

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package mc.i386 1:4.6.1a-35.el5 set to be updated

--> Finished Dependency Resolution

Dependencies Resolved

================================================================================

 Package      Arch           Version                     Repository        Size

Installing:

 mc           i386           1:4.6.1a-35.el5             addons           2.1 M

Transaction Summary

Install       1 Package(s)

Upgrade       0 Package(s)

Total download size: 2.1 M

Is this ok [y/N]: y

Downloading Packages:

http://192.168.56.123/yum/CentOS/mc-4.6.1a-35.el5.i386.rpm: [Errno 4] IOError: <urlopen error (113, 'No route to host')>

Error Downloading Packages:

  1:mc-4.6.1a-35.el5.i386: failure: mc-4.6.1a-35.el5.i386.rpm from addons: [Errno 256] No more mirrors to try.

六、

Yum伺服器上,關閉防火牆及SELinux。

(一般情況下,企業裡,都是關的,倘若不關,隻能說是運氣不好,以置出了上述報錯,此所謂運氣不好也~)

七、

再到用戶端進行操作,一切順利。

用戶端可以通過yum指令從伺服器端下載下傳并安裝軟體了

mc-4.6.1a-35.el5.i386.rpm                                | 2.1 MB     00:00     

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing     : mc                                                       1/1 

Installed:

  mc.i386 1:4.6.1a-35.el5                                                       

Complete!

運作yum udpate指令,即可将用戶端更新為CentOS 5.8

[root@zoro~]#yum update

注:用戶端CentOS 5.7更新完成後,核心由kernel-2.6.18-274更新到了kernel-2.6.18-308,用戶端需要重新開機才能使用新的核心,重新開機後可使用yum remove kernel*274*指令将原核心删除。

檢視系統安裝的核心

# rpm -qa | grep kernel

檢視系統目前用到的核心的版本号

# more /proc/version

本文轉自Sunshyfangtian 51CTO部落格,原文連結:http://blog.51cto.com/sunshyfangtian/822167,如需轉載請自行聯系原作者

繼續閱讀