이것을 실행 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를 사용하면 디렉토리를 파일로 덮어쓰거나 파일 및 디렉토리가 충돌하는 패키지를 설치할 수 없습니다.
충돌하는 디렉터리를 삭제해야 합니까? (관련 패키지가 없습니다)
답변1
pacman이 마침내 이 --force
옵션을 더 이상 사용하지 않고 프록시 --overwrite
옵션이 예상대로 작동하도록 만든 후에는 다음 사용 패턴에 유의해야 합니다.
충돌하는 옵션을 맹목적으로 무시하여 재현하는 명령 --force
은 다음과 같습니다.
sudo pacman -S --overwrite \* <package_name>
또는
sudo pacman -S --overwrite "*" <package_name>
까다로운 부분은 처음부터 쉘이 확장되는 것을 막기 위해 와일드카드를 이스케이프 처리하는 것입니다.
답변2
좋아, 잘 작동하는 것 같지만 sudo pacman -S --force <package-name>
충돌하는 디렉터리를 해결하지는 못합니다. 이 경우 sudo rm -rf
충돌하는 디렉터리에서 실행하면 sudo pacman -S --force <package-name>
괜찮을 것입니다.
이제 내 pacman -Syu
결심은 좋다.
답변3
tl;dr: 실행하기 전에 충돌하는 앱을 제거하세요 pacman
.
pacman
(및 기타 패키지 관리자) 예약됨패키지 및 파일 색인그들은 ( pacman --query --list
)를 관리합니다. 특정 파일(예: 구성)은 수정 가능한 것으로 표시되며 업그레이드 프로세스 중에 덮어쓰이지 않습니다(특별한 상황을 제외하고 패키지 관리자는 일반적으로 새 파일을 만들기 전에 이전 파일을 이동합니다). 다른 파일은 수정할 수 없는 것으로 표시됩니다.다른 응용 프로그램이 인덱스를 적절하게 업데이트하지 않고 어떤 방식으로든 이러한 파일을 변경하는 경우 패키지 관리자는 업그레이드 중에 이러한 파일을 어떻게 처리할지 알 수 없습니다.
표준 모드를 사용하여 ./configure && make && sudo make install
설치된 많은 응용프로그램은 다음 명령을 사용하여 제거할 수 있습니다.sudo make uninstall
. 다른 방법으로 앱을 설치한 경우 다른 방법으로 제거해야 할 수도 있습니다. 일반적으로 말하면 좋은 생각입니다.설치 파일의 복사본을 보관하세요일부 장소(예: ~/install
)에서는 이러한 상황에서 해당 프로그램을 안정적으로 제거할 수 있습니다. 충돌하는 파일만 삭제하면 다른 파일이 남게 되어 다른 문제가 발생할 수 있습니다.
다른 패키지 관리자를 사용하여 소프트웨어를 설치할 때 해당 패키지를 시스템 파일에서 격리하는 방법이 있습니다. 이는 버전을 일관되게 유지하고 다른 소프트웨어와의 충돌을 피하려는 소프트웨어 개발 과정과 같이 확립된 모범 사례입니다. 예는 다음과 같습니다:
답변4
너무 오래;
- 문제가 있는 파일 목록을 가져옵니다(팩맨의 출력을 복사하여 파일에 붙여넣기).
- 사용앗새 목록에 대한 파일 경로를 제외한 모든 항목을 제거합니다.
- 사용하지만목록에 따라 문제가 있는 파일을 이동합니다.
- 다시 뛰어
sudo pacman -Syu
.
TLDR을 추가하고 오타를 수정하도록 편집되었습니다.
나는 어리석은 짓을 하고 있지 않다고 확신하지만 두 달 동안 Manjaro를 서너 번 사용한 이후로 업데이트하려고 할 때마다 이 문제에 직면했습니다. 요점은 이것이 해결되었다는 것입니다.
파일 목록을 받으세요.
터미널 창에서 업데이트가 실패하면 다음 메시지가 표시됩니다.
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
...더있다.
터미널의 출력을 복사하여 파일에 넣습니다. 나는 사용했다나노미터내 이름을 "파일"로 지정했습니다.~/작업 문서.
관련 없는 정보를 제거하세요.
cat files | awk '{print $2}' >> ~/work/files2
그러면 각 줄에서 두 번째 "단어"를 가져와서 files2에 인쇄합니다.
프로세스 파일
삭제하거나 이동하거나 이름을 바꿀 수 있습니다.
문제가 발생한 경우 문제를 해결하는 가장 쉬운 방법은 삭제하거나 이름을 바꾸는 것보다 이동하는 것입니다.
mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2
정말로 삭제하고 싶다면 그렇게 할 이유가 없습니다(위험 위험):-r 파일을 읽을 때 sudo rm --"$file" Complete < file 2;
업데이트 중
--overwrite가 작동하려면(pacman이 패키지가 손상되지 않았음을 인식하도록 해야 함) 다음 구문이 필요합니다.
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 심볼릭 링크를 제거하면 아무런 효과가 없으며 다시 넣으면 "파일 시스템에 존재" 오류가 발생합니다. 위의 --overwrite가 나에게 효과적입니다.
마침내:
sudo pacman -Syu