%install의 기본 동작은 무엇입니까?

%install의 기본 동작은 무엇입니까?

-bb플래그(%prep %build %install %check 패키지)를 사용하여 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 매크로 확장 시) 삽입됩니다. 즉, 다음 줄입니다.$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(시스템의 다른 곳에 있을 수 있음)은 %install이 단계에 넣은 항목에 대한 (RPM) 매크로를 포함하기에 좋은 후보입니다. 사양을 확장하세요. 파일.

즉, 대부분의 경우(특히 자동화 도구를 사용하는 소프트웨어) %install이 단계의 주요 부분은 다음과 같습니다.

make install DESTDIR=%{buildroot}

매크로는 %make_install이렇게 해야 합니다. 일부 배포판에는 유사한 RPM 매크로 "단축키"도 있습니다.%makeinstall오픈수세에서, 이는 일반 업스트림 기능에 비해 몇 가지 추가 기능을 제공할 수 있습니다.

관련 정보