2013-07-18 1 views
3

preinst 스크립트에서 확인이 실패하면 .deb 패키지 설치를 취소하고 싶습니다.preinst 스크립트 내에서 debian 패키지 설치를 취소하십시오.

내 PREINST 스크립트

#!/bin/sh 
# Stop if any error 
set -e 
assertexists(){ 
    # $1 File 
    if [ -e "$1" ] 
    then 
     echo "File existence checked for: $1" 
    else 
     echo "ERROR, file does not exist: $1" 
     exit 1 
    fi 
} 
assertexists "$JAVAPATH/bin/java" 

내가 실행

dpkg -i my.deb 

내가 오류를 볼 수 있지만 내가 실행할 때 패키지가 설치된 것으로 나타납니다

dpkg --get-selections 

인가 거기 preinst 내에서 설치를 취소하는 방법?

답변

0

preinst/postinst 스크립트 (dpkg 맨 페이지로 확인)의 실행을 비활성화하는 일부 dpkg 스위치가 있지만 이미 설치를 시작한 후 중단되면 (가끔씩 발생) 오류가 없어 질 수 있습니다 루프는 간단한 방법은 (/var/lib/dpkg/info/PACKAGENAME.postinst에서

exit 0 

(또는 각각 PREINST) 내가 설치가 성공 여부에 완료해야합니다 생각

을 넣어하는 것입니다 패키지 다음 두번째 경우 손으로 제거해야 함) preinst/postint 스크립트에서 "cancel, remove_me()"의 "공식적인"방법은 없습니다. 어떤 경우에는 스크립트에 dpkg --purge를 넣을 수 있습니다.하지만 잠금이나 기타 다른 이유로 인해 의미가 없습니다. apt-get이 여러 설치/제거를 수행하는 방법에주의하십시오. 일반적으로 제거 할 패키지를 먼저 제거한 다음 나머지 패키지를 설치합니다. 또한

echo PACKAGENAME purge | dpkg --set-selections 

다음

apt-get -f dselect-upgrade 

또는

apt-get -f install 

을 할 수 있지만, 나는이 일을 해야하는 방법이 아니다라고 생각합니다. 또한
dpkg -i mypackage.deb || dpkg --purge mypackage 

으로 할 수

은 일반적으로 종속 조건부 설치 또는 제거하는 방법을 제공한다. 더미 종속성 또는 종속 패키지를 작성하여 설치 전후에 실패하고 종속성 경고를 트리거 할 수 있습니다. 그러면 해당 패키지가 "autoremove"목록에 나열됩니다.

+2

설치 또는 제거 스크립트에서 패키지 시스템을 사용하는 자체 호출이 끔찍한 생각처럼 보입니다. –

+0

올바른지, 가능한 경우에도 - "유닉스는 어디에 있습니까?" –

관련 문제