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 <ivanov@example.com>
|
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 <gtk/gtk.h>
|
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(&argc, &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><p>…</p></code>.
|
al@1278
|
326 Для отступов мы используем не пробелы, а табуляцию — она помогает понять структуру страницы и экономит вес, занимаемый страницей (в байтах).
|
al@1278
|
327 Для того, чтобы поместить внутри абзаца код, как, например, имя команды, предпочтительно использовать <code><code></code>.
|
al@1278
|
328 Для отображения команд и демонстрации использования терминала в веб-странице используется <code><pre></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><pre></code>, но с CSS-классом под названием «script».
|
al@1278
|
338 Пример:
|
al@1278
|
339 </p>
|
al@1035
|
340
|
al@1035
|
341 <pre class="script">
|
al@1035
|
342 <pre class="script">
|
al@1035
|
343
|
al@1035
|
344 код…
|
al@1035
|
345
|
al@1035
|
346 </pre>
|
al@1035
|
347 </pre>
|
al@1035
|
348
|
al@1278
|
349 <p>
|
al@1278
|
350 <em>Выделенные</em> слова помещаются в тег <code><em></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 файл.оригинал файл.измененный > файл.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>
|