Артем Носов aka Chip
2004
Рано или поздно перед многими FreeBSD пользователями встает проблема обновления документации, расположенной в /usr/share/doc. Процедура ее построения предельно проста, но, к сожалению, не описана (или я ошибаюсь?) на просторах Рунета.
Первое, что нам потребуется - это установленный пакет cvsup (или cvsup-without-gui, это уже на ваш вкус). Наиболее простым в этом случае будет вариант с установкой его из пакета (package). Связанно это с тем, что cvsup при сборке из дерева портов потянет за собой достаточно громоздкий дистрибутив языка modula. Для установки (в виде пакета) достаточно выполнить:
$ pkg_add -r cvsup
Никаких проблем на этом шаге не должно возникнуть, а если что-то и случиться - внимательно изучите ошибки/предупреждения, выдаваемые pkg_add. Для тех же, кто решил устанавливать cvsup из дерева портов, достаточно выполнить:
$ cd /usr/ports/net/cvsup && $ make all install clean
Вторым необходимым приложением будет docproj. Установка его тоже сводится к трививальной задаче:
$ cd /usr/ports/textproc/docproj && $ make JADETEX=no install clean
Думаю, не нужно объяснять, что все описанные действия выполняются от пользователя root и с уже установленным соединеним в интернет, если, конечно, вы не пользуетесь опциями dial-on-demand (звонок по требованию).
От редактора: а еще можно заблаговременно скачать все потребные исходники и разместить их в каталоге /usr/ports/distfiles/ - Алексей Федорчук.
Итак, cvsup и docproj установлены или уже компилируются (для случая портов), мы же сосредоточимся на настройке sup-файла, необходимого для получения по протоколу cvsup файлов *.sgml (на их базе будет строиться наша документация). Расположим файл следующего содержания:
*default host=cvsup5.ru.freebsd.org *default base=/usr *default prefix=/usr *default release=cvs *default compress *default tag=. *default delete use-rel-suffix # Miscellaneous files at the top of /usr/ports doc-all
в районе /usr/local/etc/cvsup/doc-cvsup. Как вариант, могу предложить воспользоваться файлом, располагающимся по адресу /usr/share/examples/cvsup/doc-supfile. Основное его отличие - подробные комментарии и незаполенная сточка *default host,- в остальном же он полностью идентичен.
В принципе, на этом можно было остановиться и приступить к процедуре получения sgml-файлов, но не каждому по душе тянуть файлы, которыми он даже не воспользуются. О чем это я? Да о том, что документация проекта FreeBSD включает в себя множество языков, о которых некоторые и не слышали (включая меня :)
Решение, как и все в FreeBSD, лежит на поверхности - refuse-файл используемый cvsup'ом. Не вдаваясь в подробности, о которых можно узнать в полной мере на man-страницах cvsup'a, местоположение refuse файла определить очень просто. Достаточно взять строчку из sup-файла (в нашем случае doc-cvsup), которая указывает на "базовое" расположение (*default base=/usr) sup-директории и добавить к ней sup/refuse (немножко сумбурно, но поверьте, все гораздо проще, чем кажется :). Т.е. для нашего случая получим:
/usr/sup/refuse
С местоположение определились, осталось "наполнить" его соотвествующим контентом. Я отбросил все языки за исключением русского и английского и получил файл (/usr/sup/refuse) следующего содержания:
doc/de doc/de_* doc/es doc/es_* doc/el_* doc/fr_* doc/fr_* doc/it doc/it_* doc/ja doc/ja_* doc/nl doc/nl_* doc/sr doc/sr_* doc/zh_*
Важное замечание: refuse-файл не может содержать комментариев!
Итак, мы вплотную подошли к процедуре получения файлов документации. Вызвав cvsup и в качестве аргумента передав ему наш doc-cvsup файл:
cvsup -g -L 2 /usr/local/cvsup/doc-cvsup
через несколько минут (в зависимости от скорости вашего соединения) получим локальную копию sgml-файлов проекта документирования FreeBSD, располагающуюся в /usr/doc.
$ ls /usr/doc/ Makefile en_US.ISO8859-1/ ru_RU.KOI8-R/ README release/ share/ ~ %
Как я ранее отмечал, из всех возможных языков я оставил 2-а: ru и en. Добавив следующую строчку в /etc/make.conf:
DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R
мы оповестим make-утилиту, что нам требуется сборка только этих 2-х языков. Иначе make завершится критической ошибкой.
Завершающий аккорд - построение документации:
$ cd /usr/doc && $ make FORMATS="html" && $ make FORMATS="html" install clean
В ходе сборки может проскакивать следующая ошибка:
*** Error code 1 (ignored)
Как и указывается - ее достаточно просто проигнорировать. Все! теперь "свежая" документация доступна в /usr/share/doc.
В следующей заметке я остановлюсь на доступных форматах сборки и других "тонких" моментах. Жду Ваших предложений и замечаний.