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命令来确定.

       好了,现在你可以把源文件从任何软包中掏出来
  • 相关阅读:
    Mybatis入门之常规操作CURD案例Demo(附源码)
    如何捕获Wince下form程序的全局异常
    如何捕获winform程序全局异常?(续)
    log4net学习目录
    如何捕获winform程序全局异常?
    有关学习的思考
    使用VS2012主题插件创建自己的主题
    Vistual Studio 2012更换皮肤
    log4net使用经验总结
    log4net使用流程
  • 原文地址:https://www.cnblogs.com/cnland/p/2871762.html
Copyright © 2011-2022 走看看