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 <ivanov@mail.org>
|
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 <gtk/gtk.h>
|
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(&argc, &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><p>…</p></code>.
|
al@1035
|
289 Для отступов мы используем не пробелы, а табуляцию — она помогает понять
|
al@1035
|
290 структуру страницы и экономит вес, занимаемый страницей (в байтах).
|
al@1035
|
291 Для того, чтобы поместить внутри абзаца код, как, например, имя команды,
|
al@1035
|
292 предпочтительно использовать <code><code></code>. Для отображения
|
al@1035
|
293 команд и демонстрации использования терминала в веб-странице используется
|
al@1035
|
294 <code><pre></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><pre></code>, но с CSS-классом под названием
|
al@1035
|
302 "script". Пример:</p>
|
al@1035
|
303
|
al@1035
|
304 <pre class="script">
|
al@1035
|
305 <pre class="script">
|
al@1035
|
306
|
al@1035
|
307 код…
|
al@1035
|
308
|
al@1035
|
309 </pre>
|
al@1035
|
310 </pre>
|
al@1035
|
311
|
al@1035
|
312 <p><em>Выделенные</em> слова помещаются в тег <code><em></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 файл.оригинал файл.измененный > файл.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>
|