[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