web-dev-qa-db-ja.com

pacmanの「ファイルシステムに存在」エラー

私は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を使用すると、ディレクトリをファイルで上書きしたり、ファイルとディレクトリが競合するパッケージをインストールしたりできなくなります。

競合するディレクトリを削除するだけですか? (関連付けられたパッケージはありません)

40
modulitos

実行中のようですSudo pacman -S --force <package-name>は機能しますが、競合するディレクトリは解決されません。このような場合は、Sudo rm -rf競合するディレクトリ、Sudo pacman -S --force <package-name>機能します。

今私のpacman -Syuはうまく解決します。

30
modulitos

tl; dr:pacmanを実行する前に、競合するアプリケーションをアンインストールします。

pacman(および他のパッケージマネージャー)は、管理するパッケージとファイルのインデックスを保持します(pacman --query --list)。構成などの一部のファイルは変更可能としてマークされ、アップグレード時に上書きされません(特別な状況を除き、パッケージマネージャーは通常、新しいファイルを作成する前に古いファイルを移動します)。他のファイルは変更不可としてマークされます。 別のアプリケーションがインデックスを更新せずにこれらのファイルを何らかの方法で変更した場合、パッケージマネージャーがアップグレード中にこれらのファイルをどう処理するかを知る方法はありません。

標準の./configure && make && Sudo make installパターンを使用してインストールされた多くのアプリケーションは、Sudo make uninstallを使用してアンインストールできます。他の方法でアプリケーションをインストールした場合は、それをアンインストールするために別の方法が必要になる場合があります。一般に、このような場合に確実にアンインストールできるように、インストールファイルのコピーを保存のどこかに(たとえば、~/install)おくとよいでしょう。競合するファイルを削除するだけでは、おそらく他のファイルがそのまま残り、おそらく他の問題を引き起こす可能性があります。

他のパッケージマネージャーでソフトウェアをインストールする場合、システムファイルからそれらを分離する方法があります。これは、たとえばソフトウェア開発中に確立されたベストプラクティスであり、バージョンの一貫性を維持し、他のソフトウェアとの競合を回避する必要があります。例は次のとおりです。

21
l0b0

Pacmanが最終的に--forceオプションを非推奨にし、サロゲート--overwriteオプションを期待どおりに機能させるには、以下の使用パターンに注意する必要があります。

競合するものを盲目的に上書きする--forceオプションを再現する同等のコマンドは次のとおりです。

Sudo pacman -S --overwrite \*

または

Sudo pacman -S --overwrite "*"

トリッキーな部分は、シェルが最初に展開しないようにするために、グロブをエスケープすることです。

12
nix

このため、通常はpacmanを介してpipでインストールするパッケージをインストールしていました。しかし、いくつかのパッケージはpacman reposで見つかりません。 Sudo特権とisteadでpipをインストールすることは避けるべきだと思います。

pip install pillow --user

--userフラグを指定すると、代わりにホームディレクトリにpipインストールパッケージが作成されます。特別な権限は必要ありません。 https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install -user

3
lava-lava

TLDR;

  1. 問題のあるファイルのリストを取得します(pacmanの出力をコピーしてファイルに貼り付けます)。
  2. awkを使用して、ファイルパス以外のすべてを新しいリストに削除します。
  3. whileを使用して、リストに基づいて問題のあるファイルを邪魔にならない場所に移動します。
  4. Sudo pacman -Syuをもう一度実行します。

    TLDRを追加してタイプミスを修正するように編集されました

私は愚かなことをしていないと確信していますが、Manjaroを使用して以来、更新しようとするたびにこの問題が発生した可能性があります。 2か月以内に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

...そしてもっとたくさん。

  • 端末からの出力をコピーし、ファイルに入れます。私はnanoを使用し、〜/ work/files

  • 無関係な情報を取り除く:

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

    これにより、各行から2番目の「Word」が取得され、files2に出力されます。

ファイルとの取引

  • それらを削除したり、移動したり、名前を変更したりできます。

  • 何かが壊れた場合は、削除したり名前を変更したりするのではなく、移動して壊れた場合に修正するのが最も簡単です。
    mkdir ~/work/oldfiles while read -r file; do Sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • それらを本当に削除したい場合、それを行う理由はありません(DANGER DANGER):while -r file; do Sudo rm-"$ file";完了<files2

更新中

  • --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シンボリックリンクを削除しても何も機能せず、元に戻すと「exists on filesystem」エラーが発生するというかわいい問題がありました。上記の--overwriteを使用すると、私にとってうまくいきました。

  • 最終的に:

    Sudo pacman -Syu

2
Fin Hirschoff

私のように多くのファイルがある場合、

Sudo pacman --force -Syyu  

すべての問題を解決します。