обновление rpm только для определенной архитектуры

Мы создаем RPM нашего продукта для 32-битных и 64-битных платформ. Название продукта в спецификации оборотов определяется примерно так:

Name: foo

Мы передаем --target i586 в командную строку rpmbuild для создания 32-битных оборотов в минуту и ​​--target x86_64 для создания 64-битных оборотов в минуту. Мы кодируем rpm-архив в установочном каталоге продукта, поэтому у нас может быть одновременно установлена ​​как 32-битная, так и 64-битная версии продукта.

Мы можем просто установить RPM. Например: установка 32-битного и 64-битного вариантов продукта foo, версия v4.1:

rpm -i foo-4.1-i586.rpm
rpm -i foo-4.1-x86_64.rpm

Но когда мы пытаемся обновить 32-битный вариант установленного продукта до версии 4.2:

rpm -U foo-4.2-i586.rpm

rmp удаляет как 32-битные, так и 64-битные варианты установленных продуктов. Это нежелательно. Возникает вопрос: как нам настроить файл спецификации или командную строку rpm, чтобы получить обновление только для выбранной архитектуры? Очевидным решением было бы закодировать арку в имени пакета в файле спецификации, например:

Name: foo-%{_arch}

Но это не похоже на обычный подход к именам пакетов. Пожалуйста, порекомендуйте.


person Alexey Semenyuk    schedule 09.12.2017    source источник


Ответы (1)


--target просто установите макросы% _target,% _target_cpu и% _target_os. Это не гарантирует, что ваша сборка предназначена для целевой платформы (если ваш Makefile не позволяет это). Правильный способ - построить его с помощью mock:

mock -r epel-7-i386 foo.src.rpm

Тогда вы получите r32-битный пакет, и вы сможете обновить только один из них.

person msuchy    schedule 10.12.2017
comment
rpmbuild устанавливает правильную архитектуру в моих двоичных rpms. Поэтому переход на другой инструмент не решит проблему. - person Alexey Semenyuk; 11.12.2017