[devel] Re: perl-5.8.0-alt0.3 (important)

=?iso-8859-1?q?at_=CE=C1_turbinal=2Eorg?= =?iso-8859-1?q?at_=CE=C1_turbinal=2Eorg?=
Сб Окт 19 03:42:41 MSD 2002


On Sat, Oct 19, 2002 at 02:26:12AM +0400, Mikhail Zabaluev wrote:
> CPAN явно не место в perl-devel.
> Hint: perl-CPAN?

Не знаю. Я хотел бы избежать дальнейшего дробления основных перловых
пакетов. По плотности зависимостей -- никуда кроме как в perl-devel его
сейчас деть нельзя, да и perl-devel из-за него начинает хотеть libnet,
libwww и т.п.

Да, наверное, стоит сделать perl-CPAN.

> Я бы вообще не задавался идеей ставить только perl-base
> в какой бы то ни было инсталляции. Наоборот, лучше было
> бы отпилить от пакета perl те модули, которые требуют
> нетривиального, типа DB*_File и GDBM_File, и объединить
> его c perl-base. Пользователям Junior может стать

Сюрприз, сюрприз! Я так и сделал. Вот что у меня на эту тему в спеке.

%files base
# perl-base modules
	%privlib/AnyDBM_File.pm
# dbm stuff: include only one in perl-base to satisfy AnyDBM_File;
# proirities according to AnyDBM_File.pm
%if_with ndbm
	%archlib/NDBM_File.pm
	%autolib/NDBM_File
%else
%if_with db
	%archlib/DB_File.pm
	%autolib/DB_File
%else
%if_with gdbm
	%archlib/GDBM_File.pm
	%autolib/GDBM_File
%else
%if_with sdbm
	%archlib/SDBM_File.pm
	%autolib/SDBM_File
	%autolib/sdbm
%endif
%endif
%endif
%endif

%files
# dbm stuff
%if_with ndbm
%if_with db
	%archlib/DB_File.pm
	%autolib/DB_File
%endif
%if_with gdbm
	%archlib/GDBM_File.pm
	%autolib/GDBM_File
%endif
%if_with sdbm
	%archlib/SDBM_File.pm
	%autolib/SDBM_File
	%autolib/sdbm
%endif
%else
%if_with db
%if_with gdbm
	%archlib/GDBM_File.pm
	%autolib/GDBM_File
%endif
%if_with sdbm
	%archlib/SDBM_File.pm
	%autolib/SDBM_File
	%autolib/sdbm
%endif
%else
%if_with gdbm
%if_with sdbm
	%archlib/SDBM_File.pm
	%autolib/SDBM_File
	%autolib/sdbm
%endif
%endif
%endif
%endif

> Есть гарантия, что это не приведёт к крэшам при использовании
> несовместимых модулей? Соответствие ABI проверяется при
> динамической загрузке?

Нет. Полную гарантию может дать только...

Соответствие API/ABI должен проверять дистрибутив, и он может делать это
лучше, чем inc_version_list.

> Противоречит, но кому охота прописывать зависимость от версии
> perl во все пакеты?
> Или жёстко (полу-)автоматически привязывать пакеты к версии
> perl и при смене этой версии всё пересобирать?

Нужно жестко зашивать версию ABI в пакеты с бинарным кодом, и при смене
ABI у перла apt должет приказать им долго жить. :) Версию ABI легче
всего идентифицировать по libperl soname.

PreReq: libperl.so.5.8

При этом мы получаем мягкий вариант контроля бинарной совместимости как
минимум для всех perl-5.8.x, т.е. на достаточно долгое время. Если
perl-5.10 будет бинарно совместим с perl-5.8, то:

%package base
Provides: libperl.so.5.8

%install
ln -sf libperl.so.5.10 libperl.so.5.8

При этом все остальные перловые пакеты можно будет не пересобирать, а
при пересборке можно оставлять старый soname. Тогда будет возможность
обновить этот пакет без обновления самого перла. К сожалению, этого не
получится сделать там, где бинарный код явно слинкуется с
libperl.so.5.10.

> Это не ошибка, а недоработка, и с задачей, для которой фича была
> введена, она справляется хотя бы частично.

Если вы предлагаете оставить inc_version_list, скажите об этом явно.

> > Страшно другое: для других пакетов сборка с тредами может быть бинарно
> > несовместима со сборкой без тредов. Так это или нет, я не знаю, и пока
> > даже не знаю, как узнать. Вы не в курсе?
> 
> Нет, но скорее всего, несовместима.

Тогда возможный откат на безтредовую сборку может стать очень тяжелым (в
смысле частичного обновления, которое приводит к крэшу). Лучше сразу
предусмотреть такую возможность.

Как лучше сделать?

1) виртуальные provides. Так сделано в RH:
Provides: perl(:WITH_ITHREADS)
Provides: perl(:WITH_THREADS)

2) дальнейшее усложнение soname:
libperl-ithreads.so.5.8
libperl-nothreads.so.5.8

Второе проще по части сборки остальных пакетов, но нельзя предусмотреть
в soname все возможные комбинации различных флагов сборки, которые могут
привести к бинарной несовместимости.

3) оставить пока libperl.so.5.8;
при откате назвать libperl-nothreads.so.5.8.
Так и сделаем.

> > > > название каталога в любом случае условно и не всегда/не вполне
> > > > соответствует действительности.
> > > 
> > > Оно соответствует некоторому выбору флагов при сборке, который стоит
> > > отличать от других возможных наборов флагов.
> > 
> > Это имеет смысл, но этим нельзя всерьёз увлекаться в дистрибутиве с
> > сильным контролем зависимостей.
> 
> Не понял, при чём здесь контроль зависимостей? И что значит "сильный"?

В целом же, я думаю, что мы хорошо понимаем друг друга.

В целостном состоянии дистрибутива на основе apt/rpm невозможно
одновременное существование бинарно несовместимых пакетов. По этой
причине нет смысла учитывать флаги сборки в названии archlib.




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