Рашид Ачилов - Создаем порт для FreeBSD своими руками. Часть II

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Создаем порт для FreeBSD своими руками. Часть II"
Описание и краткое содержание "Создаем порт для FreeBSD своими руками. Часть II" читать бесплатно онлайн.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
Рисунок 1. Появилась возможность задавать опции в полноэкранном текстовом режиме
В результате строка запуска сборки порта может выглядеть, например, таким образом:
# make WITHOUT_IMAGEMAGICK_JPEG=yes WITH_WINDOWS_FONT_DIR=/tmp/blabla WITHOUT_IMAGEMAGICK_PNG=yes WITHOUT_IMAGEMAGICK_BZIP2=yes…
Кроме того, что это просто очень долго набирать, попробуйте-ка вспомнить, какие там опции задавались при предыдущей сборке полгода назад? Разумеется, это крайне неудобно, и некоторое время назад в системе появилась возможность задавать опции в полноэкранном текстовом режиме (см. рис. 1).
Все опции, перечисленные на экране, задаются и отменяются простым нажатием пробела, результат выбора будет сохранен и использован при последующих сборках порта. В любое время его можно изменить, выполнив команду:
# make config
Формируется экран опций следующей командой в Makefile:
OPTIONS= LDAP "With LDAP support" on \
ADS "With Active Directory support" off \
CUPS "With CUPS printing support" on \
WINBIND "With WinBIND support" on \
ACL_SUPPORT "With ACL support" off \
SAM_XML "SAM with XML support" off
Первый параметр задает имя опции, которое потом будет использовано в переменной WITH_*. Например, для первого параметра имя переменной будет WITH_LDAP. Второй параметр задает текст комментария, который будет выведен справа от соответствующей опции, и третий — значение по умолчанию. При указании «on» опция по умолчанию включена, при указании «off» — выключена.
Хорошо, опции заданы. Как их обработать?
Прежде всего необходимо отметить, что при использовании OPTIONS включение файла bsd.port.mk следует заменить на:
include <bsd.port.pre.mk>
# processing WITH_SOMEWHERE here
include <bsd.port.post.mk>
иначе ни одна переменная WITH_SOMEWHERE распознана не будет. Обработка же переменных выполняется стандартным образом — с помощью условия if задаются дополнительные параметры для configure, зависимости, подстановки для pkg-plist и т. д.
if defined(WITH_SAM_XML)
LIB_DEPENDS+= xml2.5:${PORTSDIR}/textproc/libxml2
CONFIGURE_ARGS+= — with-xml-prefix=${LOCALBASE}
WANT_EXPSAM_MODULES+= xml
PLIST_SUB+= SAMXML=""
else
PLIST_SUB+= SAMXML="@comment»
endif
Комбинация проверяемых условий может быть довольно сложной. В качестве примера того, как могут использоваться значения опции, лучше всего рассматривать порт net/samba3 — в нем очень много опций, есть на что посмотреть.
Ну и наконец самый интересный раздел — замена/дополнение стандартных обработчиков Makefile при сборке порта. Как уже было сказано в [1], сборка порта состоит из последовательности выполнения ряда мишеней, которые в свою очередь делятся на подмишени pre-something, do-something и post-something (есть еще специальные мишени, описание их см в bsd.port.mk). Для чего это было сделано? Для того чтобы иметь возможность воздействия на процесс создания порта — что-нибудь изменить, вывести сообщение, создать файл или каталог и т. д. Как следует из названия, подмишени pre-somethnig и post-something выполняются соответственно до и после мишени something. Например, последовательность распаковки будет такова: pre-extract, do-extract, post-extract. При этом, если подмишень do-something не описана, будет выполняться стандартная системная обработка. Обратите внимание, что, если мишень do-something описана, она замещает стандартную мишень и вся ответственность за выполнение данного шага ложится на майнтайнера порта, то есть, например, даже если в Makefile, идущем с программой, есть мишень install, то при наличии в Makefile порта подмишени do-install мишень install из Makefile программы не будет выполнена никогда!
Дополнение стандартных мишеней очень широко используется для вывода различных сообщений в процессе сборки порта, создания каких-либо файлов и т. д. Например:
pre-extract:
@${ECHO_MSG} ""
@${ECHO_MSG} "For debugging information support you should specify"
@${ECHO_MSG} "WITH_DEBUG=yes (press Ctrl-C here and start make WITH_DEBUG=yes)"
@${ECHO_MSG} ""
@sleep 2
post-deinstall:
@${ECHO_MSG} ""
@${ECHO_MSG} "Do not forget delete filter description from /etc/mail/freebsd.mc"
@${ECHO_MSG} "and rebuild sendmail.cf file!"
@${ECHO_MSG} ""
pre-configure:
if defined(WITHOUT_RC_NG)
@${SED} — e "s=%%PREFIX %%=${PREFIX}=" ${FILESDIR}/milter-sid.sh \
> ${WRKSRC}/milter-sid.sh
endif
Заменять обработчики мишеней (создавать секции do-something)[2] не рекомендует, но тем не менее это единственный путь для установки программ с закрытым исходным кодом, а также скриптов и программ, упакованных нестандартным образом. Например, мне встречалась программа, дистрибутив которой был упакован в архив формата ZIP, внутри котрого находился архив. tar.bz2 и файл сигнатуры. sig. Для распаковки нужно было сначала распаковать архив ZIP, потом проверить сигнатуру, а только потом — распаковывать. tar.bz2.
Но довольно теории. Рассмотрим в качестве примеров два порта, которые были мной созданы в разное время — порт для скрипта монтирования сетевых ресурсов Windows при входе в систему mountsmb2 и доработка к порту OpenOffice 1.1.4.
Mountsmb2
Набор скриптов mountsmb2 (там их три) был написан мной достаточно давно и преследовал тольк одну цель — автоматически монтировать SMB/CIFS-сетевые ресурсы от других Samba-серверов и компьютеров под управлением Windows. Поскольку это скрипт, написанный на языке командной оболочки sh, то никакой сборки порта не требуется и именно поэтому этот порт будет рассмотрен в качестве примера.
PORTNAME= mountsmb2
PORTVERSION= 0.90.1
CATEGORIES= sysutils net
MASTER_SITES= ftp://ftp.granch.ru/pub/other/
MAINTAINER= [email protected]
COMMENT= SMB/CIFS shares mounting scripts to do it at login
RUN_DEPENDS= findsmb:${PORTSDIR}/net/samba3 \
sudo:${PORTSDIR}/security/sudo \
gawk:${PORTSDIR}/lang/gawk
USE_BZIP2= yes
NO_BUILD= yes
include <bsd.port.pre.mk>
do-install:
for i in smb2awk smb2nsmbrc mountsmb2
${INSTALL_SCRIPT} ${WRKSRC}/${i} ${PREFIX}/bin
endfor
-@${MKDIR} ${EXAMPLESDIR}
for i in sudoers.login.nsmbrc.mssmbrc
${INSTALL_DATA} ${WRKSRC}/${i} ${EXAMPLESDIR}
endfor
-@${MKDIR} ${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/README.FreeBSD
${DOCSDIR}
@${SED} — e "s,%%EXAMPLESDIR%%,${EXAMPLESDIR},g" — i.old ${PKGMESSAGE}
@${CAT} ${PKGMESSAGE}
@${RM} — f ${PKGMESSAGE}
@${MV} ${PKGMESSAGE}.old ${PKGMESSAGE}
include <bsd.port.post.mk>
В RUN_DEPENDS перечисляются все порты, от которых зависит данный скрипт, а именно GNU AWK, sudo и Samba, из которой на самом деле нужна только программа findsmb. «USE_BZIP2=yes» указывает на то, что дистрибутив упакован программой bzip2. «NO_BUILD=yes» указывает на то, что программа не требует сборки. Если этого не указать, то система будет пытаться выполнить команду make в каталоге порта, не найдет Makefile и аварийно завершится.
Инсталляцией порт управляет самостоятельно — в Makefile присутствует заменяющая подмишень do-install. Здесь хорошо видно, как можно организовать цикл, который установит несколько файлов, перечисленных в списке, в указанное место. После первого цикла, который устанавливает собственно скрипты идет команда создания каталога для документации — система сама не будет делать ничего, все необходимые каталоги должны быть созданы портом.
Такая странная форма записи команды означает что:
• если команда завершается неудачно, например, такой каталог уже существует, то make не прекращает работу (минус перед командой);
• команда не отображается на терминале (знак @ перед командой).
Потом идет второй цикл, который устанавливает файлы примеров в каталог, который для этого предварительно создается, создается каталог документации и в него копируется файл README.FreeBSD.
Команда sed подготавливает файл pkg-message к отображению. В файле, который распространяется вместе с портом присутствует макроподстановка %%EXAMPLESDIR%%, которая, перед тем как это сообщение будет показано пользователю, заменяется на значение переменной ${EXAMPLESDIR}. Чтобы не изменять оригинальный файл pkg-message (возможно, в следующий раз установка будет проходить с другим значением ${EXAMPLESDIR}), старый файл сохраняется, измененный файл удаляется, старый файл переименовывается в оригинальное имя. Порт несложный, но он демонстрирует, как можно использовать заменяющие подмишени. При создании таких портов следует быть предельно внимательными — помните, что любой каталог, не входящий в стандартное дерево каталогов, описанное в bsd.local.mk, имеет право не существовать и должен быть предварительно создан.
Модификация порта OpenOffice 1.1.4
С моей точки зрения, порт для сборки OpenOffice editors/openoffice имел множество недостатков, но эти изменения я никогда не пробовал отправить во FreeBSD Team для помещения их в дерево портов. Какие изменения были внесены мной:
• возможность отказаться от сборки Mozilla Suite, нужной только для работы с адресной книгой формата Mozilla;
• возможность загрузить и применить последний (на тот момент) файл локализации интерфейса;
• возможность загрузить и применить внешние патчи, созданные в «Инфра-Ресурс» для версии для Linux.
Порт на самом деле состоит из двух файлов — editors/openoffice-1.1 и russian/openoffice. Makefile порта russian/openoffice-1.1 достаточно прост:
CATEGORIES= russian
if!defined (LANG) &&!defined(USE_LANG)
USE_LANG= ru_RU.KOI8-R
endif
LANG_LIST= ru_RU.KOI8-R uk_UA.KOI8-U
LANG_PKGNAME= ru
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Создаем порт для FreeBSD своими руками. Часть II"
Книги похожие на "Создаем порт для FreeBSD своими руками. Часть II" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Рашид Ачилов - Создаем порт для FreeBSD своими руками. Часть II"
Отзывы читателей о книге "Создаем порт для FreeBSD своими руками. Часть II", комментарии и мнения людей о произведении.