1、安装rpm-build
# yum install rpm-build
2、创建制作RPM包目录
# cat /root/.rpmmacros
%_topdir /root/rpmbuild
%_prefix /usr/local/app/%{name}-%{version}
# cd /root/rpmbuild # mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
目录意义:
BUILD 源码解压后存放目录
RPMS 制作完成后RPM包存放目录
SOURCES 收集的源码或配置文件,补丁存放位置
SPECS spec文件存放目录
SRPMS 存放SRMPS生成目录
3、将源码拷贝到/root/rpmbuild/SOURCES目录下
# ls SOURCES/ fcgi.conf index.php init.nginx nginx-1.8.1.tar.gz nginx.conf test.conf
4、编写SPEC文件
Name: nginx # 名称 Version: 1.8.1 # 版本 Release: 1%{?dist} # 版本号 Summary: High performance web server # 简介 Group: Applications/Server # 组名,可通过less /usr/share/doc/rpm-4.8.0/GROUPS 查看 License: GPLv2 # 许可 URL: http://www.51.com Source0: %{name}-%{version}.tar.gz # 用到的source Source1: init.nginx Source2: nginx.conf Source3: test.conf Source4: fcgi.conf Source5: index.php BuildRequires: gcc,make Requires: pcre,pcre-devel,openssl-devel,chkconfig BuildRoot: %_topdir/BUILDROOT # make install的测试安装目录 %description It's a nginx compile by hexm@51.com. %prep # 准备阶段,解压源码并cd进去 %setup -q %build # 编译 ./configure --prefix=%{_prefix} --user=nooby --group=nobody --with-pcre --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module make %{?_smp_mflags} %install # 安装 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %{__install} -p -D -m 0755 %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/nginx %{__install} -p -D %{SOURCE2} $RPM_BUILD_ROOT/%{_prefix}/conf/nginx.conf mkdir $RPM_BUILD_ROOT/%{_prefix}/conf/vhosts &> /dev/null %{__install} -p -D %{SOURCE3} $RPM_BUILD_ROOT/%{_prefix}/conf/vhosts/test.conf %{__install} -p -D %{SOURCE4} $RPM_BUILD_ROOT/%{_prefix}/conf/fcgi.conf %{__install} -p -D -m 0755 %{SOURCE5} $RPM_BUILD_ROOT/opt/wwwroot/www.51.com/www/index.php %pre # 安装前执行脚本 %post # 安装后执行脚本 ln -sv /usr/local/app/nginx-1.8.1 /usr/local/nginx &> /dev/null chkconfig --add nginx && chkconfig nginx on [ ! -d /data/logs/nginx ] && mkdir -pv /data/logs/nginx &> /dev/null %preun # 卸载前执行的脚本 %postun # 卸载后执行的脚本 rm -rf /usr/local/nginx rm -rf /usr/local/app/nginx-1.8.1 %clean #[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files # 哪些文件放入rpm包 %defattr (-,root,root,0755) %{_prefix} %attr(0755,root,root) /etc/rc.d/init.d/%{name} %doc /opt/wwwroot/www.51.com/www/index.php %attr(0755,nobody,nobody) /opt/wwwroot %changelog
5 使用rpmbuild制作rpm包
rpmbuild -ba 既生成src.rpm又生成二进制rpm -bs 只生成src的rpm -bb 只生二进制的rpm -bp 执行到pre -bc 执行到 build段 -bi 执行install段 -bl 检测有文件没包含
可以先使用bp参数,再bc参数,再bi参数,最后再ba参数