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>.
| ||||