pacman“파일 시스템에 존재합니다”오류


38

나는 달렸고 sudo pacman -Syu몇 가지 흥미로운 오류를 읽었습니다.

오류 : 트랜잭션 커밋 실패 (파일 충돌)

긴 파일 목록 뒤에 exists in filesystem. 전체 출력은 여기에 있습니다 : http://ix.io/lLw

로 확인했을 때 이러한 파일 중 많은 파일이 패키지와 연결되지 않은 것으로 pacman -Qo <path-to-file>보이지만 모두 확인하지는 않았습니다. 내가 실행할 때 연결이 약 pacman -Syu했지만 나중에 업데이트 할 때 동일한 오류가 발생합니다. http://ix.io/lLx

어떻게해야합니까? 모든 파일을 확인하고 관련 패키지가없는 파일을 삭제해야합니까? 강제로 업데이트해야합니까 sudo pacman -S --force <package-name>?

최신 정보

나는 달리기를 시도 sudo pacman -S --force <package-name>하고 이것을 얻었다.

[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

pacman -S --force <package파일이 포함 된 디렉토리를 덮어 쓰지 않는 것 같습니다 . 남자에게서 :

--force를 사용하면 파일로 디렉토리를 덮어 쓰거나 충돌하는 파일 및 디렉토리로 패키지를 설치할 수 없습니다.

충돌하는 디렉토리를 삭제해야합니까? (관련 패키지가 없습니다)


5
처음에 왜 충돌하는 파일이 있습니까? 패키지 관리자를 사용하는 경우 발가락을 /usr/local//usr/
두드리지 마십시오

1
@ umläute 충돌하는 파일의 출처를 정확히 모르지만 이 페이지에서 사용하여 설치 한 docker-compose 설치와 관련이 있다고 생각 sudo pip install -U docker-compose==1.5.0rc3 합니다 . 아마도 sudo pip install팩맨과 충돌할까요?
modulitos

2
@ umläute 잘못된 -S업데이트 (부분 설치 등)를 가져 오면 해당 시나리오가 가능합니다. 나의 경우는 항상 --force일했다.
erm3nda

답변:


28

좋아, 그것은 sudo pacman -S --force <package-name>작동 하는 것처럼 보이지만 충돌하는 디렉토리를 해결하지는 않습니다. 이러한 경우 sudo rm -rf충돌하는 디렉토리 에서 실행 한 다음 sudo pacman -S --force <package-name>작동합니다.

이제는 pacman -Syu잘 해결됩니다.


6
-포스가 더 이상 사용되지 않습니다. 대신 --overwrite를 사용하십시오.
Ankit Balyan

6

2
sudo pacman -Syu --force나를 위해 일했지만 덮어 쓰기가 인식되지 않았습니다.
spydon

21

tl; dr : 실행하기 전에 충돌하는 응용 프로그램을 제거하십시오 pacman.

pacman(및 기타 패키지 관리자) 는 자신이 관리하는 패키지 및 파일색인을 유지합니다 ( pacman --query --list). 구성과 같은 일부 파일은 수정 가능한 것으로 표시되며 업그레이드 중에 덮어 쓰지 않습니다 (특별한 상황에서는 패키지 관리자가 일반적으로 새 파일을 만들기 전에 이전 파일을 이동 함). 다른 파일은 수정할 수없는 것으로 표시됩니다. 다른 응용 프로그램이 색인을 적절히 업데이트하지 않고 파일을 변경하는 경우 패키지 관리자가 업그레이드 중에 해당 파일로 수행 할 작업을 알 수있는 방법이 없습니다.

표준 ./configure && make && sudo make install패턴을 사용하여 설치된 많은 응용 프로그램은을 사용하여 제거 할 수 있습니다 sudo make uninstall. 다른 방법으로 응용 프로그램을 설치 한 경우 다른 방법으로 응용 프로그램을 제거해야 할 수도 있습니다. 일반적으로 이러한 경우 설치 파일의 사본~/install 을 안정적으로 제거 할 수 있도록 설치 파일 사본을 어딘가에 보관 하는 것이 좋습니다 ( 예 :). 충돌하는 파일을 제거하면 다른 파일이 그대로 남아있어 다른 문제가 발생할 수 있습니다.

다른 패키지 관리자와 함께 소프트웨어를 설치할 때 시스템 파일에서 소프트웨어를 분리하는 방법이 있습니다. 이것은 예를 들어 소프트웨어 개발 중에 확립 된 모범 사례로, 버전을 일관되게 유지하고 다른 소프트웨어와의 충돌을 피하려고합니다. 예를 들면 다음과 같습니다.


2
위의 @umlaute에 대한 내 의견을 참조하십시오. 충돌은 sudo pip install명령 에서 비롯된 것 같습니다 . 아마도 sudo와 함께 pip를 사용하지 않아야합니까?
modulitos

2

이 때문에 보통 pacman을 통해 pip로 설치하는 패키지를 설치하고있었습니다. 그러나 일부 패키지는 pacman repos에 없습니다. sudo privilegies 및 istead와 함께 pip를 설치하지 않아야한다고 생각합니다.

pip install pillow --user

--user 플래그는 대신 홈 디렉토리에 pip 설치 패키지를 만들며 특별한 권한이 필요하지 않습니다. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user


2

TLDR;

  1. 문제가되는 파일 목록을 가져옵니다 (pacman의 출력을 복사하여 파일에 붙여 넣기).
  2. 파일 경로를 제외한 모든 것을 새 목록으로 제거 하려면 awk 를 사용하십시오 .
  3. 목록에 따라 문제가되는 파일을 방해하지 않는 동안 사용하십시오 .
  4. sudo pacman -Syu다시 실행 하십시오.

    TLDR을 추가하고 오타를 수정하도록 편집

비록 내가 어리석은 짓을하지 않았다고 확신하지만, Manjaro를 사용한 이후로 업데이트하려고 시도 할 때마다이 문제가 발생했을 것입니다. 두 달 안에 3-4 번. 요점은 이것이 고치는 것입니다.

파일 목록을 가져옵니다.

터미널 창에서 업데이트가 실패하면 다음과 같은 결과가 나타납니다.

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

... 그리고 훨씬 더.

  • 터미널에서 출력을 복사하여 파일에 넣습니다. ~ / work / files 에서처럼 nano를 사용 하고 이름을 "files"로 지정했습니다 .

  • 불필요한 정보 제거 :

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

    이것은 두 번째 "단어"를 각 줄에서 가져 와서 files2에 인쇄합니다.

파일 다루기

  • 삭제하거나 이동하거나 이름을 바꿀 수 있습니다.

  • 문제가 발생하면 삭제하거나 이름을 바꾸는 대신 이동하여 문제를 해결하면 해결하는 것이 가장 쉽습니다.
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • 정말로 삭제할 이유가 없다면 ( DANGER DANGER ) : read -r file; sudo rm- "$ file"; 완료 <files2

업데이트 중

  • pacman이 패키지가 깨지지 않았 음을 깨닫게하려면 --overwrite를 작동 시키려면 다음 구문이 필요합니다.

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

    • 나의 경우에는: sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • 예제를 따르면 : sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • libidn2.so.0 심볼릭 링크를 삭제해도 아무 효과가 없었으며 다시 넣으면 "files on 존재하는 파일"오류가 발생하는 귀여운 문제가있었습니다. 위의 --overwrite를 사용하면 나를 위해 일한 모든 것입니다.

  • 드디어:

    sudo pacman -Syu


0

나와 같은 파일이 많으면

sudo pacman --force -Syyu  

모든 문제를 해결합니다.


옵션 --force는 더 이상 사용되지 않습니다. 대신 --overwrite를 사용하십시오
Mahmoud Khaled

--overwrite는 덮어 쓸 내용을 지정해야합니다. 현재 모든 일 --force 사용하는 것은 괜찮습니다
T xsilen

0

pacman이 마지막으로 --force옵션을 더 이상 사용하지 않고 대리 --overwrite옵션을 예상대로 작동하게하려면 다음 사용 패턴을 기록해야합니다.

--force충돌하는 것을 맹목적으로 덮어 쓰는 옵션 을 재생산하는 동등한 명령 은 다음과 같습니다.

sudo pacman -S --overwrite \*

또는

sudo pacman -S --overwrite "*"

까다로운 부분은 쉘이 먼저 확장되지 않도록 글로브를 피하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.