This file is indexed.

/usr/share/doc/ubuntu-packaging-guide-html-ru/patches-to-packages.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
300
301
302
303
304
305
306
307
308
309
310
311
<!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>8. Патчи для пакетов &mdash; 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="9. Исправление пакетов FTBFS (Fails To Build From Source)" href="fixing-ftbfs.html" />
    <link rel="prev" title="7. Обновления безопасности и обновления стабильных релизов" href="security-and-stable-release-updates.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="fixing-ftbfs.html" title="9. Исправление пакетов FTBFS (Fails To Build From Source)"
	        accesskey="N">вперёд</a></li>
	        <li class="page_item"><a  
	        href="security-and-stable-release-updates.html" title="7. Обновления безопасности и обновления стабильных релизов"
	        accesskey="P">назад</a></li>
        <li class="page_item"><a class="sub-nav-item" href="index.html">Ubuntu Packaging Guide  &raquo;</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="patches-to-packages">
<h1>8. Патчи для пакетов<a class="headerlink" href="#patches-to-packages" title="Ссылка на этот заголовок"></a></h1>
<p>Иногда разработчикам пакета Ubuntu надо изменить исходный код апстрима, чтобы заставить его работать в Ubuntu должным образом. Примеры включают патчи для апстримов, которые еще не попали в версию релиза, либо изменения к системам билдов апстрима, необходимые только для их сборки на Ubuntu. Мы будем менять исходный код апстрима напрямую, но такой метод делает более сложным дальнейшее удаление патчей, когда апстрим уже применил их, также усложняя извлечение изменений для их отправки в проект апстрима. Вместо этого, мы будем хранить эти изменения как отдельные патчи в форме diff файлов.</p>
<p>Существуют различные способы работы с патчами для пакетов Debian. К счастью, мы остановимся на одной системе, <a class="reference external" href="https://wiki.debian.org/UsingQuilt">Quilt</a>, которая сейчас используется большинством пакетов.</p>
<p>Давайте возьмём в качестве примера пакет <code class="docutils literal"><span class="pre">kamoso</span></code> в Trusty:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr branch ubuntu:trusty/kamoso
</pre></div>
</div>
<p>Патчи хранятся в <code class="docutils literal"><span class="pre">debian/patches</span></code>.  Для этого пакета имеется один патч <code class="docutils literal"><span class="pre">kubuntu_01_fix_qmax_on_armel.diff</span></code> для исправления ошибки компиляции на платформе ARM.  Этому патчу присвоено имя, описывающее, что он делает, номер патча по порядку (чтобы избежать  путаницы, если два патча имеют одинаковое имя) и, в данном случае, команда Kubuntu добавила свой собственный префикс, чтобы показать, что патч исходит от них, а не от Debian.</p>
<p>Порядок применения патчей хранится в <code class="docutils literal"><span class="pre">debian/patches/series</span></code>.</p>
<div class="section" id="patches-with-quilt">
<h2>8.1. Патчи с помощью Quilt<a class="headerlink" href="#patches-with-quilt" title="Ссылка на этот заголовок"></a></h2>
<p>Перед работой с Quilt нужно указать этой системе, где искать патчи.  Добавьте в <code class="docutils literal"><span class="pre">~/.bashrc</span></code> следующее:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">export</span> <span class="n">QUILT_PATCHES</span><span class="o">=</span><span class="n">debian</span><span class="o">/</span><span class="n">patches</span>
</pre></div>
</div>
<p>И источник файла для применения нового экспорта:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ . ~/.bashrc
</pre></div>
</div>
<p>По умолчанию все патчи применяются уже с UDD извлечений или загружаемых пакетов. Вы можете проверить это с помощью:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt applied
kubuntu_01_fix_qmax_on_armel.diff
</pre></div>
</div>
<p>Если вы хотите удалить патч, нужно выполнить <code class="docutils literal"><span class="pre">pop</span></code>:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt pop
Removing patch kubuntu_01_fix_qmax_on_armel.diff
Restoring src/kamoso.cpp

No patches applied
</pre></div>
</div>
<p>А чтобы применить патч, используйте <code class="docutils literal"><span class="pre">push</span></code>:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt push
Applying patch kubuntu_01_fix_qmax_on_armel.diff
patching file src/kamoso.cpp

Now at patch kubuntu_01_fix_qmax_on_armel.diff
</pre></div>
</div>
</div>
<div class="section" id="adding-a-new-patch">
<h2>8.2. Добавление нового патча<a class="headerlink" href="#adding-a-new-patch" title="Ссылка на этот заголовок"></a></h2>
<p>Для добавления нового патча нужно указать Quilt создать новый патч, сообщить ему, какие файлы этот патч должен изменить, отредактировать файлы, а затем обновить патч:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt new kubuntu_02_program_description.diff
Patch kubuntu_02_program_description.diff is now on top
$ quilt add src/main.cpp
File src/main.cpp added to patch kubuntu_02_program_description.diff
$ sed -i &quot;s,Webcam picture retriever,Webcam snapshot program,&quot;
src/main.cpp
$ quilt refresh
Refreshed patch kubuntu_02_program_description.diff
</pre></div>
</div>
<p>Шаг <code class="docutils literal"><span class="pre">quilt</span> <span class="pre">add</span></code> важен: если вы забудете его сделать, файлы не попадут в патч.</p>
<p>Теперь изменения будут в <code class="docutils literal"><span class="pre">debian/patches/kubuntu_02_program_description.diff</span></code>, а в файл <code class="docutils literal"><span class="pre">series</span></code> будет добавлена информация о новом патче.  Вы должны добавить новый файл в исходные файлы для пакета:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr add debian/patches/kubuntu_02_program_description.diff
$ bzr add .pc/*
$ dch -i &quot;Add patch kubuntu_02_program_description.diff to improve the program description&quot;
$ bzr commit
</pre></div>
</div>
<p>Quilt содержит свои мета-данные в директории <a href="#id1"><span class="problematic" id="id2">``</span></a>.pc/<a href="#id3"><span class="problematic" id="id4">`</span></a>&#8216;, поэтому сейчас вам нужно добавить в пакет и ее. Это должно быть улучшено в будущем.</p>
<p>Как правило, следует проявлять осторожность при добавлении патчей к программам, если они исходят не из апстрима. Часто имеется веская причина, по которой изменения ещё не были сделаны.  В рассмотренном выше примере изменяется строка в пользовательском интерфейсе, так что это может поломать все переводы.  Если сомневаетесь, спросите автора из апстрима перед тем, как добавить патч.</p>
</div>
<div class="section" id="patch-headers">
<h2>8.3. Заголовки патчей<a class="headerlink" href="#patch-headers" title="Ссылка на этот заголовок"></a></h2>
<p>Мы рекомендуем добавлять к каждому патчу заголовки <a class="reference external" href="http://dep.debian.net/deps/dep3/">DEP-3</a>, помещая их в самом верху файла патча. Вот некоторые заголовки, которые можно использовать:</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Description:</th><td class="field-body"><p class="first last">Описание того, что делает патч. Имеет формат, аналогичный полю <code class="docutils literal"><span class="pre">Description</span></code> в <code class="docutils literal"><span class="pre">debian/control</span></code>: первая строка содержит краткое описание, начинающееся со строчной буквы, остальные строки содержат более длинное описание с пробелом в качестве отступа.</p>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Author:</th><td class="field-body"><p class="first last">Кто написал патч (например, &#8220;Jane Doe &lt;<a class="reference external" href="mailto:packager&#37;&#52;&#48;example&#46;com">packager<span>&#64;</span>example<span>&#46;</span>com</a>&gt;&#8221;).</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Origin:</th><td class="field-body"><p class="first last">Откуда пришёл этот патч (например, &#8220;upstream&#8221;), если заголовок <em>Author</em> отсутствует.</p>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Bug-Ubuntu:</th><td class="field-body"><p class="first last">Ссылка на информацию об ошибке на Launchpad, предпочтительно, в краткой форме (наподобие <em>https://bugs.launchpad.net/bugs/XXXXXXX</em>). Если также имеются отчёты об ошибках в апстриме или системах отслеживания ошибок Debian, добавьте заголовки <em>Bug</em> или <em>Bug-Debian</em>.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Forwarded:</th><td class="field-body"><p class="first last">Был ли патч передан в апстрим. Значения: &#8220;yes&#8221;, &#8220;no&#8221; или &#8220;not-needed&#8221;.</p>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Last-Update:</th><td class="field-body"><p class="first last">Дата последней ревизии (в форме &#8220;ГГГГ-ММ-ДД&#8221;).</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="upgrading-to-new-upstream-versions">
<h2>8.4. Обновление до новых версий из апстрима<a class="headerlink" href="#upgrading-to-new-upstream-versions" title="Ссылка на этот заголовок"></a></h2>
<p>Чтобы выполнить обновление до последней версии, вы можете использовать команду <code class="docutils literal"><span class="pre">bzr</span> <span class="pre">merge-upstream</span></code>:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr merge-upstream --version 2.0.2 https://launchpad.net/ubuntu/+archive/primary/+files/kamoso_2.0.2.orig.tar.bz2
</pre></div>
</div>
<p>При запуске этой команды произойдет откат всех патчей, так как они могут стать устаревшими. Возможно потребуется их обновить для соответствия новому источнику апстрима, либо потребуется удалить их все вместе. Для облегчения проверки проблем применяйте патчи по одному.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt push
Applying patch kubuntu_01_fix_qmax_on_armel.diff
patching file src/kamoso.cpp
Hunk #1 FAILED at 398.
1 out of 1 hunk FAILED -- rejects in file src/kamoso.cpp
Patch kubuntu_01_fix_qmax_on_armel.diff can be reverse-applied
</pre></div>
</div>
<p>Если для патча указано <code class="docutils literal"><span class="pre">it</span> <span class="pre">can</span> <span class="pre">be</span> <span class="pre">reverse-applied</span></code>, значит патч уже был применён апстримом, так что мы можем удалить этот патч:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt delete kubuntu_01_fix_qmax_on_armel
Removed patch kubuntu_01_fix_qmax_on_armel.diff
</pre></div>
</div>
<p>Затем продолжайте:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt push
Applied kubuntu_02_program_description.diff
</pre></div>
</div>
<p>Неплохой мыслью будет выполнить refresh, это обновит патч относительно изменений исходного кода в апстриме:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ quilt refresh
Refreshed patch kubuntu_02_program_description.diff
</pre></div>
</div>
<p>Затем выполните фиксацию, как обычно:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ bzr commit -m &quot;new upstream version&quot;
</pre></div>
</div>
</div>
<div class="section" id="making-a-package-use-quilt">
<h2>8.5. Создание пакета с использованием Quilt<a class="headerlink" href="#making-a-package-use-quilt" title="Ссылка на этот заголовок"></a></h2>
<p>Современные пакеты используют Quilt по умолчанию, это встроено в формат исходных файлов пакета.  Проверьте, что в <code class="docutils literal"><span class="pre">debian/source/format</span></code> указано <code class="docutils literal"><span class="pre">3.0</span> <span class="pre">(quilt)</span></code>.</p>
<p>Для более старых пакетов, использующих формат 1.0, необходимо использовать Quilt явно, обычно с помощью включения make-фала в <code class="docutils literal"><span class="pre">debian/rules</span></code>.</p>
</div>
<div class="section" id="configuring-quilt">
<h2>8.6. Конфигурирование Quilt<a class="headerlink" href="#configuring-quilt" title="Ссылка на этот заголовок"></a></h2>
<p>Вы можете воспользоваться файлом <code class="docutils literal"><span class="pre">~/.quiltrc</span></code> для конфигурирования quilt. Вот несколько опций, которые могут быть полезны при использовании quilt с пакетами Debian:</p>
<div class="highlight-sh"><div class="highlight"><pre><span></span><span class="c1"># Set the patches directory</span>
<span class="nv">QUILT_PATCHES</span><span class="o">=</span><span class="s2">&quot;debian/patches&quot;</span>
<span class="c1"># Remove all useless formatting from the patches</span>
<span class="nv">QUILT_REFRESH_ARGS</span><span class="o">=</span><span class="s2">&quot;-p ab --no-timestamps --no-index&quot;</span>
<span class="c1"># The same for quilt diff command, and use colored output</span>
<span class="nv">QUILT_DIFF_ARGS</span><span class="o">=</span><span class="s2">&quot;-p ab --no-timestamps --no-index --color=auto&quot;</span>
</pre></div>
</div>
</div>
<div class="section" id="other-patch-systems">
<h2>8.7. Другие системы управления патчами<a class="headerlink" href="#other-patch-systems" title="Ссылка на этот заголовок"></a></h2>
<p>Другие системы патчинга, используемые в пакетах, включают <code class="docutils literal"><span class="pre">dpatch</span></code> и <code class="docutils literal"><span class="pre">cdbs</span> <span class="pre">simple-patchsys</span></code>, принцип работы которых похож на Quilt - патчи хранятся в <code class="docutils literal"><span class="pre">debian/patches</span></code>, но для их применения, отмены или создания требуются другие команды. Вы можете узнать какая система патчинга используется в пакете при помощи команды <code class="docutils literal"><span class="pre">what-patch``(в</span> <span class="pre">пакете</span> <span class="pre">``ubuntu-dev-tools</span></code>). Вы можете использовать <code class="docutils literal"><span class="pre">edit-patch</span></code>, показанный в <a class="reference internal" href="fixing-a-bug.html#working-on-a-fix"><span class="std std-ref">предыдущих главах</span></a>, в качестве надежного способа для работы со всеми системами.</p>
<p>В более старых пакетах изменения будут включены напрямую в источники и храниться в исходном файле <code class="docutils literal"><span class="pre">diff.gz</span></code>. Это делает сложнее процесс обновления до новых версий апстрима или различия между патчами - лучше избегать.</p>
<p>Не изменяйте систему патчей, не обсудив это с сопровождающим Debian или имеющей отношение к делу командой Ubuntu. Если существующей системы патчей нет, можете добавить Quilt.</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="#">8. Патчи для пакетов</a><ul>
<li><a class="reference internal" href="#patches-with-quilt">8.1. Патчи с помощью Quilt</a></li>
<li><a class="reference internal" href="#adding-a-new-patch">8.2. Добавление нового патча</a></li>
<li><a class="reference internal" href="#patch-headers">8.3. Заголовки патчей</a></li>
<li><a class="reference internal" href="#upgrading-to-new-upstream-versions">8.4. Обновление до новых версий из апстрима</a></li>
<li><a class="reference internal" href="#making-a-package-use-quilt">8.5. Создание пакета с использованием Quilt</a></li>
<li><a class="reference internal" href="#configuring-quilt">8.6. Конфигурирование Quilt</a></li>
<li><a class="reference internal" href="#other-patch-systems">8.7. Другие системы управления патчами</a></li>
</ul>
</li>
</ul>

        </div>

      <div class="browse-guide">
        <h3>Browse The Guide:</h3>
        <ul>
          <li class="prev">
            <a href="security-and-stable-release-updates.html"
                      title="Предыдущий раздел: 7. Обновления безопасности и обновления стабильных релизов">Go Previous</a>
          </li>
          
          <li class="center">
            <a title="Back to Index" href="index.html">Index Guide</a>
          </li>
        
          <li class="next">
            <a href="fixing-ftbfs.html"
                      title="Следующий раздел: 9. Исправление пакетов FTBFS (Fails To Build From Source)">Go Next</a>
          </li>
        </ul>
        <span>Эта страница:</span> <a href="./_sources/patches-to-packages.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 />
        &copy; 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>