【问题标题】:Bad exit status from /var/tmp/rpm-tmp.ajKra4 (%prep)/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 错误:来自 /var/tmp/rpm-tmp.ajKra4 (%prep) 的错误退出状态

然后我检查那个临时文件,它正试图 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

【问题讨论】:

    标签: centos rpm rpmbuild specifications


    【解决方案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 的文件夹。

      尊重命名约定。检查指南

      【讨论】:

        猜你喜欢
        • 2017-11-04
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多