2014-12-12 4 views

답변

1

당신은 정말로 할 수 없으며 그렇게해서는 안됩니다.

은 가능한 한 모든 것을 어설 션해야합니다. 사양 파일의 줄 : 요구 사항 : 사용자가 멀리 할 수 ​​없도록 줄을 지정하십시오.

%post은 너무 늦어서 중단 할 수 없습니다. 모든 파일은 이미 디스크/etc에 저장되어 있습니다.

자신을 실행 중지하지 않도록 설정할 수 있지만 그게 전부입니다.

이러한 것들이 실제로 실패 할 수 없다면, %pre 동안 테스트를하고 (심지어 악의 일이긴하지만) 실패 할 수 있습니다.

if [ ! -d %{basedeploymentpath} ]; then 
    echo "ERROR: %{basedeploymentpath} does not exist or is inaccessible. I will uninstall myself." 
    rpm -ev ${APP_NAME} & 
    exit 1 
fi 

위의 코드에서, 디렉토리를 나타내는 변수 %{basedeploymentpath}이 발견되지 않는 경우, 다음의 이름을 rpm -ev 전화 :

0

이것은 내가 롤백하는 %post에 사용되는 해킹입니다 패키지에서 &을 사용하여 프로세스를 포크하십시오. %post 스크립트는 언급 된 조건에서 1 코드로 종료됩니다.

다음 명령 줄 (rpm -ivh) 및 오류 상태에서 실행되는 설치 프로세스가 존재하는 경우

이 결과가 나타납니다, 포스트 설치 : warning: %post(...) scriptlet failed, exit status 1

그것은 추한 해킹이지만 작동합니다. 참고rpm -ivh 작업을 실행 한 후에 echo $?을 실행하면 rpm -ivh 명령의 종료 상태가 계속 성공한 것으로 나타납니다 (종료 0).