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はいつも働いた。
m3nda

回答:


28

動作してsudo pacman -S --force <package-name>いるように見えますが、競合するディレクトリは解決しません。そのような場合、sudo rm -rf競合するディレクトリで実行し、その後にsudo pacman -S --force <package-name>動作します。

これでpacman -Syuうまく解決しました。


6
--forceは非推奨です。代わりに--overwriteを使用してください。
アンキットバリアン

7
--forceは私のために働いていますが、
overwrite

3
sudo pacman -Syu --force私のために働いたが、上書きは認識されませんでした。
スパイドン

21

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

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

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

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


2
上記の@umlauteへのコメントを参照してください。紛争はsudo pip install指揮によるものだと思います。おそらく、sudoでpipを使用しないでください?
モジュリト

3

このため、通常はpacmanを介してpipでインストールするパッケージをインストールしていました。しかし、pacmanリポジトリで見つけられないパッケージもあります。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. リストに基づいて、問題のあるファイルを邪魔にならないように移動するには、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

...などなど。

  • ターミナルから出力をコピーし、ファイルに入れます。〜/ work / filesのようにnanoを使用し、私の名前を「files」にしました。

  • 外部情報を削除:

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

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

ファイルを扱う

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

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

  • あなたが本当にそれらを削除したい場合、それは何の理由もありません(DANGER DANGER):while read -r file; do 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シンボリックリンクを削除しても何も機能せず、元に戻すと「ファイルシステムに存在する」というエラーが発生するというかわいい問題がありました。--overwriteを使用した上記の操作ですべてが機能しました。

  • 最後に:

    sudo pacman -Syu


2

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

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

sudo pacman -S --overwrite \*

または

sudo pacman -S --overwrite "*"

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


これは完璧に機能します、ありがとう!
EkriirkE

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.