Совместное управление

KISS и соответствие стандартам

Что означает KISS? Будьте проще: следуйте лучшим стандартам, тщательно планируйте и пишите качественную документацию, делайте систему стабильной и надежной, сохраняйте rootfs на LiveCD настолько лёгким, чтобы дистрибутив мог запускаться на компьютерах со 128 МБ оперативки. В дистрибутиве возможно использование GTK+2, Dialog, SHell-скриптов и средств разработки PHP. Идея заключается в том, чтобы не дублировать существующее, и думать о малом…

Marmite - сборочный хост и зеркало

Участники проекта могут получить аккаунт на сервере проекта с безопасным доступом по SSH (только по открытому ключу, без пароля). Marmite - сборочный хост SliTaz, на нём находится официальное зеркало пакетов: mirror.slitaz.org, страница состояния - marmite.slitaz.org. С 2026 года он заменяет исторический сервер Tank.

SSH-ключ и аккаунт разработчика

Аккаунты создаёт администратор по вашему открытому SSH-ключу. Создайте современную пару ключей ed25519 на своём компьютере:

$ ssh-keygen -t ed25519 -C "you@your-machine"
$ cat ~/.ssh/id_ed25519.pub

В SliTaz (dropbear):

$ dropbearkey -t ed25519 -f ~/.ssh/id_dropbear
$ dropbearkey -y -f ~/.ssh/id_dropbear | grep ^ssh-ed25519

Отправьте одну строку ssh-ed25519 AAAA… администратору или группе разработчиков (список рассылки или форум). Открытым ключом можно делиться, закрытый ключ никогда не покидает ваш компьютер.

С OpenSSH, как только ваш аккаунт создан, добавьте в ~/.ssh/config следующее: серверы блокируют клиентов, чей SSH-агент предлагает слишком много ключей подряд.

Host hg.slitaz.org marmite.slitaz.org
    User yourlogin
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

С dropbear, стандартным ssh в SliTaz, ничего настраивать не нужно: он не читает ~/.ssh/config, сам использует ~/.ssh/id_dropbear, а ваш логин указывается в URL (ssh://yourlogin@hg.slitaz.org/...).

Репозитории Mercurial

Репозитории SliTaz Mercurial (Hg) можно просматривать и клонировать без ограничений, используя адрес https://hg.slitaz.org/. Mercurial устанавливается командой tazpkg get-install mercurial

С 2026 года запись возможна только по SSH: прежняя отправка по HTTPS с паролем больше не работает. Для отправки нужны аккаунт разработчика и ваш SSH-ключ (см. SSH-ключ и аккаунт разработчика). SSH-адрес репозитория:

ssh://yourlogin@hg.slitaz.org//home/slitaz/repos/<repo>

Замените yourlogin на имя вашего аккаунта, а <repo> на имя репозитория (wok, website, cookutils...). Обратите внимание на двойную косую черту после имени хоста: путь на сервере абсолютный.

~/.hgrc

Перед первым коммитом внесите в ваш персональный файл ~/.hgrc имя, фамилию и адрес электронной почты. Никогда не работайте от имени root.

[ui]
username = Ivan Ivanov <ivanov@example.com>

Новый клон: pull по HTTPS, push по SSH

Так работают основные разработчики: получение изменений остаётся быстрым и анонимным по HTTPS, а отправка идёт по SSH с вашим ключом. Клонируйте, например, wok:

$ hg clone https://hg.slitaz.org/wok

Затем откройте wok/.hg/hgrc в текстовом редакторе и добавьте строку default-push в раздел [paths]:

[paths]
default = https://hg.slitaz.org/wok
default-push = ssh://yourlogin@hg.slitaz.org//home/slitaz/repos/wok

Или клонируйте сразу по SSH: тогда и получение, и отправка идут по SSH, и ничего добавлять не нужно:

$ hg clone ssh://yourlogin@hg.slitaz.org//home/slitaz/repos/wok

Существующий клон: перевести отправку на SSH

Клон, сделанный до перехода на SSH, не нужно клонировать заново. Откройте его файл .hg/hgrc в текстовом редакторе:

Также удалите из вашего ~/.hgrc раздел [auth] и любой пароль для hg.slitaz.org: они больше не используются.

Проверка перед первой отправкой

$ hg paths
$ hg outgoing

hg paths показывает адрес получения (default) и адрес отправки (default-push). hg outgoing подключается по SSH и показывает коммиты, которые будут отправлены, ничего не отправляя. При первом подключении SSH попросит подтвердить ключ сервера: ответьте yes. Если сервер отклоняет ваш ключ, ваш аккаунт или ключ ещё не настроены: см. SSH-ключ и аккаунт разработчика.

Необязательно: сокращение schemes

Расширение schemes входит в Mercurial и сокращает SSH-адрес. Добавьте в ваш ~/.hgrc:

[extensions]
schemes =

[schemes]
slitaz = ssh://yourlogin@hg.slitaz.org//home/slitaz/repos/

Тогда slitaz://wok означает полный SSH-адрес wok. При клонировании всегда указывайте каталог назначения: без него Mercurial останавливается с ошибкой "empty destination path is not valid".

$ hg clone slitaz://wok wok

Такой клон записывает slitaz://wok/ как свой адрес, и для работы ему нужно это расширение. В клоне по HTTPS также работает default-push = slitaz://wok.

Изменить → зафиксировать → отправить

Перейдите в папку wok; вы должны находиться в репозитории, чтобы иметь возможность использовать команды 'hg'. Чтобы проверить все журналы, или просто последний журнал:

$ hg log
$ hg log -l 1

Добавьте или измените один или несколько файлов и зафиксируйте коммит:

$ hg add
$ hg status
$ hg commit -m "Log message..."
$ hg log

Обратите внимание, что вы можете использовать команду rollback для отмены последнего локального коммита, пока он не отправлен. Перед отправкой изменений на сервер (push - «протолкнуть» изменения на сервер) всегда принимайте текущие изменения с сервера:

$ hg pull
$ hg push

Если кто-то тем временем отправил свои изменения, pull сообщит "run 'hg merge' to merge", а push без слияния остановится с ошибкой "push creates new remote head". Выполните слияние, зафиксируйте его, затем отправьте:

$ hg merge
$ hg commit -m "Merge"
$ hg push

Готово, теперь ваши изменения, код или исправления находятся на сервере.

Обновление локального wok

Для того, чтобы обновить ваш wok скомандуйте (pull - «втянуть» изменения с сервера):

$ hg pull -u

Полезные команды

В сети можно найти немало статей и учебников по Hg на русском языке. Мне, например, понравился цикл переводных статей Джоэля Спольски: Hg Init: Часть 2. Основы Mercurial. Самое основное, действительно, можно рассказать за минуту, но иногда могут возникнуть ситуации, когда вам понадобится помощь. Прочитайте и обязательно закрепите полученные данные на практике, прежде чем работать с репозитариями SliTaz.

GUI - на C/GTK, Yad, Vala/Genie и CGI/web

Существует много способов создания пользовательского интерфейса в мире открытого исходного кода. С самого начала проекта и до 3.0 мы, в основном, использовали утилиту под названием GtkDialog. Она позволяет нам создавать очень красивый и сложный интерфейс в GTK с помощью скриптового языка, который можно просто запустить без необходимости компиляции. Но GtkDialog перестал развиваться, в нём не хватает многих новых возможностей GTK. Поэтому мы перешли на Yad для простых графических диалогов. А все диалоги администрирования, пакетного менеджера и утилит настройки используют TazPanel, веб-интерфейс которой написан на xHTML 5 и CSS 3.

Yad очень прост, он не позволяет создавать сложные интерфейсы, даже если нам нужны только 2 или 3 пункта с метками и несколько кнопок, поэтому придётся искать другое решение. Преимущество скриптового языка в том, что его не нужно компилировть, диалоги можно писать в режиме реального времени (но он производит медленные приложения). Написание утилит на C сложно и доступно не каждому, в то время как скрипты оболочки проще для понимания. Поэтому сейчас наш руководящий принцип - сохранить и продолжать совершенствовать наши утилиты командной строки, а также обеспечить их графическим интерфейсом на GTK или CGI/веб.

Многие новые языки, такие как Genie, Vala и GTKaml, используют GTK. Но имейте в виду, что они не так популярны, как C и GTK, и не факт, что их проще освоить и использовать (для выполнения действий в простых приложениях можно использовать скрипты оболочки). Вы можете использовать Vala, но посмотрите на чистый код GTK, создающий одно окно, для этого нужно всего 14 строк:

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
	GtkWidget *window;

	gtk_init(&argc, &argv);
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	g_signal_connect (G_OBJECT (window), "destroy",
		G_CALLBACK (gtk_main_quit), NULL);

	gtk_widget_show(window);
	gtk_main();
	return 0;
}

Если вы не уверены в том, какой язык использовать, обсудите его в рассылке. Если вам нужен только небольшой функционал GUI, посмотрите на tazbox в репозитории slitaz-tools, в нём есть крошечные утилиты для рабочего стола, такие как окно выхода из системы. Первый подпроект SliTaz, написанный на чистом GTK, - это TazWeb. Вы можете разобраться с ним, чтобы узнать способы использования system() для добавления системных команд в интерфейс. Например, TazWeb использует Wget для загрузки и Sed для добавления закладок.

Скрипты Yad должны следовать руководящим принципам TazYad: README и пример кода.

Реализация iconv()

SliTaz использует iconv(), предоставленный GNU glibc - любые пакеты, предлагающие libiconv, должны использовать библиотеку, содержащуюся в glibc-locale. Поэтому в SliTaz больше не входит пакет libiconv (1,2 МБ).

Сборка пакетов SliTaz

Официальная сборка осуществляется с помощью Cookutils. Программа, а также документация о том, как использовать cook и создавать пакеты SliTaz для пакетного менеджера TazPKG, установлена на каждой системе SliTaz.

Пакеты tazpkg в SliTaz создаются автоматически при помощи Cooker («повар») из пакета Cookutils, а также рецепта из wok. В Cookbook описан формат рецептов. Прежде, чем начать, необходимо прочитать документацию о Cook и рецептах.

Что касается выбора пакета, идея состоит в том, чтобы предложить пакет по задаче или функциональности, т.е. выбрать самое легкое приложение в какой-либо области, которое не дублирует уже имеющихся функций других пакетов. Обратите внимание, что текущие пакеты могут быть изменены; если вы найдете альтернативу, которая легче, или с более широкими возможностями, или более привлекательная за счет нескольких дополнительных килобайт, вы можете предложить ее другим в рассылке. Особое внимание необходимо уделить пакетам для LiveCD, они должны быть очищены, лишены необязательных зависимостей и опций компилятора. Обычно, кандидаты пакетов для основного LiveCD обсуждаются в рассылке.

Прежде чем вы приступите к компиляции и созданию пакетов для SliTaz, убедитесь, что их еще нет в неофициальном wok, который находится на основном зеркале SliTaz. Не забывайте, что участники рассылки могут помочь вам и о том, что документация по wok и утилитам написана, чтобы помочь вам начать работу.

Именование пакетов

В большинстве случаев пакет называется так же, как его исходник, за исключением модулей Python, Perl, PHP, Ruby и Lua. Например, пакет, содержащий шаблон Kid для системы, написанной на Python и XML называется python-kid.

Управление сайтом

Управление сайтом осуществляется через репозиторий Mercurial, он может быть клонирован командой:

$ hg clone https://hg.slitaz.org/website

Для отправки добавьте default-push = ssh://yourlogin@hg.slitaz.org//home/slitaz/repos/website в раздел [paths] файла website/.hg/hgrc, как и для wok (см. Репозитории Mercurial).

Стиль написания xHTML

Страницы и различные книги написаны на xHTML 1.0 Transitional. Заголовок 1-го уровня используется только один раз (вверху страницы), заголовок 2-го уровня - это название документа, а уровни 3 и 4 используются для подзаголовков. Если используется маркированный список со ссылками на подразделы страницы, то он помещается вверху, сразу после заголовка 2-го уровня. Абзацы текста окружаются тегами <p>…</p>. Для отступов мы используем не пробелы, а табуляцию - она помогает понять структуру страницы и экономит вес, занимаемый страницей (в байтах). Для того, чтобы поместить внутри абзаца код, как, например, имя команды, предпочтительно использовать <code>. Для отображения команд и демонстрации использования терминала в веб-странице используется <pre> для отображения заранее отформатированного текста. Пример:

$ команда

Для отображения текста, который можно скопировать и вставить, например, скриптов, фрагментов кода, примеров конфигурационных файлов и т.д. - мы также используем <pre>, но с CSS-классом под названием «script». Пример:

<pre class="script">

код…

</pre>

Выделенные слова помещаются в тег <em>, а внутренние ссылки являются относительными. Не забудьте проверить соответствие кода стандартам при помощи онлайнового валидатора от W3C.

Diff и patch

Утилиты командной строки diff и patch соответственно создают и применяют специальные файлы («патчи»), в которых содержатся различия между двумя файлами. Эта техника часто используется для совместной работы - она позволяет легко увидеть изменения, внесенные в исходный файл. Чтобы создать файл diff, который предназначен для чтения людьми в простом текстовом редакторе, используйте параметр -u:

$ diff -u файл.оригинал файл.измененный > файл.diff

Применить патч:

$ patch файл.оригинал файл.diff