pacman ngôn ngữ tồn tại trên hệ thống tập tin lỗi


38

Tôi đã chạy sudo pacman -Syuvà tôi có một số lỗi thú vị khi đọc:

lỗi: không thể thực hiện giao dịch (tệp xung đột)

và một danh sách dài các tập tin theo sau exists in filesystem. Đầu ra đầy đủ có tại đây: http://ix.io/lLw

Dường như nhiều tệp trong số này không được liên kết với một gói khi tôi kiểm tra chúng pacman -Qo <path-to-file>, nhưng tôi không kiểm tra tất cả. Tôi đã có một kết nối yếu khi tôi chạy pacman -Syu, nhưng tôi gặp lỗi tương tự khi tôi cập nhật sau: http://ix.io/lLx

Tôi nên làm gì? Tôi có nên kiểm tra tất cả các tệp và xóa những tệp không có gói liên quan không? Tôi có nên buộc cập nhật (với sudo pacman -S --force <package-name>?)

Cập nhật

Tôi đã thử chạy sudo pacman -S --force <package-name>và nhận được điều này:

[my-pc]/home/average-joe$ pacman -Qo /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
error: No package owns /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info

Dường như pacman -S --force <packagekhông ghi đè lên các thư mục có chứa tệp. Từ người đàn ông:

Sử dụng --force sẽ không cho phép ghi đè thư mục bằng tệp hoặc cài đặt các gói có tệp và thư mục xung đột.

Tôi có nên xóa các thư mục xung đột? (họ không có các gói liên quan)


5
Tại sao bạn có các tệp xung đột ở nơi đầu tiên? khi sử dụng trình quản lý gói, cố gắng không chạm vào các ngón chân của nó (ví dụ: bằng cách cài đặt phần mềm ở những nơi mà trình quản lý gói nghĩ đúng là của họ; nếu bạn phải cài đặt mọi thứ theo cách thủ công, hãy cài đặt /usr/local/thay vì /usr/)
umläute

1
@ umläute Tôi không chắc chắn chính xác các tệp xung đột đến từ đâu, nhưng tôi nghi ngờ chúng có liên quan đến việc cài đặt docker-compose mà tôi đã cài đặt sử dụng sudo pip install -U docker-compose==1.5.0rc3 trên trang này . Có lẽ sudo pip installmâu thuẫn với pacman?
modulitos

2
@ umläute Nhận -Scập nhật sai (cài đặt một phần, v.v.) sẽ cho bạn kịch bản đó. Trường hợp của tôi --forcelàm việc tất cả các lần.
erm3nda

Câu trả lời:


28

Ok, có vẻ như đang chạy sudo pacman -S --force <package-name>công việc, nhưng nó không giải quyết các thư mục xung đột. Trong các trường hợp như vậy, chạy sudo rm -rftrên các thư mục xung đột, tiếp theo là các sudo pacman -S --force <package-name>công việc.

Bây giờ tôi pacman -Syugiải quyết tốt.


6
- lực lượng bị phản đối; sử dụng --overwrite thay thế.
Ankit Balyan

6
--force đang làm việc cho tôi nhưng --overwrite thì không
Suy luận

2
sudo pacman -Syu --forcelàm việc cho tôi, nhưng ghi đè không được công nhận.
spydon

21

tl; dr: Gỡ cài đặt ứng dụng xung đột trước khi chạy pacman.

pacman(và các trình quản lý gói khác) giữ một chỉ mục các gói và tệp mà họ quản lý ( pacman --query --list). Một số tệp, chẳng hạn như cấu hình, sẽ được đánh dấu là có thể sửa đổi và sẽ không bị ghi đè trong quá trình nâng cấp (ngoại trừ trong trường hợp đặc biệt, trong đó trình quản lý gói thường sẽ di chuyển tệp cũ trước khi tạo tệp mới). Các tập tin khác sẽ được đánh dấu là không thể thay đổi. Nếu một ứng dụng khác thay đổi các tệp đó theo bất kỳ cách nào mà không cập nhật chỉ mục theo đó thì không có cách nào để người quản lý gói biết phải làm gì với các tệp đó trong quá trình nâng cấp.

Nhiều ứng dụng được cài đặt sử dụng ./configure && make && sudo make installmẫu chuẩn có thể được gỡ cài đặt bằng cách sử dụng sudo make uninstall. Nếu bạn đã cài đặt ứng dụng theo một cách khác, bạn có thể phải cài đặt ứng dụng khác. Nói chung, có thể là một ý tưởng tốt để giữ một bản sao của các tệp cài đặt ở đâu đó (ví dụ ~/install) để có thể gỡ cài đặt chúng một cách đáng tin cậy trong những trường hợp như vậy. Chỉ cần loại bỏ các tệp xung đột có thể sẽ khiến các tệp khác nằm xung quanh, điều này có thể gây ra các vấn đề khác.

Khi cài đặt phần mềm với các trình quản lý gói khác, có nhiều cách để tách chúng khỏi các tệp hệ thống. Đây là một thực tiễn tốt nhất được thiết lập ví dụ trong quá trình phát triển phần mềm, nơi bạn thực sự muốn giữ các phiên bản nhất quán và tránh xung đột với các phần mềm khác. Những ví dụ bao gồm:


2
Xem bình luận của tôi để @umlaute ở trên. Tôi nghĩ rằng cuộc xung đột là từ một sudo pip installmệnh lệnh. Có lẽ tôi nên tránh sử dụng pip với sudo?
modulitos

3

Tôi đã cài đặt các gói mà tôi thường cài đặt với pip qua pacman vì điều này. Nhưng một số gói không tìm thấy trong repos pacman. Tôi nghĩ rằng chúng ta nên tránh cài đặt pip với đặc quyền sudo và istead:

pip install pillow --user

Thay vào đó, cờ --user làm cho các gói cài đặt pip trong thư mục chính của bạn thay vào đó, không yêu cầu bất kỳ đặc quyền đặc biệt nào. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user


2

TLDR;

  1. Lấy danh sách các tệp vi phạm (sao chép và dán đầu ra của pacman vào một tệp).
  2. Sử dụng awk để loại bỏ mọi thứ trừ đường dẫn tệp vào một danh sách mới.
  3. Sử dụng trong khi để di chuyển các tệp vi phạm ra khỏi đường đi, dựa trên danh sách.
  4. Chạy sudo pacman -Syulại.

    chỉnh sửa để thêm TLDR và ​​sửa lỗi chính tả

Mặc dù tôi khá chắc chắn rằng mình đã không làm điều gì ngu ngốc, nhưng tôi đã gặp phải vấn đề này mỗi lần tôi cố gắng cập nhật kể từ khi tôi sử dụng Manjaro; ba hoặc bốn lần trong vòng hai tháng. Điểm là, điều này sửa chữa nó.

Lấy một danh sách các tập tin của bạn.

Khi cập nhật thất bại trong cửa sổ terminal, bạn sẽ nhận được điều này:

error: failed to commit transaction (conflicting files)
evilfile: /usr/bin/evilfile exists in filesystem
libx000: /usr/lib/libx000.so.f.u.loser exists in filesystem
accountsservice: /usr/share/locale/ru/LC_MESSAGES/accounts-service.mo.yu.dnt.evn.spk.russian exists in filesystem

... và nhiều hơn nữa.

  • Sao chép đầu ra từ thiết bị đầu cuối và đặt nó vào một tệp. Tôi đã sử dụng nano và đặt tên cho tôi là "tệp", như trong ~ / work / files .

  • Dải thông tin không liên quan:

    cat files | awk '{print $2}' >> ~/work/files2

    Thao tác này sẽ nhận "từ" thứ hai từ mỗi dòng và in ra tệp2.

Xử lý các tập tin

  • Bạn có thể xóa chúng, di chuyển chúng hoặc đổi tên chúng.

  • Nếu một cái gì đó bị hỏng, cách dễ nhất để khắc phục nếu chúng ta phá vỡ nó bằng cách di chuyển nó thay vì xóa hoặc đổi tên nó:
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • Nếu bạn thực sự muốn xóa chúng, điều này không có lý do gì để làm ( DANGER DANGER ): trong khi đọc tệp -r; làm sudo rm - "tập tin $"; xong <files2

Đang cập nhật

  • Để làm cho --overwrite hoạt động, điều chúng ta cần làm để khiến pacman nhận ra gói không bị hỏng, bạn cần cú pháp sau:

    sudo pacman -S package_name --overwrite /location/of/thing

    • Trong trường hợp của tôi: sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • Theo ví dụ: sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • Tôi gặp một vấn đề dễ thương khi tôi xóa symlink libidn2.so.0, không có gì hoạt động và khi tôi đặt lại, tôi đã gặp lỗi "tồn tại trên hệ thống tập tin". Ở trên, với --overwrite, là tất cả những gì làm việc cho tôi.

  • Cuối cùng:

    sudo pacman -Syu


0

Nếu bạn có nhiều tập tin như tôi,

sudo pacman --force -Syyu  

giải quyết mọi vấn đề


tùy chọn - lực lượng không được chấp nhận; sử dụng --overwrite thay thế
Mahmoud Khaled

--overwrite dường như phải chỉ định những gì cần ghi đè. hiện đang sử dụng - buộc mọi thứ đều ổn
xsilen T

0

Sau khi pacman cuối cùng không dùng --forcetùy chọn và để làm cho --overwritetùy chọn thay thế hoạt động như mong đợi, mẫu lưu ý sử dụng phải được lưu ý.

Một lệnh tương đương để tái tạo --forcetùy chọn ghi đè lên bất cứ thứ gì xung đột sẽ là:

sudo pacman -S --overwrite \*

Hoặc là

sudo pacman -S --overwrite "*"

Phần khó khăn là thoát khỏi toàn cầu để tránh vỏ mở rộng nó trước.

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.