Readme.rus
На этой странице рассказывается о среде "Суверен" ("Sovereign") и о том, как её
использовать.

0. Введение

    "Суверен" - это независимая среда разработки программного обеспечения
    для ОС GNU/Linux, призванная освободить разработчиков от ряда проблем,
    связанных с наличием множества различных версий дистрибутивов Linux.

    Среда "Суверен" предоставляет программисту обычный набор программ и
    библиотек, используемых при разработке программ для Linux: компилятор gcc,
    утилиты binutils, библиотеки glibc, Xlib, gtk+ и другие, позволяя работать
    с утилитам и библиотеками одних и тех же версий на разных дистрибутивах
    Linux.

    С технической точки зрения "Суверен" - это набор программ и библиотек,
    установленных с префиксом "/opt/sgn". Для работы с этими программами
    достаточно добавить "/opt/sgn" в начало переменной окружения PATH.
    В результате все собираемые программы будут связываться с библиотеками из
    /opt/sgn/lib, то есть о содержимом /lib и /usr/lib можно будет больше
    не беспокоиться.

    Если собрать систему "Суверен" так, что в неё войдут все зависимости вашего
    проекта, то при запуске программы не будет требоваться ни одной библиотеки
    из /lib и /usr/lib. В этом случае система "Суверен" может выполнять роль
    слоя переносимости для вашего проекта, и единственным значимым вопросом
    переносимости останется бинарная совместимость различных ядер Linux, за
    которой разработчики ядра следят достаточно тщательно.

    Приведём список возможных проблем, с которыми можно справиться с помощью
    системы "Суверен":
    * Библиотеки и утилиты в дистрибутиве, который вы используете, устарели
      (нет возможностей, присутствующих в последних версиях; API устарел;
      есть известные ошибки), и вы хотите установить более новую версию, не
      поломав при этом существующую инсталляцию Linux;
    * В выбранный вами дистрибутив включена новая версия библиотеки/утилиты,
      в которой есть регрессии по сравнению с предыдущими версиями. Вы хотите
      работать с одной из предыдущих версий, не нарушая при этом целостность
      дистрибутива;
    * Вам нужна утилита/библиотека, которая не входит в установленный
      дистрибутив Linux, и при этом конфликтует с некоторыми из установленных
      пакетов;
    * При работе вы используете сразу несколько компьютеров (пару ноутбуков и
      десктопов, офисную рабочую станцию, дюжину серверов в тестовом кластере
      и т.п.), и не хотите заниматься сопровождением и синхронизацией
      установленных на этих компьютерах дистрибутивов;
    * Тип используемого дистрибутива Linux устанавливается политикой компании,
      и вы не хотите тратить время на его настройку и проверку того, что всё
      работает так, как надо;
    * У вас есть сервер, на котором не установлены -devel-пакеты (и, возможно,
      нет gcc), и вы хотите скомпилировать и запустить программу,
      не устанавливая при этом никаких дополнительных пакетов.

    Итак, если система "Суверен" вас заинтересовала - добро пожаловать на борт!

1. Соглашения, используемые в этом документе
    1.1 Команды, приводящиеся в качестве примера, начинаются со знака '$',
    который представляет приглашение оболочки и подчёркивает, что команды
    нужно набирать вручную в консоли, например:
	$ cd ~/'sovereign'
    1.2. Для всех приведённых команд предполагается, что текущей директорией
    является директория, в которую распакована система "Суверен".
    1.3. Большинство команд должны исполняться от имени суперпользователя
    ("под рутом").
    1.4. Предполагаются, что все команды выполняются в оболочке "bash".

2. Подготовка системы "Суверен" к работе
    1.1. Перед запуском любого из скриптов системы "Суверен" нужно записать
    путь к директории, в которую распакована система "Суверен", в переменную
    окружения 'SGN_HOME':
	$ cd ~/'sovereign'
	$ export SGN_HOME=`pwd`

    1.2. Перед началом работы нужно подготовить виртуальные диски с файловой
    системой ext2 (или другой подходящей файловой системой). Это можно сделать,
    запустив скрипт "sgn_init_images.sh":
	$ ./sgn_init_images.sh
    Этот скрипт создаёт два образа: sgn_install.img (512 Мб) и sgn_system.img
    (1024 Мб). При желании эти образы можно создать самостоятельно.

    Образ sgn_install.img используется при компиляции бинарных пакетов
    системы "Суверен" (SGN-пакетов).

    Образ sgn_system.img - это целевой образ для инсталляции системы "Суверен".
    Когда система будет собрана, можно будет получить персональную среду
    разработки, смонтировав sgn_system.img в директорию /opt/sgn, например так:
	$ mount -o loop,ro sgn_system.img /opt/sgn

3. Сборка бинарных пакетов системы "Суверен"
    Для сборки бинарного SGN-пакета требуется:
	1. Shell-скрипт для сборки пакета.
	   Скрипты сборки находятся в директории "depot", например
	   "depot/gcc/gcc-4.2.2.sh".
	2. Архив с исходными кодами для собираемого пакета и необходимые патчи.
	   Например, для сборки gcc-4.2.2 требуется два файла:
	   "src/gcc/gcc-4.2.2.tar.bz2" и
	   "src/gcc/gcc-4.2.2_patches/gcc-4.2.2_dwarf2out_c_patch".
	3. В базовой системе (используемом дистрибутиве Linux) должны быть
	   установлены утилиты, требуемые для сборки пакеты (такие как gettext,
	   flex, make). Система "Суверен" обеспечивает полную независимость от
	   хост-системы только во время исполнения скомпилированных программ,
	   во время сборки независимость пока только частичная.
    При наличии перечисленных файлов сборка SGN-пакета сводится к выполнению
    следующей команды (в качестве примера собирается gcc-4.2.2):
	$ ./sgn_make.sh depot/gcc/gcc-4.2.2.sh
    Когда скрипт закончит работу, новый пакет будет помещён в
    ./sgn/gcc-4.2.2.sgn.

    На данный момент SGN-пакеты представляют собой обычные архивы .tar.gz,
    только с другим расширением имени файла. Для установки такого пакета
    достаточно перейти в корень смонтированного на запись образа sgn_system.img
    и выполнить команду "tar xzf gcc-4.2.2.sgn". Также можно воспользоваться
    вспомогательным скриптом, который делает то же самое:
	$ ./sgn_install.sh src/gcc-4.2.2.sgn
    В будущем планируется, что SGN-пакеты будут включать больше информации
    о процессе установки пакета (пост-инсталляционные скрипты), так что
    "tar xzf" однажды перестанет работать.

4. Сборка по сценарию
    Для того, чтобы не собирать пакеты вручную один за другим, в системе
    "Суверен" предусмотрен вспомогательный механизм, позволяющий подготовить
    список пакетов ("сценарий", или "цель"), и запустить автоматическую сборку
    по этому сценарию.

    Списки пакетов представляют собой обыкновенные текстовые файлы. Формат
    очень простой. Пример:
	# НАЗВАНИЕ	ВЕРСИЯ			ФЛАГИ
	binutils	binutils-2.18
	gcc		gcc-4.2.2
	linux-headers	linux-headers-2.6.23.8
	glibc		glibc-2.7
	lfs-adjust	lfs-adjust-0.1-direct	script

    Это таблица, одна строка на пакет, три столбца:
	НАЗВАНИЕ - Название пакета, без версии.
		   Скрипты сборки для пакета лежат в "depot/${НАЗВАНИЕ}",
		   архивы с исходными кодами - в "src/${НАЗВАНИЕ}".
	ВЕРСИЯ   - Название пакета с версией. Скрипт сборки конкретно для
		   данного пакета - "depot/${НАЗВАНИЕ}/${ВЕРСИЯ}.sh".
	ФЛАГИ    - Пока есть возможен единственный флаг: "script".
		   Если указан флаг "script", то скрипт сборки пакета считается
		   скриптом для инсталляции, то есть используется не для сборки
		   (такой пакет сборки не требует), а для установки пакета.

    Для сборки цели (для примера, "targets/sovereign_0.0"), нужно выполнить
    следующую команду:
	$ ./sgn_target.sh targets/sovereign_0.0 make_install
    При этом будет собран каждый из указанных в списке пакетов, как если бы
    использовался скрипт ./sgn_make.sh, и сразу после этого пакет
    устанавливается, как если бы вызывался скрипт ./sgn_install.sh.

    Если все нужные SGN-пакеты уже собраны, и нужно только установить их без
    перекомпиляции, то можно выполнить следующую команду:
	$ ./sgn_target.sh targets/sovereign_0.0 install

    Наконец, если нужно пересобрать пакеты, не устанавливая их, выполните:
	$ ./sgn_target.sh targets/sovereign_0.0 make
    Следует помнить, что ряд базовых пакетов (такие как binutils, gcc, glibc)
    чувствителен к набору пакетов, уже установленных в sgn_system.img, так что
    их пересборка для уже развёрнутой системы "Суверен" можно оказаться
    невозможной. В этом случае можно создать чистый образ sgn_system.img,
    затем создать цель для пересборки базовых SGN-пакетов, и после этого
    установить оставшиеся пакеты (уже собранные), составив ещё одну цель и
    выполнив "./sgn_target.sg [файл цели] install".

5. Использование системы "Суверен"
    Чтобы начать работу с системой "Суверен", смонтируйте sgn_system.img
    в /opt/sgn:
	$ mount -o loop,ro sgn_system.img /opt/sgn
    Монтирование образа только для чтения предотвращает его случайное изменение.
    Если вы уверены в своих действиях, можно смонтировать образ на запись.

    Самый простой способ заменить утилиты хост-системы на утилиты из /opt/sgn -
    добавить "/opt/sgn" в начало переменной окружения PATH:
	$ export PATH="/opt/sgn:$PATH"

    Тем не менее, рекомендуется пойти несколько дальше, и подготовить чистое
    окружение, чтобы гарантировать, что переменные среды хост-системы
    не помешают работе. Для этого создайте два файла, "sgn_shell.sh" и
    "sgn_bashrc". Далее приводится предлагаемое содержимое этих файлов.
	** sgn_shell.sh **
	    #!/bin/sh
	    exec env -i SGN_PREFIX='/opt/sgn' HOME="$HOME" TERM=$TERM" \
			DISPLAY="$DISPLAY" /bin/bash --rcfile sgn_bashrc

	** sgn_bashrc **
	    export LANG=en_US.UTF-8
	    set +h
	    export PS1='\[\033[1;32m\]\u \w$\[\033[0m\] '
	    export PATH="/opt/sgn/bin:/bin:/usr/bin:/usr/local/bin"
	    alias ls='ls --color=tty'

    Сделайте sgn_shell.sh исполняемым:
	$ chmod a+x ./sgn_shell.sh
    Для того, чтобы перейти в новую среду "Суверен", выполните:
	$ ./sgn_shell.sh
    Получившуюся среду будем называть "sgn-средой".

    Переключение на суперпользователя (root) из sgn-среды с использованием
    команды 'su' может вновь засорить окружение переменными хост-системы.
    Чтобы этого избежать, можно написать скрипт-оболочку для команды 'su'.
    Создайте файл /usr/local/bin/sgnsu следующего содержания:
	** sgnsu **
	    #!/bin/sh
	    su -m -c "PS1=\"\[\033[1;31m\]\u \w$\[\033[0m\] \"   \
		     HOME=\"/root\" PATH=\"$PATH:/opt/sgn/sbin\" \
		     /bin/bash --norc"
    Сделайте sgnsu исполняемым:
	$ chmod a+x /usr/local/bin/sgnsu
    Теперь можно переключаться на суперпользователя командой 'sgnsu'.

6. Помогите улучшить систему "Суверен"
    Если вы собрали свой SGN-пакет, например, одну из версий Qt, или библиотеки
    GNOME, или какую-нибудь небольшую, но распространённую утилиту, подумайте
    о том, чтобы предложить ваш пакет для включения в основное дерево системы
    "Суверен". Совместное тестирование повысит качество ваших пакетов и целей.

    Для того, чтобы предложить пакет на включение или дать отзыв об уже
    включённом пакете, отправьте письмо на адрес
    <sgn-packages собака sourceforge точка net>.
SourceForge.net Logo