Tại sao người quản lý gói cần tập tin khóa?


10

dpkgsử dụng tệp khóa ( /var/lib/dpkg/lock) khi sử dụng.

  • Tại sao các khóa này cần thiết?
  • Tại sao nhiều trường hợp không thể?

Dpkg không cài đặt. Đây là chế độ an toàn để tránh xung đột. Chỉ cần một cài đặt cùng một lúc.
albfan

Câu trả lời:


15

Đây không phải là một dpkgvấn đề cụ thể (như tiêu đề chỉnh sửa của tôi được đề xuất). Thay vào đó, đây là điều mà mọi người quản lý gói (mà tôi biết) làm; và vì lý do tốt. Mặc dù, tôi hiểu tại sao nó có thể gây nhầm lẫn.

Trình quản lý gói dựa trên cơ sở dữ liệu để theo dõi thông tin cho các gói đã cài đặt. Nếu nhiều người dùng cố gắng ghi vào cơ sở dữ liệu cùng một lúc, nó có khả năng bị hỏng dữ liệu cao (điều này thực sự sẽ làm hỏng hệ thống).

Do đó, nhiều người quản lý gói (tất cả?) Dựa vào một tệp khóa để báo hiệu rằng cơ sở dữ liệu đang được ghi vào, vì vậy một khách hàng khác không được phép làm như vậy.


Lưu ý rằng người quản lý gói thông minh có thể xác định khi nào yêu cầu chỉ đọc và có thể không cần khóa cơ sở dữ liệu. Kết quả là; có thể một số hành động có thể được chạy đồng thời trong khi những hành động khác sẽ không xảy ra.


2
Tôi nghĩ rằng portage và paludis (trình quản lý gói của Gentoo) có thể hoạt động song song, nếu nó sử dụng khóa hoàn toàn thì nó chỉ thực hiện trong một thời gian ngắn khi thêm các gói vào danh sách đã cài đặt.
Vality

Tôi sẽ xem xét các nhà quản lý gói của Gentoo và cập nhật câu trả lời của tôi ngay.
HalosGhost

Tôi không thể tìm thấy thông tin cập nhật về điều này; nhưng ít nhất, trong một thời gian, cả paludis và portage đều sử dụng các tệp khóa. Lưu ý, đây là một chiến lược phổ biến vì đây là một trong những cách an toàn duy nhất để ngăn ngừa tham nhũng dữ liệu; Tôi sẽ ngạc nhiên nếu cả portage hay paludis vẫn không sử dụng phương pháp như vậy.
HalosGhost

1
Ah, có vẻ như bạn đã đúng, tuy nhiên phạm vi của các khóa này là khác nhau, chúng chỉ được sử dụng khi cập nhật chỉ mục gói (mất gói có sẵn), thực sự cài đặt gói là một hoạt động chỉ đọc và do đó không gọi khóa. Tuy nhiên, vâng, tôi hiểu ý của bạn, nó có nghĩa là chiến lược rất phổ biến.
Vality

9

Các tập tin khóa được sử dụng để ngăn chặn thực hiện song song của nhiều trường hợp.

Tại sao điều này quan trọng đối với một người quản lý gói?

Trình quản lý gói - từ chế độ xem cấp cao - là chương trình áp dụng các thay đổi phức tạp cho đĩa cứng.

Những thay đổi không thể được thực hiện trong một bước (Nhật nguyên tử), vì vậy có nhiều bước; nhiều bước phụ thuộc vào kết quả của các bước trước đó.

Vì vậy, trình quản lý gói cần phân tích đĩa cứng trước khi thực hiện từng bước hoặc chỉ cần phân tích một lần và theo dõi các thay đổi mà chính nó áp dụng. Tùy chọn đầu tiên là cực kỳ chậm. Thứ hai yêu cầu không có trường hợp khác thực hiện thay đổi.

Có nhiều vấn đề khác có thể xuất hiện.

Không thể thực hiện một trình quản lý gói có thể hoạt động song song, nhưng nó quá phức tạp để có giá trị . Như trong, bạn không thể tưởng tượng được phức tạp như thế nào. Có thật không.


2

dkpg(và rpmhầu hết các trình quản lý gói truyền thống khác) hoạt động bằng cách cài đặt các gói vào không gian toàn cầu, điều đó có nghĩa là các gói có thể xung đột với nhau (ví dụ ABkhông thể được cài đặt cùng một lúc, vì cả hai đều cài đặt /usr/lib/libfoo.so). Người quản lý gói phải phát hiện các xung đột đó và từ chối các yêu cầu cài đặt đó để giữ cho hệ thống luôn ở trạng thái nhất quán. Có nhiều phiên bản của trình quản lý gói chạy cùng một lúc sẽ rất phức tạp và dễ bị lỗi.

Các trình quản lý gói không xung đột (ví dụ http://0install.net ) có thể và cho phép nhiều gói được cài đặt song song và không cần các tệp khóa ( A/libfoo.soB/libfoo.sosẽ đi trong các thư mục khác nhau).


1 Song song cả về ý nghĩa hiện diện và khả dụng trên hệ thống cùng một lúc và theo nghĩa được tải xuống và thêm vào hệ thống đồng thời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.