-->

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

На нашем литературном портале можно бесплатно читать книгу Создаем порт для FreeBSD своими руками. Часть II, Ачилов Рашид-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Создаем порт для FreeBSD своими руками. Часть II
Название: Создаем порт для FreeBSD своими руками. Часть II
Дата добавления: 16 январь 2020
Количество просмотров: 164
Читать онлайн

Создаем порт для FreeBSD своими руками. Часть II читать книгу онлайн

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

Автоматизированная система сборки стороннего программного обеспечения из исходных текстов (система портов) - это то, чем по праву гордится FreeBSD. Система содержит ссылки на десятки тысяч программ, и этот список постоянно пополняется. Кто их создает - эти пополнения - некие выдающиеся специалисты? Да вовсе нет. Вы тоже сможете стать одним из них.

Рашид Ачилов

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

Дополнение стандартных мишеней очень широко используется для вывода различных сообщений в процессе сборки порта, создания каких-либо файлов и т. д. Например:

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

[email protected]${MKDIR } ${EXAMPLESDIR}

.for i in sudoers .login .nsmbrc .mssmbrc

${INSTALL_DATA} ${WRKSRC}/${i} ${EXAMPLESDIR}

.endfor

[email protected]${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

LANG_EXT= 07

LANG_CONFIGURE_ARG= RUSS

MASTERDIR= ${.CURDIR}/../../editors/openoffice-1.1

USE_RUSSIAN_GSI= yes

USE_INFRA_PATCHSET= yes

.include "${MASTERDIR}/Makefile"

При запуске make в каталоге editors/openoffice-1.1 получаем OpenOffice c английским интерфейсом и справкой, при запуске в каталоге russian/openoffice – с русским интерфейсом. Достигается это таким же образом, как любой порт включает в себя bsd.port.mk, – командой .include. Только здесь параметром команды является имя так называемого «мастер-порта», то есть порта, в котором делается вся обработка. Это очень широко распространённый прием для крупных проектов – создается один мастер-порт и несколько портов, в которых только определяются некоторые переменные. Так работают postgresql, openldap, php и множество других портов. В приведенном выше примере мной были добавлены переменные «USE_RUSSIAN_GSI=yes» и «USE_INFRA_PATCHSET=yes», использование которых будет видно в коде из основного порта. Основной порт чересчур громоздок, чтобы приводить его весь, я приведу только некоторые фрагменты.

Перейти на страницу:
Комментариев (0)
название