構建企業內部的Yum服務器

企業內部如果使用自己的Yum服務器,不但佔用帶寬少、速度更快,而且可以更加靈活方便的自定義配置,能有效提升日常工作效率。

一、基本概念

1. RPM

全稱是The RPM Package Manager。用於在CentOS系統中安裝/卸載軟件。

2. Yum

全稱是Yellow Dog Updater Modified。用於管理RPM包,完成安裝/卸載/升級,重要的是能夠處理包之間的依賴關係。

二、同步外部yum源

第一步當然是建立內網的yum源,基本上yum源就是一個靜態的http服務,yum client根據repo文件的配置讀取遠程數據,下載rpm包到本地進行安裝。具體安裝步驟不再贅述,完全參考【3】即可。

當然我使用的源有所不同,主要包括以下幾個源:

CentOS 6 Base: rsync://mirrors.ustc.edu.cn/centos/6/os/
CentOS 6 Update: rsync://mirrors.ustc.edu.cn/centos/6/updates/
CentOS 6 Epel: rsync://mirrors.ustc.edu.cn/epel/6/
Percona: rsync://rsync.percona.com/rsync/centos/6/os/x86_64/

二、自定義yum源

上面是同步外部的yum源到內網,那麼如何定義自己的yum源呢?這個其實也非常簡單。

1. 在上述的數據文件夾下新建目錄,結構類似於

my_yum/
├── Centos-5
│   └── repodata
└── Centos-6
    ├── Packages
    └── repodata

2. 將常用的RPM文件放入Packages文件夾,執行

createrepo -p -d -o Centos-6 Centos-6

3. 創建my_yum.repo文件,其中

baseurl=http://yum-server.xxx.com/my_yum/Centos-$releasever/

三、自定義rpm文件

實際應用中,還有許多程序是沒有rpm安裝包的,必須通過編譯安裝並自定義配置,這部分相對複雜一些。下面以tengine 2.1.0的打包過程爲例。

1. RPM打包

1)安裝RPM打包工具

yum -y install rpm-build

2)依照 rpmbuild 規範設定一個目錄結構。

rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

3)將源代碼和附帶文件放在目錄中合適的位置。

下載tengine-2.1.0.tar.gz到SOURCES目錄

4)創建 spec 文件。

#This is the spec file for tengine
Name:          tengine
Version:     2.1.0
Release:     1
Summary:    Tengine from Taobao Inc.
Group:          Applications/Productivity
License:     BSD
URL:          http://tengine.taobao.org/
Source0:     tengine-2.1.0.tar.gz
BuildRoot:     %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires:     libevent
BuildRequires:     libevent-devel
BuildRequires:     gcc

%description
Tengine from Taobao Inc.

%prep
%setup -q

%build
./configure --with-http_ssl_module --with-http_stub_status_module
make

%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
install -m 755 -d %{buildroot}/%{_bindir}
ln -s /usr/local/nginx/sbin/nginx %{buildroot}/%{_bindir}/nginx

%clean
#rm -rf %{buildroot}

%files
%defattr(-,root,root,-)
/usr/local/nginx
/%{_bindir}/*
%doc
%changelog

4)編譯 RPM。

rpmbuild -v -bb --clean SPECS/tengine-2.1.0.spec

當編譯順利完成,生成的rpm文件會放置在RPMS目錄,即可同步到自己的yum源進行管理。


2. 添加自定義配置

從spec文件可以看出,RPM打包的過程就是通過腳本執行configure->make->make install,最後將編譯好的文件整合到一個rpm文件中。那麼如果要自定義配置,只需要在make install之後用自己的配置文件覆蓋原始配置。

1)編寫配置文件

按照正常語法編寫tengine的配置文件,我修改了整個conf文件的結構,放在SOURCES/tengine_conf文件夾中。

2)spec文件Source1

在Source0下面添加一行

Source1:     tengine_conf

這樣在spec文件中就會到SOURCES文件夾尋找tengine_conf

3)spec文件install

在%install節中添加

rm -rf %{buildroot}/usr/local/nginx/conf
cp -r %{SOURCE1} %{buildroot}/usr/local/nginx/conf

刪除make install生成的conf,用tengine_conf代替

這樣就能生成一個自定義配置的rpm文件了,通過修改Version號和Release號可以方便的升級/變更。主要是理解RPM打包的原理,注意一些內部宏變量的使用,注意相對路徑和絕對路徑的問題。建議反覆閱讀【5】。


【1】rpm - 官方網站

【2】yum - 官方網站

【3】企業實際應用之同步遠程yum源到本地 - 吟—技術交流 - 51CTO技術博客

【4】燦哥的Blog | RPM打包跟YUM倉庫

【5】使用 RPM 打包軟件,第 1 部分: 構建和分發包

【6】How to create an RPM package/zh-cn - FedoraProject


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章