[huang@aliyun_test SPECS]$ cat nginx-1.10.0.spec
Name:nginx -----------------》rpm包名
Version:1.10.0 ----------------》包版本號
Release:1%{?dist}--------------》{?dist}:?表示後面的dist有值就啓用,沒有值就捨棄,dist根據系統版本來定義,像redhat5就是el5,redhat6就是el6
Summary:compiled nginx-------》概要
Group:System Environment/Daemons------------------》組名,通過cat /usr/share/doc/rpm-4.8.0/GROUPS這條命令查看系統上支持的組
License:GPL--------------------》可許證機構
URL:http://nginx.org-----------------》這個可以隨便寫
Source0:nginx-1.10.0.tar.gz--------------》存放要編譯的源碼包,如果有多個可以定義Source1、Source2等等
BuildRequires:gcc gcc-c++ autoconf automake openssl-devel pcre-devel-------》編譯時依賴的包
Requires:pcre-devel----------------》安裝時依賴的包
%description-------------------》用於描述的
The RPM package is made for nginx
%prep-----------------》進行源碼解壓,自動進行將從source存放的源碼包解壓到build目錄下
%setup -q-----------------》靜默輸出,減少輸出量
%build------------------》在build目錄下進行編譯
./configure --prefix=/usr/local
make %{?_smp_mflags}----------------》_smp_mflags:表示系統如果支持多顆cpu,將啓用這個功能,提高編譯速度
%install-------------------》進行安裝,在buildroot目錄下進行安裝
rm -rf %{buildroot}----------------》安裝之前先要刪除裏面已有的多餘的編譯內容
mkdir -p %{buildroot}/var/nginx/tmp ---------------------》創建編譯過程中需要的目錄
mkdir -p %{buildroot}/var/nginx/run
mkdir -p %{buildroot}/var/nginx/lock
mkdir -p %{buildroot}/etc/init.d
cp -p %{_sourcedir}/nginx %{buildroot}/etc/init.d/------------------》爲nginx源碼包提供一個啓動腳本
make install DESTDIR=%{buildroot}--------------------》最後進行安裝
%clean---------------------------》清理,清理buildroot下的安裝產物
rm -rf %{buildroot}
rpm包製作也包括腳本段:
rpm有時候安裝時創建了用戶,這是根據腳本來執行的
%pre:安裝之前執行的腳本
if [ $1 == 1 ];then----->$1:表示第一次安裝,當等於1爲安裝,等於0爲卸載,等於2爲升級
/usr/sbin/useradd -s /bin/false -r nginx 2>/dev/null ||:---->失敗了就打印冒號
fi
%post:安裝完成之後執行的腳本
if [ $1== 1 ];then
/sbin/chkconfig --add %{name}
fi
%preun:卸載之前執行的腳本
if [ $1== 0 ];then
/sbin/service %{name} stop >/dev/null 2>&1
/sbin/chkconfig --del %{name}
fi
%postun:卸載完成之後執行的腳本
%files----------------------》在上述安裝過程中產生的目錄和文件都必須包含在這裏
/usr/local/conf/fastcgi.conf
/usr/local/conf/fastcgi.conf.default
/usr/local/conf/fastcgi_params
/usr/local/conf/fastcgi_params.default
/usr/local/conf/koi-utf
/usr/local/conf/koi-win
/usr/local/conf/mime.types
/usr/local/conf/mime.types.default
/usr/local/conf/nginx.conf
/usr/local/conf/nginx.conf.default
/usr/local/conf/scgi_params
/usr/local/conf/scgi_params.default
/usr/local/conf/uwsgi_params
/usr/local/conf/uwsgi_params.default
/usr/local/conf/win-utf
/usr/local/html/50x.html
/usr/local/html/index.html
/usr/local/sbin/nginx
/var/nginx/tmp
/var/nginx/run
/var/nginx/lock
/etc/init.d/nginx
%defattr(-,root,root,-)----------------》默認給予的權限和屬主屬組
%doc
%changelog---------------------》修改rpm包過程中的信息和日期(比如第二次製作增加了什麼內容或者特性之類的)
查看整個rpm包的宏變量
rpmbuild --showrc:顯示rpm所有的宏
__rm /bin/rm:兩個下劃線後接命令,代表的就是當前系統本身的命令
BuildRoot:-14: _buildrootdir %{_topdir}/BUILDROOT
紅帽5,6上面用的一個臨時目錄
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
可以自己定義,刪除默認的臨時定義的buildroot
注意:創建自制的rpm包的時候,最好使用一個普通的的用戶(給定sudo的能力)
rpmbuild --showrc|grep _topdir查看系統上默認的頂端目錄
自定義topdir,自定義buildroot:
創建rpm包:前提準備
useradd huang(將用戶增加到sudo配置文件中)
cd /home/huang
mkdir -p rpmbuild
cd /home/huang/rpmbuild
mkdir {SOURCES,BUILD,BUILDROOT,SPECS,SRPMS,TMP,RPMS}
vim /home/huang/.rpmmacros
%_topdir /home/dong.guo/rpmbuild
%_tmppath /home/dong.guo/rpmbuild/TMP
cp /home/huang/.rpmmacros /root/
查看topdir:
[root@aliyun_test ~]# rpmbuild --showrc|grep _topdir
-14: _builddir %{_topdir}/BUILD
-14: _buildrootdir %{_topdir}/BUILDROOT
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir /home/huang/rpmbuild(由於自己修改了)
至此buildroot在SPEC文件中就無需定義了,它會調用這裏的宏,提供下自制成功的nginx rpm成果
[huang@aliyun_test SPECS]$ cat nginx-1.10.0.spec
Name: nginx
Version: 1.10.0
Release: 1%{?dist}
Summary: compiled nginx
Group: System Environment/Daemons
License: GPL
URL: http://nginx.org
Source0: nginx-1.10.0.tar.gz
BuildRequires: gcc gcc-c++ autoconf automake openssl-devel pcre-devel
Requires: pcre-devel
%description
The RPM package is made for nginx
%prep
%setup -q
%build
./configure --prefix=/usr/local
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/var/nginx/tmp
mkdir -p %{buildroot}/var/nginx/run
mkdir -p %{buildroot}/var/nginx/lock
mkdir -p %{buildroot}/etc/init.d
cp -p %{_sourcedir}/nginx %{buildroot}/etc/init.d/
make install DESTDIR=%{buildroot}
%clean
rm -rf %{buildroot}
%files
/usr/local/conf/fastcgi.conf
/usr/local/conf/fastcgi.conf.default
/usr/local/conf/fastcgi_params
/usr/local/conf/fastcgi_params.default
/usr/local/conf/koi-utf
/usr/local/conf/koi-win
/usr/local/conf/mime.types
/usr/local/conf/mime.types.default
/usr/local/conf/nginx.conf
/usr/local/conf/nginx.conf.default
/usr/local/conf/scgi_params
/usr/local/conf/scgi_params.default
/usr/local/conf/uwsgi_params
/usr/local/conf/uwsgi_params.default
/usr/local/conf/win-utf
/usr/local/html/50x.html
/usr/local/html/index.html
/usr/local/sbin/nginx
/var/nginx/tmp
/var/nginx/run
/var/nginx/lock
/etc/init.d/nginx
%defattr(-,root,root,-)
%doc
%changelog
[huang@aliyun_test x86_64]$ ls
nginx-1.10.0-1.el6.x86_64.rpm nginx-debuginfo-1.10.0-1.el6.x86_64.rpm
[huang@aliyun_test x86_64]$ pwd
/home/huang/rpmbuild/RPMS/x86_64