패키지 관리자에 잠금 파일이 필요한 이유는 무엇입니까?

패키지 관리자에 잠금 파일이 필요한 이유는 무엇입니까?

dpkg/var/lib/dpkg/lock사용할 때는 lockfile()을 사용하세요.

  • 이러한 잠금 파일이 필요한 이유는 무엇입니까?
  • 다중 인스턴스가 불가능한 이유는 무엇입니까?

답변1

dpkg이것은 편집된 제목에서 알 수 있듯이 특정 질문이 아닙니다 . 대신, 이는 (내가 아는) 모든 패키지 관리자가 수행하는 작업이며 그럴 만한 이유가 있습니다. 그래도 왜 혼란스러울 수 있는지 이해합니다.

패키지 관리자는 데이터베이스를 사용하여 설치된 패키지에 대한 정보를 추적합니다. 여러 사용자가 동시에 데이터베이스에 쓰려고 하면 데이터가 손상될 가능성이 높습니다(이로 인해 시스템이 실제로 손상될 수 있음).

따라서 많은 (모두?) 패키지 관리자는 다음을 사용합니다.잠금 파일데이터베이스에 대한 쓰기가 진행 중이므로 다른 클라이언트가 그렇게 하도록 허용되어서는 안 됨을 나타냅니다.


스마트 패키지 관리자는 요청이 읽기 전용이고 데이터베이스를 잠글 필요가 없는 시기를 결정할 수 있습니다. 따라서 일부 작업은 동시에 실행될 수 있지만 다른 작업은 동시에 실행될 수 없습니다.

답변2

파일 잠금병렬 실행 방지여러 인스턴스의.

패키지 관리자에게 이것이 왜 중요한가요?

높은 수준의 관점에서 패키지 관리자는 다음을 수행하는 프로그램입니다.복잡한 변경사항 적용하드 드라이브에.

다양성한 단계로 완료하는 것은 불가능합니다("원자적")이므로 이전 단계의 결과에 따라 여러 단계가 달라집니다.

따라서 패키지 관리자는 각 단계를 실행하기 전에 하드 디스크를 분석하거나 단순히 한 번 분석하고 적용되는 변경 사항을 추적해야 합니다. 첫 번째 옵션은 매우 느립니다. 두 번째는 다른 인스턴스가 변경하지 않도록 요구합니다.

다른 많은 문제가 발생할 수 있습니다.

이것은불가능하지 않다병렬로 작업할 수 있는 패키지 관리자를 구현합니다.너무 복잡해서 가치가 없음. 마찬가지로, 그것이 얼마나 복잡한지 상상할 수 없습니다. 진짜.

답변3

dkpg(및 rpm대부분의 다른 기존 패키지 관리자)는 패키지를 전역 공간에 설치하여 작동합니다. 이는 패키지가 서로 충돌할 수 있음을 의미합니다(예: 둘 다 설치되어 있기 때문에 동시에 설치할 A수 없음 ). 패키지 관리자는 시스템을 일관된 상태로 유지하기 위해 이러한 충돌을 감지하고 설치 요청을 거부해야 합니다. 패키지 관리자의 여러 인스턴스를 동시에 실행하는 것은 복잡하고 오류가 발생하기 쉽습니다.B/usr/lib/libfoo.so

충돌 없는 패키지 관리자(예:http://0install.net)은 여러 패키지를 병렬로 설치할 수 있으며 파일 잠금이 필요하지 않습니다( 다른 디렉터리로 이동함) A/libfoo.so.B/libfoo.so


1 병렬이란 시스템에 동시에 존재하고 사용할 수 있을 뿐만 아니라 시스템에 동시에 다운로드 및 추가됨을 의미합니다.

관련 정보