xiaopei 发表于 2006-1-6 15:41:50

制作rpm包,报错getOutputFrom()断开的管道

我的spec文件

Summary: ca
Name: ca4.2
Version: 4.2
Release: 2
Vendor: pzy
Copyright: commercial
Group: Applications/Engineering
Source: jakarta-tomcat-4.1.29.tar.gz
%description
caversion4.2
%prep:
#prep start
%build
#build start.
%install
#install start.
%files
%defattr (-,root,root)

/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/conf
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/common
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/work
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/temp
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/shared
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/logs
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/README.txt
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/RELEASE-NOTES-4.1.txt
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/RELEASE-PLAN-4.1.txt
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/LICENSE
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/RUNNING.txt
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/manager.xml
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/admin.xml
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/WEB-INF
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/index.jsp
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/jakarta-banner.gif


#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/tomcat.gif
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/tomcat-power.gif
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT/
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps/ROOT
#/usr/src/redhat/BUILD/jakarta-tomcat-4.1.29/webapps
#%doc jakarta-tomcat-4.1.29/README.txt
#%doc /usr/src/redhat/SOURCES/asdf.xml
#/usr
%changelog
* Fri May 1 2005 peizhiyou
-ASDF





# rpmbuild -bb SPECS/ca4.2.spec

执行的信息如下:


Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.32880
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ :
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.32880
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.32880
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
Processing files: ca4.2-4.2-2
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
getOutputFrom(): 断开的管道


上面的命令有时候成功,但多数情况失败,成功机率极小
我在网上搜了一些信息,有的说是rpm工具包的bug,有的说在spec文件头增加一个什么buildroot之类的变量,有的说redhat8下面可以,redhat9下的不行,总之是没个结果,各位linux 高手集中解决一下这个问题吧,几年前就有人遇到这个文体,老问题了,看来都有几年的历史了,该给个准确答复了.
我等等等等信

xLoneStar 发表于 2006-1-8 01:57:45

你包了一个空的包?

我从来没有遇到过这种情形。是不是因为 Copyright 那行写得不好阿:mrgreen:

yangh 发表于 2006-1-9 11:29:34

BuildRoot:      %{_builddir}/%{name}-%{version}-root

add this line.:) gold bless you. :mrgreen:

再见情人 发表于 2006-1-9 12:05:47

:twisted: ,按yangh兄的试一试看吧,如果解决不了,换台机器试试,
一般我碰到重新一次就好了,有人说是硬件的问题

xiaopei 发表于 2006-1-10 18:18:57

成功了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    谢谢谢

苦寻良策日日悠,
听君一语解千愁,
新年把盏同乐乐,
祝君开源立潮头.

谢过楼上众兄指点


修改后的spec文件
其中/usr/src/redhat/BUILD路径下有
jakarta-tomcat-4.1.29
j2sdk1.4.2_02
两个文件夹




#BuildRoot:%{_builddir}/%{name}-%{version}-root
BuildRoot:%{_builddir}
Summary: ca
Name: ca4.2
Version: 4.2
Release: 2
Vendor: wxh sjp gwj cgh wxy dff pzy
Copyright: commercial
Group: Applications/Engineering
Source: jakarta-tomcat-4.1.29.tar.gz
%description
caversion4.2
%prep:
%build
%install
%files
%defattr (-,root,root)
                                                                                                                                             
/jakarta-tomcat-4.1.29
/j2sdk1.4.2_02
                                                                                                                                             
                                                                                                                                             
%changelog
* Fri May 1 2005 peizhiyou
-ASDF



执行结果将上述两个文件夹下的文件都打到了ca4.2-4.2-2.i386.rpm包里了,而且多次执行军成功

xiaopei 发表于 2006-1-10 18:25:22

再问,
rpm打包后能否在安装时将rpm文件里的文件分别释放安装到指定的不同的路径下面去

比如
我要执行ca4.2-4.2-2.i386.rpm包的安装

rpm -ivh ca4.2-4.2-2.i386.rpm

默认情况它好像是将jakarta-tomcat-4.1.29和j2sdk1.4.2_02文件均释放安装到/usr/src/redhat/BUILD目录下

现在我要他们分别安装到不同的目录下该怎样实现呢,
望指点



ca4.2-4.2-2.i386.rpm

xLoneStar 发表于 2006-1-10 19:27:24

打包前就先放到不同目录下,再包起来。解开后自然就在不同地方了

yangh 发表于 2006-1-11 09:24:19

楼主,你的 spec 问题太多了。

给你一个参照的:
http://svn.gnome-cn.org/repos/gnomerpms/branches/gnome-2-12/specs/gnome-common/gnome-common.spec

The newest RPM guide writed by Eric Foster-Johnson 2005.
http://fedora.redhat.com/docs/drafts/rpm-guide-en/

一个程序怎么可能备安装到 /usr/src/redhat/BUILD 下呢?

jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02 你应该分别做成 2 个包阿。

xiaopei 发表于 2006-1-11 11:06:10

打包前就先放到不同目录下,再包起来。解开后自然就在不同地方了


"打包前就先放到不同目录下,再包起来 "
请问将文件放到不同目录下后,如何再包起来,在哪里做这个操作,spec文件里吗,该怎么写呢?

xiaopei 发表于 2006-1-11 11:34:42

楼主,你的 spec 问题太多了。

给你一个参照的:
http://svn.gnome-cn.org/repos/gnomerpms/branches/gnome-2-12/specs/gnome-common/gnome-common.spec

The newest RPM guide writed by Eric Foster-Johnson 2005.
http://fedora.redhat.com/docs/drafts/rpm-guide-en/

一个程序怎么可能备安装到 /usr/src/redhat/BUILD 下呢?

jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02 你应该分别做成 2 个包阿。

问题的确很多,这是我要做的第一个rpm包,很多东西还很不理解,还请高人多指点
执行rpm后会安装到 /usr/src/redhat/BUILD 是我写错了,那它被安装到哪里去了呢
它只是说包已经安装了,安到哪里了?

# rpm -ivh ca4.2-4.2-2.i386.rpm
Preparing...                ###########################################
      package ca4.2-4.2-2 is already installed

xiaopei 发表于 2006-1-11 11:39:55


jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02 你应该分别做成 2 个包阿。

我之所以放了jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02两个已经解开的文件,是希望rpm在安装的时候能直接生成文件夹形式,我不清楚在执行rpm安装命令的时候,他能否把*.tar.gz压缩包自动解压缩,

请问RPM包执行安装时能将*.tar.gz自动解压吗

yangh 发表于 2006-1-11 16:35:00


jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02 你应该分别做成 2 个包阿。

我之所以放了jakarta-tomcat-4.1.29 和 j2sdk1.4.2_02两个已经解开的文件,是希望rpm在安装的时候能直接生成文件夹形式,我不清楚在执行rpm安装命令的时候,他能否把*.tar.gz压缩包自动解压缩,

请问RPM包执行安装时能将*.tar.gz自动解压吗
不能。

可以简单的认为制作 RPM 的过程就是 执行一次 make install, 但是呢,是安装到 build-root 下,然后把这些安之好的文件大包,在 rpm -i xx.rpm 时把包解开并放到 / 下。make install 前后, rpm -i 前后都可能需要准备工作,分别对应于 spec 中的各个 section.

还是得看看文档先,本来看文档就可以明白的,不需要花几倍的时间去摸索。

xLoneStar 发表于 2006-1-13 00:36:48

楼主并非想用 rpm 来做通常的编译和安装,他想包的是个 binary 包。就是纯打包,而没有编译过程。

把要包入的文件放到 buildroot 下面,在 files 段中写上他们相对于 buildroot 的相对路径。包完安装时,他们就会被装到相对于 / 的同名相对路径中。

xiaopei 发表于 2006-1-13 09:35:09

楼主并非想用 rpm 来做通常的编译和安装,他想包的是个 binary 包。就是纯打包,而没有编译过程。

把要包入的文件放到 buildroot 下面,在 files 段中写上他们相对于 buildroot 的相对路径。包完安装时,他们就会被装到相对于 / 的同名相对路径中。


版主说的就是我的想法,一点没错,
我的BuildRoot:%{_builddir} 实际指向的是/usr/src/redhat/BUILD路径,如果如版主上面所说,是否意味着我自己制作的rpm包在安装后,文件也会放到/usr/src/redhat/BUILD路径下?
页: [1]
查看完整版本: 制作rpm包,报错getOutputFrom()断开的管道