インストールされているRHELとその派生パッケージの弱い依存関係パッケージの両方を削除する方法

インストールされているRHELとその派生パッケージの弱い依存関係パッケージの両方を削除する方法

install_weak_deps=Falseこれを設定すると、/etc/dnf/dnf.conf後でdnfインストーラを使用するときに弱い依存パッケージをインストールするのを防ぐことができます。

しかし、このオプションを設定する前にインストールされているすべてのパッケージをどのように一覧表示できますか?

システム全体で弱い依存関係でインストールされているすべてのパッケージを削除したいと思います。

答え1

パッケージAが依存関係Bなしで動作している場合、パッケージAの仕様ファイルでは弱い依存関係のみを使用できます。つまり、パッケージ A はパッケージ B のインストールにのみ「推奨」されます。

パッケージBが存在するかどうかを確実に判断する方法はありません。以前は弱い依存性(だからAが引き寄せる)後ろにBがインストールされました。完全なyum / dnfログファイルにアクセスでき、注意深く研究したいという意志がなければ!

これは、Bが手動でインストールされたか、パッケージCの弱い依存関係またはパッケージDのハード依存関係(「require」)としてインストールされた可能性があるためです。

答え2

あなたは得ることができません精密リスト。

しかし、比較的単純なスクリプトを使用して削除すると、合理的な近似を得ることができます。

dnf repoquery --userinstalledDNFの観点から手動でインストールされたすべてのパッケージを一覧表示します(これは実際に手動でインストールする必要がある理由はさまざまですが、私たちの目的とは特に関係ありません。

dnf repoquery --installedインストールされているすべてのパッケージを一覧表示します。

dnf repoquery --requires pkgハード依存関係をリストしましたpkg

dnf repoquery --whatprovides pkg上記のコマンドの出力は--requires特定のパッケージに変換できます。

これら4つのコマンドを使用すると、次のシェルスクリプトを使用して、手動でインストールされていない明示的に依存していないすべてのパッケージのおおよそのリストを生成できます。

#!/bin/bash

# Get the list of all installed packages
installed="$(dnf repoquery --installed)"

# Generate a list of all hard dependencies by iterating over each dependency of each installed package.
required=""
for pkg in ${installed}; do
    for dep in $(dnf repoquery --requires "${pkg}"); do
        required="${required}\n$(dnf repoquery --whatprovides "${dep}")"
    done
    # Remove any duplicates from the list of hard dependencies (done each time we finish a package’s dependencies to minimize memory usage).
    required="$(echo "${required}" | sort -u)"
done

# Iterate over each manually installed and explicitly required package, removing them from the list of all installed packages
notrequired="${installed}"
for pkg in $(dnf repoquery --userinstalled) ${required}; do
    notrequired="$(echo "${notrequired}" | grep -v "${pkg}")"
done

# Print the final list of packages that are not required.
echo "${notrequired}"

残念ながら、これは時間がかかります長いランタイム(新規インストールにも数分かかることがあります)とかなりの量のメモリを使用できます。最終的に印刷されるパッケージのリストは、DNFがユーザーが直接インストールしていないと思うものであり、インストールされたパッケージへの厳しい依存関係ではありません。これはない正確に以下の理由により、ソフト依存関係でインストールされたパッケージのリストと同じです。

  • 一部は元々ソフト依存関係として導入されていましたが、後で手動でインストールされているか、後でインストールされたパッケージのハード依存関係である可能性があります。
  • 実際には、DNF が特定のパッケージを手動でインストールするか自動的にインストールするかを変更できます。
  • これ可能グループをインストールしてインポートしたパッケージも一覧表示されます(グループを使用していないためわかりません)。

関連情報