[devel] repocop patches for %post/un_ldconfig

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Апр 15 23:50:00 MSD 2008


On Tue, Apr 15, 2008 at 10:01:21PM +0400, Alexey I. Froloff wrote:
> * Alexey Tourbin <at@> [080415 21:50]:
> > > Ну а информацию о требуемом наборе действий rpmi должен брать из
> > > какого-нибудь /etc/rpm/autoscripts.d. Например, пакет GConf будет
> > В каком виде можно описать эту информацию?
> В самом тупом.  "МАСКА  СКРИПТ".  Сейчас большинство (если не
> все) макросов %update_*/%clean_* отличаются только разбором
> $RPM_ARG1 (или как он там называется).  Почти все эти скрипты не
> принимают аргументов, работают со всеми файлами в системе (а не
> только с файлами из пакетов) и могут запускаться один раз за
> транзакцию.  Может с этого и начнём?
> 
> > Если хочется обрабатывать нетривиальные случаи, то мы закончим
> > языком программирования.  А подходящего языка программирования
> > нет.
> Для нетривиальных случаев есть %post скрипты в пакете ;-)
> 
> Хотя, хотелось бы автоматизировать случаи типа схем GConf или
> info.

Понимаешь, нужно высокоуровневое семантическое описание того, что
находится в пакете.  Тогда можно обрабатывать нетривиальные случаи,
напр. condrestart сервисов.  А также не хочется играть в "большинство"
пакетов, это не игра в проценты, и надёжность должна быть очень высокой.

"МАСКА СКРИПТ" покрывает только самые тривиальные случаи (без
аргументов, которые просто делают какой-то кеш-генерат).  Кроме того,
остаётся открытым вопрос, чем парсить "МАСКУ СКРИПТ".  На Си это писать
глупо, а на шелле это не хочется писать по другой причине -- выбор
средств для модификаций rpmi гораздо сильнее ограничен, чем выбор
средств для модификации rpmb.  Ну, в rpmb можно засунуть всё что угодно,
и в худшем случае просто какие-то пакеты не пересобирутся, но мы потом
просто rpmb поправим к следующему разу (достаточно, чтобы rpmb мог
пересобрать сам себя, но это обычно проверяется).  А если в rpmi что-то
обламывается, то это уже не проблемы разработчиков, а материализация
духов.

Короче тра-ля-ля, нужно думать, может ли эта идея быть универсально
жизнеспособной, то есть не просто для большей половины пакетов, а для
подавляющего числа пакетов (надёжность начинается с 99%), и что делать
с пакетами, которые в это дело не вписываются.  А именно, надо,
например, продумать схему 1) condrestart сервисов;
и 2) control-dump/control-restore.  Можно это делать автоматически,
ВЫВОДЯ (deduce) всю необходимою информацию из хедера пакета, или нет?

Рассмотрим condrestart сервисов.  Условие может быть таким: если
в пакете есть файл %_initdir/foo, то после установки надо запустить
%_initdir/foo condrestart.  Но не все init-скритпы допускают conrestart.
А некоторые ничего не должны делать при condrestart (напр. network;
сейчас в network вообще нет condrestart).  Это накладывает новые
требования на init-скритпы: они должны выполнять некое DWIM-действие
при вызове condrestart.

Можно конечно проверить что если condrestart нет то и спросу нет,
но это глупо.

$ grep condrestart /etc/init.d/network || echo $?
1
$

Рассмотрим другой вопрос: добавление псевдопользователей и псевдогрупп
в систему.  Если в rpm пакете (в списке %files) есть левые
псевдопользователи и псведогруппы, тогда их можно добавлять
автоматически.  Но иногда их нет, а есть лишь демон (бинарь), который
при запуске рассчитывает, что этот пользователь/группа должны быть в
системе.  Тогда уже на автомате ничего сделать нельзя.

Это возвращает меня к начальному постулату: нужно высокоуровневое,
семантическое, декларативное описание того, что именно находится
в rpm пакете (кроме файлов).  Но это противоречит юникс-вею, что типа
всё тупо и прозрачно, и никаких неявных связей нету.  А они есть, и
их не всегда можно вывести.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080415/67ad1e0e/attachment-0002.bin>


Подробная информация о списке рассылки Devel