답변:
이것은 dpkg
특정 문제 가 아닙니다 (내 편집 제목이 제안한대로). 오히려 이것은 모든 패키지 관리자 (내가 알고있는)가하는 일이다. 그리고 정당한 이유가 있습니다. 그러나 왜 그것이 혼란 스러울 수 있는지 이해합니다.
패키지 관리자는 데이터베이스를 사용하여 설치된 패키지의 정보를 추적합니다. 여러 사용자가 동시에 데이터베이스에 쓰려고하면 데이터가 손상 될 가능성이 높습니다 (실제로 시스템에 문제가 생길 수 있습니다).
결과적으로 많은 (모든?) 패키지 관리자 는 데이터베이스가 기록되고 있음을 알리기 위해 잠금 파일 을 사용하므로 다른 클라이언트는 그렇게 할 수 없습니다.
지능형 패키지 관리자는 요청이 읽기 전용이고 데이터베이스를 잠글 필요가없는시기를 결정할 수 있습니다. 결과적으로; 일부 작업은 다른 작업이 수행되지 않는 위치에서 동시에 실행될 수 있습니다.
잠금 파일은 여러 인스턴스의 병렬 실행 을 방지 하는 데 사용됩니다 .
이것이 패키지 관리자에게 중요한 이유는 무엇입니까?
높은 수준의 패키지 관리자 는 하드 디스크에 복잡한 변경 사항 을 적용 하는 프로그램입니다 .
한 번에 변경 을 수행 할 수 없습니다 ( "원자")로 여러 단계가 있습니다. 많은 단계는 이전 단계의 결과에 따라 다릅니다.
따라서 패키지 관리자는 각 단계를 실행하기 전에 하드 디스크를 분석하거나 간단히 한 번 분석 한 후 적용되는 변경 사항을 추적해야합니다. 첫 번째 옵션은 매우 느립니다. 두 번째는 다른 인스턴스가 변경하지 않아도됩니다.
나타날 수있는 다른 많은 문제가 있습니다.
이다 불가능하지 동시에 작업 할 수있는 패키지 관리자를 구현할 수 있지만있어 너무 가치가에게 그것을로 복잡 . 에서처럼, 당신은 얼마나 복잡한 상상할 수 없습니다. 정말.
dkpg
(그리고 rpm
대부분의 다른 기존의 패키지 관리자) 패키지 예 (서로 충돌 할 수 있음을 의미 글로벌 공간으로 패키지를 설치하여 작업 A
하고 B
그들이 모두 설치하기 때문에, 동시에 설치할 수 없습니다/usr/lib/libfoo.so
). 패키지 관리자는 시스템을 일관성있는 상태로 유지하기 위해 이러한 충돌을 감지하고 설치 요청을 거부해야합니다. 여러 개의 패키지 관리자 인스턴스를 동시에 실행하면 매우 복잡하고 오류가 발생하기 쉽습니다.
충돌이없는 패키지 관리자 (예 : http://0install.net )는 수와 여러 패키지가 parallel¹에 설치 될 수 있도록 할 및 파일을 잠글 필요가 없습니다 ( A/libfoo.so
및 B/libfoo.so
다른 디렉토리에 갈 것입니다).
1 시스템에 동시에 존재하고 사용 가능하다는 의미와 동시에 다운로드하여 시스템에 추가한다는 의미에서 병렬입니다.