my.rpm의 %pre 부분은 더 이상 RHEL 6.7에서 실행되지 않습니다.

my.rpm의 %pre 부분은 더 이상 RHEL 6.7에서 실행되지 않습니다.

우리 소프트웨어용 rpm 패키지를 빌드하는 .spec 파일이 있습니다. .spec 파일의 %pre 섹션에서 소프트웨어의 이전 주요 버전이 설치되어 있는지 확인합니다. 그렇다면 오류 메시지와 함께 설치가 중단됩니다. 이전 RHEL 버전에서는 모든 것이 잘 작동했습니다.

RHEL 6.7(RHEL 6.5에도 있는 것으로 보임)에서 rpm 설치 프로그램이 %pre 섹션에 도달하지 못하거나 무시합니까? "File... from the install of our-software-server-23.01-"에 대해 불평합니다. 1.el6". i386이 our-software-server-22.07-1.el6.i386 패키지의 파일과 충돌하여 설치가 중단됩니다. 그러한 파일이 많이 있습니다. 이것이 바로 .spec 파일의 %pre 섹션과 관련된 내용입니다.

최신 버전 간에 rpm 처리가 어떻게 변경되었습니까? 지금까지 나는 아무것도 찾지 못했습니다.

rpm --version은 4.8.0을 표시합니다.

어떤 도움이라도 대단히 감사하겠습니다!

%pre server
if [ $1 -gt 1 ]; then
# Check for an unsupported major version upgrade
INSTALLED_VER=$(rpm -q our-software-server|sed -e 's/our-software-server-\([0-9]\+\).*/\1/')
echo "Upgrade check:"
echo "installed  : $INSTALLED_VER"
echo "new version: %{majorver}"
if [ "$INSTALLED_VER" -ne "%{majorver}" ]; then
    echo
    echo "ERROR:"
    echo "An automatic RPM upgrade across major versions is not supported!"
    echo "Please refer to the Upgrade Notes on how to manually perform"
    echo "an upgrade and migrate the configuration data."
    echo
    exit 1
fi
...

답변1

rpm-4.8.0은 %post에서 rpm을 호출하여 rpm의 재귀적 설치를 방지하기 위해 /var/lib/rpm/.rpm.lock에 전역 파일 잠금을 추가했습니다.

바라보다 rpm을 사용하여 패키지를 설치할 수 없는 이유는 무엇입니까? "거래가 잠겼습니다"라는 메시지가 나타납니다.

동시에 전역 프로세스 간 잠금을 갖거나 사용할 필요가 거의 없습니다. rpm(및 yum과 같은 rpmlib 종속 프로세스)은 전역 잠금을 놓고 경쟁하는 경우가 거의 없습니다.

짧은 대답: %post에서 rpm -q를 시도하기 전에 잠금 파일의 이름을 바꾸고, %post를 종료하기 전에 파일을 복원하십시오. 실제로 전역 잠금 파일의 이름을 변경하여 열리는 잠금 경합 창은 매우 작습니다.

%pre에서 rpm을 호출하는 대신 종속성을 사용하는 것이 시도하는 것보다 더 나은 솔루션입니다.

관련 정보