На моем текущем месте работы мы иногда получаем пакет RPM, и нам говорят обновить нашу среду. Организация, предоставляющая нам обновления, очень слаба в своих процессах и иногда вносит изменения в пакет, не обновляя номер версии и т.д. Поэтому нам приходится слепо устанавливать все, что нам дают (что может занять много времени).

Например: иногда у нас установлен abc-1.2.3.rpm, а затем мы получаем новый abc-1.2.3.rpm, который содержит исправления, но с точно такими же номерами версий! Да. Это глупо, но мы должны иметь дело с этим.

Есть ли способ узнать, соответствует ли конкретный файл RPM тому, который установлен в данный момент? Через MD5SUM, SHA1 или бинарный diff и т.д.?

Чтобы решить эту проблему, мы копируем все RPM, которые установлены в определенном каталоге в нашей системе, а затем выполняем сравнение двоичного файла между ними и любыми новыми файлами (если они имеют совпадающие имена файлов). Если бинарное сравнение показывает другое, то мы устанавливаем этот RPM, а также перемещаем файл RPM в этот «установленный» каталог (для будущего сравнения)

Должен быть лучший способ сделать это. Какие-либо предложения?

1 ответ1

1

На первый взгляд, вы можете рассмотреть что-то, основанное на rpm --verify, но это не позволяет вам спросить: «Являются ли установленные файлы такими же, как в этом файле RPM?', скорее, он спрашивает' являются ли установленные файлы такими же, как перечисленные в базе данных RPM [из установленных пакетов] '

Тем не менее, вы могли бы написать сценарий для аналогичного действия, основанный на «rpm --query --dump --package some.rpm», который бы выводил имена файлов (с MD5), которые затем можно было проверить.

В идеале кажется, что упаковщик действительно должен использовать поле Release.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .