Назад | Перейти на главную страницу

Как извлечь преамбулу rpm

Я работаю на машине, отличной от Redhat, и мне нужно извлечь Версия: x.y.z и Релиз: a.b.c информация из некоторых .rpms, которые проходят через машину.

Обычно можно сделать:

rpm -qip ./Foo.x.y.z.rpm | grep Version | awk ...

Но это не машина на основе Redhat, поэтому у меня нет rpm и я все равно не хочу устанавливать второй менеджер пакетов.

Я думал, что если бы я сделал:

rpm2cpio ./Foo.x.y.z.rpm | cpio -idmv

Затем, когда был извлечен cpio, я нашел файл с именем .preamble или что-то, что может содержать данные. Но не повезло. Кто-нибудь знает другой способ?

Пример использования rpm2cpio - извлечение файлов без метаданных, что противоположно тому, что вы хотите. Он, как и другие инструменты, требует связывания с librpm. Даже Midnight Commander, изучающий файл rpm, использует двоичный файл rpm.

В системе с yum используйте createrepo для создания репозитория из этих rpms. XML и sqlite будут сгенерированы с метаданными. Хотя анализировать проще, чем двоичный формат rpm, вам придется писать запросы самостоятельно, если вы не используете yum. Сохраните реподанные, чтобы у вас было функциональное репозиторий yum.

Поднимаясь на еще один уровень абстракции, инструменты жизненного цикла системы включают управление контентом. А именно Katello или Red Hat Satellite. Немного тяжелый по сравнению со сценарием оболочки, но вы можете получить хосты и пакеты, на которые они подписаны, с помощью API.

Просто продолжайте и устанавливайте rpm. Это самое простое. Он почти наверняка вам доступен в вашем дистрибутиве.

Теперь вы можете использовать форматы запросов RPM для извлечения нужной информации.

Например:

file=/path/to/filename.rpm

name=$(rpm --queryformat "%{name}" -qp $file)
version=$(rpm --queryformat "%{version}" -qp $file)
release=$(rpm --queryformat "%{release}" -qp $file)

echo "This RPM named $name has version $version release $release"