搭建内部的yum仓库以及通过rpmbuild创建rpm包
部署服务器,由于操作系统版本较老,许多软件都需要从源码编译安装,编译时还要解决依赖问题。为了避免重复劳动,最好的方式是搭建一个内部的yum仓库,然后将源码编译打包成rpm包,使用的时候直接通过yum安装即可。
创建yum仓库
这个比较简单
-
安装createrepo
yum -y install createrepo
-
创建目录
mkdir -p /yum/centos/5/{i386,x86_64}
-
初始化repodata
createrepo -d /yum/centos/5/x86_64
-
配置http服务以nginx为例
server {
error_log /var/log/nginx/yum_error.log;
location / {
root /yum;
autoindex on;
}
}
-
配置服务器的yum源
[testrepo] name=test repo baseurl=http://yum.example.com/centos/5/$basearch/ gpgcheck=0 enabled=1
注意,由于没有配置gpg,所以要将gpgcheck设置为0.
仓库搭建好了,但还没有东西。下一步就需要通过rpmbuild创建软件包。
创建rpm包
-
安装rpmbuild
yum -y install rpmbuild
-
创建用户
adduser rpmbuild
创建rpm包千万别使用root。否则如果脚本编写错误,可能导致破坏文件。
-
创建目录
su rpmbuild mkdir -p ~/rpmbuild/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
SOURCES 目录是放置源码包的位置,打包后的rpm文件会在RPMS下,SRPMS用于保存源码rpm包。spec文件会在SPEC目录下。
-
下载源码 源码放置在SOURCES目录下。以git为例来说明如何制作rpm。由于git在centos仓库中的版本太老,所以需要制作一个新的。
cd ~/rpmbuild/SOURCES wget -c https://git-core.googlecode.com/files/git-1.8.2.1.tar.gz
-
编写spec文件
spec文件是用于描述如果编译以及打包的描述文件
cd ~/rpmbuild/SPEC vim git.spec
下面是示例spec文件
Summary: Git Scm Name: git Version: 1.8.2.1 Release: 1 License: GPLv2 Group: Development/Tools URL: https://code.google.com/p/git-core/ Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %define prefix /usr/local/ BuildRequires: curl-devel,expat-devel,gettext-devel,openssl-devel,zlib-devel Packager: jolestar %description Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. %prep %setup -q %build %{__make} prefix=$RPM_BUILD_ROOT%{prefix} all %install %{__rm} -rf %{buildroot} %{__make} prefix=$RPM_BUILD_ROOT%{prefix} install %clean %{__rm} -rf %{buildroot} %files %defattr(-, root, root, 0755) %{prefix}/bin %{prefix}/share %{prefix}/lib %{prefix}/libexec %{prefix}/lib64
说明:
- Summary 摘要
- Name package名字
- Version 用来 build 的 source code 版本。
- Release 发行号。同于区分同一个源码版本的多次build。
- Group 分组。cat /usr/share/doc/rpm-4.4.2.3/GROUPS 可查看所有标准分组
- License 软件的版权。
- URL 软件地址。
- BuildRequires 编译代码需要的软件。这个只影响编译命令,不影响打包后的rpm包的依赖关系。
- %prep 打包前置操作
- %build 定义该源码包如何build
- %install 定义该源码包如何安装(此处相当于copy到rpm包的虚拟系统路径下)
- %files 定义哪些文件需要打包到rpm包中
- %changelog 列出更改记录。
总的概括一下,rpmbuild做的事情是以临时目录作为虚拟的系统根目录,然后build,install(需要制定参数,安装到临时虚拟根目录下),然后打包 file块中制定的目录结构。注意: file目录是相对虚拟根目录的路径。
-
执行
rpmbuild -bb git.spec
如果打包成功,RPMS目录下会有对应的rpm包。以我的为例:
RPMS/x86_64/git-1.8.2.1-1.x86_64.rpm
-bb参数是指定rpmbuild只生成二进制rpm,不需要生成源码rpm。
-
更新仓库
cp ~/rpmbuild/RPMS/x86_64/git-1.8.2.1-1.x86_64.rpm /yum/centos/5/x86_64/RPMS/ createrepo --update /yum/centos/5/x86_64/
在其他服务器上使用yum list git看看git的新版本是否检测到了。如果未检测到可能需要yum clean all清空一下缓存。