在 rpmbuild 目录底下又有 BUILD RPMS SOURCES SPECS SRPMS 五个子目录
也可以自己手动创建这五个目录:mkdir -p ~/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
这些目录的作用如下
BUILD 编译时所用的暂存目录
RPMS 放置打包好的套件
SOURCES 放置套件的原始码及修补档等等
SPECS 放置 .spec 档 SRPMS 放置 Source RPMS (.src.rpm)
将nginx的tar包制作为RPM包
1. 下载nginx的源码包
2. 将文件放到/usr/src/redhat/SOURCES/目录下
3. 编写SPEC文件
[root@mail SPECS]# vi nginx-0.8.35.spec
Summary:the first rpm package
Name:nginx
Version:0.8
Release:35
Vendor:[email protected]
License:Share
Group:Applications/Text
Source0:nginx-0.8.35.tar.gz
%description
my test nginx
%prep
tar -zxvf $RPM_SOURCES_DIR/nginx-0.8.35.tar.gz
%build
cd $RPM_BUILD_DIR/nginx-0.8.35
./configure
make
%install
cd $RPM_BUILD_DIR/nginx-0.8.35
make install
%clean
rm -rf $RPM_BUILD_DIR/nginx-0.8.35
%files
%defattr(-,root,root)
/usr/local/nginx/sbin/nginx
%doc $RPM_BUILD_DIR/nginx-0.8.35/README
4. 制作RPM包
[root@mail SPECS]# rpmbuild -ba nginx-0.8.35.spec
若运行没有错误,则产生/usr/src/redhat/RPMS/i386/nginx-0.8-35.i386.rpm 和/usr/src/redhat/SRPMS/nginx-0.8-35.src.rpm 两个文件。
rpmbuild 生成rpm包。
包有两种,binary包和source包。
rpm包有包信息和内容组成。rpm -qpi nginx.rpm可以查看到包的信息。
如:
relocations:如果非空,表示包可以安装到新的目录。在安装包的时候,使用--relocate=/usr/loca/=/home/cyx/ 这样来修改包的安装位置。
不过可能不能使用,因为包是二进制的,可能程序编译的时候使用了绝对路径。
rpm包制作由rpmbuild来生成。rpmbuild用到了几个目录:
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
BUILD:build过程执行的目录
RPMS:最后生成的RPM包的位置
SOURCES:源文件位置
SPECS:spec文件的位置,rpmbuild使用spec文件的描述信息来build包
SRPMS:源代码rpm包的位置
rpm宏文件定义了rpmbuild使用的一些参数和变量。
如上面几个目录(rpmbuild的基地)在哪儿。默认是在/usr/local/....下面。
在自己的家目录下面建立.rpmmacros文件,可以在里面设置自己的
%_tmppath /home/admin/tmp build建立包的时候,install到的目录。
%_topdir /home/admin/rpm 上面6个目录的位置。默认是/usr/...
%_prefix /home/admin/install 前缀
spec文件是指导rpmbuild生成包的关键文件。放在SPECS目录下面:
----------------------------------example------------------------------------------------------------------
[root@v092019 SPECS]# cat nginx-0.8.54.spec
Name:nginx 包名
Summary:nginx-server! 摘要
Version:0.8.54 版本
Release:1 发行
Group:taobao.com 组织
License:GPL 许可
URL:http://www.nginx.com/ 官网
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root build的目录,会在这里build出二进制
Source:%{name}-%{version}.tar.gz 源码文件的名称,放在SOURCES目录下
Prefix:%{_prefix} 前缀,有这个值,包生成时候就有relocations。
Packager:nginx 包名称
%description 下面是对包的描述
nginx-httpd-server
%prep 下面是准备工作
%setup -q 这里使用了内建命令,解开源码包到BUILD目录
%build 开始建立包,对应于configure和make,在BUILD目录
CFLAGS="-g" ./configure
make -j `cat /proc/cpuinfo | grep processor | wc -l`
%install 安装包到Buildroot
make DESTDIR=$RPM_BUILD_ROOT install
%files 最后,把文件打包进rpm包,这里指定要打包进去的文件,权限和属主,这里的目录是相对于Buildroot的目录,但是要以'/'开头。
%defattr(755,daemon,daemon)
/usr/local/%{name}
%pre 在用rpm命令安装包前执行这里的动作
echo nginx,preinstall
%post 在用rpm命令安装完后执行这里的动作
echo nginx,afterinstall,done
%preun 在卸载前执行这里的动作
echo nginx,uninstall
%postun 在卸载后执行这里的动作
echo nginx,uninstall,done