Không thể khắc phục sự cố, bạn đã giữ các gói bị hỏng


216

Sau khi nâng cấp từ 10.04 lên 12.04, tôi đang cố gắng cài đặt các gói khác nhau. Ví dụ: ia32-libs và skype (4.0).

Khi cố gắng cài đặt những thứ này, tôi nhận được thông báo 'Không thể sửa lỗi, bạn đã giữ thông báo lỗi của các gói bị hỏng'.

Đầu ra của lệnh:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Sau khi chạy này:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

3
Nó có thể hữu ích nếu bạn chỉ cho chúng tôi lệnh bạn thực sự đang thử (chẳng hạn như sudo apt-get install ia32-libs) và đầu ra từ lệnh đó. Ngoài ra, không sudo apt-get dist-upgradehiển thị bất kỳ cập nhật có sẵn?
thomasrutter

3
Tôi không biết có gì sai với câu hỏi của bạn, tôi không thấy bất kỳ lỗi thực tế nào, cũng không phải là lỗi bạn mô tả trong tiêu đề của bạn.
Braiam


Câu trả lời:


237

Thông báo lỗi cụ thể đó có thể chỉ ra rằng bạn đã giữ các gói, nhưng nó cũng có thể chỉ ra một vấn đề khác.

Bạn có thể nhận được một danh sách các gói được tổ chức thực tế với:

dpkg --get-selections | grep hold

Nếu không có, hoặc không có vẻ gì liên quan, thì đó có lẽ là thứ khác. Kiểm tra kỹ đầu ra của lệnh bạn đang thử khi bạn nhận được thông báo lỗi, vì có thể có các đầu mối khác trong đầu ra đầy đủ từ lệnh đó, ngoài thông báo lỗi.

Một phương pháp khắc phục sự cố khác có thể là sử dụng aptitude thay vì apt-get để thử cài đặt gói của bạn:

sudo aptitude install <packagename>

Aptitude sẽ từ bỏ ít dễ dàng hơn và sẽ cố gắng tìm giải pháp có thể liên quan đến sửa đổi các gói khác. Nó có thể cung cấp cho bạn thêm lời giải thích về vấn đề và các tùy chọn để khắc phục nó.

Đôi khi, năng khiếu sẽ quá háo hức để loại bỏ hoặc hạ cấp số lượng lớn các gói để đáp ứng yêu cầu của bạn, trong trường hợp thử lại với các -fthay đổi ưu tiên của nó và giúp đưa ra các giải pháp liên quan đến việc gỡ / hạ cấp các gói ít hơn ngay cả khi nó không phải là tất cả các thay đổi bạn yêu cầu có thể đi trước:

sudo aptitude -f install <packagename>

6
Bất kỳ ý tưởng làm thế nào để mở ra một gói? :-)
Eugene van der Merwe


59
Năng khiếu là hữu ích cho tôi hơn apt-get, cảm ơn vì gợi ý.
szx

9
Một điều cần lưu ý là năng khiếu có thể giúp dễ dàng gây sát thương hơn cho hệ thống của bạn. Ví dụ, nếu apt-get không cài đặt được thứ gì đó do phụ thuộc xung đột, nó sẽ từ bỏ. Tuy nhiên, aptitude có thể cung cấp để đi trước, nhưng gỡ cài đặt một loạt các gói khác để đáp ứng những xung đột đó - hoặc thậm chí hạ cấp các gói. Bạn chỉ cần nhận thức được những gì nó gợi ý và chỉ tiến hành nếu đó là một ý tưởng tốt.
thomasrutter

4
Các gói "tạm dừng" không liên quan gì đến thông báo, chỉ là tránh xung đột bằng cách giữ chúng (không cài đặt, nâng cấp, hạ cấp hoặc xóa).
Braiam

33

Điều đó xảy ra với tôi quá. Tất cả tôi đã làm là sudo apt-get updatevà điều đó đã khắc phục vấn đề của tôi. Chúc may mắn.


9

Tôi gặp phải một kịch bản tương tự liên quan đến việc thiếu phụ thuộc. Trong trường hợp của tôi, tôi đã cố gắng cài đặt curl trên salamander ub Ubuntu saucy 13.10 ...

Lỗi nói rằng sự phụ thuộc yêu cầu một phiên bản trước đó của thư viện curl3.

Tôi đã có thể hạ cấp xuống phiên bản trước bằng cách cài đặt curl bằng aptitude.

Khi nó ghi nhận sự phụ thuộc bị thiếu và lý do (yêu cầu một phiên bản cũ hơn của tệp thư viện), nó đã cho tôi một số tùy chọn trong cách trả lời ... y// n/q

Ysẽ hủy bỏ cài đặt, Nsẽ tìm kiếm một tùy chọn khác, và Qchỉ cần thoát ra và không làm gì thêm, để lại một gói bị hỏng.

Tôi đã chọn Nvà nó cho tôi tùy chọn hạ cấp tệp thư viện xuống phiên bản cũ hơn. Vì vậy, đó là những gì tôi đã làm, và hoàn thành cài đặt không có lỗi nữa.

  • Tôi có thể xem xét nâng cấp tệp thư viện một lần nữa sau khi cài đặt, nhưng này, cho đến nay vẫn tốt.

9

Tôi đã có một kịch bản tương tự trong bản cài đặt mới 14.04, không có tệp nào được liệt kê dpkg --get-selections | grep holdvà không có niềm vui nào sau đó sudo apt-get update.

Những gì đã sửa nó cho tôi là một đơn giản

sudo apt-get autoremove

Khi tôi cố cài đặt lại gói bị lỗi, nó hoạt động tốt. Yay!


4

Có cùng một vấn đề, tôi chạy lệnh kiểm tra gói đó từ câu trả lời khác ( dpkg --get-selections | grep hold) và thấy

tomcat7                                         deinstall
tomcat7-common                                  install

vì vậy tôi đã sử dụng " apt-get remove tomcat7-common"

Sau đó, tôi có thể cài đặt Tomcat 6 (Tôi đã gỡ bỏ Tomcat 7 và cài đặt Tomcat 6 như bạn làm).


Các gói "tạm dừng" không liên quan gì đến thông báo, chỉ là tránh xung đột bằng cách giữ chúng (không cài đặt, nâng cấp, hạ cấp hoặc xóa)
Braiam

thêm thanh lọc cờ: apt-get remove - gói gói
Sergio Abreu

4

Đây là một số cách nhanh chóng và dễ dàng để sửa you have held broken packageslỗi.

  • Mở tệp nguồn.list của bạn /etc/apt/sources.listvà kiểm tra xem không có bất kỳ nguồn phần mềm nào cho bản phát hành Ubuntu khác với bản phát hành Ubuntu mà bạn hiện đang sử dụng. Nếu bạn tìm thấy bất kỳ dòng phát hành không chính xác trong sources.list, mở file sources.list với sudoedit /etc/apt/sources.list, nhận xét ra các dòng không chính xác trong sources.list bằng cách đặt trước chúng với một #nhân vật, lưu tập tin sources.list, và chạy sudo apt updateđể cập nhật danh sách các gói phần mềm có sẵn.

  • Chọn tùy chọn Fix Broken Gói trong trình quản lý gói Synaptic. Chạy các lệnh sau để cài đặt Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Mở Synaptic và trong Synaptic chọn Chỉnh sửa -> Khắc phục các Gói bị hỏng và sau đó lặp lại Chỉnh sửa -> Sửa Gói bị hỏng lần thứ hai.

    Trong Synaptic ở khung bên trái, nhấp vào nút Bộ lọc tùy chỉnh được đánh dấu bằng con trỏ chuột trong ảnh chụp màn hình bên dưới. Từ danh sách ở góc trên cùng bên trái, chọn Broken . Trong khung trung tâm sẽ được liệt kê bất kỳ gói bị hỏng nào vẫn cần phải sửa chữa.

    hiển thị các gói bị hỏng trong Synaptic

    Chọn các gói bị hỏng một lần. Chọn một gói bị hỏng, và sau đó mở thiết bị đầu cuối và chạy . Kết quả của lệnh này sẽ cho bạn biết nếu gói bị hỏng đó được cài đặt từ kho Ubuntu mặc định hoặc từ một số nguồn khác. Nếu gói bị hỏng được cài đặt từ một số nguồn khác, có thể gói đó có thể được gỡ bỏ cùng với nguồn phần mềm của nó và được thay thế bằng một phiên bản khác của cùng gói từ kho lưu trữ Ubuntu mặc định. Thông thường, điều này có nghĩa là sửa một gói bị hỏng bằng cách hạ cấp gói đó xuống phiên bản cũ hơn.apt policy <package-name>

  • Nếu bạn nhận được thông báo lỗi này:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Chạy các lệnh sau:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Tự tay gỡ bỏ một gói bị hỏng.

    1. Tìm gói của bạn trong /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Di chuyển thư mục gói đến một vị trí khác.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Chạy lệnh sau:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

Nếu tất cả các phương thức này không hoạt động thì có thể các gói bị hỏng là do thứ gì đó được nhúng quá sâu vào hệ điều hành mà không có phương pháp nào trong số này có ảnh hưởng đến nó. Nơi rõ ràng đầu tiên để tìm kiếm "cái gì đó" được nhúng sâu này là trong các nguồn phần mềm /etc/apt/sources.list. Kiểm tra tệp nguồn.list để xem liệu nó có chứa bất kỳ dòng không chuẩn nào có thể gây ra lỗi gói bị hỏng không. Tệp Ubuntu.list chuẩn của Ubuntu trông giống như các tệp records.list trong câu trả lời này .

Cách chính xác để xóa một dòng đáng ngờ khỏi nguồn.list là nhận xét nó bằng cách đặt trước nó bằng một #ký tự. Sau đó chạy sudo apt updateđể làm mới danh sách các phần mềm có sẵn.


0

Đối với tôi, không có cái nào ở trên hoạt động được vì hệ thống của tôi không được cập nhật. tôi đã làm

Home Key > Software Updater > Install

và cập nhật hệ thống của tôi; Sau đó, tôi có thể cài đặt gói của tôi bình thường với apt.


0

Tôi gặp vấn đề tương tự xsanekhi cài đặt lại sau khi ppacài đặt thất bại . Như đã xảy ra với yochannah, "không có tệp nào được liệt kê dpkg --get-selections | grep holdvà không có niềm vui sau sudo apt-get update".

Gợi ý apt-getđã cho tôi là

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

Vì câu trả lời của yochannah, tôi có cảm giác phải gỡ bỏ một số gói đã cài đặt trước đó. Và nó là như vậy, tôi đã phải gỡ bỏ tất cả các gói liên quan theo cách thủ công sane, trong số các gói khác xsane-commonlibsanevẫn được cài đặt như ppaphiên bản.

Do đó, xem ra những gì bạn đã cài đặt trước đó và dọn dẹ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.