/usr/share/doc/ubuntu-packaging-guide-html-ru/packaging-new-software.html is in ubuntu-packaging-guide-html-ru 0.3.5.
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 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | <!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.5',
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"><em>Подготовка</em></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-python"><div class="highlight"><pre>$ sudo apt-get install build-essential
</pre></div>
</div>
<p>Скачаем основной пакет:</p>
<div class="highlight-python"><div class="highlight"><pre>$ 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-python"><div class="highlight"><pre>$ tar xf hello-2.7.tar.gz
$ cd hello-2.7
</pre></div>
</div>
<p>Это приложение использует систему сборки autoconf, так что нам нужно запустить <tt class="docutils literal"><span class="pre">./configure</span></tt> для подготовки к компиляции.</p>
<p>При этом будет проверено наличие необходимых для сборки зависимостей. Поскольку <tt class="docutils literal"><span class="pre">hello</span></tt> — простой пример, <tt class="docutils literal"><span class="pre">build-essential</span></tt> обеспечит нас всем, что нужно. Для более сложных программ, команда завершится ошибкой, если у нас нет необходимых библиотек и файлов для разработки. Установите требуемые пакеты и повторите процесс, пока команда не завершится успешно.:</p>
<div class="highlight-python"><div class="highlight"><pre>$ ./configure
</pre></div>
</div>
<p>Теперь нужно скомпилировать исходный код:</p>
<div class="highlight-python"><div class="highlight"><pre>$ make
</pre></div>
</div>
<p>Если компиляция завершилась успешно, можно установить и запустить программу:</p>
<div class="highlight-python"><div class="highlight"><pre>$ 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><tt class="docutils literal"><span class="pre">bzr-builddeb</span></tt> содержит модуль для создания нового пакета из шаблона. Этот модуль является обёрткой вокруг команды <tt class="docutils literal"><span class="pre">dh_make</span></tt> . Он уже должен быть у вас, если вы установили <tt class="docutils literal"><span class="pre">packaging-dev</span></tt>. Запустите команду, указав имя пакета, номер версии и путь к tar-архиву из апстрима:</p>
<div class="highlight-python"><div class="highlight"><pre>$ sudo apt-get install dh-make
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz
</pre></div>
</div>
<p>When it asks what type of package type <tt class="docutils literal"><span class="pre">s</span></tt> for single binary. This will import
the code into a branch and add the <tt class="docutils literal"><span class="pre">debian/</span></tt> packaging directory. Have a look
at the contents. Most of the files it adds are only needed for specialist
packages (such as Emacs modules) so you can start by removing the optional
example files:</p>
<div class="highlight-python"><div class="highlight"><pre>$ cd hello/debian
$ rm *ex *EX
</pre></div>
</div>
<p>Теперь нужно внести изменения в каждый из файлов.</p>
<p>In <tt class="docutils literal"><span class="pre">debian/changelog</span></tt> change the
version number to an Ubuntu version: <tt class="docutils literal"><span class="pre">2.7-0ubuntu1</span></tt> (upstream version 2.7,
Debian version 0, Ubuntu version 1). Also change <tt class="docutils literal"><span class="pre">unstable</span></tt> to the current
development Ubuntu release such as <tt class="docutils literal"><span class="pre">trusty</span></tt>.</p>
<p>Much of the package building work is done by a series of scripts
called <tt class="docutils literal"><span class="pre">debhelper</span></tt>. The exact behaviour of <tt class="docutils literal"><span class="pre">debhelper</span></tt> changes
with new major versions, the compat file instructs <tt class="docutils literal"><span class="pre">debhelper</span></tt> which
version to act as. You will generally want to set this to the most
recent version which is <tt class="docutils literal"><span class="pre">9</span></tt>.</p>
<p>Файл <tt class="docutils literal"><span class="pre">control</span></tt> содержит все метаданные пакета. Первый абзац описывает пакет исходных кодов. Второй и следующие абзацы описывают двоичные пакеты, которые должны быть собраны. Нам понадобится добавить пакеты, необходимые для компиляции приложения в <tt class="docutils literal"><span class="pre">Build-Depends:</span></tt>. Для <tt class="docutils literal"><span class="pre">hello</span></tt> он должен включать, как минимум:</p>
<div class="highlight-python"><div class="highlight"><pre>Build-Depends: debhelper (>= 9)
</pre></div>
</div>
<p>Также нужно заполнить описание программы в поле <tt class="docutils literal"><span class="pre">Description:</span></tt>.</p>
<p><tt class="docutils literal"><span class="pre">copyright</span></tt> нужно заполнить в соответствии с лицензией на источник из апстрима. Согласно файлу hello/COPYING, это лицензия GNU GPL 3 или более поздняя её версия.</p>
<p><tt class="docutils literal"><span class="pre">docs</span></tt> должен содержать любые файлы документации из апстрима, которые, по вашему мнению, должны быть включены в готовый пакет.</p>
<p><tt class="docutils literal"><span class="pre">README.source</span></tt> и <tt class="docutils literal"><span class="pre">README.Debian</span></tt> необходимы, лишь если ваш пакет имеет какие-то нестандартные функции. У нас таких нет, так что можно удалить эти файлы.</p>
<p><tt class="docutils literal"><span class="pre">source/format</span></tt> можно оставить как есть, он описывает формат версии пакета исходного кода, который должен быть <tt class="docutils literal"><span class="pre">3.0</span> <span class="pre">(quilt)</span></tt>.</p>
<p><tt class="docutils literal"><span class="pre">rules</span></tt> — самый сложный файл. Это Makefile, который компилирует код и превращает его в двоичный пакет. К счастью, основную часть работы в наши дни автоматически выполняет <tt class="docutils literal"><span class="pre">debhelper</span> <span class="pre">7</span></tt>, так что универсальная цель <tt class="docutils literal"><span class="pre">%</span></tt> просто запускает сценарий <tt class="docutils literal"><span class="pre">dh</span></tt>, который делает всё, что необходимо.</p>
<p>Все эти файлы подробнее описаны в статье <a class="reference internal" href="debian-dir-overview.html"><em>обзор каталога debian</em></a>.</p>
<p>Finally commit the code to your packaging branch:</p>
<div class="highlight-python"><div class="highlight"><pre>$ 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-python"><div class="highlight"><pre>$ bzr builddeb -- -us -uc
$ cd ../../
</pre></div>
</div>
<p><tt class="docutils literal"><span class="pre">bzr</span> <span class="pre">builddeb</span></tt> — это команда для сборки пакета в его текущем местоположении. <tt class="docutils literal"><span class="pre">-us</span> <span class="pre">-uc</span></tt> сообщает что подписывать пакет с помощью GPG не требуется. Результат будет помещён в каталог «..».</p>
<p>Просмотреть содержимое пакета можно с помощью:</p>
<div class="highlight-python"><div class="highlight"><pre>$ lesspipe hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Install the package and check it works (later you will be able to uninstall it
using <tt class="docutils literal"><span class="pre">sudo</span> <span class="pre">apt-get</span> <span class="pre">remove</span> <span class="pre">hello</span></tt> if you want):</p>
<div class="highlight-python"><div class="highlight"><pre>$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>You can also install all packages at once using:</p>
<div class="highlight-python"><div class="highlight"><pre>$ 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>Even if it builds the .deb binary package, your packaging may have
bugs. Many errors can be automatically detected by our tool
<tt class="docutils literal"><span class="pre">lintian</span></tt> which can be run on both the source .dsc metadata file and
the .deb binary package:</p>
<div class="highlight-python"><div class="highlight"><pre>$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Описание каждой проблемы, о которой он сообщает, можно найти на <a class="reference external" href="http://lintian.debian.org/tags.html">веб-сайте lintian</a>.</p>
<p>After making a fix to the packaging you can rebuild using <tt class="docutils literal"><span class="pre">-nc</span></tt> “no clean”
without having to build from scratch:</p>
<div class="highlight-python"><div class="highlight"><pre>$ bzr builddeb -- -nc -us -uc
</pre></div>
</div>
<p>Убедившись, что пакет успешно собирается локально, вы должны проверить, правильно ли его сборка будет проходить в чистой системе, с помощью <tt class="docutils literal"><span class="pre">pbuilder</span></tt>. Поскольку вскоре мы собираемся загрузить его в PPA (персональный архив пакетов), эту загрузку нужно снабдить <em>цифровой подписью</em>, чтобы Launchpad мог удостовериться, что загрузку сделали вы (узнать о том, что загрузка будет подписана, можно по отсутствию передаваемых <tt class="docutils literal"><span class="pre">bzr</span> <span class="pre">builddeb</span></tt> флагов <tt class="docutils literal"><span class="pre">-us</span></tt> и <tt class="docutils literal"><span class="pre">-uc</span></tt>, которые мы использовали ранее). Для подписывания своей работы вам понадобится настроить GPG. Если вы ещё не настроили <tt class="docutils literal"><span class="pre">pbuilder-dist</span></tt> или GPG, <a class="reference internal" href="getting-set-up.html"><em>сделайте это сейчас</em></a>:</p>
<div class="highlight-python"><div class="highlight"><pre>$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc
</pre></div>
</div>
<p>После того как вы останетесь довольны получившимся пакетом, нужно, чтобы его проверили другие люди. Вы можете выгрузить ветку на Launchpad для проверки:</p>
<div class="highlight-python"><div class="highlight"><pre>$ bzr push lp:~<lp-username>/+junk/hello-package
</pre></div>
</div>
<p>Uploading it to a PPA will ensure it builds and give an easy way for you and
others to test the binary packages. You will need to set up a PPA in Launchpad
and then upload with <tt class="docutils literal"><span class="pre">dput</span></tt>:</p>
<div class="highlight-python"><div class="highlight"><pre>$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes
</pre></div>
</div>
<p>Смотрите раздел «<a class="reference internal" href="udd-uploading.html"><em>Загрузка</em></a>» для дополнительной информации.</p>
<p>You can ask for reviews in <tt class="docutils literal"><span class="pre">#ubuntu-motu</span></tt> IRC channel, or on the
<a class="reference external" href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-motu">MOTU mailing list</a>. There might also be a more specific team you
could ask such as the GNU team for more specific questions.</p>
</div>
<div class="section" id="submitting-for-inclusion">
<h2>6.5. Submitting for inclusion<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="http://wiki.debian.org/DebianMentorsFaq">Debian Mentors FAQ</a> — debian-mentors является основным местом для создания, просмотра и загрузки в Debian новых пакетов. Здесь вы можете найти разработчика 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/developers-reference/pkgs.html#newpackage">Debian Developer’s Reference, 5.1. New packages</a> — весь документ бесценен для создателей пакетов как для Ubuntu, так и для Debian. Этот раздел документирует процессы по отправке новых пакетов.</p>
</li>
</ul>
</div></blockquote>
<p>В некоторых случаях может иметь смысл сначала отправить пакет непосредственно в Ubuntu. Например, если версия Debian находится в состоянии заморозки, что делает маловероятным своевременное попадание вашего пакета в новый выпуск Ubuntu. Этот процесс документирован в разделе <a class="reference external" href="https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages">“New Packages”</a> вики-страниц Ubuntu.</p>
</div>
<div class="section" id="sreenshots">
<h2>6.6. Sreenshots<a class="headerlink" href="#sreenshots" title="Ссылка на этот заголовок">¶</a></h2>
<p>Once you have uploaded a package to debian, you should add screenshots
to allow propective users to see what the program is like. These should
be uploaded to <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. Submitting for inclusion</a></li>
<li><a class="reference internal" href="#sreenshots">6.6. Sreenshots</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.5.
<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.2.2.
<br />
© Copyright 2010-2014 , 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>
|