【问题标题】:rpmbuild %install section removes buildroot code. How do I keep rpmbuild from doing thisrpmbuild %install 部分删除 buildroot 代码。我如何防止 rpmbuild 这样做
【发布时间】:2020-03-24 03:07:08
【问题描述】:

我正在为 Rails 应用程序创建一个新的 rpm。但是 %install 部分的默认行为会删除 BUILDROOT 目录。我假设 %install 部分将从 buildroot 安装文件。我一定是做错了什么,因为 buildroot 在 %install 部分被删除了。这样做的正确方法是什么?

这是规范文件

Summary: Rails APP API (replaces railsapp rpm)
Name: railsapp-api
Version: 6.0.0
Release: 1
License: GPL
URL: http://www.both.org
Group: System
Packager: Tommie Jones
Requires: bash
BuildRoot: ~/rpmbuild/
%description

A rewrite of railsapp from the HTML version to a Http API version

%prep
        echo "BUILDROOT = $RPM_BUILD_ROOT"
        rm -rf $RPM_BUILD_ROOT
        mkdir -p $RPM_BUILD_ROOT/usr/local/veex/railsapp
        unzip /home/realworx/rpmbuild/SOURCES/rwx-master.zip -d $RPM_BUILD_ROOT/usr/local/veex/
        pushd $RPM_BUILD_ROOT/usr/local/veex/
        rm -rf railsapp
        mv rwx-master railsapp
        pushd $RPM_BUILD_ROOT/usr/local/veex/railsapp
        rm Gemfile.lock
        bundle install
        PWD=`pwd`
        cat > gemrc <<EOGEMRC
gemhome: $PWD/vendor/bundle/ruby/1.8
gempath:
- $PWD/vendor/bundle/ruby/1.8
EOGEMRC
        gem --config-file ./gemrc install bundler
        # Don't need the gemrc any more...
        rm ./gemrc


%files
%attr(0744, root, root) /usr/local/veex/railsapp/*
%install
echo %{buildroot}
echo "HELLO"

%clean
echo NOOP

以下是 %install 删除 buildroot 的日志。

 (%install): /bin/sh -e /var/tmp/rpm-tmp.aX3U0b
    + umask 022
    + cd /home/railsapp-api/rpmbuild/BUILD
    + '[' /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch '!=' / ']'
    + rm -rf /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
    ++ dirname /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
    + mkdir -p /home/railsapp-api/rpmbuild/BUILDROOT
    + mkdir /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
    + echo /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
    /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
    + echo HELLO
    HELLO
    + /usr/lib/rpm/check-buildroot
    + /usr/lib/rpm/redhat/brp-ldconfig
    /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory
    + /usr/lib/rpm/brp-compress
    + /usr/lib/rpm/brp-strip /usr/bin/strip
    + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
    + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
    + /usr/lib/rpm/brp-python-bytecompile 1
    + /usr/lib/rpm/brp-python-hardlink
    + PYTHON3=/usr/libexec/platform-python
    + /usr/lib/rpm/redhat/brp-mangle-shebangs
    Processing files: railsapp-api-6.0.0-1.noarch
    error: File not found: /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch/usr/local/veex/railsapp/*

如何防止 %install 删除我的 buildroot?

【问题讨论】:

  • 其他说明:%prep 中的 %setup 宏可能会处理解压缩。如果你的 RPM 应该替换另一个,你也应该有一个 Obsoletes 声明,可能还有一个 Provides

标签: rpmbuild


【解决方案1】:

您误用了%prep 部分。简而言之,您应该如何使用这些部分:

  • %prep:提取源代码、应用补丁等。
  • %build:编译或构建您的应用程序(如果需要)
  • %install:将文件复制到$RPM_BUILD_ROOT

因此,$RPM_BUILD_ROOT%isntall 部分的开头被清空是合乎逻辑的。

更改您的代码以在%prep 中提取您的压缩文件,并使用%install 部分将文件放入$RPM_BUILD_ROOT

【讨论】:

  • 旧版本的 RPM 没有强制执行这一点,因此 OP 可能找到了旧指南并使用了它。
  • 我实际上有一个 4.14.2.1 版本的 RPM 不会删除构建根目录,还有一个 4.11.3 版本会删除它。不同的是4.14.2.1版本是来自Ubuntu,4.11.3是一些CentOS。去图...
猜你喜欢
  • 2017-11-14
  • 2018-05-30
  • 2014-11-27
  • 2011-11-16
  • 2023-03-06
  • 2014-08-12
  • 1970-01-01
  • 2023-03-08
  • 2012-11-29
相关资源
最近更新 更多