список пакетов в yum, которые зависят от другого установленного пакета

<p>я пытаюсь установить сторонний rpm-пакет на rhel5, который зависит от версии 3.4 sqlite. согласно yum у меня уже установлена 3.3.6.</p><p>есть ли способ перечислить установленные пакеты, которые зависят от sqlite 3.3.6?</p>

<p>опция rpm, которую вы хотите:</p><pre><code>rpm -q --whatrequires sqlite </code></pre><p><strong>отредактировано: добавлено - установлено за обсуждение в других ответах/комментариях</strong></p><p><strong>отредактировано: удалено - установлено, поскольку это неверная опция для rpm</strong></p>

<h1>ответ</h1><pre>\_<code>repoquery -q --installed --whatrequires sqlite </code>\_</pre><h1>пояснения</h1><p>\_<code>rpm -q --whatrequires sqlite</code>\_ сообщает только о зависимостях от имен пакетов.</p><p>напротив, <code>repoquery</code> действует следующим образом (из manpages):</p><pre>\_<code> --alldeps when used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and provides in addition to package names). this is the default. </code>\_</pre><h3>пример</h3><p>давайте возьмем пакет <code>libdb</code>.</p><pre>\_<code># rpm -q --whatrequires libdb no package requires libdb </code>\_</pre><p>никакой пакет не зависит от <code>libdb</code>, поэтому мы должны иметь возможность удалить его плавно. однако...</p><pre>\_<code># yum remove -y libdb loaded plugins: fastestmirror resolving dependencies --> running transaction check ---> package libdb.x86\_64 0:5.3.21-19.el7 will be erased --> processing dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7\_1.1.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7\_2.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7\_2.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86\_64 --> processing dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7\_2.1.x86\_64 --> running transaction check . . . . . . . . . error: trying to remove "systemd", which is protected error: trying to remove "yum", which is protected </code>\_</pre><p>как вы можете видеть, некоторые другие пакеты зависели не от пакета, а от предоставляемого им файла <code>libdb-5.3.so()(64bit)</code>.</p><p>наконец, вот реальный список пакетов в зависимости от <code>libdb</code>:</p><pre>\_<code># repoquery -q --installed --whatrequires libdb cyrus-sasl-lib-0:2.1.26-20.el7\_2.x86\_64 iproute-0:3.10.0-54.el7\_2.1.x86\_64 libdb-utils-0:5.3.21-19.el7.x86\_64 pam-0:1.1.8-12.el7\_1.1.x86\_64 postfix-2:2.10.1-6.el7.x86\_64 python-libs-0:2.7.5-39.el7\_2.x86\_64 rpm-0:4.11.3-17.el7.x86\_64 rpm-build-libs-0:4.11.3-17.el7.x86\_64 rpm-devel-0:4.11.3-17.el7.x86\_64 rpm-libs-0:4.11.3-17.el7.x86\_64 rpm-python-0:4.11.3-17.el7.x86\_64 </code>\_</pre>

<p>для dnf (новая версия yum) вы можете попробовать с помощью команды оболочки repoquery:</p><pre><code>dnf repoquery --whatrequires sqlite </code></pre><p>если он недоступен, вы можете установить его с помощью команды:</p><pre><code>dnf -y install dnf-plugins-core </code></pre>

<p>вы также можете попробовать эту команду.</p><pre><code>repoquery --whatrequires sqlite </code></pre><p>я получил эту команду от <a href="https://superuser.com/questions/294662/how-to-get-list-of-dependencies-of-non-installed-rpm-package">serverfault</a> , а также от <a href="http://forums.fedoraforum.org/showpost.php?p=1523686&postcount=6">форумы fedora.</a> </p>

<p>я думаю, что вы действительно хотите знать, это "какие пакеты требуют sqlite-3.3.6, но не будут рады sqlite-3.4.z" ... и единственный хороший способ выяснить это, это попробуй это. подобно:</p><pre><code>echo | yum upgrade sqlite </code></pre>

<p>как <a href="https://unix.stackexchange.com/a/14601/153578">сказал уэс хардакер</a> , хороший встроенный метод заключается в использовании <code>rpm -q --whatrequires <package></code>. дело в том, что <code>rpm</code> работает с <em> возможностями </em> для разрешения зависимостей, а не просто с пакетами, как, например, <code>dpkg</code> в семействе дистрибутивов linux debian/ubuntu. как отметили другие, просто делать <code>rpm -q --whatrequires sqlite</code> не рассказывает всей истории, поэтому некоторые предлагают использовать <code>repoquery</code>. <code>repoquery</code>, однако, не устанавливается по умолчанию в минимальной rhel/centos 7 (может быть, и для настольного компьютера?), поэтому может быть доступно не для всех.</p><p>пользователь может сделать <code>rpm -q --provides <pkgname></code> чтобы увидеть все возможности, предоставляемые пакетом, затем используйте <code>rpm -q --whatrequires <capability></code> чтобы увидеть, какие установленные пакеты требуют такой возможности. эта информация может быть кратко запрошена с использованием однострочного bash (разделенного здесь на две строки по длине):</p><pre><code>capabilities=($(rpm -q --provides sqlite | awk -f= '{print $1}')); for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done </code></pre><p>при этом используются только параметры, встроенные в <code>rpm</code>, и поэтому не требуется устанавливать никаких дополнительных пакетов (например, <code>yum-utils</code> в centos 7, который представляет собой пакет, содержащий <code>repoquery</code>).</p>