[devel] abstract TeX dependencies

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Мар 19 01:18:13 MSK 2009


On Wed, Mar 18, 2009 at 08:45:51PM +0600, Michael Pozhidaev wrote:
> >> 1. /usr/bin/latex, /usr/bin/dvips etc.
> >
> > Для зависимостей Requires это предпочтительный вариант.
> > Такие зависимости сейчас генерируются автоматически.
> 
> Есть некоторые случаи, когда требуется только наличие некоторых
> директорий, чтобы туда положить расширения tex, соблюдая возможность
> пользователя самому выбрать tetex/texlive.

При установке rpm автоматически создает недостающие промежуточные
каталоги.  С другой стороны, это создает проблему "ничейных каталогов".
Эту проблему сложно решить хорошо без преумножения сущностей.
Иерархия вложенности каталогов фс не всегда хорошо согласуется
с упорядоченностью зависимостей.  Иначе можно договориться
до того, что все пакеты, которые что-то требуют, должны лежать
в подкаталогах относительно тех пакетов, которые они требуют.
Но этот расклад по смыслу не всегда выполняется.

Короче, не следует преувеличивать эту проблему, и не следует делать её
главным аргументом как распилить пакеты и какие должны быть зависимости.
Конечно, если есть очевидное и инуитивное решение для конкретного
случая, то это решение надо реализовать.  Создание пакета-пустышки,
который владеет каталогом -- это преумножение сущеностей; такое решение
не относится к очевидному и интуитивному, но, в принципе, это возможное
решение.

> Какой из путей более правильный/возможный:
> 1.  включить все подобные директории в отдельный общий пакет, который
> может жить вместе с любым дистрибутивом tex. Сейчас есть tex-common, но
> kirill@ говорит, что включить туда *все* директории, которые могут
> понадобится не так просто. Если я не правильно усёк проблему, пусть
> kirill@ скажет это точнее;

Забейте на эту проблему (пока).  Её можно решить очень строго и совершенно
автоматически: для каждого файла в пакете ставить зависимость на
родительский каталог.  Но мы получим слишком жесткие и нежелательные
зависимости.  Чтобы побороть жесткие и нежелательные зависимости,
придётся у многих пакетов отпиливать базовый пакет-пустышку, который
владеет каталогами.  Я сомневаюсь, что это нужно делать, и что это
реально что-то решает.

> 2. иметь какую-нибудь виртуальную зависимость (которая не ставится в
> rpmdb и разрешается через provides), удовлетворяя которую появляются все
> нужные директории, но удовлетворить её могут как tetex, так и texlive.

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

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

> 3. указать в requires прямо имя директории.

Для конечных пакетов это самое простое и правильное решение.

> Сейчас попробовал попросить
> apt разрешить такую зависимость при установленном texlive. так он
> собрался texlive вообще удалить, что не подходило бы по замыслу.

Увы, апт штука глюковатая.  Но это отчасти решаемо.
Думаю, что в ближайшее время я что-нибудь решу.

> [msp на blard ~]$ sudo apt-get install /usr/share/texmf/fonts
> Reading Package Lists... Done
> Building Dependency Tree... Done
> Selecting tetex-core for '/usr/share/texmf/fonts'

Зависимости /usr/share/texmf/fonts в базе апта нету.

$ $TMPDIR/build/aptbox/apt-cache showpkg /usr/share/texmf/fonts
W: Unable to locate package /usr/share/texmf/fonts
$

apt-get выбрал эту зависимость через pkgRecords, то есть через просмотр
списков %{FILENAMES} в pkglist.classic.bz2.  Выбор через pkgRecords
работает только через командную строку.

$ bzcat /ALT/Sisyphus/{i586,noarch}/base/pkglist.classic.bz2 |./pkglist-query '[%{=NAME}\t%{=ARCH}\t%{FILENAMES}\n]' - |awk '$3=="/usr/share/texmf/fonts"'
tetex-core      i586    /usr/share/texmf/fonts
texlive-base-bin        i586    /usr/share/texmf/fonts
texlive-font-utils      i586    /usr/share/texmf/fonts
$ 

Короче, смысл в этом такой:
1) когда на командной строке говорят 'install foo'; и
2) когда апт рекурсивно разрешает зависимости пакетов; то
работают два совершенно разных алгоритма.
Первый алгоритм называется TryToInstall, а второй -- MarkInstall.

То есть когда Вы сказали 'install /usr/share/texmf/fonts', то по
результату нельзя судить, что будет, если пакет будет содержать
зависимость на /usr/share/texmf/fonts.

> The following extra packages will be installed:
>   tetex-core
> The following packages will be REMOVED:
>   ghostscript-utils kde kdegraphics kdegraphics-kdvi texlive-base
>   texlive-base-bin texlive-extra-utils texlive-font-utils
>   texlive-fonts-recommended texlive-lang-cyrillic texlive-latex-base
>   texlive-latex-recommended texlive-math-extra texlive-metapost texlive-omega
>   texlive-publishers texlive-science
> The following NEW packages will be installed:
>   tetex-core
> 0 upgraded, 1 newly installed, 17 removed and 509 not upgraded.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/63a2918f/attachment-0001.bin>


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