[devel] abstract TeX dependencies
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Мар 19 01:32:38 MSK 2009
On Wed, Mar 18, 2009 at 09:44:04PM +0300, Kirill Maslinsky wrote:
> > > Поясню: сложность там в том, что разным сторонним пакетам,
> > > предоставляющим стилевые файлы, шрифты и пр., нужно класть файлы
> > > в целый ряд подкаталогов /usr/share/texmf, согласно TDS.
> > > Все эти подкаталоги запакованы сейчас в tetex-core и в кучу
> > > texlive-пакетов. Чтобы выкинуть их из tetex, нужно его пересобрать.
> > > Чтобы выкинуть их из texlive-*, нужно его тоже пересобрать,
> > > но там списки файлов пакетов генерятся автоматически, списки надо
> > > аккуратно перегенерить, и там могут быть нюансы (тут bga@ лучше знает).
> > >
> > > В целом, я пока не уверен, что это вообще правильный путь -- переносить,
> > > по существу, все стандартные подкаталоги /usr/share/texmf в tex-common.
> > > Но других вариантов пока тоже не вижу.
> >
> > Я что-то потерял нить.
> > Зачем выносить все директории в общий пакет? Недавно же писали,
> > что одинаковые директории можно включать в несколько пакетов,
> > последний удаляемый заберёт их с собой.
>
> В том-то и дело, что если каталоги будут принадлежать сразу нескольким
> несвязанным пакетам (tetex, texlive, стили из сторонних пакетов), то
> каталоги там будут с одним и тем же именем, но не будут уже совпадать
> с точностью до mtime (так как эти каталоги взяты не из одного исходника).
> Правильно я понимаю, что эту ситуацию rpm уже будет рассматривать как
> конфликт?
Нет, конфликта не будет.
Код файлового конфликта в rpm менялся, актуальным следует считать вот этот код.
lib/transaction.c:
884 static int filecmp(const TFI_t fi1, const int ix1, const TFI_t fi2, const int ix2)
885 /*@*/
886 {
887 uint_16 m1 = fi1->fmodes[ix1], m2 = fi2->fmodes[ix2];
888 uint_32 f1 = fi1->fflags[ix1], f2 = fi2->fflags[ix2];
889 const char *u1 = fi1->fuser[ix1], *u2 = fi2->fuser[ix2];
890 const char *g1 = fi1->fgroup[ix1], *g2 = fi2->fgroup[ix2];
891
892 /* both file type and permissions must match */
893 if (m1 != m2)
894 return 1;
895
896 /* ownership must also match */
897 if (strcmp(u1, u2) || strcmp(g1, g2))
898 return 1;
899
900 if ((f1 | f2) & RPMFILE_GHOST)
901 /* one or both %ghost files, no extra check */
902 ;
903 else if (S_ISLNK(m1)) {
904 /* symlinks must have the same target */
905 const char *l1 = fi1->flinks[ix1], *l2 = fi2->flinks[ix2];
906 if (strcmp(l1, l2))
907 return 1;
908 }
909 else if (S_ISREG(m1)) {
910 /* regular files must have the same md5 sum */
911 const char *md51 = fi1->fmd5s[ix1], *md52 = fi2->fmd5s[ix2];
912 if (strcmp(md51, md52))
913 return 1;
914 }
915
916 /* e.g. mtime difference is immaterial */
917 return 0;
918 }
Но кроме файлового конфликта есть ещё rpmverify.
Уточнить поведение 'rpm -Vv' с ходу не берусь.
То есть получается что один каталог расшарен с разным mtime. Что не
фатально, но как бы немножко остается вопрос, какой mtime считать
правильным.
Впрочем, mtime каталога -- очень хрупкая вещь; mtime каталога
автоматически меняется, когда в каталоге создаются или удаляются файлы.
Проверять mtime каталога смысла очень мало.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?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/20090319/6cc0093c/attachment.bin>
Подробная информация о списке рассылки Devel