2012-02-14 37 views
7

我有一個怪異的RPM問題,我是新來的,所以忍受着我......我創建了spec文件,當我運行以執行構建我收到錯誤:從/var/tmp/rpm-tmp.ajKra4退出狀態不佳(%準備)

/var/tmp/rpm-tmp.ajKra4:第36行:cd:hero-01:沒有這樣的文件或目錄 錯誤:從/ var/tmp出現錯誤退出狀態/rpm-tmp.ajKra4(%prep)

然後我檢查臨時文件,它試圖將CD放到一個不存在的目錄中。是否應該在spec文件中創建它?如果是這樣的話?

這裏是我的規格文件:

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 

回答

6

退房http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html,特別是「-n - 構建目錄的設置名稱」一節。

%setup宏希望在解壓tar.gz之後,會有一個hero-01目錄可用,但是您的hero-01.tar.gz可能會創建一些其他目錄名稱,可能是一個不包含版本的目錄名稱在名字裏。例如,如果在untarring之後/ root/rpmbuild/BUILD中有'hero'目錄而不是'hero-01'目錄,則更新spec文件以使用'%setup -n hero'而不只是'%設置'。

+1

太棒了,謝謝你pwan ..這通過添加前綴(文件目錄)來修復它。非常感謝 – DoCnTex 2012-02-15 16:42:54

+0

對不起,我不能完全理解我能做些什麼來解決它? – Markipe 2014-08-02 03:41:24

+0

帶上你的hero-01.tar.gz文件,並用一個像'tar -zxvf hero-01.tar.gz'這樣的命令將它解壓到臨時目錄中。它會創建一個包含所有文件的新目錄。 使用該目錄名稱作爲%setup宏的'-n'標誌的參數。 – pwan 2014-08-02 18:39:38

1

在你的rpmbuild文件夾,去SOURCES和重命名你的源文件夾是這樣的:

mypackage-1.0 

然後創建壓縮包:

mypackage-1.0.tar.gz 

,它應該工作。

發生什麼事是,在解壓歸檔文件之後,rpmbuild需要一個名爲mypackage-1.0的文件夾,而不是mypackage或mypackage-別的東西。

尊重命名約定。檢查指南