website annotate ru/devel/forge.php @ rev 1035

ru: code formatting & proofreading, forge added; added Activity to all Packages pages
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Apr 04 18:44:16 2012 +0300 (2012-04-04)
parents
children 9ed0bfb74392
rev   line source
al@1035 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
al@1035 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
al@1035 3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
al@1035 4 <head>
al@1035 5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
al@1035 6 <title>Кузница | SliTaz</title>
al@1035 7 <meta name="description" content="«Кузница» разработчиков SliTaz" />
al@1035 8 <meta name="keywords" lang="ru" content="SliTaz, разработчики, hg, bugs" />
al@1035 9 <meta name="author" content="Christophe Lincoln"/>
al@1035 10 <?php include("../../lib/html/meta-link.html"); ?>
al@1035 11 </head>
al@1035 12 <body>
al@1035 13
al@1035 14 <?php include("../../lib/html/header.ru.html"); ?>
al@1035 15
al@1035 16 <!-- Block -->
al@1035 17 <div id="block">
al@1035 18 <?php include("../../lib/html/nav.ru.html"); ?>
al@1035 19 <!-- Information/image -->
al@1035 20 <div id="block_info">
al@1035 21 <h4>Кузница</h4>
al@1035 22 <p>Разнообразные утилиты, принципы и сервисы, используемые для создания
al@1035 23 SliTaz.</p>
al@1035 24 <p><img src="/images/users.png" alt="*" />
al@1035 25 Присоединяйтесь к нам <a href="http://scn.slitaz.org/">на SCN</a>
al@1035 26 и <a href="../mailing-list.php">в рассылке</a>
al@1035 27 </p>
al@1035 28 </div>
al@1035 29 </div>
al@1035 30
al@1035 31 <?php include("../../lib/lang.php"); ?>
al@1035 32
al@1035 33 <!-- Content -->
al@1035 34 <div id="content">
al@1035 35
al@1035 36 <h2>Совместное управление</h2>
al@1035 37
al@1035 38 <ul>
al@1035 39 <li><a href="#kiss">KISS и соответствие стандартам</a></li>
al@1035 40 <li><a href="#tank">Сборочный хост и дом</a></li>
al@1035 41 <li><a href="#repos">Репозитории Mercurial</a></li>
al@1035 42 <li><a href="#gui">GUI в GTK и CGI/web</a></li>
al@1035 43 <li><a href="#iconv">Реализация iconv()</a></li>
al@1035 44 <li><a href="#pkgs">Сборка пакетов SliTaz</a></li>
al@1035 45 <li><a href="#website">Управление сайтом</a></li>
al@1035 46 </ul>
al@1035 47
al@1035 48
al@1035 49 <h2 id="kiss">KISS и соответствие стандартам</h2>
al@1035 50
al@1035 51 <p>Что означает <a target="_blank"
al@1035 52 href="http://ru.wikipedia.org/wiki/KISS_%28%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%29">KISS</a>?
al@1035 53 Будьте проще: следуйте лучшим стандартам, тщательно планируйте и пишите
al@1035 54 качественную документацию, делайте систему стабильной и надежной, сохраняйте
al@1035 55 <em>rootfs</em> на LiveCD настолько лёгким, чтобы дистрибутив мог
al@1035 56 запускаться на компьютерах со 128 МБ оперативки. В дистрибутиве возможно
al@1035 57 использование GTK+2, Dialog, SHell-скриптов и средств разработки PHP. Идея
al@1035 58 заключается в том, чтобы не дублировать существующее, и думать о малом…</p>
al@1035 59
al@1035 60
al@1035 61 <h2 id="tank">Tank — сборочный хост и дом</h2>
al@1035 62
al@1035 63 <p>Участники проекта могут получить аккаунт на сервере Tank с безопасным
al@1035 64 доступом, дисковым пространством, общим каталогом и всеми средствами
al@1035 65 разработки. Разработчики могут компилировать пакеты, а мэйнтейнеры зеркала
al@1035 66 могут осуществлять синхронизацию. На сервере Tank также находятся домены
al@1035 67 веб-загрузки, сборочного бота и SliTaz Pro:
al@1035 68 <a href="http://tank.slitaz.org/">tank.slitaz.org</a>.</p>
al@1035 69 <p>Инструкции по использованию сборочного хоста описаны в Cookbook:
al@1035 70 <a href="http://doc.slitaz.org/en:cookbook:buildhost">SliTaz Build Host
al@1035 71 (Tank)</a>.</p>
al@1035 72
al@1035 73
al@1035 74 <h2 id="repos">Репозитории Mercurial</h2>
al@1035 75
al@1035 76 <p>Репозитории SliTaz Mercurial (Hg) можно просматривать и клонировать без
al@1035 77 ограничений, используя адрес
al@1035 78 <a href="http://hg.slitaz.org/">http://hg.slitaz.org/</a>. Те, у кого есть
al@1035 79 доступ на запись, могут напрямую использовать адрес
al@1035 80 <tt>repos.slitaz.org</tt>, требующий аутентификации. Mercurial работает на
al@1035 81 Python; его можно установить командой
al@1035 82 <code>tazpkg get-install mercurial</code></p>
al@1035 83
al@1035 84
al@1035 85 <h3>~/.hgrc</h3>
al@1035 86
al@1035 87 <p>Перед тем, как отправить ваш первый коммит на сервер, внесите в файл
al@1035 88 конфигурации Hg ваше имя, фамилию и адрес электронной почты. Запомните, Hg
al@1035 89 не будет работать, если вы root. Пример персонального файла ~/.hgrc:</p>
al@1035 90
al@1035 91 <pre class="script">
al@1035 92 [ui]
al@1035 93 username = Ivan Ivanov &lt;ivanov@mail.org&gt;
al@1035 94 </pre>
al@1035 95
al@1035 96
al@1035 97 <h4>Клонировать → изменить → зафиксировать изменения → отправить</h4>
al@1035 98
al@1035 99 <p>Клонировать репозиторий, к примеру, wok:</p>
al@1035 100
al@1035 101 <pre>$ hg clone http://repos.slitaz.org/wok</pre>
al@1035 102
al@1035 103 <p>Перейдите в папку wok; вы должны находиться в репозитории, чтобы иметь
al@1035 104 возможность использовать команды 'hg'. Чтобы проверить все журналы, или
al@1035 105 просто последний журнал:</p>
al@1035 106
al@1035 107 <pre>
al@1035 108 $ hg log
al@1035 109 $ hg head
al@1035 110 </pre>
al@1035 111
al@1035 112 <p>Добавьте или измените один или несколько файлов и зафиксируйте коммит:</p>
al@1035 113
al@1035 114 <pre>
al@1035 115 $ hg add
al@1035 116 $ hg status
al@1035 117 $ hg commit -m "Log message..."
al@1035 118 $ hg log
al@1035 119 </pre>
al@1035 120
al@1035 121 <p>Обратите внимание, что вы можете использовать команду <code>rollback</code>
al@1035 122 для отмены последней операции. Перед отправкой изменений на сервер
al@1035 123 (<em>push</em> — «протолкнуть» изменения на сервер) возьмите за правило
al@1035 124 принимать текущие изменения с сервера (при их наличии):</p>
al@1035 125
al@1035 126 <pre>
al@1035 127 $ hg pull
al@1035 128 $ hg push
al@1035 129 </pre>
al@1035 130
al@1035 131 <p>Готово, теперь ваши изменения, код или исправления находятся на сервере.</p>
al@1035 132
al@1035 133
al@1035 134 <h4>Обновление локального wok</h4>
al@1035 135
al@1035 136 <p>Для того, чтобы обновить ваш wok скомандуйте (<em>pull</em> — «втянуть»
al@1035 137 изменения с сервера):</p>
al@1035 138
al@1035 139 <pre>$ hg pull -u</pre>
al@1035 140
al@1035 141
al@1035 142 <h4>Полезные команды</h4>
al@1035 143
al@1035 144 <p>Могут быть использованы следующие команды Hg:</p>
al@1035 145
al@1035 146 <ul>
al@1035 147 <li><code>hg help</code> — показать полный список команд.</li>
al@1035 148 <li><code>hg rollback</code> — отменить последнее действие (commit, pull,
al@1035 149 push).</li>
al@1035 150 <li><code>hg log пакет</code> — показать журнал для пакета.</li>
al@1035 151 <li><code>hg head</code> — показать последний журнал.</li>
al@1035 152 </ul>
al@1035 153
al@1035 154 <p>В сети можно найти немало статей и учебников по Hg на русском языке. Мне,
al@1035 155 например, понравился цикл переводных статей Джоэля Спольски: <a
al@1035 156 href="http://habrahabr.ru/post/108658/" target="_blank">Hg Init: Часть 2.
al@1035 157 Основы Mercurial</a>. Самое основное, действительно, можно рассказать за
al@1035 158 минуту, но иногда могут возникнуть ситуации, когда вам понадобится помощь.
al@1035 159 Прочитайте и обязательно закрепите полученные данные на практике, прежде
al@1035 160 чем работать с репозитариями SliTaz.</p>
al@1035 161
al@1035 162
al@1035 163 <h2 id="gui">GUI — на C/GTK, Yad, Vala/Genie и CGI/web</h2>
al@1035 164
al@1035 165 <p>Существует много способов создания пользовательского интерфейса в мире
al@1035 166 открытого исходного кода. С самого начала проекта и до 3.0 мы, в основном,
al@1035 167 использовали утилиту под названием GtkDialog. Она позволяет нам создавать
al@1035 168 очень красивый и сложный интерфейс в GTK с помощью скриптового языка,
al@1035 169 который можно просто запустить без необходимости компиляции. Но, GtkDialog
al@1035 170 перестал развиваться, в нём не хватает многих новых возможностей GTK.
al@1035 171 Поэтому мы перешли на Yad для простых графических диалогов. А все диалоги
al@1035 172 администрирования, пакетного менеджера и утилит настройки используют
al@1035 173 TazPanel, веб-интерфейс которой написан на xHTML 5 и CSS 3.</p>
al@1035 174 <p>Yad очень прост, он не позволяет создавать сложные интерфейсы, даже если нам
al@1035 175 нужны только 2 или 3 пункта с метками и несколько кнопок, поэтому придётся
al@1035 176 искать другое решение. Преимущество скриптового языка в том, что его
al@1035 177 не нужно компилировть, диалоги можно писать в режиме реального времени
al@1035 178 (но он производит медленные приложения). Написание утилит на C сложно и
al@1035 179 доступно не каждому, в то время как SHell-скрипты проще для понимания.
al@1035 180 Поэтому сейчас наш руководящий принцип — сохранить и продолжать
al@1035 181 совершенствовать наши утилиты командной строки, а также обеспечить их
al@1035 182 графическим интерфейсом на GTK или CGI/web.</p>
al@1035 183 <p>Многие новые языки, такие как Genie, Vala и GTKaml, используют GTK. Но,
al@1035 184 имейте в виду, что они не так популярны, как C и GTK, и не факт, что их
al@1035 185 проще освоить и использовать (для выполнения действий в простых приложениях
al@1035 186 можно использовать скрипты оболочки). Вы можете использовать Vala, но,
al@1035 187 посмотрите на чистый код GTK, создающий одно окно, для этого нужно всего
al@1035 188 14 строк:</p>
al@1035 189
al@1035 190 <pre>
al@1035 191 #include &lt;gtk/gtk.h&gt;
al@1035 192
al@1035 193 int main(int argc, char *argv[])
al@1035 194 {
al@1035 195 GtkWidget *window;
al@1035 196
al@1035 197 gtk_init(&amp;argc, &amp;argv);
al@1035 198 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
al@1035 199 g_signal_connect (G_OBJECT (window), "destroy",
al@1035 200 G_CALLBACK (gtk_main_quit), NULL);
al@1035 201
al@1035 202 gtk_widget_show(window);
al@1035 203 gtk_main();
al@1035 204 return 0;
al@1035 205 }
al@1035 206 </pre>
al@1035 207
al@1035 208 <p>Если вы не уверены в том, какой язык использовать, обсудите его в рассылке.
al@1035 209 Если вам нужен только небольшой функционал GUI, посмотрите на tazbox
al@1035 210 в репозитории slitaz-tools, в нём есть крошечные утилиты для рабочего
al@1035 211 стола, такие как окно выхода из системы. Первый подпроект SliTaz,
al@1035 212 написанный на чистом GTK, — это TazWeb. Вы можете разобраться с ним, чтобы
al@1035 213 узнать способы использования system() для добавления системных команд
al@1035 214 в интерфейс. Например, TazWeb использует Wget для загрузки и Sed для
al@1035 215 добавления закладок.</p>
al@1035 216 <p>Скрипты Yad должны следовать руководящим принципам TazYad: <a
al@1035 217 href="http://hg.slitaz.org/slitaz-dev-tools/raw-file/tip/tazyad/README">README</a>
al@1035 218 и <a
al@1035 219 href="http://hg.slitaz.org/slitaz-dev-tools/raw-file/tip/tazyad/tazyad">пример кода</a>.</p>
al@1035 220
al@1035 221
al@1035 222 <h2 id="iconv">Реализация iconv()</h2>
al@1035 223
al@1035 224 <p>SliTaz использует iconv(), предоставленный GNU glibc — любые пакеты,
al@1035 225 предлагающие <code>libiconv</code>, должны использовать библиотеку,
al@1035 226 содержащуюся в <code>glibc-locale</code>. Поэтому в SliTaz больше не входит
al@1035 227 пакет libiconv (1,2 МБ).</p>
al@1035 228
al@1035 229
al@1035 230 <h2 id="pkgs">Сборка пакетов SliTaz</h2>
al@1035 231
al@1035 232 <p>Официальная сборка осуществляется с помощью Cookutils. Программа, а также
al@1035 233 документация о том, как использовать cook и <a
al@1035 234 href="http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.en.html"
al@1035 235 >создавать пакеты SliTaz</a> для пакетного менеджера TazPKG, установлена
al@1035 236 на каждой системе SliTaz.</p>
al@1035 237 <p>Пакеты tazpkg в SliTaz создаются автоматически при помощи <a
al@1035 238 href="http://cook.slitaz.org/">Cooker</a> («повар») из пакета Cookutils,
al@1035 239 а также рецепта из wok. В Cookbook описан формат <a
al@1035 240 href="http://doc.slitaz.org/en:cookbook:receipt">рецептов</a>. Прежде,
al@1035 241 чем начать, необходимо прочитать документацию о Cook и рецептах.</p>
al@1035 242 <p>Что касается выбора пакета, идея состоит в том, чтобы предложить пакет по
al@1035 243 задаче или функциональности, т.е. выбрать самое легкое приложение
al@1035 244 в какой-либо области, которое не дублирует уже имеющихся функций других
al@1035 245 пакетов. Обратите внимание, что текущие пакеты могут быть изменены; если
al@1035 246 вы найдете альтернативу, которая легче, или с более широкими возможностями,
al@1035 247 или более <em>привлекательная</em> за счет нескольких дополнительных КБ,
al@1035 248 вы можете предложить ее другим в рассылке. Особое внимание необходимо
al@1035 249 уделить пакетам для LiveCD, они должны быть очищены, лишены необязательных
al@1035 250 зависимостей и опций компилятора. Обычно, кандидаты пакетов для основного
al@1035 251 LiveCD обсуждаются в рассылке.</p>
al@1035 252 <p>Прежде чем вы приступите к компиляции и созданию пакетов для SliTaz,
al@1035 253 убедитесь, что их еще нет в <a
al@1035 254 href="http://download.tuxfamily.org/slitaz/packages/undigest/"
al@1035 255 >неофициальном</a> wok, который находится на основном зеркале SliTaz.
al@1035 256 Не забывайте, что участники рассылки могут помочь вам и о том, что
al@1035 257 документация по <a href="http://doc.slitaz.org/en:cookbook:wok">wok и
al@1035 258 утилитам</a> написана, чтобы помочь вам начать работу.</p>
al@1035 259
al@1035 260
al@1035 261 <h3 id="pkgs-naming">Именование пакетов</h3>
al@1035 262
al@1035 263 <p>В большинстве случаев пакет называется так же, как его исходник,
al@1035 264 за исключением модулей Python, Perl, PHP, Ruby и Lua. Например, пакет,
al@1035 265 содержащий шаблон Kid для системы, написанной на Python и XML называется
al@1035 266 <code>python-kid</code>.</p>
al@1035 267
al@1035 268
al@1035 269 <h2 id="website">Управление сайтом</h2>
al@1035 270
al@1035 271 <p>Управление сайтом осуществляется через репозиторий Mercurial, он может
al@1035 272 быть клонирован командой:</p>
al@1035 273
al@1035 274 <pre>$ hg clone http://hg.slitaz.org/website</pre>
al@1035 275
al@1035 276 <p>Или, если у вас есть соответствующие права:</p>
al@1035 277
al@1035 278 <pre>$ hg clone http://repos.slitaz.org/website</pre>
al@1035 279
al@1035 280
al@1035 281 <h3>Стиль написания xHTML</h3>
al@1035 282
al@1035 283 <p>Страницы и различные <em>книги</em> написаны на xHTML 1.0 Transitional.
al@1035 284 Заголовок 1-го уровня используется только один раз (вверху страницы),
al@1035 285 заголовок 2-го уровня — это название документа, а уровни 3 и 4 используются
al@1035 286 для подзаголовков. Если используется маркированный список со ссылками на
al@1035 287 подразделы страницы, то он помещается вверху, сразу после заголовка 2-го
al@1035 288 уровня. Абзацы текста окружаются тегами <code>&lt;p&gt;…&lt;/p&gt;</code>.
al@1035 289 Для отступов мы используем не пробелы, а табуляцию — она помогает понять
al@1035 290 структуру страницы и экономит вес, занимаемый страницей (в байтах).
al@1035 291 Для того, чтобы поместить внутри абзаца код, как, например, имя команды,
al@1035 292 предпочтительно использовать <code>&lt;code&gt;</code>. Для отображения
al@1035 293 команд и демонстрации использования терминала в веб-странице используется
al@1035 294 <code>&lt;pre&gt;</code> для отображения заранее отформатированного
al@1035 295 текста. Пример:</p>
al@1035 296
al@1035 297 <pre>$ команда</pre>
al@1035 298
al@1035 299 <p>Для отображения текста, который можно скопировать и вставить, например,
al@1035 300 скриптов, фрагментов кода, примеров конфигурационных файлов и т.д. — мы
al@1035 301 также используем <code>&lt;pre&gt;</code>, но с CSS-классом под названием
al@1035 302 "script". Пример:</p>
al@1035 303
al@1035 304 <pre class="script">
al@1035 305 &lt;pre class="script"&gt;
al@1035 306
al@1035 307 код…
al@1035 308
al@1035 309 &lt;/pre&gt;
al@1035 310 </pre>
al@1035 311
al@1035 312 <p><em>Выделенные</em> слова помещаются в тег <code>&lt;em&gt;</code>, а
al@1035 313 внутренние ссылки являются относительными. Не забудьте проверить
al@1035 314 соответствие кода стандартам при помощи онлайнового <em>валидатора</em>
al@1035 315 от W3C.</p>
al@1035 316
al@1035 317
al@1035 318 <h2 id="diff">Diff и patch</h2>
al@1035 319
al@1035 320 <p>Утилиты командной строки <code>diff</code> и <code>patch</code>
al@1035 321 соответственно создают и применяют специальные файлы (<em>«патчи»</em>),
al@1035 322 в которых содержатся различия между двумя файлами. Эта техника часто
al@1035 323 используется для совместной работы — она позволяет легко увидеть изменения,
al@1035 324 внесенные в исходный файл. Чтобы создать файл <code>diff</code>, который
al@1035 325 предназначен для чтения людьми в простом текстовом редакторе, используйте
al@1035 326 параметр <code>-u</code>:</p>
al@1035 327
al@1035 328 <pre>$ diff -u файл.оригинал файл.измененный &gt; файл.diff</pre>
al@1035 329
al@1035 330 <p>Применить патч:</p>
al@1035 331
al@1035 332 <pre>$ patch файл.оригинал файл.diff</pre>
al@1035 333
al@1035 334 <!-- End of content -->
al@1035 335 </div>
al@1035 336
al@1035 337 <?php include("../../lib/html/footer.ru.html"); ?>
al@1035 338
al@1035 339 </body>
al@1035 340 </html>