最新消息:

如何将源代码srpm软件包编译成二进制rpm包

Linux运维 大步 1589浏览 0评论

如何将源代码rpm软件包编译成二进制rpm包

Linux的软件包大致分为rpm(*.rpm形式的二进制软件包)、src.rpm(或者是srpm,源代码rpm软件包,常以*.src.rpm形式命名的软件包)及源代码包(*.tar.gz/*.tgz、*.bz2形式的二进制软件包 )。不同的包安装方法不通过。这里主要是写将源代码rpm软件包编译成二进制rpm包,即将*.src.rpm形式命名的源代码rpn软件包编译成 *.rpm形式的二进制软件包的方法。

方法一:不修改源代码值和配置,直接用rpmbuild安装

可使用的参数如下:

rebuild 这个选项会将后面的 SRPM 进行『编译』与『打包』的动作,最后会产生 RPM 的文件,但是产生的 RPM 文件并没有安装到系统上。当你使用 --rebuild 的时候,最后通常会发现一行字体:
Wrote: /usr/src/redhat/RPMS/i386/pkgname.i386.rpm
这个就是编译完成的 RPM 文件罗!这个文件就可以用来安装啦!安装的时候请加绝对路径来安装即可!
--recompile 这个动作会直接的『编译』『打包』并且『安装』罗!请注意, rebuild 仅『编译并打包』而已,而 recompile 不但进行编译跟打包,还同时进行『安装』了!

要注意的是,这两个选项都没有修改过 SRPM 内的配置值,仅是透过再次编译来产生

RPM 可安装软件文件而已。 一般来说,如果编译的动作顺利的话,那么编译过程所产生的中间缓存档都会被自动删除,如果发生任何错误, 则该中间文件会被保留在系统上,等待使用者的除错动作!那么,该如何除错呢?如果想要自行除错, 或者是想要修改 SRPM 内的配置值时,就得要知道利用 SRPM 的时候,系统会动用到哪些重要的目录了! 底下我们就来谈一谈当处理 SRPM 时,系统会使用到的目录。

/usr/src/redhat/SPECS 这个目录当中放置的是该软件的配置档,例如这个软件的资讯参数、配置项目等等都放置在这里;
/usr/src/redhat/SOURCES 这个目录当中放置的是该软件的原始档 (*.tar.gz 的文件) 以及 config 这个配置档;
/usr/src/redhat/BUILD 在编译的过程中,有些缓存的数据都会放置在这个目录当中;
/usr/src/redhat/RPMS 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 i386, i586, i686, noarch.... 等等的次目录。
/usr/src/redhat/SRPMS 与 RPMS 内相似的,这里放置的就是 SRPM 封装的文件罗!有时候你想要将你的软件用 SRPM 的方式释出时, 你的 SRPM 文件就会放置在这个目录中了。

 

命令如下:

1.先安装必须的包。

$ sudo yum install @development-tools

$ sudo yum -y intall rpm-build

2.假设为ava.src.rpm

$rpmbuild –rebuild ava.src.rpm

3.

$ cd /usr/src/redhat/RPMS/i386

在/usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是i686,noarch等等)目录下有一个新的 rpm包也叫ava.rpm。执行瞎买的命令,即可安装

$ rpm –ivh ava.rpm

 

执行第二步的命令时候,可能显示出错问题如下:

问题1.warning: user mockbuild does not exist - using root //翻译为:警告:使用者 mockbuild 不存在 - 现使用 root 代替

warning: group mockbuild does not exist - using root //翻译为:警告:使用组 mockbuild 不存在 - 现使用 root 代替

解决方法:这些都是没影响的。当然,也可以添加mockbuild用户和mockbuild组

#useradd mockbuild

#group mockbuild

问题2.出现error: cannot create %sourcedir /usr/src/redhat/SOURCES出错解决方法

解决方法:权限的问题,可以使用mkdir /usr/src/redhat/SOURCES,建立文件后,再使用chmod 777 SOURCES来放开SOURCES的权限,然后安装RPM包就可以正常安装了

 

 

方法二:

1.先安装必须的包。

$ sudo yum install @development-tools

$ sudo yum -y intall rpm-build
2.接着,一定要以非root的管理员用户输入下面的命令,否则可能造成严重的后果,假设这里要编译的包名为ava.src.rpm
$rpm -ivh ava.src.rpm
命令运行后,会在/usr/src/redhat/下生成BUILD 、RPMS 、SOURCES 、SPECS、SRPMS五个文件夹,并且会将ava.src.rpm中的tar.gz、pathes、ava.spec等文件对应的分别放入SOURCES和SPECS文件夹中。

/usr/src/redhat/SPECS 这个目录当中放置的是该软件的配置档,例如这个软件的资讯参数、配置项目等等都放置在这里;
/usr/src/redhat/SOURCES 这个目录当中放置的是该软件的原始档 (*.tar.gz 的文件) 以及 config 这个配置档;
/usr/src/redhat/BUILD 在编译的过程中,有些缓存的数据都会放置在这个目录当中;
/usr/src/redhat/RPMS 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 i386, i586, i686, noarch.... 等等的次目录。
/usr/src/redhat/SRPMS 与 RPMS 内相似的,这里放置的就是 SRPM 封装的文件罗!有时候你想要将你的软件用 SRPM 的方式释出时, 你的 SRPM 文件就会放置在这个目录中了。

3.进入下面的目录
$ cd /usr/src/redhat/SPECS
4.编译成rpm包
$ rpmbuild -ba ava.spec

注:当执行rpmbuild –bb setarch-1.3-1.spec 出现错误时,例:Error: Architecture is not included : i386,此错误表示该软件包不支持i386平台(默认的rpmbuild为i386平台),需指定到别的平台,指定参数为--target=i686
rpmbuild –bb –target=i686 setarch-1.3-1.spec
i386软件包可以在任何x86平台下使用,无论是i686还是x86_64的机器;而i686的软件包一般都对cpu进行了优化,具有向后的兼容性,不具有向前的兼容性。

5. /usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是i686,noarch等等)目录下有一个新的 rpm包也叫ava.rpm。假设编译的为64位的软件包,编译好的二进制rpm包可能在/usr/src/redhat/RPM/x86_64/目录下
$ cd rpmbuild/RPMS/x86_64/
如果是32位的,那么可能在 /rpmbuild/RPMS/i386 目录中
编译好后,可以用下面的命令安装二进制rpm包了
$ sudo rpm -ivh ava.rpm
方法三:

1. 执行rpm -i your-package.src.rpm

2. cd /usr/src/redhat/SPECS

3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件

4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录

5. ./configure 这一步和编译普通的源码软件一样,可以加上参数

6. make

7. make install

卸载:rpm -e packgename

 

有的要自己修改specs脚本或者如果自己要制作rpm包也要修改specs脚本,涉及到specs的使用说明,我自己也不是很熟悉,下面转来了一些相关的specs说明的文章,大家可以参考下。

可以看看下面的文章:

1.《RPM包制作相关教程和文章(转)

2. .鸟哥的书第二十三章中的《SRPM 的使用: rpmbuild

3. http://www.rpm.org/max-rpm/ 英文

4.http://www.jsxubar.info/maximum-rpm-introduction.html或者直接下载中文doc文档,提取了原英文文档中的关键内容,节省时间。

原英文pdf文档下载:请点击

文档下载地址:请点击

5.《http://wiki.centos.org/HowTos/RebuildSRPM》英文

转载请注明:大步's Blog » 如何将源代码srpm软件包编译成二进制rpm包

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap