LINUX.ORG.RU

RPM и конфигурационные файлы для разных дистрибутивов

 


0

1

Делаю универсальный RPM-пакет для Red Hat и SuSE. Требуется для одного семейства дистрибутивов в /etc/pam.d класть один конфигурационный файл, а для другого - другой, ибо они несовместимы. Вопрос: как лучше это сделать? Делать в %postinst скрипт как-то не хочется, ибо это сломает поддержку управления конфигурационными файлами в RPM, да и не понятно как вручную отличать измененные пользователем конфигурационные файлы от неизмененных.

★★★★★

Вопрос: как лучше это сделать?

Из одного .src.rpm (точнее, из одного спека) собирай разные binary rpm для разных дистрибутивов, а в спеке пропиши разные файлы в зависимости от dist-тэгов.

как вручную отличать измененные пользователем конфигурационные файлы от неизмененных

%config(noreplace)

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

И вот нафига так извращаться? Даже для себя лично (и тем более для других людей, которые потом могут столкнуться со сборкой рпм-а) проще держать 2 отдельных спека для RH и Suse. KISS же.

trancefer ★★
()
Ответ на: комментарий от trancefer

2 отдельных спека для RH и Suse

Ага, и еще два — для mageia и альта, когда захочется и для них пакетировать. И плевать, что они совпадают почти полностью. Офигеть какой KISS!

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Вообще маргинальщина не нужна. Но если не нужно вносить в spec логику определения дистрибутива — логично использовать один.

trancefer ★★
()
Ответ на: комментарий от trancefer

Но если не нужно вносить в spec логику определения дистрибутива — логично использовать один.

Если нужно — тоже, тем более в простейшем случае вроде даного, решаемого как-то так:

# Это в начале спека, прямо в первой строке
# Intentionally fail if building for neither RHEL nor SuSE
%define _pam_config nosuchfile
%if 0%{?rhel}
%define _pam_config %{SOURCE11}
%endif
%if 0%{?suse}
%define _pam_config %{SOURCE12}
%endif

Name: mykewlpackage
# Дальше version, source0, все как положено, потом
Source11: pam_config_for_rhel
Source12: pam_config_for_suse

# Дальше %description, %prep, %build, затем
%install
make install # Ну или что там у вас
%{__install} -Dp -m 644 %{_pam_config} %{buildroot}%{_sysconfdir}/pam.d/pam_config
# И дальше весь остальной спек

Работает у меня несколько лет, только для конфига не в pam.d, а в yum.repos.d, и не для сусе и рхела, а для федоры и центоси (поэтому за дист-тэг %suse не ручаюсь — он наверняка есть, но не факт, что именно %suse).

dexpl ★★★★★
()
Ответ на: комментарий от trancefer

К сожалению, я тут не хозяин-барин и даже решение в виде одного .spec и N бинарных RPM не подходит. По условиям задачки нужен один универсальный бинарный rpm (и один .spec соответственно).

asaw ★★★★★
() автор топика
Ответ на: комментарий от asaw

В OpenStack делают шаблонизатор для spec-файлов. Гуглить по слову renderspec.

Там jinja-шаблоны, которые перед сборкой в rpm-спеки преобразуются. Может тебе такое больше подойдет.

alpha ★★★★★
()
Ответ на: комментарий от asaw

один универсальный бинарный rpm

В rpm-ке только конфиги что ли? Для компилируемого кода один бинарный пакет работать не будет.

alpha ★★★★★
()
Ответ на: комментарий от alpha

Уже прекрасно работает) И даже без статической линковки. Причем, собирается этот пакет в Ubuntu (другая часть условий задачки). Единственная проблема при этом - контексты SELinux.

asaw ★★★★★
() автор топика

Делаю универсальный RPM-пакет для Red Hat и SuSE.

В Etersoft про это, наверное думали: http://wiki.etersoft.ru/Korinf. Основной путь там, как следует из ссылки, разные бинарные rpm, но, вероятно, продумывалось и создание бинарных универсальных rpm. Вот кого и как там спрашивать - это вопрос.

AS ★★★★★
()
Ответ на: комментарий от asaw

Создаете себе грабли на будущее. И стоит ли оно того?

If в спеке всё равно есть, тестировать надо всё равно на обе системы, и т.д. То есть если поддерживать все равно несколько дистрибутивов, то выигрыш от того что бинарный пакет один - практически нулевой.

Ну и, например, сборка в CentOS-based контейнере на Ubuntu не работает для части пакетов, из-за разницы в ядре. И вылезают эти проблемы в совсем неподходящий момент.

alpha ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.