Tại sao apt nghĩ rằng nó cần sự phụ thuộc thêm này?


9

Tôi đang làm việc với một số hướng dẫn thiết lập máy và tôi rất ngạc nhiên khi thấy rằng nó apt-get install A Bcó thể hoạt động khác hơn apt-get install A && apt-get install B.

Ví dụ cụ thể của tôi là A == openjdk-7-jdkB == ant.

Vì vậy, openjdk-7-jdkphụ thuộc vào openjdk-7-jre-headless, thỏa mãn antsự phụ thuộc của java6-runtime-headless. Nhưng nếu bạn cài đặt chúng như apt-get install openjdk-7-jdk ant, APT dường như không tìm ra điều này và cài đặt default-jre-headless. Nhưng nếu bạn cài đặt openjdk-7-jdktrước khi cài đặt ant, sự phụ thuộc của nó được thỏa mãn và tất cả đều tốt.

APT thường đủ thông minh để tìm ra loại điều này, vậy tại sao nó không thể làm như vậy trong trường hợp này? Tôi muốn hiểu rõ hơn về lý do tại sao nó hoạt động theo cách này, vì vậy loại điều này sẽ không khiến tôi gặp lại trong tương lai.


Nhìn vào bộ đệm apt của tôi, tôi thấy rằng openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubfox2 phụ thuộc vào openjdk-7-jre, do đó phụ thuộc vào openjdk-7-jre-headless, do đó sự phụ thuộc này là gián tiếp . kiến phụ thuộc trực tiếp vào default-jre-headless. Tôi đang sử dụng Chính xác. Tôi chỉ đoán nhưng apt-get có thể tùy ý bắt đầu với ant hoặc bắt đầu với phụ thuộc cấp 1 và sau đó chuyển sang phụ thuộc cấp 2. Trong mọi trường hợp, nếu bạn quan tâm đến cấu hình cuối cùng của các gói (muốn openjdk-7-jre-headless mặc định -..- ..) chỉ định chúng một cách cụ thể và riêng lẻ có lẽ là cách tốt nhất để kiểm soát điều đó.
John S Gruber

Bạn vẫn quan tâm đến câu hỏi đó?
guntbert

@guntbert Chắc chắn, mặc dù tôi đã cam chịu tin rằng không có lý do; nó chỉ là như vậy
leedm777

5
Để xem cách trình phân giải APT hoạt động, hãy xem apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Điều đó có thể cho bạn một gợi ý tại sao nó hoạt động theo cách đó.
Lasall

Câu trả lời:


2

Có vẻ như có một số loại hệ thống "trọng lượng" đang chơi ở đây:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

Như bạn có thể thấy antphụ thuộc vào openjdk-7-jdksố lượng đề xuất, đề xuất và phụ thuộc phức tạp và phức tạp, trong khi khi sử dụng openjdk-6-jdkphụ thuộc thì trực tiếp hơn:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

Tất nhiên aptitudecác phương pháp giải quyết phụ thuộc, có thể khác apt-getvới. BTW, chạy mô phỏng kiến ​​mà không cài openjdk-7-jdk không kéo openjdk-6-jdk:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Có lẽ nếu bạn sử dụng các phương pháp giống như tôi đã làm, bạn có thể tìm hiểu thêm, vì tôi đang sử dụng thử nghiệm Debian ngay bây giờ và các kho lưu trữ có thể đã thay đổi trong khi đó.


0

AFAIK, nó có mặc định để đáp ứng một phụ thuộc, vì vậy nếu sự phụ thuộc đó không được thỏa mãn trước khi cài đặt một gói, nó sẽ cài đặt phụ thuộc và sau đó cài đặt gói được yêu cầu.

Điều này cũng có thể chỉ là một lỗi lớn.

Dù bằng cách nào, hy vọng rằng sẽ giúp.

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.