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命令来确定.
好了,现在你可以把源文件从任何软包中掏出来
|
分享到:
相关推荐
RPM包rpmbuild SPEC文件深度说明 学习如何写spec脚本制作rpm包
一个rpm build打包的示例工程,下载完成后可以解压成/home/wang/rpmbuild目录,然后到SPEC目录中执行rpmbuild -ba dteworker-client.spec 即可完成打包
把源码包编译成rpm包不可缺少的一手资料。
ARM架构和X86_64架构rpmbuild制作openssh和openssl的rpm包
rpmbuild-hello-1.0.tar.gz
提供的打包文件已经包含了模型文件、配置文件、依赖的第三方库,除了需要替换可执行程序
说的非常的详细,怎么使用rpm编译一个rpm包。适合初学者的学习!!
arch-rpmbuild Dockerfile 在 Arch Linux 下使用 rpmbuild
利用rpmbuild制作rpm包1 安装制作rpm包需要的软件yum install rpmbuild yum install rpmdevtools2 开始制
包含spec文件语法比较全面的解释和说明,个人看完帮助很大
rpmbuild 这是一个包裹rpmbuild cli的节点程序包,从而使rpmbuild集成到节点中更加容易。用法1.全局安装rpmbuild: npm install -g rpmbuild2.在项目依赖项中安装rpmbuild: npm install --save rpmbuildrpmbuild ...
文件结构 *.patch 从原始源码版本升级至当前源码版本所需要的所有补丁(patch) helloworld.tar.gz 原始源码包 ...将helloworld.tat.gz和所有patch文件放到/root/rpmbuild/SOURCES目录下 将
Centos 8 RPM构建环境...用法如果您只想建立一个规范,请执行以下操作: sudo docker run \ --name rpmbuild-centos8 \ -v /path/to/your/rpmbuild:/home/rpmbuilder/rpmbuild \ --rm=true \ jc21/rpmbuild-centos8 \
在BigCloud Enterprise Linux For Euler release 21.10 (LTS-SP2)可直接食用 rpm -Uvh openssh-9.1p1-3.oe1.bclinux.x86_64.rpm openssh-clients-9.1p1-3.oe1.bclinux.x86_64.rpm openssh-server-9.1p1-3.oe1....
如果大家练习centos +qt rpm打包时,没有感觉,可以先使用这个demo执行一下,开启rpm 打包之旅
基于fastdfs实现文件上传、下载,删除,可以配置多个tracker和storage
docker-rpmbuild 最小的docker rpmbuilder映像。 基于centos,仅包括rpmdevtools和yum-utils以及几个用于自动构建RPM软件包的脚本。 这些脚本负责安装构建依赖项(使用yum-builddep),构建软件包(使用rpmbuild)并...
ImageMagick-7-0.ky10.aarch64 和 apache-ant-1.10.5-0.ky10.aarch64 。在ARM架构专业机中需要的rpm打包文件。