Tôi hoàn toàn đồng ý rằng nhiều tin nhắn apt khó hiểu hơn rất nhiều so với những gì người ta muốn và thường thì chúng thậm chí còn gây hiểu lầm. Tuy nhiên, điều tốt là khi làm việc với apt một thời gian, bạn sẽ bắt gặp các thông báo lặp đi lặp lại và quen với cách khắc phục chúng.
Tùy thuộc vào những gì bạn biết về những gì apt làm đằng sau hậu trường, có thể không dễ hiểu tất cả các chi tiết. Tôi sẽ dùng thử với hy vọng đoán được thông tin cơ bản của bạn và diễn giải chính xác câu hỏi của bạn. Xin hãy chịu đựng nếu tôi hiểu sai :-)
Nói chung, các thông báo mà bạn đề cập đến "sẽ không được cài đặt" hoặc "không thể cài đặt" đề cập đến các phụ thuộc cần thiết cho gói mà bạn đang cài đặt so với các gói đã được cài đặt trên hệ thống của bạn.
Để hiểu điều này, bạn cần biết rằng hầu hết các gói không gửi kèm theo tất cả các tệp mà chúng thực sự cần để chạy. Tùy chỉnh của Linux là sử dụng phần mềm nguồn mở ở bất cứ đâu bạn có thể, vì vậy mỗi gói sử dụng rất nhiều thư viện. Đó là các đốm màu nhị phân chứa đầy các chức năng mà một tệp thực thi có thể sử dụng nhanh chóng. Rắc rối là một mặt, dự án nguồn mở đó luôn thay đổi và nhận được các bản cập nhật rất thường xuyên, mặt khác, các chương trình được mã hóa để hoạt động với một phiên bản cụ thể, tức là phiên bản mà nhà phát triển đã sử dụng tại thời điểm biên dịch. Vì vậy, bạn cần chính xác phiên bản đó hoặc phiên bản tương thích. Sẽ thật dễ dàng nếu mọi nhà phát triển, ví dụ: của CUDA sẽ gửi tất cả các thư viện mà họ đã sử dụng trong quá trình biên dịch.Chúng không phải vì hầu hết là các thư viện tiêu chuẩn rất có thể được sử dụng bởi các chương trình khác và điều đó có nghĩa là mỗi chương trình sẽ rất lớn để tải xuống và lưu trữ tất cả dữ liệu trùng lặp này (nhân tiện, Docker hoặc AppImage chính xác đang làm điều đó để đưa ra giải pháp cho vấn đề này). Do sự cố này, bạn thường có nhiều phiên bản thư viện hệ thống trên hệ thống của mình. Tuy nhiên, nó trở nên phức tạp khi các thư viện không tương thích hoặc xung đột với nhau, ví dụ: bởi vì mỗi lần chỉ có một lib có thể truy cập tài nguyên hệ thống. Trong trường hợp đó, bạn phải tìm phiên bản thư viện tương thích với tất cả các gói đã cài đặt đang sử dụng chúng.
Đó là những gì apt đang cố gắng thực hiện cho mọi cài đặt bạn thực hiện. Nó không phải là AI nên có những giới hạn đối với những gì nó có thể làm. Thông báo về tình huống không thể xảy ra là bạn rõ ràng có xung đột khi cần có hai phiên bản thư viện hoàn toàn không tương thích cùng một lúc. Thông thường, luận văn không phải là thư viện được sử dụng trực tiếp, mà là thư viện mà thư viện cần chạy. Có cả một hệ thống phân cấp phụ thuộc.
Rất hữu ích để truy cập github cho bất kỳ phần mềm phù hợp nào và làm theo hướng dẫn biên dịch. Biên dịch trong Linux thực sự dễ dàng. Nhưng hầu hết thời gian nó là một cơn ác mộng để có được tất cả các phụ thuộc được định vị và cài đặt. Và nếu bạn không sử dụng các phiên bản mới nhất nhưng cũ hơn, bạn không thể sử dụng các phần phụ thuộc mới nhất nhưng bạn cũng cần tìm ra phiên bản mã nguồn nào bạn cần cho từng phần phụ thuộc. Làm điều đó mang lại cảm giác rất tốt về những gì apt đang làm việc.
Do đó, thông báo "nó sẽ không được cài đặt" có thể do thư viện bắt buộc có sẵn và sẽ hoạt động tốt, nhưng bất kỳ phần phụ thuộc nào của chúng đều có xung đột ở đâu đó.
Bây giờ, bạn có thể làm gì?
Bạn có thể giải quyết nó tốt hơn apt khi bạn theo dõi mọi xung đột và sau đó tìm ra ứng dụng nào khác bị ảnh hưởng và sau đó quyết định xem ứng dụng nào quan trọng và ứng dụng nào không.Ví dụ: bạn có thể phát hiện ra rằng trình chặn cài đặt CUDA của bạn là một công cụ nhắn tin mặc định mà bạn không sử dụng. Giải pháp dễ dàng là gỡ cài đặt cái này và tất cả các lib của nó (khi chúng không được sử dụng ở bất kỳ nơi nào khác, apt sẽ làm điều đó). Sau đó apt có thể cài đặt nó.
Thật không may, tôi không biết về bất kỳ công cụ nào cho phép bạn duyệt các cây phụ thuộc đó theo cách để dễ dàng hiểu và theo dõi các kết nối đó.
Tôi cũng gặp những trường hợp này và điều đầu tiên là thử Aptitude. Nó không được cài đặt theo mặc định:
Sudo cài đặt năng khiếu
Aptitude về cơ bản giống với apt, nhưng nó lớn hơn và có nhiều logic hơn để xử lý các trường hợp này. Trong trường hợp những tin nhắn đó, aptitude sẽ cung cấp cho bạn các tùy chọn. Một số có thể là không có thật, chỉ cần nói "không" và bạn sẽ nhận được một số khác. Ví dụ, nó sẽ đề xuất "hạ cấp" một gói. Điều đó có nghĩa là cài đặt một phiên bản cũ hơn. Nó sẽ đề xuất "xóa" một gói hoặc cài đặt các gói bổ sung như một giải pháp thay thế. Vấn đề là nó không cho bạn biết hậu quả là gì, tức là nó không cho bạn biết "nếu bạn hạ cấp ứng dụng này, ứng dụng XYZ có thể không hoạt động bình thường nữa". Nó chỉ cung cấp cho bạn các tùy chọn thoát khỏi tình thế tiến thoái lưỡng nan mà "apt" không thể giải quyết.
Vì vậy, hãy xem xét các đề xuất từ Aptitude, bạn nên xem gói nào bật lên và liệu bạn có thể tự tạo kết nối hay không. Bạn có thể lưu ý rằng có một công cụ liên quan đến việc bạn đã cài đặt gần đây. Nó có thể cung cấp cho bạn một gợi ý cho bất cứ điều gì bạn không sử dụng. Gỡ cài đặt nó và thử lại.
Ngoài ra, hãy khởi động một máy ảo với Ubuntu trống và thử cài đặt nội dung của bạn ở đó có thể rất hữu ích, bởi vì bạn xem liệu bản phát hành Ubuntu có xung đột hay không. Đã đến lúc họ đến những nơi như thế này và đăng một bài càng cụ thể càng tốt.
Hy vọng rằng tôi đã không làm mất bạn cũng như không làm bạn chán và nó nhắm mục tiêu câu hỏi của bạn một chút.
Bây giờ apt nằm ở hậu trường khá phức tạp, bởi vì nó được viết bằng ngôn ngữ cấp thấp và do đó, khá khó để đưa vào các thuật toán phát hiện và giải quyết phức tạp hoặc nâng cao. Nó được tạo ra để trở thành một công cụ nhỏ gọn và mạnh mẽ chạy trên mọi hệ thống (thậm chí là tối thiểu). Và đó là nó.