서비스를 중단해야 하나요?앞으로서비스용 RPM 패키지를 제거하거나 업그레이드하시겠습니까?
일반적으로 RPM 패키지 관리자는 새 패키지를 설치한 다음 업그레이드를 수행할 때 이전 패키지를 제거합니다. 발췌:
Run %pre from "software-2".
Place files from "software-2".
Run %post from "software-2".
Run %preun from "software-1".
Delete files unique to "software-1".
Run %postun from "software-1".
이런 경우 새 패키지를 설치하기 전에 %pre에서 서비스를 중지하면 안되는 건가요?
다음은 참조용 사양 파일의 일부입니다.
%preun
# do not run if this is an upgrade
if [ $1 -eq 0 ]; then
/sbin/service myservice stop > /dev/null 2>&1
/sbin/chkconfig --del /etc/init.d/myservice
fi
exit 0
%post
/sbin/chkconfig --add /etc/init.d/myservice
exit 0
내가 가진 것은 모두가 하고 있는 것 같은데, 먼저 %pre에서 서비스를 중지하지 않고 업그레이드하는 경우 이것이 작동하는 이유를 이해할 수 없습니다.
답변1
UNIX 파일 시스템이 작동하는 방식을 잊어버렸습니다. 링크 로더가 객체 파일을 열어두는 한 프로세스는 현재 삭제된 파일에 대한 핸들을 보유하고 있기 때문에 시작된 객체 파일을 볼 수 있습니다. 핸들이 close()되면 파일이 실제로 삭제됩니다. 따라서 새 개체 파일을 제거하고 설치하는 동안 데몬을 실행 상태로 두는 것이 안전합니다.
물론 이전 버전의 데몬이 실행 중이므로 보안 문제를 해결하기 위한 업그레이드라면 "보안"은 그다지 안전하지 않습니다. 이것이 데비안 APT가 다른 정책을 갖고 업그레이드할 때 데몬을 중지/시작하는 이유입니다.
당신은 이것을 찾을 수 있습니다사양패키지의 정책을 변경하려는 경우 RPM 스크립틀릿이 유용합니다.