%install 的默认行为是什么?

%install 的默认行为是什么?

-bb我正在尝试使用标志 (%prep %build %install %check package)构建 RPM 。这是 %install 步骤的输出:

Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.2kgeNY
+ umask 022
+ cd /<redacted>/BUILD
+ '[' /<redacted>/BUILDROOT/<redacted>.i386 '!=' / ']'
+ rm -rf /<redacted>/BUILDROOT/<redacted>.i386
++ dirname /<redacted>/BUILDROOT/<redacted>.i386
+ mkdir -p /<redacted>/BUILDROOT
+ mkdir /<redacted>/BUILDROOT/<redacted>.i386
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars

以下是该 tmp 文件的内容:

  RPM_SOURCE_DIR="/<redacted>/SOURCES"
  RPM_BUILD_DIR="/<redacted>/BUILD"
  RPM_OPT_FLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m32 -march=x86-64 -mtune=generic -mfpmath=sse -fasynchronous-unwind-tables"
  RPM_LD_FLAGS="-Wl,-z,relro "
  RPM_ARCH="i386"
  RPM_OS="linux"
  export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_LD_FLAGS RPM_ARCH RPM_OS
  RPM_DOC_DIR="/usr/share/doc"
  export RPM_DOC_DIR
  RPM_PACKAGE_NAME="<redacted>"
  RPM_PACKAGE_VERSION="<redacted>"
  RPM_PACKAGE_RELEASE="<redacted>"
  export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE
  LANG=C
  export LANG
  unset CDPATH DISPLAY ||:
  RPM_BUILD_ROOT="/<redacted>/BUILDROOT/<redacted>.i386"
  export RPM_BUILD_ROOT

  PKG_CONFIG_PATH="%{_PKG_CONFIG_PATH}:/usr/lib/pkgconfig:/usr/share/pkgconfig"
  export PKG_CONFIG_PATH
  set -x
  umask 022
  cd "/<redacted>/BUILD"
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"
    mkdir -p `dirname "$RPM_BUILD_ROOT"`
    mkdir "$RPM_BUILD_ROOT"




    /usr/lib/rpm/check-buildroot

    /usr/lib/rpm/redhat/brp-compress

    /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
    /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump

    /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
    /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
    /usr/lib/rpm/redhat/brp-python-hardlink
    /usr/lib/rpm/redhat/brp-java-repack-jars

我没有覆盖规范文件中的 %install 行为。我的规格文件如下所示:

<stuff>
%prep
%build
%install
%files
<more stuff>

文档中是否定义了默认的 %install 行为rpm-builder?我怎么知道它将执行什么?

答案1

RPM 规范文件中的阶段%install应该创建一个文件系统层次结构,当您安装生成的 rpm 时,该文件系统层次结构将解压缩到系统中。整个层次结构将通过本节中的命令在%{buildroot}(AKA )目录中创建。它的内容被逐字插入(在 RPM 宏扩展时)到由 shell 解释的脚本中 - 即以下行:$RPM_BUILD_ROOT%install

Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.2kgeNY

现在,如果您将 %install 阶段留空,则脚本的内容不会 - 因为它会初始化打包程序在安装过程中很可能想要使用的各种内容($RPM_BUILD_ROOT是重要的内容之一)。

初始化的具体作用取决于发行版 - 检查 rpm 包 ( ) 的内容rpm -ql rpm,类似文件/usr/lib/rpm/macros(可能位于系统上的其他位置)是包含 (RPM) 宏的良好候选者,这些宏围绕您在该%install阶段中放置的内容进行扩展你的规格文件。

也就是说,大多数情况下(尤其是使用自动工具的软件)该%install阶段的主要部分应该是

make install DESTDIR=%{buildroot}

%make_install应该做到这一点。一些发行版也有类似的 RPM 宏“快捷方式”,例如%makeinstall在 openSUSE 中,它可能会比通用上游功能提供一些附加功能。

相关内容