=> contactsmenu-0.3.4b depends on shared library: kimproxy - found
=> contactsmenu-0.3.4b depends on shared library: intl - found
=> Configuring for contactsmenu-0.3.4b
=> Building for contactsmenu-0.3.4b
cd: can't cd to /usr/ports/mail/contactsmenu/work/34479-contactsmenu-0.3.4b
*** Error code 2
Stop in /usr/ports/mail/contactsmenu.
Вот мы и получили первую ошибку. Она связана с некоторой бестолковостью имен дистрибутивных файлов на http://www.kde-apps.org, когда сам файл имеет имя с числом впереди, а каталог, упакованный внутри него, - без этого числа. Для решения этой проблемы следует указать системе, что имя каталога, в которую будет распакован дистрибутив, будет задано вручную. После (!!) переменной MAINTAINER впишем следующую строчку:
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
указывая таким образом, что дистрибутив будет распакован в каталог с именем, состоящим из имени и номера версии пакета. Повторяем сборку. Сборка проходит нормально. Запускаем установку. Видим, что в каталоге /tmp/1 появились все нужные файлы. Создаем пакет с помощью pkg_create (хотя можно то же самое проделать через make package):
# cd /var/db/pkg
# pkg_create -b contactsmenu-0.3.4b
Проверяем файл +CONTENTS внутри архива - под каждой строчкой, описывающей файл программы, должна располагаться строчка комментария с контрольной суммой:
Iib/kde3/kickermenu_contactsmenu.so
@comment MD5:fd3cf198770bac4elb8453f3ba2d6f90
Iib/kde3/kickermenu_contactsmenu.la
@comment MD5:4de2541c36ea248066aecb851aedbbe5
Если такой строчки нет - значит, в файле pkg-plist ошибка - при установке файл не был найден. Это может быть тривиальная опечатка или же ошибка в Makefile, при которой в pkg-plist был вставлен файл, отсутствующий в данной конфигурации.
Проверяем удаление пакета через plg_delete (или make deinstall в каталоге порта). При удалении не должно выдаваться сообщений о том, что файл не найден. Если такие сообщения выдаются, значит файл pkg-plist содержит ссылки на файлы, которые на самом деле не были установлены.
Ну вот, все проверки проделаны. Что дальше?
Последним этапом нашей работы будет отправка порта во FreeBSD Team и получение оттуда ответа об успешном помещении его в дерево портов или сообщение об ошибке. Порядок действий при этом такой:
• Удаляется каталог work и все файлы, которые не входят в отсылаемый порт (отладка и пр.).
• Создается shell-архив командой «shar 'find contactsmenif». При это нужно находиться в корневом каталоге категории (в нашем случае/usr/ports/mail), а не в каталоге порта!
• Shell-архив отсылается во FreeBSD Team с помощью ко манды send-pr (помните, что email в поле MAINTAINER должен совпадать с email в поле From:, иначе замучают расспросами). О том, как использовать send-pr см. man send-pr. Некоторая информация о том, как отправить порт приведена также в [5].
• Дожидаетесь ответа от одного из коммиттеров FreeBSD о том, что порт успешно помещен в дерево портов или же о том, что при тестировании порта возникли ошибки. Все присылаемые в FreeBSD Team порты тестируются ими на предмет правильной сборки, установки и удаления под всеми поддерживаемыми в данный момент ветками FreeBSD. Сообщение об ошибке может выглядеть, например так:
Synopsis: [maintainer-update] Updating mail/sccmilter up to 0.94.9 version
State-Changed-From-To: open->feedback
State-Changed-By: krion
State-Changed-When: Fri Feb 18 14:33:28 GMT 2005
State-Changed-Why:
It does not honour PREFIX, it's not very critical since it builds
for LOCALBASE,
but I'd like to see the PREFIX honoured though.
cc -pthread -L/var/tmp/ttt/lib -L.libs -o sccmilter sccmilter.o globals.o utilites.o mlficatch.o parseconfig.о commandline.о -lmilter -lconf /usr/bin/ld: cannot find -lconf
http://www.freebsd.org/cgi/query-pr.cgi?pr=77 679
В этом сообщении всегда указывается причина ошибки и диагностика. Все общение с FreeBSD Team происходит, естественно, на английском языке, несмотря на то, что есть и русскоязычные коммиттеры (например, письмо, приведенное выше, получено от Кирилла Пономарева ([email protected]). Сообщение об успешном помещении в дерево портов может выглядеть так:
Synopsis: new port: sysutils/spassgen
State-Changed-From-To: open->closed
State-Changed-By: pav
State-Changed-When: Sat Jul 31 09:26:28 GMT 2004
State-Changed-Why:
New port added, thank you!
http://www.freebsd.org/cgi/query-pr.cgi?pr=69748
После чего останется только обновить дерево портов и убедиться, что да, на самом деле порт в нем присутствует. С этого момента майнтайнер порта отвечает за его актуальное состояние- своевременное обновление в соответствии с новыми версиями программы, внесение нужных патчей и удаление устаревших. Как скоро ожидать ответа от FreeBSD Team? На этот вопрос трудно дать определенный ответ. Иногда они реагируют буквально в течение недели, а иногда приходится ждать несколько месяцев. Внесения в дерево своего первого порта, kavmilter, я ждал больше года, а например, spassgen прошел за неделю.