rpm包打包过程详解(一)——rpm打包

来源:互联网 发布:淘宝网皮书包 编辑:程序博客网 时间:2024/05/17 12:52

制作rpm包

需要软件:

系统环境:[红帽企业Linux.6.4.服务器版].rhel-server-6.4-x86_64

首先安装rpmdevtools这个工具,该工具包含rpmbuild,rpmdev-newspec,rpmdev-setuptree等工具,rpmdevtools这个工具有依赖关系需要处理,依赖于fakeroot,fakeroot又依赖于fakeroot-lib,所以安装的软件名称以及顺序为:

1、fakeroot-libs-1.12.2-22.2.el6.x86_64.rpm

         2、fakeroot-1.12.2-22.2.el6.x86_64.rpm

         3、rpmdevtools-7.5-2.el6.noarch.rpm

之后可以进行spec文件的生成。

关于生成rpm包的相关目录说明如下:

整个rpm制作都是在$HOME/rpmbuild目录下完成的。比如在CentOS中,rpmbuild目录下面,有BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS六个子目录。BUILD是编译rpm包的临时目录;BUILDROOT是最后生成rpm包的临时安装目录;RPMS存放最终生成的rpm二进制包;SPECS用来存放spec文件;SRPMS存放最终生成的rpm源码包。倘若这些目录不存在我们运行rpmdev-setuptree命令就会在当前用户目录下的rpmbuild目录下生成上述六个子目录。spec文件可以放到任何地方,但是自己的源码包(.tar.gz)必须放到SOURCES目录下,否则rpmbuild编译时会找不到指定的源码包。而上述的这些目录默认是在用户目录下的,即$HOME/rpmbuild,我们也可以自定义,这个路径是在/usr/lib/rpm/macros文件里面%_topdir的宏变量来定义。我们可以在自己的主目录下建立一个名为.rpmmacros的隐藏文件,然后在里面重新定义%_topdir,指向一个新的目录名。通常情况下.rpmmacros文件里一般只有一行内容,比如:

%_topdir    $HOME/myrpmbuild

然后,再运行rpmdev-setuptree命令即可在/myrpmbuild生成其他子目录。

下面开始制作:

1.        将上一步最后生成的源码包拷贝到生成rpm包的目录下,如果没有rpm目录,需要手动在root目录下创建该目录,同时创建rpm目录下的6个目录:BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS。

#cp server-1.0.tar.gz /root/rpmbuild/SOURCES

2.        接下来就是最最主要的工作——编写.spec文件。有个rpmdev-newspec工具可以自动生成一个.spec 模板,然后我们再根据规则对模板进行简单修改即可。

#rpmdev-newspec –o server.spec

#gedit server.spec

Name:           server

Version:        1.0

Release:        1%{?dist} #更改此处即可得到新的发布版rpm包

Summary:        this is the test code

Group:          System Environment/TEST

License:        GPL

URL:            http://www.hao123.com

Source0:        %{name}-%{version}.tar.gz  #要确保在SOURCES目录下能找到该包

BuildROOT:          %{_topdir}/BUILDROOT

BuildRequires:             gcc>= 4.7 #进行编译时候的条件,若不符合则编译失败,退出建包进程。

Requires: python  rpm >=0:4.1.1 #进行安装时候,此包的依赖包。

 

%description

this is a test program to test by zsh

   ……

%files

%{_bindir}   #一定要填上,否则会报错

%defattr(-,root,root,-)

%doc

…….

3.        运行rpmbuild命令。#rpmbuild –ba server.spec 即可在RPMS/i386或(若系统为64位怎显示X86_64下得到server-1.0-1.el6.i386.rpm,在SRPMS/下面得到server-1.0-1.el6.src.rpm。RPMS/i386或(X86_64下得到server-1.0-1.el6.i386.rpm是可执行文件。

 

注意:首先安装rpmdevtools这个工具,该工具包含rpmbuild,rpmdev-newspec,rpmdev-setuptree等工具;

在编写.spec文件时,注意%files下面添加%{_bindir},否则会报错“Installed(but unpackaged) file(s) found:”,针对此类问题就是在%file下按需添加内容,如:

/usr/bin/xxx=> %{_bindir}/xxx         #安装后将二进制可执行文件放到/usr/bin/server

/usr/lib/xxx=> %{_libdir}/xxx            #安装后将库文件放到/usr/lib/目录下

/usr/include/xxx=> %{_includedir}/xxx

/usr/share/xxx=> %{_datadir}

/xxx/usr/man/xxx=> %{_mandir}/xxx

亦可修改/usr/lib/rpm/macros文件:%_unpackaged_files_terminate_build 1,把1改为0只警告,再或者将文件中的%__check_files   /usr/lib/rpm/check-files %{buildroot}   注释掉。

 

搭建HTTP服务器,建立yum源

需要软件:httpd,createrepo                   若没有安装则#yuminstall httpd createrepo

步骤:

1.        建立本地库,在/var/zsh 下面,运行createrepo命令,将自己的rpm包放到/var/zsh/i386/下面,#cp /root/rpmbuild/RPMS/i386/server-1.0-1.el6.i386.rpm/var/zsh/i386。

2.        在httpd根目录下添加自己的Yum本地库,#cp –r /var/zsh /www/html/

3.        配置yum,在/etc/yum.repos.d/下面编写zsh.repo

[zshhttp]

name=zsh

baseurl=http://127.0.0.1/zsh

gpgcheck=0

 

enabled=1

 

#yum clean all ,清空yum缓存

#yum list ,可以看到可用包:server-1.1-1.el6.src.rpm 在zshhttp源下。

4.        现在就可以对自己的包进行安装更新了。#yum install server,将server安装到/usr/bin目录下。

5.        将server.spec的Release选项改为2,生成server-1.1-2.el6.i386.rpm,拷贝到/var/www/html/zsh/i386/目录下,#createrepo–update / var/www/html/zsh/ 对http服务器上的yum源进行更新,每次有包的变动都要更新,这样客户才会知道新包的存在。#yum update server,即可对server进行更新。

0 0
原创粉丝点击