商务合作:179001057@qq.com

rpmbuild命令详解

xiaoxiao2022-06-23  4


某平台价值19860元的编程课程资料免费领取【点我领取】


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命令来确定.    好了,现在你可以把源文件从任何软包中掏出来

 

相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf

最新回复(0)