/var/tmp/rpm-tmp.ajKra4 (%prep) 的错误退出状态
Posted
技术标签:
【中文标题】/var/tmp/rpm-tmp.ajKra4 (%prep) 的错误退出状态【英文标题】:Bad exit status from /var/tmp/rpm-tmp.ajKra4 (%prep) 【发布时间】:2012-03-06 04:54:06 【问题描述】:我遇到了一个奇怪的 RPM 问题,我是新手,所以请耐心等待...我已创建规范文件,但当我运行构建时出现错误:
/var/tmp/rpm-tmp.ajKra4: line 36: cd: hero-01: No such file or directory 错误:来自
然后我检查那个临时文件,它正试图 CD 到一个不存在的目录。它应该在规范文件中创建它吗?如果有的话在哪里?
这是我的规范文件:
Summary: Install Hero
Name: hero
Version: 01
Release: 1
Group: Billing reporting
Source: %name-%version.tar.gz
License: SLA
%description
Hero billing reports system
%prep
rm -rf %_topdir/BUILD/*
%setup
%install
mkdir -p /opt/%name
cp -r * /opt/%name
%post
find /opt/%name -type d -exec chmod 755 \;
find /opt/%name -type f -exec chmod 644 \;
chmod -R 755 /opt/%name/bin
%files
/opt/%name
%defattr(-,root,root,0755)
%clean
rm -rf $RPM_BUILD_ROOT
%postun
rm -rf /opt/%name
也许我错过了什么?不会是第一个大声笑,谢谢
这也是 tmp 文件输出的内容:
#!/bin/sh
RPM_SOURCE_DIR="/root/rpmbuild/SOURCES"
RPM_BUILD_DIR="/root/rpmbuild/BUILD"
RPM_OPT_FLAGS="-O2 -g"
RPM_ARCH="x86_64"
RPM_OS="linux"
export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS
RPM_DOC_DIR="/usr/share/doc"
export RPM_DOC_DIR
RPM_PACKAGE_NAME="hero"
RPM_PACKAGE_VERSION="01"
RPM_PACKAGE_RELEASE="1"
export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE
LANG=C
export LANG
unset CDPATH DISPLAY ||:
RPM_BUILD_ROOT="/root/rpmbuild/BUILDROOT/hero-01-1.x86_64"
export RPM_BUILD_ROOT
PKG_CONFIG_PATH="/usr/lib64/pkgconfig:/usr/share/pkgconfig"
export PKG_CONFIG_PATH
set -x
umask 022
cd "/root/rpmbuild/BUILD"
rm -rf /root/rpmbuild/BUILD/*
cd '/root/rpmbuild/BUILD'
rm -rf 'hero-01'
/usr/bin/gzip -dc '/root/rpmbuild/SOURCES/hero-01.tar.gz' | /bin/tar -xvvf -
STATUS=$?
if [ $STATUS -ne 0 ]; then
exit $STATUS
fi
cd 'hero-01'
/bin/chmod -Rf a+rX,u+w,g-w,o-w .
exit 0
【问题讨论】:
【参考方案1】:查看http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html,特别是“-n — 设置构建目录的名称”部分。
%setup 宏期望在解压 tar.gz 之后,会有一个 hero-01 目录可用,但是您的 hero-01.tar.gz 可能会创建一些其他目录名称,可能没有包含在名字。
因此,例如,如果解压缩后 /root/rpmbuild/BUILD 中有一个 'hero' 目录而不是 'hero-01' 目录,则更新规范文件以使用 '%setup -n hero'只是“%setup”。
【讨论】:
太棒了,谢谢 pwan.. 这通过添加前缀(文件目录)来修复它。非常感谢它 对不起,我不能完全理解我可以做些什么来解决它? 将你的 hero-01.tar.gz 文件解压到某个临时目录中,使用类似“tar -zxvf hero-01.tar.gz”的命令。它将创建一个包含所有文件的新目录。使用该目录名称作为 %setup 宏的“-n”标志的参数。【参考方案2】:另外值得注意的是,一些 tarball 不会将自己创建为安装路径的父目录。即,我的 tarball 有树:
usr
├── bin
│ ├── check_for_incorrect_quotes
│ └── check_for_incorrect_quotes.py
└── lib
└── python2.6
└── site-packages
├── incorrectquotes
│ ├── check_for_incorrect_quotes.py
│ ├── check_for_incorrect_quotes.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ └── test
│ ├── __init__.py
│ └── __init__.pyc
└── IncorrectQuotes-0.2.0-py2.6.egg-info
├── dependency_links.txt
├── entry_points.txt
├── PKG-INFO
├── requires.txt
├── SOURCES.txt
└── top_level.txt
Because this is where it wants to install these packages
要完成这项工作,you can just change setup -n
to setup -c
to create and move to that directory before untarring(您需要 ctrl+f 来表示“创建目录(并更改为它)”)
TL;DR: setup -n
-> setup -c
可能会有所帮助
【讨论】:
【参考方案3】:在您的 rpmbuild 文件夹中,转到 SOURCES
并以这种方式重命名您的源文件夹:
mypackage-1.0
然后创建压缩包:
mypackage-1.0.tar.gz
它应该可以工作。
在解压存档后,rpmbuild 需要一个名为 mypackage-1.0 而不是 mypackage 或 mypackage-something 的文件夹。
尊重命名约定。检查指南
【讨论】:
以上是关于/var/tmp/rpm-tmp.ajKra4 (%prep) 的错误退出状态的主要内容,如果未能解决你的问题,请参考以下文章