2023년 설 연휴 첫 날. kime 팀이 새 판 소식을 알렸다. 내가 보고했던 버그도 해결된 3.0.2 판. 즐거운 맘에 설치를 해보려했는데..
cargo(rust 용 프로그램)가 없다며 투정을 부린다. 흠??
rust 는 설치돼 있었다. cargo
라고 명령을 내리면 틀림없이 동작을 한다. 그런데 꾸러미로는 없다고 나오나보다. 그러니 makepkg 에서 오류가 났겠지.
뭔가 꼬였나보다.. 생각하고 rust
를 재설치하려 했다. 우분투의 apt 와 달리, pacman -S 는 꾸러미가 이미 설치돼 있을 경우 자동으로 재설치로 방향을 바꿔준다.
아무튼 그랬더니?? (또는, 삭제를 먼저하고 설치를 했었는지도 모르겠다. 이것 저것 막 해봤기 때문에..)
이런 불쾌한 문구를 내뱉는다.
resolving dependencies... looking for conflicting packages... Packages (1) rust-1:1.66.1-2 Total Installed Size: 531.98 MiB :: Proceed with installation? [Y/n] (1/1) checking keys in keyring [##############################################################] 100% (1/1) checking package integrity [##############################################################] 100% (1/1) loading package files [##############################################################] 100% (1/1) checking for file conflicts [##############################################################] 100% error: failed to commit transaction (conflicting files) rust: /usr/bin/cargo exists in filesystem rust: /usr/bin/cargo-clippy exists in filesystem rust: /usr/bin/cargo-fmt exists in filesystem rust: /usr/bin/clippy-driver exists in filesystem rust: /usr/bin/rust-demangler exists in filesystem rust: /usr/bin/rust-gdb exists in filesystem rust: /usr/bin/rust-gdbgui exists in filesystem rust: /usr/bin/rust-lldb exists in filesystem rust: /usr/bin/rustc exists in filesystem rust: /usr/bin/rustdoc exists in filesystem rust: /usr/bin/rustfmt exists in filesystem rust: /usr/lib/cargo-credential-1password exists in filesystem rust: /usr/lib/librustc_driver-16cbdf77defe646b.so exists in filesystem rust: /usr/lib/libstd-b8b91f2b1db9cbe6.so exists in filesystem rust: /usr/lib/libtest-752eb30c40700df8.so exists in filesystem rust: /usr/lib/rust-analyzer-proc-macro-srv exists in filesystem rust: /usr/lib/rustlib/etc/gdb_load_rust_pretty_printers.py exists in filesystem rust: /usr/lib/rustlib/etc/gdb_lookup.py exists in filesystem rust: /usr/lib/rustlib/etc/gdb_providers.py exists in filesystem rust: /usr/lib/rustlib/etc/lldb_commands exists in filesystem rust: /usr/lib/rustlib/etc/lldb_lookup.py exists in filesystem rust: /usr/lib/rustlib/etc/lldb_providers.py exists in filesystem rust: /usr/lib/rustlib/etc/rust_types.py exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libaddr2line-891d2a09ac7760d7.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libadler-557164521f933ede.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/liballoc-dc56a79755115f7a.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libcfg_if-170ee0e8a0f15429.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libcfg_if-2cc898f9c85684e4.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libcompiler_builtins-4ed90f65a9d1f725.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libcore-d72567485ed1c754.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libgetopts-9c4355d22782c5c4.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libgimli-ef5dd97fe64e1302.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libhashbrown-57e9d108d57ca0ef.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/liblibc-89aa0c238282627b.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libmemchr-a557d5a797a9154a.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libminiz_oxide-0678e4060c73f010.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libobject-abfc95df5e7f2150.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libpanic_abort-976e802d24942f2e.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libpanic_unwind-5d676c61a1beb116.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libproc_macro-9aae0e05dd5cbae9.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libprofiler_builtins-625321b282abcc12.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/librustc_demangle-5dd17baee73b9ecd.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/librustc_std_workspace_alloc-3eece670ff221d60.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/librustc_std_workspace_core-f91ae436138fa45c.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/librustc_std_workspace_std-19637ff8679d67a6.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libstd-b8b91f2b1db9cbe6.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libstd_detect-f71186579508f7ac.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libtest-752eb30c40700df8.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libunicode_width-d2f8cb27f73d47bd.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/analysis/libunwind-b288d979493a7f7f.json exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-891d2a09ac7760d7.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-557164521f933ede.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-dc56a79755115f7a.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-170ee0e8a0f15429.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-2cc898f9c85684e4.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-4ed90f65a9d1f725.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-d72567485ed1c754.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgetopts-9c4355d22782c5c4.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-ef5dd97fe64e1302.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-57e9d108d57ca0ef.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-89aa0c238282627b.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-a557d5a797a9154a.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-0678e4060c73f010.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-abfc95df5e7f2150.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_abort-976e802d24942f2e.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-5d676c61a1beb116.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libproc_macro-9aae0e05dd5cbae9.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-625321b282abcc12.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.lsan.a exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.msan.a exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.tsan.a exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-5dd17baee73b9ecd.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-3eece670ff221d60.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-f91ae436138fa45c.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_std-19637ff8679d67a6.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-b8b91f2b1db9cbe6.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-b8b91f2b1db9cbe6.so exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-f71186579508f7ac.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libtest-752eb30c40700df8.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libtest-752eb30c40700df8.so exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunicode_width-d2f8cb27f73d47bd.rlib exists in filesystem rust: /usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-b288d979493a7f7f.rlib exists in filesystem rust: /usr/share/bash-completion/completions/cargo exists in filesystem rust: /usr/share/doc/rust/README.md exists in filesystem rust: /usr/share/doc/rust/README.md.old exists in filesystem rust: /usr/share/licenses/rust/COPYRIGHT exists in filesystem rust: /usr/share/licenses/rust/LICENSE-APACHE exists in filesystem rust: /usr/share/licenses/rust/LICENSE-APACHE.old exists in filesystem rust: /usr/share/licenses/rust/LICENSE-MIT exists in filesystem rust: /usr/share/licenses/rust/LICENSE-MIT.old exists in filesystem rust: /usr/share/licenses/rust/LICENSE-THIRD-PARTY exists in filesystem rust: /usr/share/man/man1/cargo-add.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-bench.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-build.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-check.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-clean.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-doc.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-fetch.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-fix.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-generate-lockfile.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-help.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-init.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-install.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-locate-project.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-login.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-metadata.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-new.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-owner.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-package.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-pkgid.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-publish.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-remove.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-report.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-run.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-rustc.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-rustdoc.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-search.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-test.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-tree.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-uninstall.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-update.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-vendor.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-verify-project.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-version.1.gz exists in filesystem rust: /usr/share/man/man1/cargo-yank.1.gz exists in filesystem rust: /usr/share/man/man1/cargo.1.gz exists in filesystem rust: /usr/share/man/man1/rustc.1.gz exists in filesystem rust: /usr/share/man/man1/rustdoc.1.gz exists in filesystem rust: /usr/share/zsh/site-functions/_cargo exists in filesystem Errors occurred, no packages were upgraded.
종합하면 이렇다.
“rust 꾸러미를 설치하려 했으나, 이미 /usr/bin/cargo
등이 설치돼 있기에, 그걸 무시하고 그냥 덮어쓸 순 없다!”
이 문제를 해결하기까지.. 한 한시간쯤 또 인터넷을 뒤져야했다.
역시 모든 답은 ArchLinux 문서에 있었다. 여기에 해법은 있었는데, 늘 그렇듯 해당 지식과 경험이 없으면 읽어도 뭔 얘긴지 잘 알 수가 없다.
아무튼, 여기서 제안하는 바는 이렇다.
- 충돌이 발생한 파일을 다른 꾸러미가 점유하고 있는지 확인.
- /var/lib/pacman/local/package-version/files 이 존재하는지 확인.
꾸러미 점유 여부는 pacman -Qo /path/to/file
로 가능하다. 내 경우는 pacman -Qo /usr/bin/cargo
였다. 소유한 꾸러미가 없다고 나왔다.
이런 경우, /var/lib/pacman/local/package-version/files
을 봐야 하는데, 여기가 손상되었거나 삭제되었을 경우 위와 같은 오류가 발생할 수 있다고 한다. 나한텐 이 디렉토리/파일은 없었다. 어쩌면 pacman -Rns rust
로 삭제됐는지도 모르겠다. (그러나 실제로 꾸러미파일은 지워지지 않은 상태!)
그렇다면 해결책은?
아치 문서에선, 존재하는 파일의 이름을 바꿔주고 다시 설치 작업을 하라고 한다. 예를 들어, /usr/bin/cargo
가 있다고 나오니, 이걸 /usr/bin/cargo-old
등으로 바꾸고 다시 해보라는 의미인데.. 파일이 한 두개가 아닌데..??
이를 위해 -S --overwrite
가 제공된다. 단, 이 선택사항은 남용(?)되어선 안된다는 경고가 붙어있다.
문제는 사용법인데..
# pacman -S --overwrite glob package ' 즉, rust 라면 # pacman -S --overwrite glob rust
아무 생각없이 저렇게 쳤더니 작동을 안한다. (당연하지…)
glob 의 의미를 알고는 있었지만, 용례가 나와있지 않아서 실 사용법을 알지 못했다.
그 뒤에 있었던 삽질은 과감히 생략하고, 간단히 줄여보면 이렇다.
rust 꾸러미는 모두 /usr 디렉토리 밑에 설치된다. 따라서 이런 식으로 해주면 되겠다.
sudo pacman -S --overwrite 'usr/*' rust
성공! (당연히 kime makepkg 도 성공!)
어떤 글에서 맨 앞 / 는 빼라고 하여 그렇게 했다. 넣어도 잘 된다.
또, rust 는 /usr/* 로 되지만, 만약 전혀 다른 디렉토리(/etc/, /usr/)가 있는 꾸러미라면??? 이럴 땐 /*
로 하는 수 밖에.
** ArchLinux 를 1년 쯤 쓰다보니..
아치리눅스엔 여러 자잘한 문제가 많다. 이건 아마도 최신판을 사용하는 구조(Rolling Release)이기에 더욱 그런 듯 하다. 다만, 아치에는 그런 문제들을 해결할 수 있는, 정말 방대한 양을 자랑하는 위키가 있다. 물론, 그 문서를 해독(?)하는 능력이 필요한게 현실이긴 하지만.
** 23.1.23. 이 글을 쓰고 며칠 지나지 않았는데!
이번엔 openshadinglanguage 꾸러미에서 동일한 오류가 발생했다.
바로 overwrite 를 주고 잘 마무리하긴 했는데.. 왜 자꾸 이런 일이 생기는걸까??
한가지 의심이 가는 게 있긴 한데.. 얼마전부터 Discover 를 이용해서 판올림을 가끔 하기 시작했다. 혹시 그게 문제가 되었을까??