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