パックマン「ファイルシステムに存在します」エラー

パックマン「ファイルシステムに存在します」エラー

これを実行し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

長すぎる。

  1. 問題のあるファイルのリストを取得します(パックマンの出力をコピーしてファイルに貼り付けます)。
  2. 使用アッ新しいリストへのファイルパスを除くすべてのエントリを削除します。
  3. 使用しかし、リストに従って問題のあるファイルを移動します。
  4. 再びジャンプsudo pacman -Syu

    TLDRを追加し、ミスを修正するように編集されました。

私は愚かなことをしていないと確信していますが、2ヶ月間Manjaroを3回使用した後に更新しようとするたびにこの問題に直面しました。ポイントは、これが解決されたということです。

ファイルのリストを入手してください。

ターミナルウィンドウで更新が失敗すると、次のメッセージが表示されます。

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

    その後、各行から2番目の「単語」を取得して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

関連情報