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