Korinf

Материал из Etersoft wiki
Перейти к: навигация, поиск

Korinf

Описание

Коринф (Korinf) [1] - система сборки пакетов под произвольные целевые операционные системы на основе единого src.rpm, выполненного согласно правилам для дистрибутивов ALT Linux.

Проект развивается из системы сборки, применяемой в компании Etersoft для сборки бинарных пакетов с разрабатываемыми продуктами (WINE@Etersoft, PostgreSQL, RX@Etersoft и прочее) под целевые платформы.

Части, из которых состоит Korinf, разбиты на пакеты, которые могут быть использованы и независимо:

  • rpm-build-altlinux-compat — rpm-макросы, создающие одинаковую среду макросов на любой платформе;
  • etersoft-build-utils — утилиты для сборки пакетов;
  • korinf — собственно система сборки пакетов под различные системы;
  • korinf-sisyphus — автоматическая (пере)сборка пакетов из заданных пакетов в репозитории ALT Linux Sisyphus;
  • eepm — единая команда управления пакетами
  • erc — единая команда управления архивами

Система готова к независимой инсталляции и использованию. В простейшем случае она может быть использована установленной из пакета. В случаях, требующих модификации системы сборки (её разработки или адаптации), в соседние каталоги просто разворачиваются git-репозитории etersoft-build-utils, rpm-built-altlinux-compat и korinf. См. соотв. пункт документации ниже.

По вопросам и проблемам можно обращаться в support@etersoft.ru.

Применение

  • Сборка пакетов, не являющихся системообразующими (неправильно применять Коринф для сборки glibc или rpm для разных систем).
  • Тестовая пересборка пакета (проекта) "под все системы" (полезно для тестирования разработчиком).
  • Создание дистрибутиво-специфичных репозиториев бинарных пакетов (позволяет не заниматься пустой работой по упаковыванию ClipArt для разных систем).
  • Сборка пакетов в автоматическом режиме на основе специального файла задания (робот-сборщик).
  • Полученные репозитории могут быть использованы при сборке специальных версий дистрибутивов для ALT Linux.
  • При подключении на автопересборку пакетов из Сизифа позволяет сопровождать пакет в одной системе, с автоматической сборкой под остальные

Новости

korinf-1.9.6 от 22.05.2012

  • Исправлены ошибки в порядке получения списков замен названий пакетов.
  • Установка сборочных зависимостей теперь выполняется без предварительной конвертации rpm-пакета (которая причём раньше по ошибке выполнялась дважды.
  • Улучшен вывод при сборке пакета
  • Добавлен ключ -r/-R для тестирования наличия необходимых для сборки и установки пакета зависимостей
  • Добавлена проверка корректности зависимостей по собранным пакетам. Это поможет не мучить клиентов пакетами, которые у них не будут устанавливаться.
  • Окончательно введена в строй сборка пакетов с зависимостями для deb-систем.
  • Внутри Korinf произошли существенные изменения: приведены к общему наименованию используемые глобальные переменные — контекст целевой системы (название, тип пакетов, архитектура и пр.). Значительно модифицирован и etersoft-build-utils.
  • Существенно переработаны и выверены списки замен для deb-пакетов (по проектам postgresql, rx, wine)

Единый исходник

Исходной единицей, отправляемой на сборку, является src.rpm со спеком, написанным согласно принятым в ALT Linux правилам. Спек желательно иметь идеальный (вычитанный согласно новейшим представлениям о его красоте).

Поддерживаемые целевые основные системы:

  • Debian/Ubuntu (deb-based)
  • Fedora / SUSE / Mandriva (RPM-based)
  • ArchLinux
  • Slackware
  • Gentoo
  • FreeBSD

Примерный список систем, под которые реально производится сборка, можно увидеть на http://etersoft.ru/wine/platforms.

В процессе разработки поддержка следующих систем:

  • OpenSolaris
  • SunOS
  • Mac OS
  • PuppyRus
  • Windows

Процесс сборки

Коринф выполняет организационную работу по передаче задания на сборку пакета и публикацию результата. Входной единицей является пакет src.rpm. Сначала rpm-спек преобразуется из спека ALT Linux с помощью команды rpmbph (из etersoft-build-utils), далее выполняется его сборка в целевой системе, где задействуется пакет rpm-build-altlinux-compat (обеспечивающий совместимость rpm-окружения по макросам с целевой системой). Сборка происходит на сборочной машине в chroot'е целевой системы под специальным пользователем, либо в удалённой системе, доступной через ssh. Для не rpm-систем после сборки производится конвертирование пакета с помощью alien (в deb или tgz) или отдельным скриптом. Результат сборки публикуется (копируется в указанный каталог). Успешность сборки контролируется, но в любом случае протокол сборки также публикуется.

Дополнительно

Для систем, в которые невозможно преобразование из rpm (FreeBSD, Gentoo, Solaris), могут быть написаны собственные правила сборки (портежи и ебилды).

  • Gentoo
  • FreeBSD
  • Solaris

Что нужно

  • Сейчас сборка проводится в chroot в конкретную систему. Предлагается задействовать контейнеры OpenVZ, распространяя или используя готовые шаблоны/контейнеры.
  • Чтобы подготовить систему к сборке, нужно собрать в ней пакет rpm-build-altlinux-compat (с установкой): это выполняется скриптом build-strap.sh

Как развернуть сборочную среду

Пока разворачивание среды отрабатывалось только в ALT Linux.

Из пакета

  • Установить пакеты korinf и etersoft-build-utils
  • Настроить конфигурационный файл /etc/eterbuild/korinf, указав путь к каталогу с системами (в котором содержатся каталоги типа Fedora/10, содержащие корневую ФС)
  • Настроить пути к репозиториям с пакетами в /etc/eterbuild/apt (для сборки пакетов в hasher)
  • Запустить сборку командой korinf <название пакета>
  • Ни в коем случае не устанавливать требуемые для сборки пакеты вручную

Из репозитория

Особенности FreeBSD

При установке rpm из стандартного каталога порта /usr/ports/archivers/rpm ставится rpm 3.0.6, который не пригоден. Установка rpm 5 %% $ cd /usr/ports/archivers/rpm $ make install %%

Как входить в систему

  • korlogin <Дистрибутив/версия> [-r]
  • <Дистрибутив/версия> - в стиле ALTLinux/4.0 или SUSE/10.3

-r - вход под root, а не под пользователем

Заливать пакеты внутрь можно либо найдя в системе каталог вида /tmp/autobuild/chroot-*-9jT7RA/tmp либо находясь в чруте, получить пакет по ftp.

Как проводить групповые операции внутри чрутов

(Устарело!) На примере etercifs:

В korinf есть скрипт run-script.sh в каталоге tools/run-script/. Если его запустить с параметром etercifs, то он прогонит сборку по всем системам (правила записаны в scripts/etercifs)

Предварительно надо выполнить сборку etercifs во всех системах с переменной окружения BOOTSTRAP=1, чтобы собранные пакеты ставились в систему после установки.

Добавление новой Операционной Системы

Проще всего это сделать из шаблонов систем для OpenVZ:

  1. Загрузить нужный шаблон отсюда: http://wiki.openvz.org/Download/template/precreated

Так же можно получить архив из vbox-машины:

  1. Перемонтируем корень системы чтобы избавить от лишних ресурсов, которые могут быть примонтированы в систему:
    • mkdir /mnt/systemroot
    • mount --bind / /mnt/systemroot
    • tar cfpvz OSNAME_VERSION_ARCH.tar.gz /mnt/systemroot
  2. Создать корневой каталог для будущего окружения
    • mkdir -p /net/os/stable/CentOS/7
  3. Перейти в этот каталог
    • cd /net/os/stable/CentOS/7
  4. Распаковать архив
    • tar -xf /.../centos-7-x86_64-minimal.tar.gz
  5. Добавить систему в список систем
    • (в соответствующий файл в korinf/etc/lists)
  6. Перейти в систему с привилегиями root
    • korlogin CentOS/7 -r
  7. Добавить пользователя korinfer (uid=500, gid=500)
    • groupadd -g 500 korinfer
    • useradd -u 500 -g 500 korinfer
  8. Произвести настройки сети
    • echo 'nameserver 192.168.0.1' > /etc/resolv.conf
  9. Добавить вручную некоторые важные директории (при попытке входа через korlogin о них будет сообщено):
    • Если пропал /dev/null то выполнить
      • mknod /dev/null c 1 3
      • chmod 666 /dev/null
    • mkdir /dev/pts
    • mkdir /srv/wine

Подготовка к использованию

Инструкция по использованию на сборочном сервере builder компании Etersoft:

Добавление нового пользователя:

  1. Включить в группу builder (через http://sec)
  2. Включить в группу builder локально (через /etc/group) - если sudo ещё не понимает удалённых (через nss) пользователей
  3. Добавить в hasher ( # hasher-useradd USER)
$ mkdir -p ~/Projects
$ cd Projects
$ git clone git://git.etersoft.ru/projects/korinf/etersoft-build-utils.git
$ git clone git://git.etersoft.ru/projects/korinf/korinf.git
$ git clone git://git.etersoft.ru/projects/korinf/rpm-build-altlinux-compat.git

Пример сборки

Для сборки пакета (на примере etercifs) нужно выполнить скрипт из каталога bin-wine (название скрипта соответствует названию пакета):

$ cd bin-wine
$ ./etercifs.sh ALTLinux/p7 last

Без указания параметров будут собраны пакеты под все системы версии last.

В каталоге назначения кроме каталогов с версиями программ могут быть ссылки, например:

  • last - указывает на последнюю версию
  • stable - последняя стабильная версия
  • testing - каталог для тестовых сборок стабильной версии
  • unstable - каталог для пробных сборок

Чтобы проверить текущее состояние собранности:

$ wine-etersoft.sh -c

Для установки недостающих по зависимостям пакетов:

$ wine-etersoft.sh -i

С результатом сборки можно ознакомиться в korinf/log/Система/Версия/Пакет.log, а также в соответствующем каталоге на ftp-сервере.

!!Переписать, устарело:!! Переменные окружения: ALLOWPUBLICDEBUG=1 — если её задать, будут собираться пакеты с отладкой, выкладываемые в /extra. См. ((http://bugs.etersoft.ru/show_bug.cgi?id=1190 eterbug #1190))

Вспомогательные скрипты Korinf работают следующим образом: Из скрипта build-%{пакет} вызывается функция build_rpm, описанная в ./functions/helpers.sh, которая запускает скрипт functions/autobuild-functions.sh. В нем используется функция build_in_dist, описанная в build-main.sh. Эта функция позволяет собирать пакеты для FreeBSD (с помощью скрипта build-freebsd.sh), OpenSolaris (build-solaris.sh), Gentoo (build-gentoo.sh) (для этих систем сборка происходит на отдельных машинах), ALTLinux (./functions/build-hasher.sh) и других дистрибутивов (build_rpms из ./functions/build-rpm.sh) (для deb дистрибутивов производится конвертирование из rpm с помощью функции convert_rpm; с ее же помощью происходит конвертирование в tgz и tar.gz). Для 2 последних случаев монтируется файловая система соответствующего дистрибутива (системы указываются в переменной REBUILDLIST скрипта build-%{пакет}) (с помощью mount-linux из ./functions/mount.sh). Сборка для Linux при этом происходит в чруте в подмонтированной файловой системе с помощью средств из пакета etersoft-build-utils: ((http://www.freesource.info/wiki/AltLinux/Sisyphus/devel/SborkaPaketov& rpmbb и rpmbph)).

Трансляция зависимостей

В etersoft-build-utils/share/eterbuild/pkgrepl находятся файлы, задающие замены зависимостей пакетов из нотации, действующей в ALT Linux Sisyphus, в конкретную систему. Перед использованием файлы объединяются в порядке от требуемого, до самой младшей и базовой версии. Порядок в файле такой:

что меняем|на что меняем

то есть

<название пакета в ALT Linux Sisyphus>|<название пакета в Fedora 24>

Конкретные применённые файлы пишутся в лог сборки, например для Fedora 24:

Use replacement file: /srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora.24
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora.21
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora.20
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora.18
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora.17
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.fedora
/srv/builder/Projects/etersoft-build-utils/share/eterbuild/pkgrepl/pkgrepl.rpm

Отсюда вытекает важное свойство: то, что задано для Fedora 21, уже не надо задавать для Fedora 24, если ничего не изменилось. В файл fedora.24 следует записать только те отличия в зависимостях, которые в этой версии произошли. Если изменилось название пакета в Сизифе, его нужно поменять сразу во всех файлах.

Планы

  • Рассмотрение LSB RPM с целью максимального соответствия стандартам.
  • Перевод сборки в Solaris на rpm/alien.
  • Веб-интерфейс
  • Средства автоматического обновления систем (установка обновлений)
  • Разворачивание чрута из минимальной системы (как из template для openvz)
  • Сборка в pbuilder/Debian, build/SUSE, mock/Fedora

Ссылки

  1. Название Коринф предложено Алексеем Новодворским. Как известно, Сизиф был царём Коринфа.

Подобные системы

"Personal Package Archives" полностью интегрируется в другой бесплатный сервис Launchpad, и дает каждому своему пользователю 1 Gb дискового пространства для загрузки любого программного обеспечения. "Personal Package Archives" автоматически скомпилирует его, и сделает deb пакет для Ubuntu Linux. Плюс, в "Personal Package Archives" доступен сервис оповещения о ошибках (bug reporting) и локализированное программное обеспечение через веб-интерфейс.