"Phụ thuộc" và "phụ thuộc trước" nghĩa là gì và sự khác biệt giữa 2 loại yêu cầu gói này khi tôi cài đặt một cái gì đó trong Ubuntu?
"Phụ thuộc" và "phụ thuộc trước" nghĩa là gì và sự khác biệt giữa 2 loại yêu cầu gói này khi tôi cài đặt một cái gì đó trong Ubuntu?
Câu trả lời:
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:
Đ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.
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:
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ó www
người dùng có khả năng phù hợp và /var/www
thư 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ói
Depends
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
Depends
cũng nên được sử dụng nếupostinst
hoặcprerm
tậ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ợpprerm
hoặ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,
Depends
trường nên được sử dụng nếu tập lệnh phụ thuộc là cần thiếtpostrm
để 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 khipostrm
đượ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ợppostrm remove
). Cácpostrm
kị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ộcdpkg
phả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-Depends
trườ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-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 vinhPre-Depends
, cài đặt sẽ bị hủy bỏ.
Pre-Depends
cũng được yêu cầu nếupreinst
tậ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-Depends
mục nhập cho một gói trước khi điều này đã được thảo luận trongdebian-devel
danh 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 .