Как извлечь преамбулу об / мин

Я работаю на машине, не основанной на redhat, и мне нужно извлечь информацию Version: xyz и Release: abc из некоторых.rpms, которые передаются через машину.

Как правило, можно сделать:

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

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

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

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

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

2 ответа

Решение

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

В системе с yum используйте createrepo для создания репозитория из этих rpms. XML и sqlite будут сгенерированы с метаданными. Хотя анализ легче, чем двоичный формат rpm, вам придется самостоятельно писать запросы, если вы не используете 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"
Другие вопросы по тегам