您的位置:首页 > 产品设计 > 产品经理

自制rpm包(一)

2016-08-16 09:06 351 查看
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rpm