`

rpmbuild命令详解

阅读更多

rpmbuild命令

引用地址:http://hi.baidu.com/litaosmile/blog/item/38af15fa08c995d7b58f3138.html
#rpmbuild
-bp 只作准备 (解压与打补丁)
-bc 准备并编译
-bi 编译并安装
-bl 检验文件是否齐全
-ba 编译后做成*.rpm和src.rpm
-bb 编译后做成*.rpm
-bs 只做成*.src.rpm 

-tc -ti -ta -tb -ts 的功能类似,只是所需参数由spec文件变成tar包。

如:cd /usr/src/redhat/SPECS
rpmbuild -bp kernel-2.6.spec
更具体的用法说明:
Build options with [ <specfile> | <tarball> | <source package> ]:
*建立包的选项有:[ 从文件<specfile>建立 |从 <tarball>包建立 |从 <source package>包建立]
*从文件<specfile>建立

-bp build through %prep (unpack sources and apply patches) from <specfile>
* -bp 从<specfile>文件的%prep段开始建立(解开源码包并打补丁)
-bc build through %build (%prep, then compile) from <specfile>
*-bc 从<specfile>文件的%build
-bi build through %install (%prep, %build, then install) from <specfile>

-bl verify %files section from <specfile>
*检查<specfile>文件的%files段
-ba build source and binary packages from <specfile>
*建立源码和二进制包
-bb build binary package only from <specfile>
*只建立二进制包
-bs build source package only from <specfile>
*只建立源码包

*从 <tarball>包建立

-tp build through %prep (unpack sources and apply patches) from <tarball>

-tc build through %build (%prep, then compile) from <tarball>

-ti build through %install (%prep, %build, then install) from <tarball>

-ta build source and binary packages from <tarball>
*建立源码和二进制包
-tb build binary package only from <tarball>
*只建立二进制包
-ts build source package only from <tarball>
*只建立源码包

*从 <source package>包建立

--rebuild
build binary package from <source package>
*建立二进制包
--recompile
build through %install (%prep, %build, then install) from <source package>


*rpmbuild的其他使用项

--buildroot=DIRECTORY override build root
*确定以root目录建立包
--clean remove build tree when done
*完成打包后清除BUILD下的文件目录
--nobuild do not execute any stages of the build
*不进行BUILD的阶段
--nodeps do not verify build dependencies
*不检查建立包时的关联文件
--nodirtokens
generate package header(s) compatible with (legacy) rpm[23] packaging

--rmsource remove sources when done
*完成打包后清除sources
--rmspec remove specfile when done
*完成打包后清除specfile
--short-circuit skip straight to specified stage (only for c,i)
*跳过
--target=CPU-VENDOR-OS
override target platform
*确定包的最终使用平台

Common options for all rpm modes:
*所有rpm都可使用的选项

-D, --define='MACRO EXPR' define MACRO with value EXPR
*预定义
-E, --eval='EXPR' print macro expansion of EXPR
*显示大量EXPR扩展信息
--macros=<FILE:...> read <FILE:...> instead of default file(s)
*读<FILE:...>文件代替默认文件
--nodigest don't verify package digest(s)
*不检查包的说明信息
--nosignature don't verify package signature(s)
*不检查包的签名信息
--rcfile=<FILE:...> read <FILE:...> instead of default file(s)
*读<FILE:...>文件代替默认文件
-r, --root=ROOT use ROOT as top level directory (default: "/")
*使ROOT为最高级别的路径
--querytags display known query tags
*显示已知的有疑问的地方
--showrc display final rpmrc and macro configuration
*显示最终的配置信息
--quiet provide less detailed output
*提供少量的信息
-v, --verbose provide more detailed output
* 提供大量的详细的信息
--version print the version of rpm being used
*显示rpm包的版本

Options implemented via popt alias/exec:
*附加选项

--dbpath=DIRECTORY use database in DIRECTORY

--with=<option> enable configure <option> for build
*建立时允许配置的选项
--without=<option> disable configure <option> for build
*建立时不允许配置的选项

Help options:
*帮助选项

-?, --help Show this help message
* 显示帮助信息
--usage Display brief usage message
*显示使用方法的信息

附录:RPM的工作方法

   软件包管理器,其实按照我自己的理解,他就是个类似rarlinux
的归档管理器,只不过用有自己特定的释放方式。现在我们找一个例子来实验一下

   rpm -Uvv alsaplayer-0.99.76-2.2.fc4.i386.rpm

   这个软件包是我随便找的,不必在乎他是是么 -U表示安装,v表示显示信息
,vv就表示显示更详细的信息

   把显示内容当中对我们有用的挑出来

   D: opening   db environment /var/lib/rpm/Packages joinenv

   D: opening   db index    /var/lib/rpm/Packages rdonly mode=0x0

   D: locked db index    /var/lib/rpm/Packages

   D: opening   db index    /var/lib/rpm/Pubkeys rdonly mode=0x0

   warning: alsaplayer-0.99.76-2.2.fc4.i386.rpm: Header V3 DSA
signature: NOKEY, ke y ID e42d547b

   D: opening   db index    /var/lib/rpm/Providename rdonly mode=0x0

   以上应该是打开一个数据库,恩恩恩 就是RPM数据库

   D:    added binary package [0] 增加一个软件包

   D: found 0 source and 1 binary packages                没有源文件,
有一个2进制的软件包1

   D: opening   db index    /var/lib/rpm/Depends create mode=0x0

   D: opening   db index    /var/lib/rpm/Basenames rdonly mode=0x0

   D:   read h# 1166 Header sanity check: OK              读取h# ,
貌似是头文件 ,检查h#的需求

   D:   read h#     161 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: /bin/sh                                     YES (db files)

   D:   Requires: /bin/sh                                     YES (cached)

   D:   read h#    88 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libFLAC.so.7                               YES (db provides)

   D:   read h#    95 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libGL.so.1                                  YES (db provides)

   D:   Requires: libOggFLAC.so.3                            YES (db provides)

   D:   read h#    48 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libX11.so.6                                   YES (db provides)

   D:   read h#    49 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libXext.so.6                               YES (db provides)

   D:   read h#    54 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libXi.so.6                                  YES (db provides)

   D:   read h#     398 Header V3 DSA signature: OK, key ID 4f2a6fd2

   D:   Requires: libasound.so.2                                YES (db provides)

                                                         .

                                                         .

                                                         .

                                                         .

       看来h#的要求没有办法被满足,那么输出错误的依赖关系

   error: Failed dependencies:

       libid3tag.so.0 is needed by alsaplayer-0.99.76-2.2.fc4.i386

       libmad.so.0 is needed by alsaplayer-0.99.76-2.2.fc4.i386

       libsndfile.so.1 is needed by alsaplayer-0.99.76-2.2.fc4.i386

       libsndfile.so.1(libsndfile.so.1.0) is needed by alsaplayer-0.99.76-2.2.f c4.i386

       libxosd.so.2 is needed by alsaplayer-0.99.76-2.2.fc4.i386

   下面是关闭数据库

   D: closed db index    /var/lib/rpm/Pubkeys

   D: closed db index    /var/lib/rpm/Conflictname

   D: closed db index    /var/lib/rpm/Providename

   D: closed db index    /var/lib/rpm/Basenames

   D: closed db index    /var/lib/rpm/Packages

   D: closed db environment /var/lib/rpm/Packages

   D: May free Score board((nil))

   由此我可以粗略的知道RPM的工作方式:

   1,打开rpm数据库

   2,从.软件包中提取h#,并且检查h#的需要是否被满足?(这里的依赖关系,有的是软件
包自己给出的,有的是你系统自带,当然还可能有你没有的。)

         是:转第4步   不是:转第3步

   3,显示失败的依赖关系

   4,安装软件,解压缩软件包,并且放到合适的位置,这里应该是有一定的规则。

   5,关闭rpm数据库

   显然,我这个软件包不满足依赖关系,如果强制用-force安装的话可能出错误。

   如果你失败了,那就少什么补什么...这个么 ?具体的东西么 T^T 以后研究吧

G:使用RPM安装和管理软件包软件包

       介绍一下参数.

       -U 升级,也包括安装

       -F 刷新,就是全体升级,不包括安装

       -v 显示详细信息, -vv显示更加详细的信息

       -h 显示文件释放的进度

       --force 嘿嘿 强制安装,这里强制安装不是忽略依赖关系,而是强制安装老版本或者是旧
的软件包

       --nodeps 忽略依赖关系,这个不可靠的

       --ignorearch 这个连主机构架都可以忽略.真的有用么?

       -e 删除软件包

       -q 查询软件包

       -qa 列出所有已经安装的软件包

   -qf file 列出该文件属于那个软件包

   -qi 列出软件包的详细信息

   -qR 列出所有软件包的倚赖关系

   -ql 列出软件包的所有文件

   -qd 列出软件包所有的文档

   -qc列出软件包所有的配置文件

   -qd列出未安装软件包的信息

再附上:
软件编译make过程,软件包编译必备工具和软件包复杂后缀解释方法



关于make运作方式

   我们通常用make来安装软件,那么make都作了什么呢?进入一个源代码目录名为rar

   make > info.txt

   看看我们的make都干了些什么?

   cat info.txt

   mkdir -p /usr/local/bin    -p表示需要时创建上级目录,目录存在的时候不做错误处理。

   mkdir -p /usr/local/lib

   cp rar unrar /usr/local/bin

   cp rarfiles.lst /etc

   cp default.sfx /usr/local/lib

   再看看,rar文件夹中makfile文件中都有些什么?

   cat Makefile

       PREFIX=/usr/local                            这是shell变量.



       install:

       mkdir -p $(PREFIX)/bin

       mkdir -p $(PREFIX)/lib

       cp rar unrar $(PREFIX)/bin

       cp rarfiles.lst /etc

       cp default.sfx $(PREFIX)/lib  

   很像吧,没错,因为make是按照一定的规则去完成配置文件中的内容。这个配置文件默认的
名字是makefile,当然也可以变。这个配置文件对于我来说不需要会写,但是总要读的懂。

       了解下make命令的基本参数:偶不是编程的,捡有用的说。

      -c dir 这个是make工作的路径,默认是当然路径。

      -f filename 这个用指定的文件作为配置文件,默认是makefile。

      -d 打印debug信息

      在这个例子中我们可以知道make的工作方式,这对于从源代码运行程序是很有用的。



介绍一下可以用来搞定安装的全部工具。

   gcc-这个是编译器

   make-包含从makefiles产生二进制文件的make命令,当然还有其他的一些功能。

   glibc-重要的共享库,c库和基本的数学库。没有这个连系统都没有办法运行。

   glibc-devel-包含了创建可执行文件所需要的标准头文件。

   binutils-包含编译程序需要的使用工具,主要是汇编和链接程序。

   kernel-source-包含内核源代码

   libc-包含libc5,而上面我们提到的glibc是linc6

.

关于软件包。

   linux下你可以发现的软件包,会有不同的格式,这很讨厌,但是他可以让你知道,这些开源
项目是在什么环境开发和编译出来的,支持什么。

   搜集一下

   filename-4.2.3.i386.rpm       这个表示可以用rpm来安装,我们最喜欢的方式。

   filename-4.2.3.tar.gz    这个表示用gz压缩,用tar归档,至于是什么,那就不知道了

   filename-4.2.3.src.tar.gz       这个表示用gz压缩,用tar归档,内容是源代码  

   filename-4.2.3.bin.SPARC.tar.gz 这个是表示用gz压缩,用tar归档,可以在SPARC工作站
上运行,的2进制代码。

   filename-4.2.3.bin.ELF.static.tar.gz 这个表示用gz压缩,用tar归档,由静态连接的
FLF的可执行文件组成的2进制文件。

   4.2.3 表示第4版,第2个补丁,第3次修改。

   全面的说一下。

   rpm.有这个后缀表示是fedora使用的2进制文件,这个不是说里面的内容2进制的,而是说他可
以被fedora的软件管理器使用。可以用归档文件管理器把他打开。

   tar.这个是用tar归档,使用tar 命令打开

   gz.和z.这个是说用gzip压缩的,用gzip命令打开

   tgz.这个扩展名和以上的结合,容易搞定

   bz2.用bzip2压缩的,可以用bip2命令打开

   taz.和tz.这个表示用tar压缩,也用tar命令打开

   lsm.这个通常是介绍归档内容的文本,可以和软件包一起下载。

   deb.这个同rpm但是用于Debian

   如果你不能肯定格式的话,可以用file命令来确定.

   好了,现在你可以把源文件从任何软包中掏出来

 

分享到:
评论

相关推荐

    CentOS系统rpm打包简易教程

    **rpmbuild的使用详解:** `rpmbuild`提供了多个选项来处理不同的打包阶段。例如: - `-bp`:仅进行准备阶段,解压缩源码并应用补丁。 - `-bc`:完成准备并进行编译。 - `-bi`:编译并安装到`BUILDROOT`目录。 - `-...

    rhl rpm打包原理详解

    - 使用`rpmbuild`命令,如`rpmbuild -ba SPECFILE`,这会按照SPEC文件指示进行编译、打包。 - 打包完成后,RPM文件会在`~/rpmbuild/RPMS/`目录下生成。 5. **%prep、%build、%install、%clean阶段**: - `%prep`...

    Ubuntu/Debian 自有软件包构建私有源详解

     linux在自建私有yum源方面,我们熟知redhat系列的createrepo命令,配合rpmbuild命令,使我们创建私有yum真是相当简单了,如果切换到debian系列下面呢?前面的文件讲解了怎么制作debian系列的deb包,但是没有讲怎么...

    rpm安装包的制作1

    - `%build`:编译阶段,执行`make`命令。 - `%install`:安装阶段,将编译好的软件安装到虚拟根目录`$RPM_BUILD_ROOT`。 - `%clean`:清理阶段,删除临时文件。 - `%files`:定义RPM包包含的文件和目录。 - `%...

    ubuntu终端命令大全

    ### Ubuntu终端命令大全详解 #### 一、目录操作命令 **1. 创建目录:`mkdir`** - **命令格式**:`mkdir [选项]... 目录...` - **功能**:创建一个或多个目录。 - **常用选项**: - `-p`:即使上层目录不存在也...

    Linux 中常用的Rpm命令实例详解

    1. **手动编译安装**:利用`rpmbuild`命令生成二进制RPM包后,再安装。 2. **直接编译安装**:在解压后的源码目录中执行常规的`./configure`, `make`, `make install`步骤。 **如何卸载RPM软件包** 基本命令如下: ...

    RPM打包全过程SPEC详解

    - **构建**: 使用`rpmbuild`命令进行打包,依次执行 `%prep`、`%build`、`%install`阶段。 - **签名与打包**: 打包完成后,可选择对RPM包进行签名,增加其可信度。 - **测试与安装**: 测试RPM包是否能正确安装、运行...

    rpm安装详解

    RPM 软件包安装详解 rpm 软件包是 Linux 操作系统中的一种软件包格式,用于安装和管理软件。下面详细介绍了 rpm 软件包的安装、卸载、查看和获取文件等操作。 一、安装 rpm 软件包 安装 rpm 软件包可以使用 rpm ...

    Linux常见的终端命令

    ### Linux常见的终端命令详解 #### 文件目录类 在Linux系统中,熟练掌握文件与目录的操作命令至关重要,这有助于用户高效地管理文件系统。 ##### 1. 建立目录:`mkdir` - **命令格式**:`mkdir [选项] 目录名` -...

    ubuntu终端命令使用

    ### Ubuntu终端命令使用详解 #### 文件目录类命令 在Linux Ubuntu环境下,掌握一系列的文件目录类命令对于高效地管理文件和目录至关重要。 1. **建立目录:** `mkdir` 命令用于创建新的目录。例如,`mkdir 目录名...

    包管理.pdf

    使用rpmbuild命令生成最终的RPM包。 **5. GPG签名** 为了确保RPM包的完整性和安全性,可以使用GPG进行签名。 - `gpg --gen-key`:生成一个新的GPG密钥对。 - `gpg --list-keys`:列出所有的GPG密钥。 - `gpg --...

    Linux内核编译全过程详解

    ### Linux内核编译全过程详解 #### 一、前言 在深入了解Linux内核编译的过程中,我们将聚焦于kernel 2.6.7版本,并详细阐述整个编译流程中的关键步骤与注意事项。对于想要深入了解Linux内核工作原理及定制化需求的...

    软件包管理

    ##### rpm命令详解 RPM(Red Hat Package Manager)是一套用于管理Linux软件包的工具集,最初由Red Hat公司开发,并广泛应用于各种Linux发行版中。RPM命令集提供了丰富的功能,包括安装、升级、查询和卸载软件包等...

    SMplayer安装过程

    2. **构建RPM包**:执行`rpmbuild -tb smplayer-0.8.0.tar.bz2`命令,系统将在`/root/rpmbuild/RPMS/i686/`目录下创建RPM软件安装包。 3. **安装RPM包**:使用命令`cd /root/rpmbuild/RPMS/i686/`进入i686目录,再...

    hello world rpm包制作的例子

    - 使用`rpmbuild`命令进行构建:`rpmbuild -bb SPECS/hellow-0.1-1.spec`。 - 构建完成后,RPM包会在`RPMS`目录下生成。 5. **`readme.txt`文件** 这通常是包含软件的使用说明、许可证信息或其他附加文档的文本...

    openssh8.7_x11_source.tgz

    5. 制作RPM包:使用`rpmbuild`命令创建RPM包。首先创建一个.spec文件,定义软件信息、构建指令和依赖关系,然后运行`rpmbuild -bb specfile`。 6. 检查与安装:使用`rpm -qvp`检查RPM包的元数据,确认无误后,使用`...

    openssl-1.0.2l_el6-x86_64.zip

    《OpenSSL 1.0.2l for CentOS EL6 x86_64:源码编译与RPM包详解》 在IT行业中,安全通信是至关重要的,而这离不开加密库的支持。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现工具包,它为...

    详解Linux(centos7)下安装OpenSSL安装图文方法

    - 使用 `./config` 命令设置安装路径,例如安装至 `/usr/local/openssl`。 ```bash ./config --prefix=/usr/local/openssl ``` ##### 4. 编译 OpenSSL - 使用 `make` 命令编译 OpenSSL。 ```bash make ``` - ...

    rpmrebuild工具

    3. **重新打包**:完成修改后,RPMrebuild会使用`rpmbuild`命令重新构建RPM包,根据用户的改动生成新的.spec文件(描述软件包的构建指令)。 **三、使用步骤** 1. **安装RPMrebuild**:在大多数Linux发行版中,...

Global site tag (gtag.js) - Google Analytics