10

私は奇妙なRPMの問題を抱えています、私はそれに慣れていないので私に耐えてください...私はスペックファイルを作成しました、そして私がビルドをするために走るとき私はエラーを受け取ります:

/var/tmp/rpm-tmp.ajKra4:行36:cd:hero-01:そのようなファイルまたはディレクトリエラーはありません:/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
4

3 に答える 3

8

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-01」ディレクトリの代わりに「hero」ディレクトリがある場合は、スペックファイルを更新して「」の代わりに「%setup-nhero」を使用します。 %設定'。

于 2012-02-15T13:45:22.070 に答える
3

また、一部の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

これは、これらのパッケージをインストールしたい場所だからです

これを機能させるには、に変更setup -nsetup -cて、解凍する前にそのディレクトリを作成して移動することができます(「ディレクトリの作成(およびディレクトリへの変更)」の場合は、ctrl + fを使用する必要があります)。

TL; DR:setup -n->setup -c役立つかもしれません

于 2018-10-18T21:41:21.423 に答える
2

rpmbuildフォルダーで、次のようにSOURCESソースフォルダーに移動して名前を変更します。

mypackage-1.0

次に、tarballを作成します。

mypackage-1.0.tar.gz

そしてそれはうまくいくはずです。

アーカイブを解凍した後、rpmbuildはmypackageまたはmypackageではなくmypackage-1.0という名前のフォルダーを予期します。

命名規則を尊重します。ガイドラインを確認する

于 2014-02-13T16:53:37.897 に答える