Рашид Ачилов - Создаем порт для FreeBSD своими руками. Часть I
- Название:Создаем порт для FreeBSD своими руками. Часть I
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Рашид Ачилов - Создаем порт для FreeBSD своими руками. Часть I краткое содержание
Cистема портов - то, чем по праву гордится FreeBSD. Система содержит ссылки на десятки тысяч программ, и список этот постоянно пополняется. Кто их создает, эти пополнения – некие выдающиеся специалисты? Да вовсе нет. Вы тоже сможете стать одним из них.
Создаем порт для FreeBSD своими руками. Часть I - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
# make makesum
Созданный файл имеет следующий вид:
MD5 (34479-contactsmenu-0.3.4b.tar.bz2) =
65af4e3103c906edl3508bflb2dd217a
SHA256 (34479-contactsmenu-0.3.4b.tar.bz2) =
88e05096b2f9C8d659be61daed5e6da977a056033a52c79789dade217709afee
SIZE (34479-contactsmenu-0.3.4b.tar.bz2) = 457076
Теперь пробуем собрать программу, используя порт. Для проверки правильности составления файла pkg-plist в качестве корневого каталога сборки назначим /tmp/1 (после деинсталляции программы не должно оставаться файлов или каталогов, которые она создает).
# make PREFIX=/tmp/l
=> Vulnerability check disabled, database not found
=> Extracting for contactsmenu-0.3.4b
=> MD5 Checksum OK for 34479-contactsmenu-0.3.4b.tar.bz2.
=> SHA256 Checksum OK for 34479-contactsmenu-0.3.4b.tar.bz2.
=> Patching for contactsmenu-0.3.4b
=> contactsmenu-0.3.4b depends on file: /usr/XllR6/qt33/bin/moc - found
=> contactsmenu-0.3.4b depends on executable: gmake - found
=> contactsmenu-0.3.4b depends on shared library: kfontinst - found
=> 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 5 http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/portershandbook/porting-submitting.html .
].
•Дожидаетесь ответа от одного из коммиттеров 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=77679
В этом сообщении всегда указывается причина ошибки и диагностика. Все общение с FreeBSD Team происходит, естественно, на английском языке, несмотря на то, что есть и русскоязычные коммиттеры (например, письмо, приведенное выше, получено от Кирилла Пономарева (krion@freebsd.org). Сообщение об успешном помещении в дерево портов может выглядеть так:
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 прошел за неделю.
Кроме того, FreeBSD Team временами самостоятельно вносит некоторые изменения в файлы портов, когда проводится какая-либо глобальная модификация системы в целом. Если вдруг по каким-либо причинам порт перестанет собираться, майнтайнеру будет отправлено соответствующее извещение. Если майнтайнер не устранит ошибку и не пришлет соответствующий патч, исправляющий ситуацию, порт может быть помечен как BROKEN. Как правило, порты, помеченные как BROKEN, удаляются из дерева если они находятся в таком состоянии более 3 месяцев.
Заключение
Вот и готов наш первый порт. Он вышел чрезвычайно простым, мы не затронули и пятой части возможностей системы сборки портов. Но мы сделали одну чрезвычайно важную работу - убедились в том, что круг программного обеспечения, который может работать под FreeBSD вовсе не ограничивается тем, что присутствует в каталоге портов (несмотря на то, что на текущий момент там присутствует более 14000 программ), и в том, что создать порт под FreeBSD своими руками - это не такая уж и сложная задача. В следующей статье мы задействуем более сложные возможности системы - многофайловые дистрибутивы, экран опций, перехват управления при сборке, использование внешних патчей...
1
Осинцев В. Эффективная работа с портами во FreeBSD. - Журнал «Системный администратор», №1, январь 2004 г. - 63-66 с.
2
http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/portershandbook/makefile-categories.html.
3
http://www.kde-apps.org/content/show.php?content=34479
4
Руководство FreeBSD по созданию портов – http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/porters-handbook/index.html.
Читать дальшеИнтервал:
Закладка: