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

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