Неверный статус выхода из /var/tmp/rpm-tmp.ajKra4 (% prep) - PullRequest
9 голосов
/ 15 февраля 2012

У меня странная проблема с RPM, я новичок в этом, так что потерпите меня ... У меня создан файл спецификации, и когда я запускаю сборку, я получаю сообщение об ошибке:

/ var / tmp / rpm-tmp.ajKra4: строка 36: cd: hero-01: такого файла или каталога нет ошибка: Неверный статус выхода из /var/tmp/rpm-tmp.ajKra4 (% prep)

Затем я проверяю этот временный файл, и он пытается создать компакт-диск в каталог, который не существует. Должен ли он создавать его в файле спецификации? если да где?

Вот мой файл спецификаций:

    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

Ответы [ 3 ]

8 голосов
/ 15 февраля 2012

Извлеките http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html,, в частности, раздел "-n - Задать имя каталога сборки".

Макрос% setup ожидает, что после распаковки tar.gz появится герой-01 каталог доступен, но ваш hero-01.tar.gz, вероятно, создает другое имя каталога, возможно, без имени, включенного в имя версии.

Так, например, если вместо этого есть каталог 'hero'директории 'hero-01' в / root / rpmbuild / BUILD после распаковки, затем обновите файл спецификации, чтобы использовать "% setup -n hero" вместо просто "% setup".

2 голосов
/ 13 февраля 2014

В папке rpmbuild перейдите на SOURCES и переименуйте исходную папку следующим образом:

mypackage-1.0

затем создайте тарбол:

mypackage-1.0.tar.gz

И это должно работать.

В результате после распаковки архива rpmbuild ожидает папку с именем mypackage-1.0, а не mypackage или mypackage-что-то еще.

Соблюдайте правила именования. Проверьте руководящие принципы

1 голос
/ 19 октября 2018

Также следует отметить, что некоторые tar-архивы не будут создавать себя в качестве родительского каталога для путей установки.То есть, у моего 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 -n на setup -c, чтобы создать и переместить в этот каталог перед тем, как распечатать (вам может потребоваться сочетание клавиш ctrl + f для «создать каталог (и изменить его)»)

TL; DR: setup -n -> setup -c может помочь

...