zoukankan      html  css  js  c++  java
  • 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命令来确定.

       好了,现在你可以把源文件从任何软包中掏出来
  • 相关阅读:
    Creating a generic Web Parts for hosting ASP.NET User Controls
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 1)
    How to use CreateChildContorls method inherited from System.Web.UI.Control
    How to quickly access Web Part Management Page
    SQL Script tips for MS SQL Server
    How to enable single signon service on the SPS
    A brief summary of UML & Rational Rose – Use Case Diagram, Part II
    Borland Together for Visual Studio.Net V2.0 安装问题
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 2)
    体验ReSharper V1.0 for VS.Net 2003 Part I
  • 原文地址:https://www.cnblogs.com/cnland/p/2871762.html
Copyright © 2011-2022 走看看