/usr/share/doc/ubuntu-packaging-guide-html-uk/packaging-new-software.html is in ubuntu-packaging-guide-html-uk 0.3.7.
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 | <!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.7',
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/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="Contents" href="index.html">Contents</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 bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz
</pre></div>
</div>
<p>Коли він спитає тип пакунку, оберіть <tt class="docutils literal"><span class="pre">s</span></tt>: одинарний бінарник. Це імпортує код у гілку й створить теку <tt class="docutils literal"><span class="pre">debian/</span></tt>. Погляньте на її вміст: більшість автоматично створених файлів потрібні лише для спеціялізованих пакунків (наприклад модулі Emacs), тож можна почати з вилучення зайвих файлів:</p>
<div class="highlight-python"><div class="highlight"><pre>$ cd hello/debian
$ rm *ex *EX
</pre></div>
</div>
<p>Тепер потрібно внести зміни у кожен з файлів.</p>
<p>В <tt class="docutils literal"><span class="pre">debian/changelog</span></tt> змініть номер версії на версію Ubuntu: <tt class="docutils literal"><span class="pre">2.7-0ubuntu1</span></tt> (апстрім-версія 2.7, версія в Debian 0, версія в Ubuntu 1). Також змініть <tt class="docutils literal"><span class="pre">unstable</span></tt> на поточний розроблюваний випуск Ubuntu, наприклад, <tt class="docutils literal"><span class="pre">trusty</span></tt>.</p>
<p>Велика частина процесу компілювання пакунку здійснюється скриптами з <tt class="docutils literal"><span class="pre">debhelper</span></tt>. Оскільки поведінка <tt class="docutils literal"><span class="pre">debhelper</span></tt> змінюється при виході старшої версії, файл compat повідомляє <tt class="docutils literal"><span class="pre">debhelper</span></tt> яку саме версію використовувати. Має сенс використовувати найсвіжішу версію: <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>Нарешті, закоммте код у гілку для пакунків:</p>
<div class="highlight-python"><div class="highlight"><pre>$ 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-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>Встановіть пакунок й перевірте, що він працює (пізніше за бажання Ви зможете вилучити його командою <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>):</p>
<div class="highlight-python"><div class="highlight"><pre>$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb
</pre></div>
</div>
<p>Можете також встановити усі пакунки одразу за допомогою:</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>Навіть якщо двійковий .deb-пакунок успішно збирається, Ваші джерельні файли для пакунку можуть містити помилки. Багато помилок можуть автоматично виявлятися нашим інструментом <tt class="docutils literal"><span class="pre">lintian</span></tt>, який можна застосувати до файлу метаданих .dsc, двійкових пакунків .deb або файлу .changes:</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>Щоб побачити детальний опис вад, використовуйте прапорець lintian <tt class="docutils literal"><span class="pre">--info</span></tt> або команду <tt class="docutils literal"><span class="pre">lintian-info</span></tt>.</p>
<p>Результати перевірок архіву Ubuntu можна знайти у Інтернеті на <a class="reference external" href="http://lintian.ubuntuwire.org">http://lintian.ubuntuwire.org</a>.</p>
<p>Для пакунків Python є також інструмент <tt class="docutils literal"><span class="pre">lintian4python</span></tt>, здійснюючий деякі додаткові перевірки lintian.</p>
<p>Після створення виправлення для файлів пакунку можна перезібрати його з параметром <tt class="docutils literal"><span class="pre">-nc</span></tt> (“no clean”), щоб не починати збірку з самого початку:</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>Вивантаження в PPA дозволить переконатися, що пакунок збирається нормально, а також дозволить Вам і решті тестувати бінарні пакунки. Вам знадобиться створити PPA на Launchpad, після чого вивантажити пакунок за допомогою <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>Попрохати провести review можна на каналі IRC <tt class="docutils literal"><span class="pre">#ubuntu-motu</span></tt>, або у <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.7.
<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.3.
<br />
© Copyright 2010-2015, 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>
|