2013-06-20 3 views
2

이전 패키지가 폐기 된 this question에 설명 된 문제가 발생했으며 % preun 스크립트가 $ 1 = 0으로 실행되어 바람직하지 않은 동작이 발생했습니다. 이 답변이나 -nopreun 플래그에서 제안한 것처럼 -e + -i를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 단순히 -U를 사용하는 것에 익숙한 사용자에게 해당 정보를 전달하는 것은 어렵습니다.RPM 데이터베이스에서 다른 패키지의 항목을 안전하게 수정할 수있는 방법이 있습니까?

야생에서 기존 % preun 스크립트를 수정할 수 없습니다. 예전 패키지를 수정 한 후 새 패키지에서 추가 코드를 실행할 방법이 없습니다. 새 패키지가 프로그래밍 방식으로 이전 % preun 스크립트가 실행되는 것을 막을 방법이 없습니다.

RPM 데이터베이스에 접근하여 기존 패키지의 스크립틀릿을 제거하는 안전한 방법이 있습니까?

답변

0

아니요 rpmdb를 편집 할 수 없습니다. 헤더는 SHA1 또는 디지털 서명에 의한 변경 사항 으로부터 보호됩니다.

버그가있는 스크립트를 실행하지 않으려면 대신 --nopreun 을 사용하여 패키지의 고정 버전으로 업그레이드하십시오.

0

제프 존슨은 이어야합니다.을 수행하지 않아야합니다. 그러나 확실히 할 수 있습니다.

나는 이것을 배포판의 RPM에서 수행했다. 그러나 이것은 모든 시스템에 대해 의 리모트 핸드가 포함 된 반 구조화 된 환경이었다. 원격으로 손에 액세스 할 수있는 경우 "제거, 설치"경로를 따르고 해당 스크립트를 스크립팅하십시오.

정말 이런 일을해야한다고 생각되면 포인터입니다. 나는 그것이 "일"이었기 때문에 내가 한 일을 정확하게 보여주지 않을 것이고, 내 것을 공유하지 않기 때문입니다. 개념은 내 것이다 :-)

먼저/var/lib/rpm/Packages 파일 (cp /var/lib/rpm/Packages /var/tmp/Packages.bkp)을 백업하십시오. 그것 좀 넣어 줘. 솔루션에서 작업하는 동안 다른 사용자가 시스템을 변경하면 백업을 업데이트하십시오. RPM 수를 정기적으로 확인하고 각 변경 또는 단계 후에 일요일마다 어떤 방법으로 테스트합니다.

db_unload 및 db_load 명령을 사용해야합니다. 속도면에서 "s2p"를 사용하여 쉘 sed 패턴을 perl로 변환해야합니다. 그런 다음 원래 이상 하다며 복사하여 Packages.new을 테스트하기 위해 시도 할 수

db_unload /var/tmp/Packages.bkp |perl -i -e "s2p converted string" |db_load /var/tmp/Packages.new

: 다음과 같은 파이프를 구축 할 수 있습니다. 수동으로 변경 한 후에는 항상 rpm --rebuilddb를 실행하십시오. 오류가 표시되면 백업을 복원하고 db를 다시 빌드하십시오.

RPM에 넣으려면 Lua로 변환하고 pretrans 또는 posttrans scriptlet (%pretrans -p <lua>)에 넣으십시오. 선택은 달성하려는 순서에 따라 다릅니다. Lua 인터프리터는 rpm에 내장되어 있으므로 RPM이 어떻게 든 호출 되더라도 새로운 시스템 설치 중에 OK로 실행됩니다. 루아 롱 문자열에 "파이프"를 싸서 시스템이 이미 존재하는 경우에만 실행되도록했습니다. 그렇지 않으면 아무것도하지 않습니다. "그 일은 결코 일어나지 않을 것"이라고 생각한다면 "Never say never never"를 확인하십시오.

현재 상황을 완전히 망쳐 놓으면 RPM 기반을 완전히 강화하고 시스템 관리를 강화할 수 있습니다. 그렇게하고 백업이나 탈출구가 없다면 자신의 행동에 책임이 있음을 배우는 것이 어려울 것입니다.당신이 경고 당했다고 말하는 것만으로!

관련 문제