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


10

dpkg/var/lib/dpkg/lock사용시 잠금 파일 ( )을 사용합니다.

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

Dpkg는 설치를 수행합니다. 충돌을 피하기위한 안전 모드입니다. 한 번에 하나의 설치 만 가능합니다.
albfan

답변:


15

이것은 dpkg특정 문제 가 아닙니다 (내 편집 제목이 제안한대로). 오히려 이것은 모든 패키지 관리자 (내가 알고있는)가하는 일이다. 그리고 정당한 이유가 있습니다. 그러나 왜 그것이 혼란 스러울 수 있는지 이해합니다.

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

결과적으로 많은 (모든?) 패키지 관리자 는 데이터베이스가 기록되고 있음을 알리기 위해 잠금 파일 을 사용하므로 다른 클라이언트는 그렇게 할 수 없습니다.


지능형 패키지 관리자는 요청이 읽기 전용이고 데이터베이스를 잠글 필요가없는시기를 결정할 수 있습니다. 결과적으로; 일부 작업은 다른 작업이 수행되지 않는 위치에서 동시에 실행될 수 있습니다.


2
포티지와 paludis (Gentoo의 패키지 관리자)는 잠금을 사용하면 설치된 목록에 패키지를 추가 할 때 잠깐 동안 만 동시에 작동 할 수 있다고 생각합니다.
Vality

젠투의 패키지 관리자를 살펴보고 곧 답변을 업데이트하겠습니다.
HalosGhost

이에 관한 최신 정보를 찾을 수 없습니다. 그러나 적어도 잠시 동안 paludis와 portage는 잠금 파일을 사용했습니다. 데이터 손상을 방지 할 수있는 유일한 안전한 방법 중 하나이기 때문에 이는 일반적인 전략입니다. portage 또는 paludis가 여전히 그러한 방법을 사용하지 않았다면 놀랄 것입니다.
HalosGhost

1
아, 맞아 보이지만 이러한 잠금의 범위는 다르며 패키지 색인을 업데이트 할 때만 사용되며 (사용 가능한 패키지 손실) 실제로 패키지를 설치하는 것은 읽기 전용 작업이므로 잠금을 호출하지 않습니다. 그러나 네, 무슨 말인지 알 수 있습니다. 전략이 너무 일반적이라는 것이 합리적입니다.
Vality

9

잠금 파일은 여러 인스턴스의 병렬 실행방지 하는 데 사용됩니다 .

이것이 패키지 관리자에게 중요한 이유는 무엇입니까?

높은 수준의 패키지 관리자 는 하드 디스크에 복잡한 변경 사항적용 하는 프로그램입니다 .

한 번에 변경 을 수행 할 수 없습니다 ( "원자")로 여러 단계가 있습니다. 많은 단계는 이전 단계의 결과에 따라 다릅니다.

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

나타날 수있는 다른 많은 문제가 있습니다.

이다 불가능하지 동시에 작업 할 수있는 패키지 관리자를 구현할 수 있지만있어 너무 가치가에게 그것을로 복잡 . 에서처럼, 당신은 얼마나 복잡한 상상할 수 없습니다. 정말.


2

dkpg(그리고 rpm대부분의 다른 기존의 패키지 관리자) 패키지 예 (서로 충돌 할 수 있음을 의미 글로벌 공간으로 패키지를 설치하여 작업 A하고 B그들이 모두 설치하기 때문에, 동시에 설치할 수 없습니다/usr/lib/libfoo.so ). 패키지 관리자는 시스템을 일관성있는 상태로 유지하기 위해 이러한 충돌을 감지하고 설치 요청을 거부해야합니다. 여러 개의 패키지 관리자 인스턴스를 동시에 실행하면 매우 복잡하고 오류가 발생하기 쉽습니다.

충돌이없는 패키지 관리자 (예 : http://0install.net )는 수와 여러 패키지가 parallel¹에 설치 될 수 있도록 할 및 파일을 잠글 필요가 없습니다 ( A/libfoo.soB/libfoo.so다른 디렉토리에 갈 것입니다).


1 시스템에 동시에 존재하고 사용 가능하다는 의미와 동시에 다운로드하여 시스템에 추가한다는 의미에서 병렬입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.