自制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


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