Korinf
Korinf
Описание
Коринф (Korinf) <ref>Название Коринф предложено Алексеем Новодворским. Как известно, Сизиф был царём Коринфа. </ref> - система сборки пакетов под произвольные целевые операционные системы на основе единого 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 <название пакета>
- Ни в коем случае не устанавливать требуемые для сборки пакеты вручную
Из репозитория
- Склонировать репозиторий etersoft-build-utils
- Склонировать репозиторий 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:
- Загрузить нужный шаблон отсюда: http://wiki.openvz.org/Download/template/precreated
Так же можно получить архив из vbox-машины:
- Перемонтируем корень системы чтобы избавить от лишних ресурсов, которые могут быть примонтированы в систему:
- mkdir /mnt/systemroot
- mount --bind / /mnt/systemroot
- cd /mnt/systemroot && tar --numeric-owner -cpvzf /var/ftp/tmp/KorinfOS/OSNAME_VERSION_ARCH.tar.gz -C /mnt/systemroot ./
- Создать корневой каталог для будущего окружения
- mkdir -p /net/os/stable/CentOS/7
- Перейти в этот каталог
- cd /net/os/stable/CentOS/7
- Распаковать архив
- tar -xf /.../centos-7-x86_64-minimal.tar.gz
- Добавить систему в список систем
- (в соответствующий файл в korinf/etc/lists)
- Перейти в систему с привилегиями root
- korlogin CentOS/7 -r
- Добавить пользователя korinfer (uid=500, gid=500)
- groupadd -g 500 korinfer
- useradd -u 500 -g 500 korinfer
- Произвести настройки сети
- echo 'nameserver 192.168.0.1' > /etc/resolv.conf
- Добавить вручную некоторые важные директории (при попытке входа через korlogin о них будет сообщено):
- Проверить содержимое каталога /dev - выполнить
- mknod -m 666 /dev/null c 1 3
- mknod -m 444 /dev/random c 1 8
- mknod -m 444 /dev/urandom c 1 9
- mknod -m 660 /dev/kmsg c 1 11
- mknod -m 666 /dev/zero c 1 5
- mkdir /dev/pts
- mkdir /srv/wine
- Проверить содержимое каталога /dev - выполнить
Подготовка к использованию
Инструкция по использованию на сборочном сервере builder компании Etersoft:
Добавление нового пользователя:
- Включить в группу builder (через http://sec)
- Включить в группу builder локально (через /etc/group) - если sudo ещё не понимает удалённых (через nss) пользователей
- Добавить в 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
Пример сборки
Сборка под все Fedora:
$ korinf PACKAGE Fedora[/VERSION] [PACKAGE_VERSION] [/path/to/sources]
Сборка по списку:
$ korinf PACKAGE all [PACKAGE_VERSION] [/path/to/sources]
ALL — сборка по всем системам вообще all — сборка по всем системам по настроенному списку distr.list в каталоге /path/to
Пример сборки на внутренних скриптах
Для сборки пакета (на примере 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
Ссылки
- Korinf: трудности на пути к универсальной сборочной системе (стр. 16)
- Bug 4534 - Развёртывание korinf на сервере pbf для публичной сборки
- Открыт публичный сервер Korinf
- Готовые шаблоны систем для OpenVZ
- http://www.altlinux.org/Check-unmets
<references/>
Подобные системы
- http://www.openpkg.org/
- http://fedoraproject.org/wiki/Projects/Mock
- http://www.pgbuildfarm.org/cgi-bin/show_status.pl
- http://build.samba.org/
- http://sisyphus.sen.cwi.nl:8080/
- http://bf.openpkg.net/openpkg-cgi/openpkg-tools/bf-ui.cgi
- https://build.opensuse.org/
- Canonical, Ltd. представила свой новый публичный сервис под названием "Personal Package Archives".
"Personal Package Archives" полностью интегрируется в другой бесплатный сервис Launchpad, и дает каждому своему пользователю 1 Gb дискового пространства для загрузки любого программного обеспечения. "Personal Package Archives" автоматически скомпилирует его, и сделает deb пакет для Ubuntu Linux. Плюс, в "Personal Package Archives" доступен сервис оповещения о ошибках (bug reporting) и локализированное программное обеспечение через веб-интерфейс.