企业内部如果使用自己的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技术博客
【6】How to create an RPM package/zh-cn - FedoraProject