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