Различный список установленных пакетов, о которых сообщает rpm, по сравнению с yum

8

Я хочу, чтобы сервер B имел те же настройки, что и сервер A. Сервер A и B имеют одинаковую архитектуру и одно и то же оборудование.

Мой план состоит в том, чтобы иметь список всех установленных вещей на сервере A и установить его, используя список на сервере B, например:

yum -y install $(cat installed.txt)

На сервере А лучше использовать:

rpm -qa > installed.txt

или:

yum list installed > installed.txt  

Списки кажутся разными, и я понятия не имею, почему.

yum list installedимеет 930 строк, в то время как rpm -qaимеет 895 строк, в чем может быть разница?

Джон Смит
источник
Вы diffредактировали результаты (возможно после сортировки)?
Энтон
Я понятия не имею, почему существует разница между выходными данными yum и rpm. Может быть, вы должны попробовать предложение Энтон и сообщить нам, каков результат. Кроме того, для меня обе команды перечисляют одинаковое количество строк, и в соответствии с вашим планом, я бы пошел со rpmсписком, поскольку у него есть список, который можно использовать в yumкоманде вашего сервера b .
Рамеш
моя ставка: также из-за пакетов, установленных "rpm --install package.rpm"
Massimo

Ответы:

4

какая может быть разница?

Основная причина различного количества строк заключается в том, что выводимые данные yumформатируются таким образом, чтобы каждое поле располагалось вертикально (независимо от длины имени пакета и / или номера версии). Это делается с помощью двух строк для перечисления таких пакетов и заполнения второй строки пробелами для правильного выравнивания полей. Следующий вывод (из окна CentOS 6) показывает, что для вывода device-mapper-persistent-data.x86_64пакета используются две строки :

device-mapper-libs.x86_64         1.02.95-3.el6_7.4    @clearos-verified-updates
device-mapper-persistent-data.x86_64
                                  0.3.2-1.el6          @clearos
dhclient.x86_64                   12:4.1.1-49.P1.v6    @clearos-verified-updates

Однако это не единственная причина, и это можно увидеть, массируя выходные данные двух команд перед их сравнением:

Для вывода rpmкоманды:

  1. Сортируйте так, чтобы пакеты, начинающиеся с заглавной буквы, появлялись раньше, чем пакеты с нижним регистром:

    rpm -qa | LC_ALL=C sort
    
  2. Используйте sedкоманду для удаления номеров версий пакета:

    rpm -qa | LC_ALL=C sort r | sed 's/-[^-]*-[^-]*$//' >| installed.rpm
    

Для вывода yumкоманды:

  1. Удалите первые две строки заголовка ( Loaded pluginsи Installed Packages):

    Loaded plugins: etckeeper, fastestmirror
    Installed Packages
    

    Мы можем использовать sedдля этого:

     yum list installed | sed '1,2d;'
    
  2. Мы также можем использовать sedдля удаления всех строк, которые являются продолжением списка пакетов (эти строки начинаются с нескольких пробелов, так что все версии пакетов выстраиваются в линию).

    yum list installed | sed '1,2d;/^ /d;s/\..*//' >| installed.yum
    

Теперь мы можем использовать diffкоманду для сравнения выходных данных двух файлов. Вот результаты из коробки CentOS 6:

# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey

Вывод

Это показывает, что rpm -qaтакже включает в себя списки пакетов для открытых ключей, которым доверяют подписывать пакеты, в то время как yumкоманда пропускает эти пакеты.

Энтони Геогеган
источник
Некоторое время назад, но никогда не поздно, большое спасибо за ваш полезный анализ и заключение!
Джон Смит
@johnSmith Лучше поздно, чем никогда! :) Я помню, как потратил немного времени на это, но я подумал, что это интересный вопрос. Ответ на такие вопросы может быть хорошим способом обучения сам по себе.
Энтони Геогеган,
6

В списке yum 930 строк, а в rpm -qa 895 строк. Какая разница?

Это скорее всего только различия форматирования. yum list сделает кучу умных обёрток к размеру вашего терминала.

Что вы, вероятно, хотите сделать, это использовать:

# Run this on the master server
yum-debug-dump

# Run this on the new server, with the input from the above.
yum-debug-restore
Джеймс Антилл
источник
спасибо за ответ, после установки yum-utils на новом сервере и запуска "yum-debug-restore master_out.gz" он говорит, что для каждого пакета, который недоступен, я что-то пропустил?
Джон Смит
Если они не являются идентичными серверами (например, другой архив или новый имеет более старые пакеты), вы можете использовать параметры --ignore-arch и / или --install-latest для восстановления.
Джеймс Антилл
Я предлагаю скопировать содержимое мастера /etc/yum.repos.d/* на новый сервер перед запуском yum-debug-restore
Сергей Власов
1

Я не совсем уверен, почему списки отличаются, но я знаю, что rpm -qa > installed.txtэто правильный способ найти все установленные пакеты. Это будет выглядеть yum installedтак же, как и rpm installed.

Кроме того, формат rpm -qaвывода будет лучше работать с yum installкомандой, которую вы хотите выполнить.

Jeight
источник
0

yum list installed дает мне вывод, как показано ниже.

pam_krb5.i386                        2.2.14-22.el5                     installed

Теперь, rpm -qaесть ниже, чтобы сказать.

pam_krb5-2.2.14-22.el5

Обе команды дают мне столько же строк, сколько выводятся. Я бы пошел со rpm -qaсписком.

Кроме того, из этого ответа я вижу ниже информацию.

есть программа «rpm», которая манипулирует конкретно пакетами, с которыми ей приходится работать, и «yum», которая является более интеллектуальной системой управления, которая может находить зависимости и загружать файлы .rpm, даже если они не находятся в система.

Таким образом, разница может быть yumразрешена зависимости, но rpmустановил все зависимости, и поэтому он предоставляет более полный список.

Я вижу фактическую разницу между yumи rpmкак ниже.

Наиболее заметной проблемой rpmявляется состояние, которое большинство людей называют адом зависимости . Эта проблема возникает с пакетами, которые зависят от множества других пакетов, некоторые из этих пакетов также зависят от множества других пакетов. Общеизвестно, что для корректной работы программы необходимо установить все зависимости. rpmне может автоматически сделать это для вас. Он может только проверить, установлены ли все необходимые пакеты, до установки необходимого пакета. Отслеживание и установка каждой зависимости вручную - основная задача для большинства людей, которые изначально хотят установить только один пакет.

yumспособен отслеживать зависимости пакета и устанавливать их до установки пакета, который пользователь хотел установить. Это упрощает весь процесс, поскольку вам нужно знать только имя пакета, который вы хотите установить, и не беспокоиться о том, установлены ли требуемые пакеты или нет. Пакеты, которые не могут быть найдены в системе, ищутся в репозиториях, доступных для системы.

Ссылки

http://www.differencebetween.net/technology/difference-between-yum-and-rpm/

Рамеш
источник
спасибо за ответ, для меня в yum list установлено 940 строк, а в rpm -qa 895 строк, есть идеи, какая разница?
Джон Смит
@johnSmith, Yumобрабатывает зависимости и выбирает пакеты для их заполнения. Yumэффективно выполняет ту же команду, что rpmи включает в себя все пакеты, необходимые для сопоставления зависимостей.
Рамеш
yumэто находка для управления зависимостями пакетов, но это не имеет значения, когда просто перечисляет пакеты, установленные в системе. Посмотрите Джеймса и мой ответ на причину разницы.
Энтони Геогеган
0

yum list installed Можно создать двухстрочный вывод, если имя пакета и версия пакета длинные.

Ян Геррит Коутстра
источник
Этот ответ может быть коротким, но он правильный (так что голосование).
Энтони Геогеган