XY問題の可能性を減らすために、私はPostGISをクリーンな仮想RHEL5インストールにインストールしようとしていますが、大きな制限があります。 (会社として)RHサブスクリプションを持っているかどうかはわかりません。
# yum install postgis
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Setting up Install Process
No package postgis available.
Nothing to do.
emacs
をインストールしようとすると同じエラーがスローされるため、どのパッケージをインストールしようとしているかは問題ではないと確信しています。
VMはインターネットにアクセスできます。
私がやりたいのは、指定したソフトウェアの完全な依存関係グラフを取得することです(明らかに、postgis
)。 yum
は、ジョブを実行するためにこの依存関係グラフをすでに計算している(または取得可能なグラフを1つ持っている)必要があります。
RHEL5マニュアルページ:「repoqueryは、rpmクエリと同様にYUMリポジトリから情報をクエリするプログラムです。」
特定のpostgisの場合:
# repoquery --requires --recursive --resolve postgis
postgresql-libs-0:8.1.23-6.el5_8.i386
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-107.el5_9.5.i686
proj-0:4.5.0-3.el5.i386
システムが64ビットの場合、パッケージ名から「.i386」と「.i686」を削除できます。
Repoqueryからの出力は、たとえば、上記のリストにglibc-commonをリストできないため、完全ではありません。ただし、glibcとglibc-commonの両方がインストールされていない場合、システムは実行されません。
[〜#〜] edit [〜#〜]:エラーは発生しませんが、--recursive
フラグはRHEL5.11では何もしないようで、省略できます。また、--pkgnarrow=all
フラグは、すべての(インストール済み、使用可能など)パッケージがクエリで考慮されるようにします。最後に、bashシェルでより多くの依存関係ツリーを取得する再帰の1ステップで、tee
およびxargs
を使用してrepoqueryコマンドの出力を2番目のrepoqueryコマンドに渡します。
# repoquery --requires --resolve --pkgnarrow=all postgis.i386 | tee >(xargs -r -n 1 -- repoquery --requires --resolve --pkgnarrow=all) | sort | uniq
basesystem-0:8.0-5.1.1.noarch
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-123.el5_11.3.i686
glibc-common-0:2.5-123.el5_11.3.i386
krb5-libs-0:1.6.1-80.el5_11.i386
libgcc-0:4.1.2-55.el5.i386
libstdc++-0:4.1.2-55.el5.i386
openssl-0:0.9.8e-40.el5_11.i686
postgresql-libs-0:8.1.23-10.el5_10.i386
proj-0:4.5.0-3.el5.i386
私がこれを扱っていたときにここにいればよかったと思うこの答えに改善を加えるだけです。
ADDING --recursiveは--tree-requiresの使用時にNOTHINGを行いません
最適なオプションは--tree-requires
オプションです。それが、依存関係の依存関係を含む100%完全な依存関係ツリーを提供するrepoqueryを取得する唯一の方法です。
FROM MAN:--recursive、--whatrequiresとともに使用すると、パッケージを再帰的にクエリします。
私が知る限り、--requires
は--recursive
オプションの有無にかかわらず同じ結果を返します。
すべての依存関係のリストを取得する場合は、repoquery --tree-requires <My-Package>
を実行する必要があります。そうしないと、必要な依存関係がすべてなくなります。
読みやすいリストに入れたい場合は、次のコマンドを実行できます:
sort <(sed -e 's/ [| \\\_]\+\|-[[:digit:]]\+..*\|[[:digit:]]\://g' <(repoquery --tree-requires **YOUR-PACKAGE-HERE**)) | uniq
読みやすい、ソートされた、パッケージ名のみのリストを作成します。 libxcbパッケージでこの例を参照してください。このリストはすべての依存関係であり、依存関係の依存関係が含まれます。
--recursive
コマンドを使用しない場合、--resolve
または--whatrequires
の結果に違いはありません。 --whatrequires
は、標準の依存関係ツリーまたは依存関係リストとは異なる目的を果たします。これを正しく説明するスタックオーバーフローに関する回答は見つかりませんでした(コメントがあります)。
現在、「ツリー形式」コマンドをrepoqueryに追加する機能要求がありますが、現時点ではオプションではないようです。うまくいけば、これがギャップを埋めることに役立ちます。
私がやりたいのは、指定したソフトウェア(明らかにpostgis)の完全な依存関係グラフを取得することだけです。
このために、この記事から推奨されるrpmreaperツールを試してみてください: Fedora、CentOS、またはRHELでのRPMパッケージの依存関係を確認する方法 =
パッケージの要件に選択的にドリルダウンするか、「ドリルアップ」して特定のパッケージに依存するものを確認できるcursesベースのインターフェースを提供します。
ASCII based repoquery --tree-requires
は、数レベルの深さと数千行の長さがある場合、追跡するのが非常に困難です。 rpmreaperの表示は読みやすく、移動しやすいです。
「ドリルアップ」(別名「必須」)を使用して、参照用のSamba RPMでサイクルを見つける簡単な例を次に示します。
これにより、--tree-requires
for(x86_64):
for i in `repoquery --tree-requires --recursive --resolve postgis \
| Perl -nle '/([a-z]+-\d+\.\d+((\.|\-)?\d+)?.*x86_64)/;print "$1"'`; \
do yumdownloader $i; \
done