Изощренное создание %pre скриптлета RPM-пакета из шаблона

Дано:
файл quagga-sysusers.conf («Source3: quagga-sysusers.conf» в RPM-спеке) с таким содержимым:

u @quagga_user@ - "Quagga routing suite user" /run/quagga
g @quagga_user@ -
m @quagga_user@ @quagga_user@
g @vty_group@ -
m @quagga_user@ @vty_group@

При этом хочется использовать этот конфиг systemd-sysusers в предустановочном скриптлете RPM-пакета (%pre). Но нужно шаблоны @quagga_user@ и @vty_group@ заменить на их значения.

Стандартно конфиг systemd-sysusers добавляется в %pre вот так:

%pre
%sysusers_create_package %{name} %{SOURCE3}

что превращается в:

$ rpm -qp --scripts quagga-1.2.4-3-rosa2016.1.x86_64.rpm
preinstall scriptlet (using /bin/sh):

systemd-sysusers --replace=/usr/lib/sysusers.d/quagga.conf - </dev/null 2>&1 || : 
u @quagga_user@ - "Quagga routing suite user" /run/quagga
g @quagga_user@ -
g @vty_group@ -
m @quagga_user@ @vty_group@ 
SYSTEMD_INLINE_EOF

Вот как бы это прогнать через sed? Решение такое:

%pre
%{expand:
%(echo '%{sysusers_create_package %{name} %{SOURCE3}}' | \
sed -e 's,@quagga_user@,%{quagga_user},g' -e 's,@vty_group@,%{vty_group},g')
}

Убеждаемся, что это превратится в то, что нужно:

$ cp -v quagga-sysusers.conf ~/rpmbuild/SOURCES/
$ rpmspec --parse quagga.spec
<...>
%pre

systemd-sysusers --replace=/usr/lib/sysusers.d/quagga.conf - </dev/null 2>&1 || : 
u quagga - "Quagga routing suite user" /run/quagga
g quagga -
m quagga quagga
g quaggavt -
m quagga quaggavt 
SYSTEMD_INLINE_EOF 

Обратите внимание на одинарные кавычки в строке '%{sysusers_create_package %{name} %{SOURCE3}}', иначе двойные кавычки в "Quagga routing suite user" теряются.

Отправить ответ

avatar
  Subscribe  
Сообщать по почте