TeXLivePackaging: различия между версиями
Bga (обсуждение | вклад) (Структура репозитария git) |
Bga (обсуждение | вклад) (Формат тегов) |
||
Строка 171: | Строка 171: | ||
;texlive-lang:пакет {{pkg|texlive-extra-2008.0-*.src.rpm}}, потомок {{term|texlive-lang.orig}} и {{term|master}} | ;texlive-lang:пакет {{pkg|texlive-extra-2008.0-*.src.rpm}}, потомок {{term|texlive-lang.orig}} и {{term|master}} | ||
На основании конфига {{path|tpm2deb.cfg}} скриптом {{pkg|tlptool.pl}} в бранче {{term|master}} генерируются (обновляются) шаблоны spec-файлов и список исходников для включения в бранч {{term|*.orig}}. Скриптом {{prg|git-filter-tree}} создаётся коммит в этом бранче, затем он и шаблоны из {{term|master}} мержатся в бранч с пакетом. На итоговые бранчи расставляются теги, позволяющие собирать пакеты на [[git.alt]]. | На основании конфига {{path|tpm2deb.cfg}} скриптом {{pkg|tlptool.pl}} в бранче {{term|master}} генерируются (обновляются) шаблоны spec-файлов и список исходников для включения в бранч {{term|*.orig}}. Скриптом {{prg|git-filter-tree}} создаётся коммит в этом бранче, затем он и шаблоны из {{term|master}} мержатся в бранч с пакетом. | ||
На итоговые бранчи расставляются теги, позволяющие собирать пакеты на [[git.alt]]: | |||
;@name@-@version@-@release@.orig:На бранчи {{term|*.orig}}. Из соответствующего коммита формируется архив с исходниками. | |||
;@name@-@version@-@release@.patch:Вычисляется разница ({{term|diff}}) с предыдущим тегом и оформляется в виде патча. (Сейчас в бранче {{term|texlive-source}}.) | |||
;@name@-@version@-@release@:Пометка для [[git.alt]], указывающая на интересующий релиз пакета. | |||
Поскольку пакеты {{pkg|texlive-base}}, {{pkg|texlive-bin}} и т.д. собираются из разных бранчей, их версии не обязаны совпадать. Однако, рекомендуется придерживаться сквозной нумерации: при необходимости увеличить версию одного из пакетов следует выбрать максимальную среди всех остальных и добавить 1. | |||
=== Настройки === | === Настройки === |
Версия от 18:44, 21 мая 2009
На этой странице описана организация дистрибутива TeXLive версии 2008.0
TeXLive package manager
Официальный дистрибутив распространяется вместе с собственной оболочкой для установки: tlmgr. Логически связанные файлы сгруппированы в пакеты, их описание формирует базу данных: texlive.tlpdb.
Пакеты TeXLive
Описание пакета состоит из
- названия (name)
- категории (category)
- базовая часть (TLCore)
- пакет (Package)
- коллекция (Collection)
- схема (Scheme)
- документация (Documentation)
- краткого описания (shortdesc)
- подробного описания (longdesc)
- списка файлов
- исполняемых (binfiles)
- используемых (runfiles)
- документации (docfiles)
- исходников (scrfiles)
- зависимостей (depend)
- исполняемых команд (execute)
- execute AddHyphen name=TEXLANG file=FILE [прочее] - подключить шаблоны переносов для языка TEXLANG из файла FILE; прочие параметры:
- lefthyphenmin - минимально допустимое количество букв до переноса
- righthyphenmin - минимально допустимое количество букв после переноса
- synonyms - список синонимов
- execute addMap font.map - подключить шрифт font.map в конфиге updmap.cfg
- execute addMixedMap font.map - подключить шрифт font.map в конфиге updmap.cfg в смешанном ("mixed") режиме
- execute BuildFormat FMTCFG - подключить в конфиге fmtutil.cnf все форматы из файла texmf/fmtutil/format.FMTCFG.cnf
- execute AddHyphen name=TEXLANG file=FILE [прочее] - подключить шаблоны переносов для языка TEXLANG из файла FILE; прочие параметры:
- прочего (revision, catalogue-*)
Пример описания пакета 12many:
name 12many category Package revision 7340 shortdesc 12many, generalizing mathematical index sets longdesc In the discrete branches of mathematics and the computer longdesc sciences, it will only take some seconds until you're faced longdesc with a set like {1,...,m}. Only some people write longdesc $1\ldotp\ldotp m$, or $\{j:1\leq j\leq m\}$, and that journal longdesc you're submitting to might want something else entirely. \otm{} longdesc provides an interface that makes changing from one to another a longdesc one-line change. docfiles size=98 texmf-dist/doc/latex/12many/12many.pdf texmf-dist/doc/latex/12many/README srcfiles size=6 texmf-dist/source/latex/12many/12many.dtx texmf-dist/source/latex/12many/12many.ins runfiles size=1 texmf-dist/tex/latex/12many/12many.sty catalogue-ctan /macros/latex/contrib/12many catalogue-date 2007-05-25 16:15:27 +0200 catalogue-license lppl catalogue-version 0.3
Пакетные зависимости TeXLive
Зависимости a la RPM Requires в TeXLive описываются одной или несколькими директивами depend. Пакеты зависят от других пакетов, коллекции - от пакетов, схемы - от коллекций и пакетов (коллекции и схемы не содержат файлов). Специального вида зависимость depend bin-package.ARCH подразумевает выбор конкретного пакета для используемой архитектуры, например, bin-package.i386-linux. Циклических зависимостей (pkg1 ⇒ pkg2 ⇒ pkg1) пока не обнаружено. Пакеты, коллекции, схемы и зависимости между ними можно наглядно изобразить в виде графа (cм. рис.)
Особенности сборки в Debian и ALT Linux
Идея разделить дистрибутив на 5 исходных пакетов родилась в Debian и позднее была позаимствована командой ALT Linux. Поэтому описание сборки в существенной мере будет повторять руководство Debian и Debian TeX sub-policy.
Исходные пакеты
В основанных на RPM дистрибутивах бинарные пакеты получаются пересборкой исходных (src.rpm). Дерево TeXLive поделено на 5 относительно независимых частей:
- texlive-base
- основной набор файлов
- texlive-bin
- исходники компилируемых архитектуро-зависимых программ
- texlive-lang
- поддержка национальных языков
- texlive-doc
- документация
- texlive-extra
- дополнительные файлы
Бинарные пакеты
Строго говоря, большинство файлов TeXLive является текстовыми, за исключением некоторых утилит из texlive-base-bin. Из исходных пакетов собираются следующие бинарные:
- texlive-base:
- texlive-latex-base
- основные файлы LaTeX, достаточные для простых документов
- texlive-latex-recommended
- рекомендуемый набор файлов LaTeX, достаточный в большинстве других случаев
- texlive-fonts-recommended
- рекомендуемый и обычно достаточный набор шрифтов
- texlive-bin:
- texlive-base-bin
- основной набор исполняемых и конфигурационных файлов
- texlive-doc:
- texlive-doc-*
- пакеты texlive-doc-en, texlive-doc-de и т.п., содержащие документацию на соответствующих языках
- texlive-lang:
- texlive-lang-*
- пакеты texlive-lang-dutch, texlive-lang-spanish и т.п. с поддержкой национальных особенностей, например, переносов
- texlive
- виртуальный пакет, зависящий от разумного набора реальных
- texlive-full
- виртуальный пакет, зависящий от всех пакетов TeXLive
Есть и другие пакеты с дополнительными возможностями и шрифтами. Смотрите их описание.
Манипуляции с исходным дистрибутивом
Дополнительно к базе texlive.tlpdb введён конфигурационный файл tpm2deb.cfg (в TeXLive версии 2007 формат пакетов был другой - tpm). Какой бинарный пакет собирается из какого исходного, определяется директивой name:
name;collection-basicbin;texlive-base-bin;texlive-bin
Здесь коллекция collection-basicbin соответствует бинарному пакету texlive-base-bin и собирается из исходного пакета texlive-bin.
Состав коллекции определяется директивами depend в описании пакетов: по ним производится рекурсивный обход, выявляющий полное подмножество пакетов. Если пакет оказывается нужен нескольким коллекциям, он попадает в «ближайшую»: до которой наименьшее число промежуточных узлов на графе (см. выше), а остальным в зависимости прописывается эта коллекция.
Иногда такой алгоритм себя не оправдывает. Требуется вручную переместить пакет в другую коллекцию, для чего используется директива move в файле tpm2deb.cfg:
move;bin-latex;collection-basicbin
Чтобы исключить из рассмотрения некоторые пакеты, например, уже имеющиеся в системе, или отдельные файлы, используется директива blacklist:
blacklist;tpm;bin-bzip2;* blacklist;tpm;iwona;texlive-lang-polish blacklist;file;texmf-dist/doc/latex/splitindex/splitindex-OpenBSD-i386 blacklist;file;bin/[^/]*/tlmgr
Пакет можно исключить изо всех коллекций (*) или из конкретной. Файлы можно задать регулярным выражением.
Отсутствующие символические ссылки создаются директивой mapping link:
mapping;%_bindir/vpe;link;texmf-dist/scripts/vpe/vpe.pl mapping;%_bindir/xmltools;link;texmf-dist/scripts/context/stubs/unix/xmltools
В ALT Linux необходимые ссылки вычисляются по списку LINKED_SCRIPTS из файла source/texk/texlive/Makefile.in:
sed -e 's/\\$//;/^#/d;/./{H;$!d}' \ -e 'x;/LINKED_SCRIPTS =/!d;' \ -e "s/.*LINKED_SCRIPTS = \\n//" \ source/texk/texlive/Makefile.in | \ while read file; do \ link=`basename "$file" | sed 's,\.[^/]*$,,' | tr '[A-Z]' '[a-z]'`; \ echo "mapping;/usr/bin/$link;link;$file"; \ done
Описанные действия выполняются скриптом tlptool.pl, который создаёт список исходных файлов из дистрибутива TeXLive и списки файлов для включения в пакеты RPM (в секции %files) по одному на каждый. Список исходных файлов используется скриптом git-filter-tree для создания коммита-потомка полного дистрибутива, таким образом дистрибутив разбивается на 5 независимых бранчей в git.
Скрипт tpltool.pl
Поскольку поддержка Perl разработчиками базы TeXLive наиболее полна, для манипуляций с пакетами выбран этот язык программирования. Его алгоритм упрощённо можно описать так:
- Загрузка конфига
- Загрузка пакетной базы
- Рекурсивный поиск зависимостей для каждой коллекции
- Удаление пакетов из чёрного списка
- Перемещение пакетов из одной коллекции в другую и проставление зависимостей между коллекциями
- Далее для каждой коллекции
- печатается список файлов для включения в RPM
- печатается шаблон spec-файла с описанием пакета и секциями %install и %files
- печатается список файлов для включения в архив с исходниками
Структура репозитария git
Репозитарий состоит из следующих бранчей:
- helper
- скрипт git-filter-tree для создания коммитов-потомков оригинального дерева исходников (для разбивания на части)
- perl-texlive
- модули Perl для обработки базы texlive.tlpdb
- tlpdb
- база texlive.tlpdb
- tpm2deb
- конфиг tpm2deb.cfg, импортирован из Debian SVN
- master
- скрипт tlptool.pl и прочие, потомок всех предыдущих
- texlive-source.orig
- оригинальное дерево исходников source
- texlive-source
- исправления в компилируемых исходниках
- texlive-texmf.orig
- оригинальное дерево texmf
- texlive-base.orig
- подмножество дерева texmf с базовыми стилями и форматами
- texlive-bin.orig
- подмножество дерева texmf с бинарными утилитами
- texlive-doc.orig
- подмножество дерева texmf с документацией
- texlive-extra.orig
- подмножество дерева texmf со вспомогательными программами
- texlive-lang.orig
- подмножество дерева texmf с поддержкой национальных языков
- texlive-base
- пакет texlive-base-2008.0-*.src.rpm, потомок texlive-base.orig и master
- texlive-bin
- пакет texlive-bin-2008.0-*.src.rpm, потомок texlive-bin.orig, texlive-source и master
- texlive-doc
- пакет texlive-doc-2008.0-*.src.rpm, потомок texlive-doc.orig и master
- texlive-extra
- пакет texlive-lang-2008.0-*.src.rpm, потомок texlive-extra.orig и master
- texlive-lang
- пакет texlive-extra-2008.0-*.src.rpm, потомок texlive-lang.orig и master
На основании конфига tpm2deb.cfg скриптом tlptool.pl в бранче master генерируются (обновляются) шаблоны spec-файлов и список исходников для включения в бранч *.orig. Скриптом git-filter-tree создаётся коммит в этом бранче, затем он и шаблоны из master мержатся в бранч с пакетом.
На итоговые бранчи расставляются теги, позволяющие собирать пакеты на git.alt:
- @name@-@version@-@release@.orig
- На бранчи *.orig. Из соответствующего коммита формируется архив с исходниками.
- @name@-@version@-@release@.patch
- Вычисляется разница (diff) с предыдущим тегом и оформляется в виде патча. (Сейчас в бранче texlive-source.)
- @name@-@version@-@release@
- Пометка для git.alt, указывающая на интересующий релиз пакета.
Поскольку пакеты texlive-base, texlive-bin и т.д. собираются из разных бранчей, их версии не обязаны совпадать. Однако, рекомендуется придерживаться сквозной нумерации: при необходимости увеличить версию одного из пакетов следует выбрать максимальную среди всех остальных и добавить 1.
Настройки
Системные и пользовательские настройки осуществляются перечисленными ниже переменными из файла /etc/tex-common/web2c/texmf.cnf, первые имеют больший приоритет.
- TEXMFCONFIG
- Пользовательские настройки. По умолчанию: $HOME/.texmf-config/
- TEXMFVAR
- Сгенерированные пользователем файлы. По умолчанию: $HOME/.texmf-var/
- TEXMFHOME
- Пользовательские неменяемые файлы, например, дополнительные пакеты LaTeX. По умолчанию: $HOME/texmf/
- TEXMFSYSCONFIG
- Общесистемные настройки. По умолчанию: /etc/texmf
- TEXMFSYSVAR
- Сгенерированные общесистемные файлы. По умолчанию: /var/lib/texmf/
- TEXMFLOCAL
- Общесистемные файлы. По умолчанию: /usr/local/share/texmf/
- TEXMFDIST
- Общесистемные файлы, установленные из основных пакетов RPM. По умолчанию: /usr/share/texmf-texlive
- TEXMFMAIN
- Общесистемные файлы, установленные из дополнительных пакетов RPM. По умолчанию: /usr/share/texmf/
Новые файлы обычно кладутся администратором в TEXMFLOCAL, а пользователями - в TEXMFHOME. При необходимости можно добавить новый путь к переменной TEXMF в файле /etc/texmf/web2c/texmf.cnf (первые записи имеют больший приоритет). TEXMFCONFIG и TEXMFVAR используются при запуске команд texconfig, updmap и fmtutil пользователем. Имейте в виду, что texconfig при первом запуске копирует файлы настроек из TEXMFMAIN или TEXMFSYSCONFIG и не отслеживает последующие системные изменения.
Конфигурационные файлы
- texmf.cnf — базовые настройки и пути используемых программ
- fmtutil.cnf — доступные форматы TeX
- updmap.cfg — конфигурация шрифтов
- language.dat, language.def — шаблоны переносов для разных языков
- Внимание! В отличие от Debian в ALT Linux пока что редактируется непосредственно /etc/texmf/web2c/texmf.cnf, а не шаблоны для него.
Менеджер tlmgr предполагает автоматическое создание и обновление конфигурационных файлов. В ALT Linux реализовано небольшое подмножество команд tlmgr, а именно
- generate language.dat — обновить language.dat
- generate language.def — обновить language.def
- generate language — обновить language.dat и language.def
- generate fmtutil — обновить fmtutil.cnf
- generate updmap — обновить updmap.cfg
Итоговые файлы получаются слиянием заготовок
- /var/cache/texmf/tex/generic/config/language.dat
- /etc/texmf/language.d/00-language.dat
- прочие /etc/texmf/language.d/*.dat
- /var/cache/texmf/tex/generic/config/language.def
- /etc/texmf/language.d/00-language.def
- прочие /etc/texmf/language.d/*.def
- /etc/texmf/language.d/99-language.def со строкой \uselanguage {USenglish} %%% This MUST be the last line of the file
- /var/cache/texmf/web2c/fmtutil.cnf
- /etc/texmf/fmt.d/00-fmtutil.cnf
- прочие /etc/texmf/fmt.d/*.cnf
- /var/cache/texmf/web2c/updmap.cfg
- /etc/texmf/updmap.d/00-updmap.cfg
- прочие /etc/texmf/updmap.d/*.cfg
Заготовки создаются во время сборки пакетов и иногда представляют собой символические ссылки на файлы из других директорий. Чтобы добавить свои собственные настройки, достаточно положить соответствующий конфиг в одну из директорий /etc/texmf/*.d/.
Кеширование шрифтов
TeX компилирует шрифты (пиксели, метрики и пр.) на лету. Эта информация может быть закеширована и использована позднее. На многопользовательских системах желательно указать переменной VARTEXFONTS на какой-нибудь каталог, например, /var/cache/fonts, и заменить переменную MT_FEATURES с texmfvar на varfonts в файле /etc/texmf/web2c/mktex.cnf
Тестирование
Ошибки и прочие соображения заносите на страницу Тестирование TeXLive2008.0