/usr/share/doc/ubuntu-packaging-guide-html-ru/packaging-new-software.html is in ubuntu-packaging-guide-html-ru 0.3.8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>6. Создание пакетов для новых программ — Ubuntu Packaging Guide</title>
<link rel="shortcut icon" href="./_static/images/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="./_static/reset.css" type="text/css" />
<link rel="stylesheet" href="./_static/960.css" type="text/css" />
<link rel="stylesheet" href="./_static/base.css" type="text/css" />
<link rel="stylesheet" href="./_static/home.css" type="text/css" />
<link rel="stylesheet" href="./_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="./_static/guide.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '0.3.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="./_static/jquery.js"></script>
<script type="text/javascript" src="./_static/underscore.js"></script>
<script type="text/javascript" src="./_static/doctools.js"></script>
<script type="text/javascript" src="./_static/translations.js"></script>
<script type="text/javascript" src="./_static/main.js"></script>
<link rel="top" title="Ubuntu Packaging Guide" href="./index.html" />
<link rel="next" title="7. Обновления безопасности и обновления стабильных релизов" href="security-and-stable-release-updates.html" />
<link rel="prev" title="5. Демонстрация: исправление ошибки в Ubuntu" href="fixing-a-bug-example.html" />
</head>
<body class="home">
<a name="top"></a>
<div class="header-navigation">
<div>
<nav role="navigation">
<ul>
<li class="page_item current_page_item"><a title="Содержание" href="index.html">Содержание</a>
<li>
<form id="form-search" method="get" action="search.html">
<fieldset>
<input id="input-search" type="text" name="q" value="Search" />
</fieldset>
</form>
</li>
</ul>
</nav>
<a class="logo-ubuntu" href="http://packaging.ubuntu.com/">
<img src="./_static/images/logo-ubuntu.png" width="119" height="27" alt="Ubuntu logo" />
</a>
<a href="http://packaging.ubuntu.com/"><h2>Packaging Guide</h2></a>
</div>
</div>
<div class="header-content">
<div class="clearfix">
<div class="header-navigation-secondary">
<div>
<nav role="navigation">
<ul class="clearfix">
<li class="page_item"><a style="margin-right: 10px"
href="security-and-stable-release-updates.html" title="7. Обновления безопасности и обновления стабильных релизов"
accesskey="N">вперёд</a></li>
<li class="page_item"><a
href="fixing-a-bug-example.html" title="5. Демонстрация: исправление ошибки в Ubuntu"
accesskey="P">назад</a></li>
<li class="page_item"><a class="sub-nav-item" href="index.html">Ubuntu Packaging Guide »</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="content" class="body container_12">
<div class="grid_12">
<!--<section id="main-section">-->
<div class="grid_9 alpha">
<div class="section" id="packaging-new-software">
<h1>6. Создание пакетов для новых программ<a class="headerlink" href="#packaging-new-software" title="Ссылка на этот заголовок">¶</a></h1>
<p>Хотя в архиве Ubuntu имеются тысячи пакетов, есть ещё много программ, которыми никто не занимается. Если вы знаете о какой-то замечательной программе, о которой, по вашему мнению, стоит узнать более широкому кругу пользователей, вы можете попробовать приложить свою руку к созданию пакета для Ubuntu или <a class="reference external" href="https://help.launchpad.net/Packaging/PPA">PPA</a>. Это руководство проведёт вас через этапы создания пакета для новой программы.</p>
<p>Сначала вам следует прочитать статью <a class="reference internal" href="getting-set-up.html"><span class="doc">Подготовка</span></a>, чтобы подготовить свою среду разработки.</p>
<div class="section" id="checking-the-program">
<h2>6.1. Проверка программы<a class="headerlink" href="#checking-the-program" title="Ссылка на этот заголовок">¶</a></h2>
<p>Первым этапом создания пакета является получение tar-файла из апстрима («апстримом» мы называем авторов приложений) и проверка того, что он нормально компилируется и запускается.</p>
<p>Это руководство проведёт вас через процесс создания пакета для небольшого приложения GNU Hello, доступного на <a class="reference external" href="http://www.gnu.org/software/hello/">GNU.org</a>.</p>
<p>Если у вас ещё нет инструментов сборки, установите их. Также установите все необходимые зависимости.</p>
<p>Установим инструменты сборки:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo apt-get install build-essential
</pre></div>
</div>
<p>Скачаем основной пакет:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ wget -O hello-2.7.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz"
</pre></div>
</div>
<p>Теперь распакуем основной пакет:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ tar xf hello-2.7.tar.gz
$ cd hello-2.7
</pre></div>
</div>
<p>Это приложение использует систему сборки autoconf, так что нам нужно запустить <code class="docutils literal"><span class="pre">./configure</span></code> для подготовки к компиляции.</p>
<p>При этом будет проверено наличие необходимых для сборки зависимостей. Поскольку <code class="docutils literal"><span class="pre">hello</span></code> — простой пример, <code class="docutils literal"><span class="pre">build-essential</span></code> обеспечит нас всем, что нужно. Для более сложных программ, команда завершится ошибкой, если у нас нет необходимых библиотек и файлов для разработки. Установите требуемые пакеты и повторите процесс, пока команда не завершится успешно.:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./configure
</pre></div>
</div>
<p>Теперь нужно скомпилировать исходный код:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make
</pre></div>
</div>
<p>Если компиляция завершилась успешно, можно установить и запустить программу:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo make install
$ hello
</pre></div>
</div>
</div>
<div class="section" id="starting-a-package">
<h2>6.2. Создание пакета<a class="headerlink" href="#starting-a-package" title="Ссылка на этот заголовок">¶</a></h2>
<p><code class="docutils literal"><span class="pre">bzr-builddeb</span></code> содержит модуль для создания нового пакета из шаблона. Этот модуль является обёрткой вокруг команды <code class="docutils literal"><span class="pre">dh_make</span></code> . Он уже должен быть у вас, если вы установили <code class="docutils literal"><span class="pre">packaging-dev</span></code>. Запустите команду, указав имя пакета, номер версии и путь к tar-архиву из апстрима:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz
</pre></div>
</div>
<p>Когда он спросит тип пакета, выберите <code class="docutils literal"><span class="pre">s</span></code>: одиночный бинарник. Это импортирует код в ветку и создаст папку <code class="docutils literal"><span class="pre">debian/</span></code>. Взгляните на её содержимое: большинство автоматически созданных файлов требуются лишь для специализированных пакетов (например, модули Emacs), так что можно начать с удаления лишних файлов:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ cd hello/debian
$ rm *ex *EX
</pre></div>
</div>
<p>Теперь нужно внести изменения в каждый из файлов.</p>
<p>В <code class="docutils literal"><span class="pre">debian/changelog</span></code> измените номер версии на версию Ubuntu: <code class="docutils literal"><span class="pre">2.7-0ubuntu1</span></code> (апстрим-версия 2.7, версия в Debian 0, версия в Ubuntu 1). Также смените <code class="docutils literal"><span class="pre">unstable</span></code> на текущий разрабатываемый выпуск Ubuntu, например, <code class="docutils literal"><span class="pre">trusty</span></code>.</p>
<p>Большая часть процесса компиляции пакета совершается скриптами из <code class="docutils literal"><span class="pre">debhelper</span></code>. Так как поведение <code class="docutils literal"><span class="pre">debhelper</span></code> меняется при выходе старшей версии, файл compat сообщает <code class="docutils literal"><span class="pre">debhelper</span></code>‘у какую именно версию использовать. Имеет смысл использовать наиболее свежую версию: <code class="docutils literal"><span class="pre">9</span></code>.</p>
<p>Файл <code class="docutils literal"><span class="pre">control</span></code> содержит все метаданные пакета. Первый абзац описывает пакет исходных кодов. Второй и следующие абзацы описывают двоичные пакеты, которые должны быть собраны. Нам понадобится добавить пакеты, необходимые для компиляции приложения в <code class="docutils literal"><span class="pre">Build-Depends:</span></code>. Для <code class="docutils literal"><span class="pre">hello</span></code> он должен включать, как минимум:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Build</span><span class="o">-</span><span class="n">Depends</span><span class="p">:</span> <span class="n">debhelper</span> <span class="p">(</span><span class="o">>=</span> <span class="mi">9</span><span class="p">)</span>
</pre></div>
</div>
<p>Также нужно заполнить описание программы в поле <code class="docutils literal"><span class="pre">Description:</span></code>.</p>
<p><code class="docutils literal"><span class="pre">copyright</span></code> нужно заполнить в соответствии с лицензией на источник из апстрима. Согласно файлу hello/COPYING, это лицензия GNU GPL 3 или более поздняя её версия.</p>
<p><code class="docutils literal"><span class="pre">docs</span></code> должен содержать любые файлы документации из апстрима, которые, по вашему мнению, должны быть включены в готовый пакет.</p>
<p><code class="docutils literal"><span class="pre">README.source</span></code> и <code class="docutils literal"><span class="pre">README.Debian</span></code> необходимы, лишь если ваш пакет имеет какие-то нестандартные функции. У нас таких нет, так что можно удалить эти файлы.</p>
<p><code class="docutils literal"><span class="pre">source/format</span></code> можно оставить как есть, он описывает формат версии пакета исходного кода, который должен быть <code class="docutils literal"><span class="pre">3.0</span> <span class="pre">(quilt)</span></code>.</p>
<p><code class="docutils literal"><span class="pre">rules</span></code> — самый сложный файл. Это Makefile, который компилирует код и превращает его в двоичный пакет. К счастью, основную часть работы в наши дни автоматически выполняет <code class="docutils literal"><span class="pre">debhelper</span> <span class="pre">7</span></code>, так что универсальная цель <code class="docutils literal"><span class="pre">%</span></code> просто запускает сценарий <code class="docutils literal"><span class="pre">dh</span></code>, который делает всё, что необходимо.</p>
<p>Все эти файлы подробнее описаны в статье <a class="reference internal" href="debian-dir-overview.html"><span class="doc">обзор каталога debian</span></a>.</p>
<p>Наконец, закоммитьте код в ветку для пакетов:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."
</pre></div>
</div>
</div>
<div class="section" id="building-the-package">
<h2>6.3. Сборка пакета<a class="headerlink" href="#building-the-package" title="Ссылка на этот заголовок">¶</a></h2>
<p>Теперь нам нужно проверить, что наши исходные файлы для пакета успешно компилируются и собираются в двоичный .deb-пакет:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr builddeb -- -us -uc
$ cd ../../
</pre></div>
</div>
<p><code class="docutils literal"><span class="pre">bzr</span> <span class="pre">builddeb</span></code> — это команда для сборки пакета в его текущем местоположении. <code class="docutils literal"><span class="pre">-us</span> <span class="pre">-uc</span></code> сообщает что подписывать пакет с помощью GPG не требуется. Результат будет помещён в каталог «..».</p>
<p>Просмотреть содержимое пакета можно с помощью:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ lesspipe hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Установите пакет и проверьте, что он работает (позднее при желании вы сможете удалить его командой <code class="docutils literal"><span class="pre">sudo</span> <span class="pre">apt-get</span> <span class="pre">remove</span> <span class="pre">hello</span></code>):</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Можете также установить все пакеты сразу с помощью:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ sudo debi
</pre></div>
</div>
</div>
<div class="section" id="next-steps">
<h2>6.4. Дальнейшие шаги<a class="headerlink" href="#next-steps" title="Ссылка на этот заголовок">¶</a></h2>
<p>Даже если двоичный .deb-пакет успешно собирается, ваши исходные файлы для пакета могут содержать ошибки. Многие ошибки могут автоматически обнаруживаться нашим инструментом <code class="docutils literal"><span class="pre">lintian</span></code>, который можно применить к файлу метаданных .dsc, двоичным пакетам .deb или файлу .changes:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Чтобы увидеть подробное описание ошибок, используйте флаг lintian <code class="docutils literal"><span class="pre">--info</span></code> или команду <code class="docutils literal"><span class="pre">lintian-info</span></code>.</p>
<p>Результаты проверок архива Ubuntu можно найти в Интернете на <a class="reference external" href="http://lintian.ubuntuwire.org">http://lintian.ubuntuwire.org</a>.</p>
<p>Для пакетов Python имеется также инструмент <code class="docutils literal"><span class="pre">lintian4python</span></code>, осуществляющий некоторые дополнительные проверки lintian.</p>
<p>После создания исправления для файлов пакета можно пересобрать его с параметром <code class="docutils literal"><span class="pre">-nc</span></code> (“no clean”), чтобы не начинать сборку с самого начала:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr builddeb -- -nc -us -uc
</pre></div>
</div>
<p>Убедившись, что пакет успешно собирается локально, вы должны проверить, правильно ли его сборка будет проходить в чистой системе, с помощью <code class="docutils literal"><span class="pre">pbuilder</span></code>. Поскольку вскоре мы собираемся загрузить его в PPA (персональный архив пакетов), эту загрузку нужно снабдить <em>цифровой подписью</em>, чтобы Launchpad мог удостовериться, что загрузку сделали вы (узнать о том, что загрузка будет подписана, можно по отсутствию передаваемых <code class="docutils literal"><span class="pre">bzr</span> <span class="pre">builddeb</span></code> флагов <code class="docutils literal"><span class="pre">-us</span></code> и <code class="docutils literal"><span class="pre">-uc</span></code>, которые мы использовали ранее). Для подписывания своей работы вам понадобится настроить GPG. Если вы ещё не настроили <code class="docutils literal"><span class="pre">pbuilder-dist</span></code> или GPG, <a class="reference internal" href="getting-set-up.html"><span class="doc">сделайте это сейчас</span></a>:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc
</pre></div>
</div>
<p>После того как вы останетесь довольны получившимся пакетом, нужно, чтобы его проверили другие люди. Вы можете выгрузить ветку на Launchpad для проверки:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr push lp:~<lp-username>/+junk/hello-package
</pre></div>
</div>
<p>Выгрузка в PPA позволит удостовериться, что пакет собирается нормально, а также позволит вам и остальным тестировать бинарные пакеты. Вам потребуется создать PPA на Launchpad, после чего выгрузить пакет с помощью <code class="docutils literal"><span class="pre">dput</span></code>:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes
</pre></div>
</div>
<p>Смотрите раздел «<a class="reference internal" href="udd-uploading.html"><span class="doc">Загрузка</span></a>» для дополнительной информации.</p>
<p>Попросить провести review можно на канале IRC <code class="docutils literal"><span class="pre">#ubuntu-motu</span></code>, или в <a class="reference external" href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-motu">списке рассылки MOTU</a>. В некоторых случаях может потребоваться участие конкретной команды: в подобных случаях команда GNU поможет разобраться.</p>
</div>
<div class="section" id="submitting-for-inclusion">
<h2>6.5. Отправка на включение<a class="headerlink" href="#submitting-for-inclusion" title="Ссылка на этот заголовок">¶</a></h2>
<p>Существует несколько путей, которыми пакет может попасть в Ubuntu. В большинстве случаев лучшим путём может быть прохождение сначала через Debian. Это позволит вашему пакету стать доступным для наибольшего количества пользователей, так как он будет доступен не только в Debian и Ubuntu, но и во всех дистрибутивах, созданных на их основе. Вот несколько полезных ссылок по отправке новых пакетов в Debian:</p>
<blockquote>
<div><ul class="simple">
<li><p class="first"><a class="reference external" href="https://wiki.debian.org/DebianMentorsFaq">Debian Mentors FAQ</a> - debian-mentors создан для менторства новых и перспективных разработчиков Debian. Это то место, где можно найти спонсора для загрузки Вашего пакета в архив.</p>
</li>
<li><p class="first"><a class="reference external" href="http://www.debian.org/devel/wnpp/">Work-Needing and Prospective Packages</a> - информация о том как отправлять баги “Intent to Package” (Назначение пакету) и “Request for Package” (Запрос пакета), а также списки открытых ITP и RFP.</p>
</li>
<li><p class="first"><a class="reference external" href="http://www.debian.org/doc/manuals/developers-reference/pkgs.html#newpackage">Руководство Разработчика Debian, 5.1. Создание пакетов</a> - бесценный документ для создателей пакетов как под Ubuntu, так и под Debian. Данная глава описывает процесс отправки новых пакетов.</p>
</li>
</ul>
</div></blockquote>
<p>В некоторых случаях имеет смысл отправляться прямо в Ubuntu. Например, если Debian находится в состоянии “freeze”: тогда ваш пакет врядли успеет войти в Ubuntu к ближайшему релизу. Этот процесс описан на странице <a class="reference external" href="https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages">“Новые Пакеты”</a> Ubuntu Wiki.</p>
</div>
<div class="section" id="screenshots">
<h2>6.6. Снимки экрана<a class="headerlink" href="#screenshots" title="Ссылка на этот заголовок">¶</a></h2>
<p>Загрузив пакет в Debian, вам следует добавить снимки экрана, чтобы будущие пользователи смогли получить представление о том, как выглядит интерфейс программы. Снимки нужно отправлять на <a class="reference external" href="http://screenshots.debian.net/upload">http://screenshots.debian.net/upload</a> .</p>
</div>
</div>
<div class="divide"></div>
</div>
<div id="sidebar" class="grid_3 omega">
<div class="container-tweet">
<h3>Оглавление</h3>
<div class="toc">
<ul>
<li><a class="reference internal" href="#">6. Создание пакетов для новых программ</a><ul>
<li><a class="reference internal" href="#checking-the-program">6.1. Проверка программы</a></li>
<li><a class="reference internal" href="#starting-a-package">6.2. Создание пакета</a></li>
<li><a class="reference internal" href="#building-the-package">6.3. Сборка пакета</a></li>
<li><a class="reference internal" href="#next-steps">6.4. Дальнейшие шаги</a></li>
<li><a class="reference internal" href="#submitting-for-inclusion">6.5. Отправка на включение</a></li>
<li><a class="reference internal" href="#screenshots">6.6. Снимки экрана</a></li>
</ul>
</li>
</ul>
</div>
<div class="browse-guide">
<h3>Browse The Guide:</h3>
<ul>
<li class="prev">
<a href="fixing-a-bug-example.html"
title="Предыдущий раздел: 5. Демонстрация: исправление ошибки в Ubuntu">Go Previous</a>
</li>
<li class="center">
<a title="Back to Index" href="index.html">Index Guide</a>
</li>
<li class="next">
<a href="security-and-stable-release-updates.html"
title="Следующий раздел: 7. Обновления безопасности и обновления стабильных релизов">Go Next</a>
</li>
</ul>
<span>Эта страница:</span> <a href="./_sources/packaging-new-software.txt"
rel="nofollow">Исходный текст</a>
</div>
</div>
<div id="back_top"><a href="#top">Back to Top</a></div>
</div>
<!--</section>-->
</div>
</div>
<div class="shadow"></div>
<footer>
<div>
Version: 0.3.8.
<a href="https://bugs.launchpad.net/ubuntu-packaging-guide">Report bugs</a> or
<a href="https://code.launchpad.net/~ubuntu-packaging-guide-team/ubuntu-packaging-guide/trunk">grab the source code</a> from Launchpad.
Создано с помощью <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.4.
<br />
© Copyright 2010-2016, Ubuntu Developers, Creative Commons Attribution-ShareAlike 3.0.
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">
Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">
<img alt="Creative Commons License" style="border-width:0"
src="./_static/images/cc-by-sa.png" /></a>
<br />
<a href="http://people.ubuntu.com/~mitya57/ubuntu-packaging-guide-readme.html#translating">Help translate</a> or
<a href="./_static/translators.html">view the list of translators</a>.
</div>
</footer>
</body>
</html>
|