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 каталога смысла очень мало.