Làm thế nào để loại bỏ / cài đặt một gói chưa được cài đặt đầy đủ?


62

Tôi đã đi cài đặt bsnes vào một ngày khác và vì lý do cài đặt thất bại. Bây giờ, tôi không thể cập nhật, cài đặt các gói mới hoặc về cơ bản thực hiện bất kỳ lệnh apt-get nào vì tất cả chúng đều cố gắng xử lý gói bị hỏng này và thất bại. Cố gắng cài đặt một gói mới cũng chỉ cam chịu số phận tương tự. Lỗi tôi nhận được là:

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

Tôi đã tìm kiếm trên Google và ở đây trên Hỏi Ubuntu nhưng không tìm thấy giải pháp hoạt động. Cách khắc phục thường được đề xuất là chạy như sau:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

Điều này tuy nhiên không hoạt động. Tất cả các lệnh apt-get đều thất bại với cùng một lỗi như trên và lệnh dpkg không giúp được gì. Một điều khác họ thường đề nghị thanh lọc nó thông qua Synaptic hoặc dòng lệnh, cũng thất bại.

Cảm ơn đã giúp đỡ

Câu trả lời:


60

Đối với người dùng nâng cao, sử dụng có nguy cơ của riêng bạn.

Theo thông báo lỗi sau:

subprocess installed post-installation script returned error exit status 127

Bạn có thể muốn chỉnh sửa /var/lib/dpkg/info/[package_name].postinstvà nhận xét mọi thứ (hoặc tốt hơn nữa, cố gắng hiểu nó và xác định vấn đề), sau đó thử apt-getlại.

Lưu ý rằng mặc dù trong câu hỏi cụ thể này, thông báo liên quan đến "cài đặt sau", nhưng nó có thể đã đề cập đến ví dụ: "xóa trước" hoặc "xóa sau" (trong trường hợp đó, phần mở rộng của tệp sẽ được chỉnh sửa .prermhoặc .postrm) .


2
Thật ra đây là phương pháp tốt nhất. Cài đặt lại dpkgkhông phải lúc nào cũng giúp.
Danatela

2
Cảm ơn đống. Tôi đã phải sửa /var/lib/dpkg/info/[package_name].prermnhưng bài viết của bạn đã cho tôi hướng đi đúng đắn. Chắc chắn cho người dùng cao cấp mặc dù, điều này là rủi ro !
surfurf

Câu trả lời tốt nhất. Cảm ơn! Sửa chữa .prerm.postrmcác tập tin khắc phục vấn đề.
nhiệt áp

42

Khác với những lệnh bạn đã đăng, có một số lệnh khác có thể hữu ích.

  • Autoclean xóa kho lưu trữ cục bộ của các tệp gói được truy xuất.

    sudo apt-get autoclean
    
  • Buộc cài đặt / gỡ bỏ các gói. Sử dụng thận trọng

    sudo apt-get --force-yes install <pkgname>
    

    sudo apt-get --force-yes remove <pkgname>
    

Cũng như mọi khi, bạn có thể sử dụng dpkgđể cài đặt, gỡ bỏ và thanh lọc các gói.

  • Tải về

    sudo dpkg -i <pkgname>
    
  • Tẩy

    sudo dpkg -r <pkgname>
    
  • Thanh lọc

    sudo dpkg -P <pkgname>
    

Cả hai lệnh dpkg và apt-get --force-yes đều trả về cùng một lỗi như tôi đã nhận được trước đó. Autoclean không trả về lỗi nhưng dường như cũng không làm gì với hai gói bị hỏng.
Bijak

@Bijak Bạn chắc chắn đã thử thanh trừng. bsnesCó bạn không?
Người dùng đã đăng ký

Đúng, với dpkg -P, apt-get purge và với Synaptic
Bijak

Đăng kết quả đầu ra củadpkg -l |grep bsnes
Người dùng đã đăng ký

rF bsnes 0,088-7 amd64 Trình giả lập SNES / SuperFamicom chính xác
Bijak

27

Vì vậy, sau khi googling nhiều hơn và thực sự cẩn thận đọc lại các thông báo lỗi, có vẻ như dpkgcần phải cài đặt lại.

sudo apt-get install --reinstall dpkg

Điều khiến cho đây là vấn đề (nếu bất cứ ai tìm kiếm và thấy điều này) là update-alternatives: not foundtrong thông báo lỗi. Ngay sau khi dpkg được cài đặt lại, các gói khác đã tiến hành cài đặt tự động bình thường.


3
Tại sao câu trả lời đúng duy nhất (và được chấp nhận) cho đến nay trong danh sách có ít hơn số phiếu của câu trả lời hàng đầu? +1
David Foerster

đối với một: vì nó không hoạt động đối với các gói không còn có thể tải xuống được "Cài đặt lại linux-image-Extra-4.4.0-65-generic là không thể, nên không thể tải xuống được."
Joe

3
Đây có lẽ giải pháp ít khả năng nhất cho bất kỳ ai đến đây dựa trên tiêu đề của câu hỏi. Nhưng có rất nhiều lý do người ta có thể kết thúc với vấn đề này, vì vậy sẽ có rất nhiều giải pháp "đề xuất cho tôi" được đề xuất này.
michael

Điều này không thực sự hoạt động.
NelsonGon

15

Bạn có thể xóa tệp gói trong /var/lib/dpkg/info/đường dẫn này và cập nhật nguồn.

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update

Sau đó, cài đặt lại gói của bạn sudo apt-get install [package_name]

Bác sĩ


4
Thật ra bạn đã sử dụng tốt hơn sudo rm /var/lib/dpkg/info/[pakege_name].*. Nếu không, bạn cũng sẽ loại bỏ các gói bắt đầu với cùng tên. Dù sao, cảm ơn vì điều này, đó là giải pháp duy nhất hiệu quả với tôi
smac89

13

Nếu vẫn thất bại. Những gì tôi đã làm là lần đầu tiên tôi thay đổi thư mục thành:

cd /var/lib/dpkg/info

sau đó tôi xóa mọi thứ với .postinst:

sudo rm *.postinst

sau đó cập nhật kho lưu trữ

sudo apt-get update

sau đó mọi thứ trở lại bình thường khi tôi làm:

sudo apt-get --force-yes install openjdk-7-jre-headless

6
Điều này loại bỏ tất cả các tập lệnh sau khi cài đặt không chỉ của gói bị ảnh hưởng. Một chút quá nhiệt tình theo ý kiến ​​của tôi. -1
David Foerster

Nếu thật dễ dàng để xác định và chỉ xóa tập lệnh cài đặt cụ thể gây ra sự cố thì đây có thể là một cách rất thuận tiện để xóa gói bị lỗi.
Ian Mackinnon

sau một cơn ác mộng với các vấn đề hạt nhân đổi tên .postinst của hạt nhân bị ảnh hưởng đã khắc phục vấn đề
Andy

5

Nếu vẫn thất bại, bạn có thể gỡ bỏ gói bằng tay dpkg. Chạy sudo dpkg -P bsnesnên thanh trừng bsnes.


2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
endolith

2

Trong trường hợp của tôi apt-get install -flàm việc. Tôi đã cài đặt mysql-workbench-cộng đồng

Đã thử trước đây apt autoclean

Tôi thấy rằng lỗi dpkg do một số phụ thuộc bị thiếu có thể được sửa bằng cách cài đặt trong chế độ bắt buộc (cài đặt phụ thuộc)


0
sudo apt-get install -f --reinstall coreutils init-system-helpers

Sau khi chạy ở trên, bạn có thể cài đặt / nâng cấp / gỡ bỏ / thanh lọc như bình thường cho bất kỳ gói nào.

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.