自制rpm包(一)

[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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章