Sự khác biệt giữa phụ thuộc và tiền phụ thuộc là gì?


Câu trả lời:


20

Như được lấy từ liên kết này: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Có 5 loại phụ thuộc:

Ý nghĩa của năm trường phụ thuộc như sau:

Phụ thuộc

  • Điều này tuyên bố một sự phụ thuộc tuyệt đối. Một gói sẽ không được cấu hình trừ khi tất cả các gói được liệt kê trong trường Phụ thuộc của nó đã được cấu hình đúng. Trường phụ thuộc nên được sử dụng nếu gói phụ thuộc được yêu cầu cho gói tùy thuộc để cung cấp một lượng lớn chức năng. Trường Depends cũng nên được sử dụng nếu các tập lệnh postinst hoặc prerm yêu cầu gói phụ thuộc phải được giải nén hoặc cấu hình để chạy. Trong trường hợp cấu hình postinst, các gói phụ thuộc sẽ được giải nén và cấu hình trước.

  • Trong trường hợp của prerm hoặc các hành động hậu kỳ khác, các phụ thuộc gói thường sẽ ít nhất được giải nén, nhưng chúng có thể chỉ là "Cài đặt một nửa" nếu việc nâng cấp phụ thuộc trước đó không thành công. Cuối cùng, trường Depends nên được sử dụng nếu gói phụ thuộc cần thiết bởi tập lệnh postrm để dọn sạch hoàn toàn sau khi gỡ bỏ gói. Không có gì đảm bảo rằng các phụ thuộc gói sẽ khả dụng khi postrm được chạy, nhưng gói phụ thuộc có nhiều khả năng sẽ có sẵn nếu gói khai báo một phụ thuộc (đặc biệt trong trường hợp xóa postrm). Kịch bản postrm phải duyên dáng bỏ qua các hành động yêu cầu phụ thuộc nếu phụ thuộc đó không có sẵn.

Khuyến cáo

  • Điều này tuyên bố một sự phụ thuộc mạnh mẽ, nhưng không tuyệt đối. Trường đề xuất nên liệt kê các gói sẽ được tìm thấy cùng với gói này trong tất cả các cài đặt khác thường.

Gợi ý

  • Điều này được sử dụng để tuyên bố rằng một gói có thể hữu ích hơn với một hoặc nhiều gói khác. Sử dụng trường này cho hệ thống đóng gói và người dùng rằng các gói được liệt kê có liên quan đến gói này và có lẽ có thể nâng cao tính hữu dụng của nó, nhưng cài đặt gói này mà không có chúng là hoàn toàn hợp lý.

Tăng cường

  • Trường này tương tự như Đề xuất nhưng hoạt động theo hướng ngược lại. Nó được sử dụng để tuyên bố rằng một gói có thể tăng cường chức năng của gói khác.

Phụ thuộc trước

  • Trường này giống như Depends, ngoại trừ việc nó cũng buộc dpkg hoàn thành cài đặt các gói được đặt tên trước khi bắt đầu cài đặt gói khai báo sự phụ thuộc trước , Nó hoạt động như thế này, khi gói khai báo phụ thuộc trước sắp được giải nén phụ thuộc trước có thể được thỏa mãn nếu gói phụ thuộc được cấu hình đầy đủ hoặc ngay cả khi (các) gói phụ thuộc chỉ được giải nén hoặc ở trạng thái "Cấu hình một nửa", miễn là chúng đã được định cấu hình chính xác tại một số điểm trong quá khứ (và không bị xóa hoặc loại bỏ một phần kể từ đó).

  • Trong trường hợp này, cả hai phiên bản được cấu hình trước đó và hiện chưa được giải nén hoặc "Cấu hình một nửa" phải đáp ứng bất kỳ mệnh đề phiên bản nào trong trường Pre-Depends. Khi gói khai báo phụ thuộc trước sắp được cấu hình, phụ thuộc trước sẽ được coi là Phụ thuộc thông thường. Nó sẽ chỉ được coi là hài lòng nếu gói phụ thuộc đã được cấu hình đúng. Tuy nhiên, không giống như Depends, Pre-Depends không cho phép các phụ thuộc vòng tròn bị phá vỡ. Nếu gặp phải sự phụ thuộc vòng tròn trong khi cố gắng tôn vinh Pre-Depends, cài đặt sẽ bị hủy bỏ.

  • Pre-Depends cũng được yêu cầu nếu tập lệnh preinst phụ thuộc vào gói được đặt tên. Tốt nhất là tránh tình trạng này nếu có thể. Pre-Depends nên được sử dụng một cách tiết kiệm, tốt nhất là chỉ bởi các gói có nâng cấp hoặc cài đặt sớm sẽ cản trở khả năng của hệ thống tiếp tục với bất kỳ nâng cấp nào có thể đang diễn ra.

Phiên bản nhỏ hơn:

  • Cả phụ thuộcphụ thuộc trướcđề cập đến các phụ thuộc mà gói cần trước khi cài đặt nhưng phụ thuộc trước buộc phải cài đặt và cấu hình của các gói phụ thuộc trước khi bắt đầu với gói cần phụ thuộc. dpkg thậm chí sẽ không giải nén gói chính cho đến khi tất cả các gói phụ thuộc trước đã được xử lý. Với sự phụ thuộc, thứ tự của các gói phụ thuộc và gói chính không quan trọng. Với phụ thuộc trước, phải xem xét điều này và cả xác minh xem các gói phụ thuộc trước có được cấu hình và cài đặt hay không. Không có điều này, gói chính thậm chí sẽ không được giải nén, cấu hình hoặc cài đặt. Bạn phải cài đặt các phụ thuộc trước khi bắt đầu quá trình làm việc với gói chính. Nếu không, chúng phải được tải xuống / cấu hình / cài đặt trước khi tiếp tục.

2
Lưu ý rằng cũng có những chống phụ thuộc như Xung đột và Phá vỡ. Và xây dựng các phụ thuộc như Build-Depends.
Alexis Wilke

3

Thuật ngữ "phụ thuộc" có thể được sử dụng rộng rãi để bao gồm các mối quan hệ "Phụ thuộc" và "Phụ thuộc trước" (và đôi khi ngay cả các mối quan hệ khác, yếu hơn) hoặc có thể được sử dụng hẹp như một từ đồng nghĩa của "Phụ thuộc".

Sự khác biệt giữa các mối quan hệ gói "Phụ thuộc" và "Phụ thuộc trước" là nếu X phụ thuộc vào Y, thì Y phải được cấu hình đầy đủ trước khi X được định cấu hình. (Cấu hình là bước cài đặt trong đó một gói, một khi các tệp của nó được giải nén đến các vị trí thích hợp - tức là, một khi "đã cài đặt" - có bất kỳ thay đổi cần thiết nào khác được thực hiện để có thể thực sự sử dụng phần mềm mà nó cung cấp. , cấu hình của máy chủ HTTP có thể liên quan đến việc đảm bảo có wwwngười dùng có khả năng phù hợp và /var/wwwthư mục có quyền phù hợp.) Ngược lại, nếu X phụ thuộc vào Y thì Y phải được cài đặt và (thường) được cấu hình đầy đủ trước khi X thậm chí cài đặt .

Xem Phần 7.2 của Hướng dẫn chính sách Debian để biết thêm chi tiết. Tôi trích dẫn hai phần có liên quan nhất ở đây, nhưng có thông tin khác trong phần đó (và trong chương 7 nói chung hơn) giúp làm sáng tỏ cách thức phụ thuộc làm việc.


Depends

Điều này tuyên bố một sự phụ thuộc tuyệt đối. Một gói sẽ không được cấu hình trừ khi tất cả các gói được liệt kê trong góiDepends trường đã được cấu hình chính xác (trừ khi có phụ thuộc vòng tròn như mô tả ở trên).

Các Depends lĩnh vực nên được sử dụng nếu phụ thuộc-về gói là cần thiết cho các gói phụ thuộc để cung cấp một lượng đáng kể các chức năng.

Trường Dependscũng nên được sử dụng nếu postinsthoặc prermtập lệnh yêu cầu gói phụ thuộc phải được giải nén hoặc cấu hình để chạy. Trong trường hợp cấu hình postinst, các gói phụ thuộc sẽ được giải nén và cấu hình trước. (Nếu cả hai gói được tham gia vào một vòng lặp phụ thuộc, điều này có thể không hoạt động như mong đợi; xem phần giải thích một vài đoạn sau.) Trong trường hợp prermhoặc khácpostinst hành động , thông thường các gói phụ thuộc sẽ ít nhất được giải nén, nhưng chúng có thể chỉ "Đã cài đặt một nửa" nếu việc nâng cấp phụ thuộc trước đó không thành công.

Cuối cùng, Dependstrường nên được sử dụng nếu tập lệnh phụ thuộc là cần thiết postrmđể tập lệnh hoàn toàn dọn sạch sau khi gỡ bỏ gói. Không có gì đảm bảo rằng các phụ thuộc gói sẽ khả dụng khi postrmđược chạy, nhưng gói phụ thuộc có nhiều khả năng sẽ có sẵn nếu gói khai báo một phụ thuộc (đặc biệt là trong trường hợp postrm remove). Các postrmkịch bản một cách duyên dáng phải bỏ qua hành động mà đòi hỏi phải có sự phụ thuộc nếu phụ thuộc mà không có sẵn.


Pre-Depends

Trường này giống như Depends, ngoại trừ việc nó cũng buộc dpkgphải hoàn thành cài đặt các gói được đặt tên trước khi bắt đầu cài đặt gói khai báo phụ thuộc trước, như sau:

Khi gói khai báo phụ thuộc trước sắp được giải nén , phụ thuộc trước có thể được thỏa mãn nếu gói phụ thuộc được cấu hình đầy đủ hoặc ngay cả khi (các) gói phụ thuộc chỉ được giải nén hoặc trong "Một nửa Trạng thái -Cấu hình ", với điều kiện là chúng đã được cấu hình chính xác tại một số điểm trong quá khứ (và không bị xóa hoặc xóa một phần kể từ đó). Trong trường hợp này, cả hai phiên bản được cấu hình trước đó và hiện chưa được giải nén hoặc "Cấu hình một nửa" phải đáp ứng bất kỳ mệnh đề phiên bản nào trong Pre-Dependstrường.

Khi gói khai báo một phụ thuộc trước sắp được cấu hình , phụ thuộc trước sẽ được coi là bình thường Depends. Nó sẽ chỉ được coi là hài lòng nếu gói phụ thuộc đã được cấu hình đúng. Tuy nhiên, không giống như Depends, Pre-Dependskhông cho phép các phụ thuộc vòng tròn bị phá vỡ. Nếu gặp phải sự phụ thuộc vòng tròn trong khi cố gắng tôn vinh Pre-Depends, cài đặt sẽ bị hủy bỏ.

Pre-Dependscũng được yêu cầu nếu preinsttập lệnh phụ thuộc vào gói được đặt tên. Tốt nhất là tránh tình huống này nếu có thể.

Pre-Depends nên được sử dụng một cách tiết kiệm, tốt nhất là chỉ bởi các gói có nâng cấp hoặc cài đặt sớm sẽ cản trở khả năng của hệ thống tiếp tục với bất kỳ nâng cấp nào có thể đang được tiến hành.

Bạn không nên chỉ định một Pre-Dependsmục nhập cho một gói trước khi điều này đã được thảo luận trong debian-develdanh sách gửi thư và sự đồng thuận về việc đã đạt được. Xem phần phụ thuộc, mục 3.5 .

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.