Computer >> Máy Tính >  >> Hệ thống >> Linux

Cách sửa các gói bị hỏng trong Linux

Cách sửa các gói bị hỏng trong Linux

Các trình quản lý gói Linux, như Apt và DNF, cực kỳ mạnh mẽ và trực quan, nhưng điều đó không có nghĩa là mọi thứ không thể xảy ra sai sót. Đôi khi, một gói cài đặt bị lỗi và bạn phải nhặt từng phần. Trình quản lý gói có khả năng sửa các gói bị hỏng và bỏ qua các bản cập nhật bị hỏng để hệ thống của bạn hoạt động trở lại và tránh những rắc rối trong tương lai. Bài viết này trình bày cách sửa các gói bị hỏng trong Linux.

Những mẹo và thủ thuật này sẽ giúp bạn gỡ rối trong hầu hết các trường hợp. Tất cả chúng đều khá phổ biến, nhưng mọi tình huống đều khác nhau, vì vậy hãy ghi nhớ điều đó khi cố gắng gỡ rối tình huống của riêng bạn.

Sửa các gói bị hỏng trong Ubuntu / Mint / Debian

Apt có một số cờ bạn có thể sử dụng để sửa các gói phụ thuộc bị thiếu hoặc các gói bị hỏng vì lý do này hay lý do khác trong khi cài đặt. Việc sử dụng phổ biến ở đây là cài đặt .deb của bên thứ ba và nhận thấy rằng nó có các phụ thuộc mà bạn không biết. Những phần phụ thuộc đó có thể sẽ không tự được kéo vào và dpkg sẽ phàn nàn rằng gói bị thiếu trong chúng. Trong mọi trường hợp, bạn có thể thử các bước sau.

Cách sửa các gói bị hỏng trong Linux

Trước tiên, hãy chạy bản cập nhật để đảm bảo không có phiên bản mới hơn của các gói bắt buộc.

sudo apt --fix-missing update

Tiếp theo, bạn có thể thử buộc Apt tìm kiếm và sửa mọi phần phụ thuộc bị thiếu hoặc các gói bị hỏng khi bạn cố gắng cài đặt lại gói vi phạm. Điều này thực sự sẽ cài đặt bất kỳ phần phụ thuộc nào bị thiếu và sửa chữa các bản cài đặt hiện có.

sudo apt install -f

Một nơi khác mà lỗi có thể xuất hiện trong cài đặt gói là quá trình cấu hình. Ở hậu trường, dpkg đang chăm sóc phần này, không phải Apt, vì vậy sẽ có lý do là khi một gói bị lỗi trong quá trình cấu hình, dpkg là công cụ cần sử dụng để sửa nó.

Cách sửa các gói bị hỏng trong Linux

Bắt đầu bằng cách cố gắng buộc dpkg định cấu hình lại bất kỳ gói nào bị hỏng hoặc được định cấu hình một phần.

sudo dpkg --configure -a

Nếu điều đó không giải quyết được vấn đề, bạn có thể thực hiện một cách tiếp cận mạnh mẽ hơn. Bắt đầu bằng cách liệt kê bất kỳ gói nào được dpkg đánh dấu là yêu cầu cài đặt lại.

sudo dpkg -l | grep ^..r

Bạn sẽ thấy (các) gói có vấn đề ở đó. Miễn là không có bất cứ thứ gì có vẻ như không thuộc về nơi đó, bạn có thể buộc loại bỏ các gói bị hỏng.

sudo dpkg --remove --force-remove-reinstreq [package name]

Khi hoàn tất dpkg, hãy thử xóa bằng Apt.

sudo apt clean
sudo apt update

Với bất kỳ sự may mắn nào, điều đó sẽ đưa bạn trở lại nơi bạn đã bắt đầu. Nó sẽ không giúp bạn có được các gói bị hỏng mà bạn đã cố gắng cài đặt, nhưng ít nhất Apt sẽ hoạt động trở lại và bạn có thể quay lại sử dụng nó để cố gắng cài đặt gói và các phụ thuộc của nó.

Khóa DPKG vĩnh viễn

Có một vấn đề ít phổ biến hơn với khóa dpkg ngăn bạn làm bất cứ điều gì. Mỗi khi bạn cố gắng sử dụng Apt hoặc dpkg, bạn sẽ gặp lỗi thông báo rằng một ứng dụng khác đã tồn tại… khi chưa.

Thực sự dễ dàng xóa tệp khóa ngăn bạn sử dụng Apt và quay lại làm những gì bạn cần. Đôi khi, các tệp khóa này vẫn còn nguyên sau khi xảy ra lỗi cài đặt hoặc mất điện, làm sai quy trình và ngăn tệp tự động bị xóa. Trong trường hợp này, bạn cần phải tự mình thực hiện.

sudo rm /var/lib/apt/lists/lock

Để có biện pháp tốt, hãy xóa khóa trong bộ nhớ cache.

sudo rm /var/cache/apt/archives/lock

Sửa các gói bị hỏng trong Fedora / CentOS / RHEL

Việc sửa các gói bị hỏng trong Fedora / CentOS / RHEL ít phổ biến hơn, vì yum và dnf thực sự rất hiệu quả trong việc đảm bảo các gói được cài đặt chính xác. Tuy nhiên, đôi khi mọi thứ lẫn lộn trong việc sử dụng gói. Lệnh để thực hiện điều đó trên các hệ thống dựa trên rpm là:

sudo rpm -Va
Cách sửa các gói bị hỏng trong Linux

-V tùy chọn dành cho xác minh, có nghĩa là nó sẽ xem xét và so sánh thông tin trên các tệp đã cài đặt với thông tin được lưu trữ trong rpm cơ sở dữ liệu. Điều này hơi vô ích, vì nó thường sẽ cung cấp cho bạn một danh sách dài các tệp, nhưng nó có thể giúp bạn bắt đầu một nơi nào đó nếu bạn đang gặp sự cố với một ứng dụng cụ thể. Bạn có thể chạy dnf reinstall trên bất kỳ gói nào bạn thấy trong danh sách đó có thể gây rắc rối cho bạn.

sudo dnf --refresh reinstall PACKAGE_NAME

Điều đó sẽ đặt tất cả siêu dữ liệu là hết hạn, vì vậy nó sẽ thu thập thông tin qua mọi kho lưu trữ bạn đã bật và tìm kiếm phiên bản mới của gói đó. Nếu bạn thấy rằng có các phần phụ thuộc bị hỏng với gói đó, DNF có thể sẽ khiếu nại và yêu cầu bạn sử dụng --skip-broken lá cờ. Điều này cũng có thể có nghĩa là bạn không có một hệ thống lưu trữ cụ thể nào được kích hoạt để lấy phần phụ thuộc, vì vậy bạn có thể phải thực hiện một số nghiên cứu ở đó.

Sửa các gói bị hỏng trong Arch

Mặc dù trình quản lý gói của Arch có nhiều điểm giống với Debian, nhưng nó lại là một con thú hoàn toàn khác. Bước đầu tiên để chẩn đoán sự cố của bạn là đảm bảo rằng kho lưu trữ được cập nhật và cố gắng nâng cấp đầy đủ:

sudo pacman -Syu

Nếu nỗ lực cài đặt gói của bạn hoặc thực hiện nâng cấp hệ thống vẫn không thành công, chúng tôi phải xác định nguyên nhân theo những gì thiết bị đầu cuối nói với bạn:

“Gói không hợp lệ hoặc bị hỏng”

Thực hiện các thay đổi đối với “pacman.conf” theo bất kỳ cách nào có thể gây ra sự cố gây ra pacman để ghi nhãn không chính xác các gói là bị hỏng. Thủ phạm có thể xảy ra nhất ở đây là một phần (“.part”) trong bộ đệm ẩn của trình quản lý gói và giải pháp của bạn là xóa nó:

sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete

Luôn có khả năng gói bạn đang cố cài đặt thực sự bị hỏng và không cung cấp siêu dữ liệu hợp lệ cho Arch. Trong trường hợp đó, bạn sẽ phải đợi người bảo trì gói cập nhật nó. Nếu gói được cài đặt trên hệ thống của bạn và gây ra sự cố trong quá trình nâng cấp, hãy xóa gói bằng:

sudo pacman -Rns [package name]

“Không thể khóa cơ sở dữ liệu”

Giống như Debian’s apt, trình quản lý gói của Arch tạo một tệp khóa trong quá trình hoạt động. Nếu bạn gặp sự cố mất điện hoặc pacman gặp phải sự cố gián đoạn khó khăn, nó không thể gỡ khóa ra khỏi, rất có thể để lại tệp khóa.

Trước tiên, hãy tìm hiểu xem một số quá trình trên máy tính của bạn vẫn đang sử dụng tệp:

sudo fuser /var/lib/pacman/db.lck
Cách sửa các gói bị hỏng trong Linux

Trong hình trên, quá trình có ID 121497 đang sử dụng khóa tệp. Nếu bạn tò mò về quy trình và muốn biết thêm thông tin, hãy sử dụng ps :

ps -p [PID#]
Cách sửa các gói bị hỏng trong Linux

Trong trường hợp của tôi, một phiên bản pacman khác sở hữu tệp khóa. Cách an toàn nhất để loại bỏ khóa là trước tiên hãy loại bỏ quá trình đó:

sudo kill [PID#]

Bây giờ quá trình này đã kết thúc, hãy xóa tệp khóa:

sudo rm /var/lib/pacman/db.lck

Bạn có thể đi ngay bây giờ!

“Tệp / Tệp xung đột tồn tại trong hệ thống tệp”

Điều này xảy ra trong quá trình nâng cấp tại đó pacman phát hiện một xung đột. Trước khi sửa bất cứ điều gì, hãy chú ý đến đường dẫn đến tệp mà trình quản lý gói đang phàn nàn.

Điều đầu tiên chúng ta phải tìm ra ai là người sở hữu tệp:

pacman -Qo [path to the file]

Nếu nó thuộc sở hữu của một người dùng chứ không phải một gói khác, chỉ cần xóa nó:

sudo rm [path to the file]

Nếu gói đó thuộc sở hữu của một gói khác, điều an toàn nhất bạn có thể làm là đợi người bảo trì gói tự khắc phục xung đột này. Tuy nhiên, đôi khi đó không phải là một lựa chọn và bạn muốn hoàn thành công việc ngay bây giờ.

Cách đơn giản nhất để thực hiện điều này là sử dụng --overwrite gắn cờ trong pacman . Chỉ biết rằng điều này nói chung là không an toàn và có thể dẫn đến một số ứng dụng không hoạt động chính xác trong hệ thống của bạn. Tôi khuyên bạn nên sao lưu trước khi chạy.

--overwrite cờ cho phép trình quản lý gói của Arch bỏ qua các quy tắc quyền sở hữu đối với một tệp cụ thể và chỉ cần cuộn qua bản cập nhật. Ví dụ:

pacman -Syu --overwrite [file name]

Nếu lệnh trên không hoạt động, hãy thay thế tên tệp bằng đường dẫn tuyệt đối của nó. Một số người dùng đã báo cáo rằng việc xóa dấu gạch chéo ở đầu (“/”) trước đường dẫn khiến lệnh hoạt động khi nó bị cứng đầu.

Các câu hỏi thường gặp

1. Tôi có thể áp dụng các bản sửa lỗi Arch với người trợ giúp AUR không?

Nói chung, có. Thay thế “pacman” bằng trình trợ giúp AUR của bạn trong các lệnh trong hướng dẫn này. Ví dụ:

yay -Qo /path/to/file

2. Những hướng dẫn này có an toàn không?

Đối với hầu hết các phần, mọi hướng dẫn ở đây an toàn như bất kỳ hoạt động quản lý gói nào khác. Ngoại lệ chính là khi bạn đang xóa các tệp khóa. Nếu bạn có cách để làm như vậy, điều quan trọng là phải giết mọi quy trình có thể đang sử dụng các tệp đó trước khi xóa chúng. Luôn nhận thức được hệ thống của bạn đang làm gì. Bạn có thể đã quên một ví dụ về apt hoặc pacman đang chạy ở đâu đó!

Cách tốt nhất là luôn sao lưu hệ thống của bạn trước khi nâng cấp.

3. Tôi nên làm gì nếu tôi làm gián đoạn quá trình cập nhật?

Phá vỡ quá trình cập nhật bằng cách nhấn Ctrl + C , giết chết quy trình của trình quản lý gói hoặc đóng thiết bị đầu cuối sớm sẽ dẫn đến một số mức độ hỏng trong cơ sở dữ liệu gói của bạn, điều này có thể làm phức tạp thêm mọi thứ cho bạn khi bạn cố gắng cài đặt thứ gì đó khác. Để khắc phục sự cố này, hãy xóa bộ nhớ cache và lặp lại cập nhật.

Trong Debian / Ubuntu / Mint / Pop! _OS / v.v.:

sudo apt-get clean

Trong Fedora / CentOS / RHEL:

sudo dnf clean all

Trong Arch:

sudo pacman -Scc

Kết thúc

Hy vọng rằng một trong những bản sửa lỗi này phù hợp với bạn và bạn sẽ hoạt động trở lại bình thường trên hệ thống Linux của mình. Hãy nhớ rằng cách tốt nhất để xử lý một tình huống hoàn toàn không có lợi là cố gắng trở lại như trước đây. Đừng cố gắng vượt qua và thêm nhiều thứ khác để giải quyết sự cố bằng cách thêm nhiều thứ hơn trừ khi bạn biết chính xác mình đang làm gì. Rất có thể bạn sẽ kết thúc với một mớ hỗn độn gồm những thứ bị hỏng mà bạn sẽ khó sắp xếp hơn.

Bạn cũng có thể cần phải dọn dẹp hệ thống Linux của mình để loại bỏ các gói không cần thiết và bị hỏng. Nếu nguyên nhân là do PC cũ không thể hỗ trợ phần mềm mới hơn, bạn cũng có thể sử dụng ba cách này để đưa PC cũ của mình vào sử dụng tốt.