Date: Sat, 22 Feb 2014 10:29:12 +0000 (UTC) From: Sergey Kandaurov <pluknet@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r44027 - head/ru_RU.KOI8-R/books/porters-handbook Message-ID: <201402221029.s1MATCFA085888@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pluknet Date: Sat Feb 22 10:29:12 2014 New Revision: 44027 URL: http://svnweb.freebsd.org/changeset/doc/44027 Log: MFen up to before splitting porters-handbook. book.xml r42833 -> r43827 uses.xml r43006 -> r43793 versions.xml r42930 -> r43967 Modified: head/ru_RU.KOI8-R/books/porters-handbook/book.xml head/ru_RU.KOI8-R/books/porters-handbook/uses.xml head/ru_RU.KOI8-R/books/porters-handbook/versions.xml Modified: head/ru_RU.KOI8-R/books/porters-handbook/book.xml ============================================================================== --- head/ru_RU.KOI8-R/books/porters-handbook/book.xml Sat Feb 22 03:14:51 2014 (r44026) +++ head/ru_RU.KOI8-R/books/porters-handbook/book.xml Sat Feb 22 10:29:12 2014 (r44027) @@ -10,14 +10,20 @@ $FreeBSD$ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/porters-handbook/book.xml,v 1.136 2006/10/20 09:25:00 marck Exp $ - Original revision: r42833 + Original revision: r43827 --> -<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="ru"> - <info><title>Руководство FreeBSD по созданию портов</title> - + +<book xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" + xml:lang="ru"> + + <info> + <title>Руководство &os; по созданию портов</title> <authorgroup> - <author><orgname>The FreeBSD Documentation Project</orgname></author> + <author> + <orgname>The &os; Documentation Project</orgname> + </author> </authorgroup> <pubdate>$FreeBSD$</pubdate> @@ -37,27 +43,32 @@ <year>2011</year> <year>2012</year> <year>2013</year> - <holder role="mailto:doc@FreeBSD.org"> - The FreeBSD Documentation Project</holder> + <holder role="mailto:doc@FreeBSD.org">The &os; Documentation + Project</holder> </copyright> - &trademarks; - &legalnotice; + <legalnotice xml:id="trademarks" role="trademarks"> + &tm-attrib.freebsd; + &tm-attrib.unix; + &tm-attrib.sun; + &tm-attrib.general; + </legalnotice> + <releaseinfo>$FreeBSD$</releaseinfo> </info> <chapter xml:id="why-port"> <title>Введение</title> - <para>Коллекция портов FreeBSD является способом, используемым - практически каждым для установки приложений ("портов") на FreeBSD. - Как и почти всё остальное во FreeBSD, эта система в основном является + <para>Коллекция портов &os; является способом, используемым + практически каждым для установки приложений ("портов") на &os;. + Как и почти всё остальное во &os;, эта система в основном является добровольно поддерживаемым начинанием. Важно иметь это в виду при чтении данного документа.</para> - <para>Во FreeBSD любой может прислать новый порт либо изъявить желание + <para>Во &os; каждый может прислать новый порт либо изъявить желание поддерживать существующий порт, если его никто ещё никто не поддерживает—вам не нужно иметь никаких особых привилегий на внесение изменений, чтобы это делать.</para> @@ -70,7 +81,7 @@ обновить существующий? Великолепно!</para> <para>Ниже находятся некоторые указания по созданию нового порта для - FreeBSD. Если вы хотите обновить существующий порт, вы должны + &os;. Если вы хотите обновить существующий порт, вы должны прочесть их, а затем <xref linkend="port-upgrading"/>.</para> <para>Если этот документ недостаточно подробен, вы должны обратиться к @@ -114,11 +125,24 @@ <note> <para>Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе - FreeBSD не потребовалось абсолютно никаких изменений. Если + &os; не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу.</para> </note> + <note> + <para>Перед началом портирования рекомендуется установить + переменную &man.make.1; <varname>DEVELOPER</varname> в + <filename>/etc/make.conf</filename>.</para> + + <screen>&prompt.root; <userinput>echo DEVELOPER=yes >> /etc/make.conf</userinput></screen> + + <para>Эта настройка включает <quote>режим разработчика</quote>, + в котором отображаются предупреждения при использовании + устаревших конструкций и задействуются некоторые дополнительные + проверки при вызове команды <command>make</command>.</para> + </note> + <sect1 xml:id="porting-makefile"> <title>Создание файла <filename>Makefile</filename></title> @@ -132,12 +156,9 @@ PORTVERSION= 1.1b CATEGORIES= games MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ -MAINTAINER= asami@FreeBSD.org +MAINTAINER= youremail@example.com COMMENT= Cat chasing a mouse all over the screen -MAN1= oneko.1 -MANCOMPRESSED= yes - .include <bsd.port.mk></programlisting> <note> @@ -150,7 +171,8 @@ MANCOMPRESSED= yes <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки <literal>$FreeBSD$</literal>, она - будет заполнена автоматически системой SVN, когда порт будет + будет заполнена автоматически системой + <application>Subversion</application>, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе <link linkend="porting-samplem">пример Makefile</link>.</para> @@ -178,8 +200,8 @@ MANCOMPRESSED= yes из <filename>README</filename> или страниц справочника</emphasis>; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы - справочника выровнены пробелами, поскольку это выглядит в - особенности плохо с моноширинными шрифтами).</para> + справочника выровнены пробелами, что особенно плохо + смотрится с моноширинными шрифтами).</para> </note> <para>Хорошо составленный <filename>pkg-descr</filename> @@ -225,16 +247,14 @@ WWW: http://www.oneko.org/</programlisti пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно <filename>/usr/local</filename>). - Если вы используете переменные - <varname>MAN<replaceable>n</replaceable></varname> (а вы должны - это делать), то указывать страницы справочника здесь не - нужно. Если порт во время установки создает каталоги, убедитесь, - что добавили строку <literal>@dirrm</literal> для удаления + Если порт во время установки создает каталоги, убедитесь, + что добавлены строки <literal>@dirrm</literal> для удаления каталогов при удалении пакета.</para> <para>Вот маленький пример:</para> <programlisting>bin/oneko +man/man1/oneko.1.gz lib/X11/app-defaults/Oneko lib/X11/oneko/cat1.xpm lib/X11/oneko/cat2.xpm @@ -242,7 +262,7 @@ lib/X11/oneko/mouse.xpm @dirrm lib/X11/oneko</programlisting> <para>Обратитесь к странице справочной системы по команде - &man.pkg.create.1; с подробным описанием формата списка + &man.pkg-create.8; с подробным описанием формата списка упаковки.</para> <note> @@ -270,6 +290,7 @@ lib/X11/oneko/mouse.xpm <filename>Makefile</filename>:</para> <programlisting>PLIST_FILES= bin/oneko \ + man/man1/oneko.1.gz \ lib/X11/app-defaults/Oneko \ lib/X11/oneko/cat1.xpm \ lib/X11/oneko/cat2.xpm \ @@ -293,7 +314,7 @@ PLIST_DIRS= lib/X11/oneko</programli <para>Обратной стороной такого способа перечисления файлов и каталогов порта является невозможность использования - последовательностей команд, описанных в &man.pkg.create.1;. + последовательностей команд, описанных в &man.pkg-create.8;. Поэтому он подходит для простых портов, что делает их ещё более простыми. Одновременно с этим положительным моментом является уменьшение количества файлов в коллекции портов. Пожалуйста, @@ -333,22 +354,34 @@ PLIST_DIRS= lib/X11/oneko</programli <itemizedlist> <listitem> <para><filename>pkg-plist</filename> не содержит ничего сверх того, - что устанавливается вашим портом</para> + что устанавливается портом</para> </listitem> <listitem> <para><filename>pkg-plist</filename> содержит абсолютно все, что - устанавливается вашим портом</para> + устанавливается портом</para> </listitem> <listitem> - <para>Ваш порт может быть переустановлен множество раз с помощью - указания цели <buildtarget>reinstall</buildtarget></para> + <para>Порт может быть установлен с помощью + указания цели <buildtarget>install</buildtarget>. Это + позволяет убедиться в правильной работе сценария + установки.</para> </listitem> <listitem> - <para>Ваш порт <link linkend="plist-cleaning">подчищает</link> - за собой после своего удаления</para> + <para>Порт может быть правильным образом удалён с помощью + указания цели <buildtarget>deinstall</buildtarget>. Это + позволяет убедиться в правильной работе сценария + удаления.</para> + </listitem> + + <listitem> + <para>Следует убедиться, что <command>make package</command> + можно запустить из-под обычного пользователя (то есть, + не из-под <systemitem class="username">root</systemitem>). + Если это не так, в <filename>Makefile</filename> порта + должно быть добавлено <literal>NEED_ROOT=yes</literal>.</para> </listitem> </itemizedlist> @@ -356,20 +389,19 @@ PLIST_DIRS= lib/X11/oneko</programli <title>Рекомендуемый порядок проверки</title> <step> - <para><command>make install</command></para> + <para><command>make stage</command></para> </step> <step> - <para><command>make package</command></para> + <para><command>make check-orphans</command></para> </step> <step> - <para><command>make deinstall</command></para> + <para><command>make package</command></para> </step> <step> - <para><command>pkg_add package-name - </command></para> + <para><command>make install</command></para> </step> <step> @@ -377,31 +409,25 @@ PLIST_DIRS= lib/X11/oneko</programli </step> <step> - <para><command>make reinstall</command></para> - </step> - - <step> - <para><command>make package</command></para> + <para><command>pkg add package-filename</command></para> </step> <step> - <para><command>make readme</command></para> + <para><command>make package</command> (из-под + пользователя)</para> </step> </procedure> - <para>Проверьте, что ни на шаге <buildtarget>package</buildtarget>, ни на - шаге <buildtarget>deinstall</buildtarget> не выдается никаких - предупреждений. После выполнения шага 3 проверьте, что все новые - каталоги были успешно удалены. Также попробуйте запустить - программное обеспечение после выполнения шага 4, чтобы убедиться, что - оно работает правильно при установке из пакета.</para> - - <para>Наиболее основательным способом автоматизации этих шагов является - установка <application>ports tinderbox</application>. Это - обеспечивает <literal>jails</literal>, в которых вы можете проверять - все вышеуказанные шаги без изменения состояния в вашей основной - системе. Для получения дополнительной информации смотрите - <filename>ports/ports-mgmt/tinderbox</filename>.</para> + <para>Убедитесь, что на любом из этапов не выдается никаких + предупреждений.</para> + + <para>Основательное автоматизированное тестирование может быть + выполнено при помощи + <package role="port">ports-mgmt/tinderbox</package> или + <package role="port">ports-mgmt/poudriere</package> из Коллекции + Портов. Эти приложения используют <literal>jails</literal>, + в которых проверяются все перечисленные выше этапы без + изменения состояния основной системы.</para> </sect1> <sect1 xml:id="porting-portlint"> @@ -410,7 +436,7 @@ PLIST_DIRS= lib/X11/oneko</programli <para>Будьте добры, пользуйтесь утилитой <command>portlint</command> для проверки того, что ваш порт соответствует нашим рекомендациям. - Программа <package>ports-mgmt/portlint</package> + Программа <package role="port">ports-mgmt/portlint</package> является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл <link linkend="porting-samplem">Makefile</link> и @@ -420,38 +446,45 @@ PLIST_DIRS= lib/X11/oneko</programli <sect1 xml:id="porting-submitting"> <title>Посылка нового порта</title> - <para>Перед посылкой нового порта удостоверьтесь, что вы прочитали - раздел о том, что <link linkend="porting-dads">можно и нельзя</link> делать.</para> + <para>Перед посылкой нового порта прочитайте раздел о том, что + <link linkend="porting-dads">можно и нельзя</link> делать.</para> - <para>Теперь, когда вы счастливы от своего первого порта, единственное, + <para>Когда вы наконец довольны своим первым портом, единственное, что осталось сделать, это включить его в основное дерево портов - &os; и осчастливить этим всех остальных. Нам не нужен ни ваш + &os; и осчастливить этим всех остальных. Нам не нужен ни каталог <filename>work</filename>, ни пакет - <filename>pkgname.tgz</filename>, так что удалите их прямо сейчас. - Затем (предположим, что ваш порт зовут oneko) перейдите в каталог - выше, там, где находится каталог <literal>oneko</literal>, и наберите - следующее: <command>shar `find oneko` > oneko.shar</command></para> - - <para>Включите ваш файл <literal>oneko.shar</literal> - в сообщение об ошибке и пошлите - его с помощью программы &man.send-pr.1; (обратитесь к разделу <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL"> - Сообщения об ошибках и общие замечания</link> для получения подробной - информации о программе &man.send-pr.1;). Не забудьте - указать в сообщении категорию <literal>ports</literal> и класс - <literal>change-request</literal> (Не указывайте, что сообщение - имеет статус <literal>confidential</literal>!). Добавьте также - краткое описание программы, порт которой вы создали, в раздел - <quote>Description</quote> отправляемого PR (например, содержимое - <varname>COMMENT</varname> в сокращенном виде) и сам файл в виде архива - shar, поместив его в раздел <quote>Fix</quote>.</para> + <filename>pkgname.tgz</filename>, так что удалите их прямо + сейчас.</para> + + <para>Затем получите файл &man.shar.1;. Предполагая, что порт + называется oneko, перейдите в каталог выше, где находится + каталог <literal>oneko</literal>, и наберите: + <command>shar `find oneko` > oneko.shar</command></para> + + <para>Включите <filename>oneko.shar</filename> в сообщение об + ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к + разделу <link + xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL"> + Сообщения об ошибках и общие замечания</link> для получения + подробной информации о &man.send-pr.1;).</para> + + <para>Укажите в сообщении категорию <literal>ports</literal> и + класс <literal>change-request</literal>. + <emphasis>Не</emphasis> указывайте, что сообщение имеет статус + <literal>confidential</literal>! Добавьте краткое описание + программы в поле <quote>Description</quote> отправляемого PR + (например, содержимое <varname>COMMENT</varname> в сокращённом + варианте) и сам файл в виде архива <filename>.shar</filename> + в поле <quote>Fix</quote>.</para> <note> - <para>Вы можете значительно облегчить нашу работу, если в тему - сообщения о проблеме поместите хорошее описание. Мы рекомендуем - нечто вроде <quote>New port: <категория>/<название - порта> <краткое описание порта></quote> для новых портов. - Если вы следуете этой схеме, то шансы на то, что на ваше PR вскоре - кто-то взглянет, гораздо выше.</para> + <para>Хорошее описание в заголовке сообщения о проблеме + значительно облегчает работу коммиттеров портов. Для новых + портов мы предпочитаем нечто вроде <quote>New port: + <категория>/<название порта> <краткое + описание порта></quote>. Следование этой схеме + упрощает и ускоряет начало работы по добавлению нового + порта.</para> </note> <para>Повторим ещё раз, что <emphasis>не нужно включать ни оригинальный @@ -460,16 +493,17 @@ PLIST_DIRS= lib/X11/oneko</programli <command>make package</command></emphasis>; для новых портов используйте &man.shar.1;, но не &man.diff.1;.</para> - <para>После того как вы послали порт, пожалуйста, потерпите. - Иногда включение нового порта во &os; может занять до нескольких - месяцев, а иногда всего несколько дней. <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports"> - Здесь</link> вы можете найти список PR для портов ожидающих своей - очереди для включения во &os;.</para> - - <para>Мы рассмотрим ваш порт, при необходимости вернём его обратно, а - затем включим порт в наше дерево. Ваше имя также будет добавлено - в список <link xlink:href="&url.articles.contributors;/contrib-additional.html"> - Дополнительных контрибуторов проекта FreeBSD</link> и другие + <para>После отправки порта, пожалуйста, потерпите. Время, + необходимое для включения нового порта во &os;, может занимать + от нескольких дней до нескольких месяцев. <link + xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports"> + Здесь</link> можно увидеть список ожидающих PR для портов.</para> + + <para>После рассмотрения нового порта мы при необходимости вам + ответим, а затем включим порт в наше дерево. Ваше имя также + будет добавлено в список <link + xlink:href="&url.articles.contributors;/contrib-additional.html"> + Дополнительных контрибуторов проекта &os;</link> и другие файлы.</para> </sect1> </chapter> @@ -502,10 +536,9 @@ PLIST_DIRS= lib/X11/oneko</programli текстов имеется в наличии локально в каталоге <varname>DISTDIR</varname>. Если цель <buildtarget>fetch</buildtarget> не может найти требуемые файлы в - каталоге <varname>DISTDIR</varname>, то он будет искаться по + каталоге <varname>DISTDIR</varname>, то они будут искаться по указателю URL <varname>MASTER_SITES</varname>, который - устанавливается в Makefile, а также на нашем основном FTP-сервере - по адресу <uri xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/">ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</uri>, + устанавливается в Makefile, а также на наших FTP зеркалах, куда мы по возможности помещаем дистрибутивные файлы для архива. Затем она попытается сгрузить указанный файл с помощью <varname>FETCH</varname>, полагая, что запрашивающая машина имеет @@ -558,11 +591,22 @@ PLIST_DIRS= lib/X11/oneko</programli <step> <para>Выполняется цель <buildtarget>build</buildtarget>. Она отвечает за переход в собственный рабочий каталог порта - (<varname>WRKSRC</varname>) и его построение. Если задана - переменная <varname>USES= gmake</varname>, будет использоваться - GNU-версия утилиты <command>make</command>, в противном случае - будет использована системная утилита - <command>make</command>.</para> + (<varname>WRKSRC</varname>) и его построение.</para> + </step> + + <step> + <para>Выполняется цель <buildtarget>stage</buildtarget>. + Конечный набор построенных файлов помещается во временный + каталог (<varname>STAGEDIR</varname>, смотрите + <xref linkend="staging"/>). Иерархия этого + каталога отражает иерархию каталогов системы, в которую + данный пакет будет устанавливаться.</para> + </step> + + <step> + <para>Выполняется цель <buildtarget>install</buildtarget>. + В систему копируются файлы, перечисленные в pkg-plist + порта.</para> </step> </procedure> @@ -608,8 +652,9 @@ PLIST_DIRS= lib/X11/oneko</programli и не выполняется инфраструктурой портов.</para> </note> - <para>Теперь вы представляете, что происходит, когда пользователь - набирает команду <command>make</command>, теперь давайте пройдемся + <para>Теперь, когда вы представляете, что происходит, когда + пользователь набирает команду <command>make install</command>, + давайте пройдемся через шаги, рекомендуемые для создания настоящего порта.</para> </sect1> @@ -706,22 +751,44 @@ PLIST_DIRS= lib/X11/oneko</programli <title>Создание патчей</title> <para>Файлы, которые добавлялись или изменялись в процессе создания - порта, могут быть выявлены вызовом программы &man.diff.1;, + порта, могут быть выявлены программой &man.diff.1;, а результат работы этой программы может быть в дальнейшем передан - программе &man.patch.1;. Каждый патч, который вы собираетесь - применить, должен быть сохранен в файл с именем + программе &man.patch.1;. Такое действие с обычным файлом + подразумевает сохранение копии файла с первоначальным содержимым + перед внесением каких-либо изменений.</para> + + <screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen> + + <para>Патчи сохраняются в виде файлов с именем <filename>patch-*</filename>, где - <replaceable>*</replaceable> обозначает путь к файлу, к которому - применяется патч, такой как + <replaceable>*</replaceable> обозначает путь к файлу, + к которому применяется патч, такой как <filename>patch-Imakefile</filename> или - <filename>patch-src-config.h</filename>. Эти файлы должны находиться в + <filename>patch-src-config.h</filename>.</para> + + <para>После того как файл был изменён, используется &man.diff.1; + для получения разницы между первоначальной и изменённой + версиями. Параметр <option>-u</option> указывает &man.diff.1; + выводить разницу в <quote>унифицированном</quote> формате, + который также является предпочтительным.</para> + + <screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> > patch-<replaceable>pathname-file</replaceable></userinput></screen> + + <para>Для порождении патчей для новых добавляемых файлов + используется параметр <option>-N</option>, который заставляет + &man.diff.1; трактовать несуществующие прежде файлы как если + бы они существовали, но имели пустое содержимое:</para> + + <screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> > patch-<replaceable>pathname-newfile</replaceable></userinput></screen> + + <para>Файлы с патчами помещаются в каталоге <varname>PATCHDIR</varname> - (как правило, это <filename>files/</filename>), + (как правило, это <filename class="directory">files/</filename>), откуда они будут взяты автоматически. Все патчи обязаны быть сделаны относительно каталога <varname>WRKSRC</varname> (как правило, это каталог, в который распаковывается исходный архив и где будет выполняться построение). Для упрощения внесения изменений и - обновлений вы должны избегать наличия более чем одного патча для + обновлений избегайте наличия более чем одного патча для одного и того же файла (например, патчей <filename>patch-file</filename> и <filename>patch-file2</filename>, оба меняющих файл <filename>WRKSRC/foobar.c</filename>). @@ -732,14 +799,23 @@ PLIST_DIRS= lib/X11/oneko</programli соответствующий патч следует назвать <filename>patch-src-freeglut__joystick.c</filename>.</para> - <para>Пожалуйста, используйте для именования ваших патчей только символы + <para>Пожалуйста, используйте для именования патчей только символы <literal>[-+._a-zA-Z0-9]</literal>. Не используйте любые другие - символы, кроме этих. Не называйте ваши патчи как - <filename>patch-aa</filename> или <filename>patch-ab</filename> и - так далее, всегда ссылайтесь на путь и название файла в названиях + символы, кроме этих. Не называйте патчи как + <filename>patch-aa</filename> или <filename>patch-ab</filename>, + всегда ссылайтесь на путь и название файла в названиях самих патчей.</para> - <para>Не помещайте строки RCS в патчи. SVN будет изменять их при + <para>Существует альтернативный упрощённый способ создания + патчей для существующих файлов. Первые шаги те же самые: + создание копии неизменённого файла с расширением + <filename>.orig</filename> и внесение изменений. После этого + используйте <command>make makepatch</command>, чтобы обновить + файлы с патчами в каталоге <filename>files</filename> данного + порта.</para> + + <para>Не помещайте строки RCS в патчи. + <application>Subversion</application> будет изменять их при помещении файлов в дерево портов, и когда мы будем их оттуда извлекать, они будут уже другие, поэтому применение патчей окончится неудачей. Строчки RCS предваряются знаком доллара @@ -754,65 +830,72 @@ PLIST_DIRS= lib/X11/oneko</programli резервными копиями файлов, файлы <filename>Makefile</filename>, когда как порт использует <command>Imake</command> или GNU-версию программы <command>configure</command>, и так далее, - не нужны, и должны быть удалены. Если вы отредактировали файл - <filename>configure.in</filename> и запустили - <command>autoconf</command> для перегенерации + не нужны, и должны быть удалены. Если было необходимо + отредактировать файл <filename>configure.in</filename> и + запустить <command>autoconf</command> для перегенерации <command>configure</command>, не нужно включать файлы diff для <command>configure</command> (они частенько вырастают до нескольких - тысяч строк!); задайте <literal>USE_AUTOTOOLS=autoconf:261</literal> и + тысяч строк!). Вместо этого задайте + <literal>USE_AUTOTOOLS=autoconf:261</literal> и включите diff-файл для <filename>configure.in</filename>.</para> - <para>Также постарайтесь минимизировать в ваших патчах объем + <para>Старайтесь минимизировать в патчах объём нефункциональных изменений с пустыми символами. В мире Открытого Исходного Кода является распространенным совместное использование проектами больших объемов кодовой базы, но с различными стилями - и правилами отступов. Если вы берете работающую функциональную - часть из одного проекта для исправления похожей области в другом, - то будьте аккуратны, пожалуйста: получаемый однострочный патч - может быть полон нефункциональных изменений. Это не только - увеличивает размер репозитория SVN, но также усложняет поиск того, - что конкретно вызвало проблему и что вы вообще изменили.</para> - - <para>Если вам нужно удалить файл, то вы можете сделать это при - выполнении цели <buildtarget>post-extract</buildtarget> вместо того, - чтобы оформлять это как часть патча.</para> + и правилами отступов. При копировании работающей функциональной + части из одного проекта для исправления похожей области в другом, + будьте аккуратны, пожалуйста: получаемый однострочный патч + может указаться полон нефункциональных изменений. Это не только + увеличивает размер репозитория <application>Subversion</application>, + но также усложняет поиск того, + что конкретно вызвало проблему и что вообще поменялось.</para> + + <para>Если нужно удалить файл, сделайте это при выполнении цели + <buildtarget>post-extract</buildtarget>, вместо того чтобы + оформлять это как часть патча.</para> <para>Простые перемещения могут быть выполнены непосредственно из <filename>Makefile</filename> порта с использованием &man.sed.1; в - режиме in-place. Это очень удобно, когда вам нужно применить патч - на значение переменной. Пример:</para> + режиме in-place. Это удобно, когда при изменении используется + значение переменной:</para> <programlisting>post-patch: @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting> - <para>Довольно часто бывают ситуации, когда портируемое программное - обеспечение, особенно если основной платформой разработки является - &windows;, использует конвенцию CR/LF для большинства своих исходных - файлов. Это может быть причиной проблем с дальнейшей упаковкой, - предупреждениями компилятора, выполнением скриптов - (<command>/bin/sh^M</command> not found) и так далее. Для быстрой + <para>Довольно часто в исходных файлах портируемого программного + обеспечения используется конвенция CR/LF. Это может стать + причиной проблем с дальнейшей упаковкой, предупреждениями + компилятора или выполнением скриптов (таких как + <literal>/bin/sh^M not found</literal>). Для быстрого преобразования всех файлов из CR/LF просто в LF добавьте - <literal>USE_DOS2UNIX=yes</literal> в <filename>Makefile</filename> - порта. Может быть указан перечень преобразуемых файлов:</para> + в <filename>Makefile</filename> порта эту запись:</para> + + <programlisting>USES= dos2unix</programlisting> - <programlisting>USE_DOS2UNIX= util.c util.h</programlisting> + <para>Может быть задан точный список преобразуемых файлов:</para> - <para>Если вы хотите преобразовать группу файлов в разных подкаталогах, - то для этого можно использовать <varname>DOS2UNIX_REGEX</varname>. + <programlisting>USES= dos2unix +DOS2UNIX_FILES= util.c util.h</programlisting> + + <para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы + преобразовать группу файлов в разных подкаталогах. Его параметром является регулярное выражение, совместимое с - <command>find</command>. Подробнее о формате в &man.re.format.7;. - Эта опция используется для преобразования всех файлов заданного - расширения, к примеру всех исходных файлов, не затрагивая двоичные - файлы:</para> - - <programlisting>USE_DOS2UNIX= yes -DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting> - - <para>Если вы хотите создать патч на основе существующего файла, то вы - можете его скопировать с расширением <filename>.orig</filename>, а - затем изменить исходный. Цель<buildtarget>makepatch</buildtarget> - запишет соответствующий файл с патчем в каталог - <filename>files</filename> данного порта.</para> + &man.find.1;. Подробнее о формате в &man.re.format.7;. + Такой вариант удобен для преобразования всех файлов заданного + расширения. Для примера, преобразуем все исходные файлы, + не затрагивая двоичные файлы:</para> + + <programlisting>USES= dos2unix +DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting> + + <para>Другим вариантом является использование + <varname>DOS2UNIX_GLOB</varname>, который вызывает + <command>find</command> для каждого из перечисленных в нём + элементов.</para> + + <programlisting>USES= dos2unix +DOS2UNIX_GLOB= *.c *.cpp *.h</programlisting> </sect1> <sect1 xml:id="slow-configure"> @@ -913,13 +996,16 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl есть каждый раз, когда создателями выпускается новый официальный релиз), и добавляется к имени пакета, если оно не равно нулю. Изменения в <varname>PORTREVISION</varname> используются - автоматизированными инструментами (например, &man.pkg.version.1;) + автоматизированными инструментами (например, + <command>pkg version</command>, см. &man.pkg-version.8;) для определения факта появления нового пакета.</para> <para>Значение <varname>PORTREVISION</varname> должно увеличиваться каждый раз, когда в порте FreeBSD делаются изменения, которые - достаточно сильно затрагивают содержимое или структуру - соответствующего пакета.</para> + как-либо меняют получаемый пакет. Сюда относятся только + изменения, затрагивающие построение пакета с <link + linkend="makefile-options">параметрами</link> по + умолчанию.</para> <para>Примеры случаев, когда значение <varname>PORTREVISION</varname> должно быть увеличено:</para> @@ -1009,7 +1095,7 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl <title><varname>PORTEPOCH</varname></title> <para>Время от времени разработчик программного обеспечения или - создатель порта FreeBSD делают что-то не так и выпускают версию + создатель порта &os; делают что-то не так и выпускают версию программы, номер которой меньше предыдущей версии. Примером этого является порт, название которого меняется с foo-20000801 на foo-1.0 (изначально это не считалось бы более новой версией, так как @@ -1018,9 +1104,8 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl <tip> <para>Результат сравнения номера версии не всегда очевиден. Для выполнения сравнения двух строк с номером версии можно - использовать &man.pkg.version.1;. Эквивалентом в - <application>pkgng</application> является - <command>pkg version -t</command>. Например:</para> + использовать <command>pkg version</command> + (см. &man.pkg-version.8;). Например:</para> <screen>&prompt.user; <userinput>pkg_version -t 0.031 0.29</userinput> ></screen> @@ -1060,7 +1145,7 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl корректном использовании <varname>PORTVERSION</varname> может появиться необходимость её иметь, если в будущих релизах программное обеспечение должно изменить структуру номера версии. - Однако создателям портов нужно быть внимательными, когда + Однако создателям портов для &os; нужно быть внимательными, когда разработчик выпускает релиз без официального номера версии — эдакие <quote>промежуточные</quote> релизы. Имеется соблазн пометить релиз датой его выхода, что может вызвать проблемы, как и @@ -1091,7 +1176,7 @@ PORTVERSION= 0.10</programlisting> <para>Обнаружена брешь в безопасности, исправление которой потребовало создания - локального патча для FreeBSD. Соответственно было увеличено + локального патча для &os;. Соответственно было увеличено значение переменной <varname>PORTREVISION</varname>.</para> <programlisting>PORTNAME= gtkmumble @@ -1165,40 +1250,6 @@ PORTEPOCH= 1</programlisting> частью значения переменной <varname>PORTNAME</varname>.</para> </sect2> - <sect2> - <title><varname>LATEST_LINK</varname></title> - - <para><varname>LATEST_LINK</varname> задает в процессе построения - пакета короткое имя ссылки, которые могут использоваться при - выполнении команды <command>pkg_add -r</command>. Это позволяет, - к примеру, установить последнюю версию perl, используя - <command>pkg_add -r perl</command>, без знания точного номера - версии. Такое имя должно быть уникальным и очевидным для - пользователей.</para> - - <para>В некоторых случаях в коллекции портов может присутствовать - несколько версий программы одновременно. Обе системы, построения - индексов и построения пакетов, нуждаются в способности их видеть - как разные, независимые порты, хотя все они могут иметь схожее - значение для <varname>PORTNAME</varname>, - <varname>PKGNAMEPREFIX</varname> и даже - <varname>PKGNAMESUFFIX</varname>. В этих случаях для всех портов - кроме <quote>главного</quote> следует присвоить различные значения для - необязательной переменной <varname>LATEST_LINK</varname> — - чтобы получить пример ее использования, смотрите порты - <filename>lang/gcc46</filename> и <filename>lang/gcc</filename>, - а также семейство <filename>www/apache*</filename>. При установке - <varname>NO_LATEST_LINK</varname> ссылки не создаются; эта - необязательная переменная может быть указана во всех версиях, - кроме <quote>главной</quote>. Обратите - внимание, как выбирать <quote>главную</quote> версию — - <quote>самую популярную</quote>, <quote>самую поддерживаемую</quote>, - <quote>с наименьшими изменениями</quote> и так далее — это - выходит за рамки рекомендаций этого руководства; мы всего лишь - сообщаем вам, как указывать версии других портов после того, как - вы выбрали <quote>главный</quote>.</para> - </sect2> - <sect2 xml:id="porting-pkgname"> <title>Соглашения по именованию пакетов</title> @@ -1218,7 +1269,7 @@ PORTEPOCH= 1</programlisting> <orderedlist> <listitem> - <para>FreeBSD пытается поддерживать языки, на которых разговаривают + <para>&os; пытается поддерживать языки, на которых разговаривают её пользователи. Часть <replaceable>language-</replaceable> должна быть двухсимвольным сокращением от названия языка по стандарту ISO-639, если порт специфичен для конкретного языка. @@ -1262,9 +1313,8 @@ PORTEPOCH= 1</programlisting> имеют одинаковый <varname>PORTNAME</varname>, является вполне нормальным, как для портов <filename>www/apache*</filename>; в этом случае различные версии (и различные записи в индексе) - отличаются по значениям <varname>PKGNAMEPREFIX</varname>, - <varname>PKGNAMESUFFIX</varname> и - <varname>LATEST_LINK</varname>.</para> + отличаются по значениям <varname>PKGNAMEPREFIX</varname> + и <varname>PKGNAMESUFFIX</varname>.</para> </listitem> <listitem> @@ -1613,7 +1663,7 @@ PORTEPOCH= 1</programlisting> <row> <entry><filename>docs*</filename></entry> - <entry>Мета-порты для документации FreeBSD.</entry> + <entry>Мета-порты для документации &os;.</entry> <entry/> </row> @@ -1902,7 +1952,7 @@ PORTEPOCH= 1</programlisting> <row> <entry><filename>ports-mgmt</filename></entry> <entry>Порты для управления, установки и разработки - портов и пакетов FreeBSD.</entry> + портов и пакетов &os;.</entry> <entry/> </row> @@ -2158,7 +2208,9 @@ PORTEPOCH= 1</programlisting> <listitem> <para>Порты, устанавливающие загружаемые модули ядра, должны содержать виртуальную категорию <filename>kld</filename> в - строке <varname>CATEGORIES</varname>. + строке <varname>CATEGORIES</varname>. Это одно из действий, + выполняемых автоматически с добавлением + <literal>kmod</literal> в строке <varname>USES</varname>. </para> </listitem> @@ -2694,7 +2746,7 @@ EXTRACT_ONLY= source.tar.gz</programlis на сеть, которую это даёт.</para> <para>В последующих разделах информация будет даваться вместе с - реализацией этой идеи во FreeBSD. Мы несколько улучшили концепцию + реализацией этой идеи во &os;. Мы несколько улучшили концепцию OpenBSD.</para> <sect3> @@ -3358,9 +3410,9 @@ ALWAYS_KEEP_DISTFILES= yes <orderedlist> <listitem> <para>Старайтесь делать строку COMMENT длиной не больше, чем 70 - символов, так как эта строка будет использована программой - &man.pkg.info.1; для отображения однострочного описания - порта;</para> + символов, так как эта строка будет использована командой + <command>pkg info</command> (см. &man.pkg-info.8;) для + отображения однострочного описания порта;</para> </listitem> <listitem> @@ -3442,7 +3494,7 @@ ALWAYS_KEEP_DISTFILES= yes <para>Когда URL, в которых указаны доступные версии, отличаются от URL их загрузки. Например, чтобы привязать проверку новых версий дистрибутивных файлов к странице загрузки для порта - <package>databases/pgtune</package>, + <package role="port">databases/pgtune</package>, добавьте:</para> <programlisting>PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416</programlisting> @@ -3482,9 +3534,10 @@ ALWAYS_KEEP_DISTFILES= yes отсутствует.</para> <para>Зависимость проверяется дважды, один раз внутри цели - <buildtarget>extract</buildtarget>, а затем из цели + <buildtarget>build</buildtarget>, а затем из цели <buildtarget>install</buildtarget>. Кроме того, имя зависимости - помещается в пакет, так что &man.pkg.add.1; будет + помещается в пакет, так что <command>pkg install</command> + (см. &man.pkg-install.8;) будет автоматически её устанавливать, если её нет на пользовательской системе.</para> </sect2> @@ -3537,7 +3590,8 @@ ALWAYS_KEEP_DISTFILES= yes <para>Зависимость проверяется внутри цели <buildtarget>install</buildtarget>. Кроме того, имя зависимости - помещается в пакет, так что программа &man.pkg.add.1; + помещается в пакет, так что <command>pkg install</command> + (см. &man.pkg-install.8;) будет автоматически его устанавливать, если он не будет найден в пользовательской системе. Часть <replaceable>target</replaceable> может быть опущена, если она @@ -3562,7 +3616,7 @@ ALWAYS_KEEP_DISTFILES= yes которые обрабатываются в <filename>ports/Mk/bsd.*.mk</filename> для пополнения первоначальных зависимостей построения. Например, <literal>USES= gmake</literal> добавляет - <package>devel/gmake</package> в + <package role="port">devel/gmake</package> в <varname>BUILD_DEPENDS</varname>. Для предотвращения загрязнения <varname>RUN_DEPENDS</varname> подобными дополнительными зависимостями проявляйте осторожность с присвоением с раскрытием, @@ -3675,15 +3729,15 @@ ALWAYS_KEEP_DISTFILES= yes <sect2 xml:id="uses"> <title><varname>USES</varname></title> - <para>Существует несколько параметров для определения различных - видов характерных особенностей и зависимостей, которыми - обладает рассматриваемый порт. Они могут быть указаны путём - добавления следующей строки в <filename>Makefile</filename> - порта:</para> + <para>Могут быть добавлены параметры для определения различных + характерных особенностей и зависимостей, которыми + обладает данный порт. Они указываются путём добавления + в <filename>Makefile</filename> этой строки:</para> <programlisting>USES= feature[:arguments]</programlisting> - <para>Для получения полного списка значений смотрите <xref linkend="uses-values"/>.</para> + <para>Для получения полного списка значений смотрите + <xref linkend="uses-values"/>.</para> <warning> <para>Значение <varname>USES</varname> нельзя присваивать @@ -3855,7 +3909,7 @@ ALWAYS_KEEP_DISTFILES= yes <para>Технология построения портов не защищена от зацикленных зависимостей. Если вы создадите такую, то у кого-нибудь и - где-нибудь установка FreeBSD будет немедленно сломана, а у остальных + где-нибудь установка &os; будет немедленно сломана, а у остальных сломается несколько позже. Это на самом деле очень трудно распознать; если вы сомневаетесь, то перед внесением изменений проверьте, что выполнили следующее: <command>cd /usr/ports; make @@ -3880,7 +3934,7 @@ ALWAYS_KEEP_DISTFILES= yes <programlisting>.include <bsd.port.pre.mk> .if exists(${LOCALBASE}/bin/foo) -LIB_DEPENDS= bar:${PORTSDIR}/foo/bar +LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar .endif</programlisting> </example> @@ -3904,7 +3958,7 @@ BAR_DESC= Bar support .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MBAR} -LIB_DEPENDS= bar:${PORTSDIR}/foo/bar +LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar .endif</programlisting> </example> @@ -3936,7 +3990,8 @@ LIB_DEPENDS= bar:${PORTSDIR}/foo/bar <para>В некоторых случаях для большего контроля над зависимостями используются переменные <varname>WANT_</varname>, которые позволяют указывать требования в более точной форме. - Например, взгляните на порт <package>mail/squirrelmail</package>. Этому порту + Например, взгляните на порт + <package role="port">mail/squirrelmail</package>. Этому порту нужны несколько модулей PHP, которые перечислены в переменной <varname>USE_PHP</varname>:</para> @@ -3948,8 +4003,8 @@ LIB_DEPENDS= bar:${PORTSDIR}/foo/bar <programlisting>WANT_PHP_WEB= yes</programlisting> <para>Имеющиеся переменные <varname>USE_</varname> и - <varname>WANT_</varname> определены в файлах - <filename>/usr/ports/Mk</filename>.</para> + <varname>WANT_</varname> определены в файлах в + <filename class="directory">/usr/ports/Mk</filename>.</para> </sect2> </sect1> @@ -3989,7 +4044,7 @@ RESOLUTION?= 300 .endif </programlisting> - <para>Порт <package>japanese/xdvi300</package> содержит + <para>Порт <package role="port">japanese/xdvi300</package> содержит также все обычные патчи, файлы для пакета и так далее. Если вы введете здесь команду <command>make</command>, она возьмет в качестве разрешения значение по умолчанию (300) и построит порт обычным образом.</para> @@ -4017,98 +4072,14 @@ MASTERDIR= ${.CURDIR}/../xdvi300 <sect1 xml:id="makefile-manpages"> <title>Страницы Справочника</title> - <para>Переменные <varname>MAN[1-9LN]</varname> автоматически добавят любые - страницы Справочника к файлу <filename>pkg-plist</filename> (это - означает, что вам <emphasis>не нужно</emphasis> указывать страницы - Справочника в файле <filename>pkg-plist</filename>—обратитесь к - главе о <link linkend="plist-sub">генерации файла PLIST</link> для - получения более подробной информации). Это также позволяет на этапе - установки автоматически упаковывать и распаковывать страницы - Справочника в зависимости от значения переменной - <varname>NO_MANCOMPRESS</varname> в файле - <filename>/etc/make.conf</filename>.</para> - - <para>Если ваш порт пытается задать несколько имен для страниц - Справочника при помощи символических или жестких ссылок, то вы должны - использовать переменную <varname>MLINKS</varname>, чтобы указать на - это. Ссылка, установленная вашим портом, будет уничтожена и создана - заново сценарием <filename>bsd.port.mk</filename> для проверки того, - что она указывает на правильный файл. Любые страницы Справочника, - перечисленные в переменной MLINKS, не должны фигурировать в файле - <filename>pkg-plist</filename>.</para> - - <para>Для указания того, что страницы Справочника нужно сжимать во - время установки, используйте переменную - <varname>MANCOMPRESSED</varname>. Эта переменная может принимать три - значения - <literal>yes</literal>, <literal>no</literal> и - <literal>maybe</literal>. <literal>yes</literal> означает, что - страницы Справочника устанавливаются уже сжатыми, <literal>no</literal> - означает, что они не сжимаются и <literal>maybe</literal> означает, что - программное обеспечение принимает во внимание значение переменной - <varname>NO_MANCOMPRESS</varname>, так что сценарию - <filename>bsd.port.mk</filename> ничего дополнительно делать не - нужно.</para> - <para>Если ваш порт определяет корнем для файлов Справочника каталог, отличный от <varname>PREFIX</varname>, вы можете использовать - переменную <varname>MANPREFIX</varname>, чтобы задать его явно. Кроме - того, если страницы только некоторых разделов помещаются в - нестандартное место, например, в случае портов модулей языка - <literal>perl</literal> Perl, вы можете установить маршруты к справочным - страницам индивидуально, при помощи - <varname>MAN<replaceable>sect</replaceable>PREFIX</varname> (где - <replaceable>sect</replaceable> принимает значения - <literal>1-9</literal>, <literal>L</literal> или - <literal>N</literal>).</para> - - <para>Если страницы Справочника помещаются в подкаталоги, соответствующие - некоторому языку, то задайте название языка языка в переменной - <varname>MANLANG</varname>. Значение этой переменной по умолчанию - равно <literal>""</literal> (то есть только английский язык).</para> - *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402221029.s1MATCFA085888>