Технологии
В рамках ALT Linux Team для разработки операционной системы создан и развивается оригинальный стек технологий сборки пакетов, репозиториев и дистрибутивов. Наработки доступны под лицензией GPL.
alt-rpm: пакетный менеджер
Позволяет построить управляемую систему «из кирпичиков» и поддерживать её во внутренне согласованном состоянии.
Исходно проект RPM был создан в Red Hat, а в альте сделан производный от него ALT RPM, обладающий собственными макропакетом и развитыми средствами автопоиска зависимостей и обеспечения бинарной совместимости библиотек (set-versions).
hasher: инструмент безопасной сборки пакетов
Первая задача, которую предстояло решить – создание инструмента безопасной воспроизводимой сборки пакетов репозитория из исходного кода. Традиционный в то время инструментарий сборки пакетов в хост-системе был ненадёжным и небезопасным. Новый инструментарий должен был соответствовать следующим требованиям:
- не снижать уровень безопасности хост-системы; обеспечивать собственную безопасность от атак со стороны пакетов;
- обеспечивать безопасность сборки пакетов от атак со стороны других пакетов; гарантировать надёжность (воспроизводимость) результатов сборки; обеспечивать приемлемый уровень производительности.
В 2003 году такой инструмент был создан. hasher базируется на принципе создания новой сборочной среды для каждой сборки.
В основе архитектуры hasher’а лежит трёхпользовательская модель: вызывающий непривилегированный пользователь и два непривилегированных вспомогательных псевдопользователя; первый играет роль root в порождаемой сборочной среде, второй – обычного пользователя, собирающего программы.
Переключение между вызывающим и вспомогательными пользователями осуществляется с помощью специальной привилегированной программы, написанной с применением параноидальных мер защиты от непривилегированных пользователей. Кроме того, с помощью этой программы удаляются процессы, запущенные вспомогательными псевдопользователями и не завершившиеся в срок, а также создаются устройства. Наконец, эта программа предоставляет возможность контролировать ресурсы, выделяемые процессам непривилегированных пользователей, для защиты от DoS-атак.
gear: инструмент хранения исходного кода пакетов
С появлением git совместная разработка перешла на новый уровень, и понадобился инструмент для хранения исходного кода пакетов в git-репозиториях. Идея созданного в 2006 году gear заключается в том, чтобы с помощью одного файла с простыми правилами (для обработки которых достаточно sed и git) можно было бы безопасно и воспроизводимо собирать srpm-пакеты из произвольно устроенного git-репозитория, по аналогии с hasher, который был задуман как средство собирать пакеты репозитория из произвольных srpm-пакетов.
gitery: безопасный хостинг репозиториев исходного кода
Одновременно с внедрением инструмента хранения исходных пакетов в git-репозиториях был создан хостинг git-репозиториев. Для каждого пользователя такого хостинга создаётся непривилегированный аккаунт, что позволяет использовать обычные средства разграничения доступа в linux. Удалённый доступ осуществляется с помощью ssh, в качестве шелла используется специальная программа, которая реализует git fetch, git push и ещё несколько операций обслуживания git-репозиториев. Реализована система почтовых уведомлений об изменениях в git-репозиториях.
girar: сборочная система
Внедрённая в 2009 система сборки поддерживает целостность репозитория за счёт транзакционных переходов, при которых полностью вычисляются характеристики репозитория. По умолчанию разрешены только переходы, которые не ухудшают характеристик. Система ориентирована на асинхронное продвижение транзакций, а окончательная сериализация и учёт взаимного влияния между транзакциями осуществляется при помощи rebase.
Когда новая версия исходного пакета окончательно подготовлена, разработчик делает в gear-репозитории метку с криптографической подписью и инициирует запрос на сборку пакета. Если запрос на сборку был обработан успешно, то собранные пакеты помещаются в репозиторий пакетов, а gear-репозиторий с новой меткой публикуется на кеширующем сервере gear-репозиториев, содержимое которых соответствует фактическим сборкам пакетов в репозиторий.
Каждое сборочное задание состоит из одного или нескольких gear-репозиториев (и их меток) или srpm-пакетов, отправленных на сборку. Сборочная система сначала осуществляет первичную сборку пакетов. Если при первичной сборке пакетов возникли грубые ошибки, то задание автоматически отменяется. В противном случае, если все пакеты в задании успешно собрались, то генерируется временный репозиторий, в котором выполняется ряд проверок (вычисляются характеристики нового репозитория). По умолчанию переход в новое состояние разрешён, только если характеристики репозитория не ухудшились. Если же собранные пакеты ухудшают характеристики репозитория, то составляется список нарушений, и задание переводится в отложенный режим.
Задания, переведённые в отложенный режим, можно дорабатывать и возобновлять. Если все нарушения были сняты, то выполняется транзакционный переход репозитория в новое состояние.
mkimage: сборка образов
Для организации пакетов из репозитория в конечные решения (дистрибутивы, образы виртуальных машин, шаблоны контейнеров и т.п.) после трёх предыдущих поколений инструментария был создан mkimage, оказавшийся настолько гибким, что заменять его с 2007 года не потребовалось. Проект основывается на hasher и позволяет строить произвольные образы для произвольных архитектур по заданному профилю.
Со временем задача управления семействами профилей стала заслуживать отдельного решения, которым на данный момент является mkimage-profiles.
Ссылки
- Инфраструктура разработки Sisyphus (Дмитрий Левин, 2017)
- rpm
- Идеальный сисадмин: RPM (Денис Овсиенко, 2003)
- Автоматический поиск зависимостей в rpm-пакетах (Алексей Турбин, 2007)
- Комплементарное хэширование подмножеств (Алексей Турбин, 2010)
- Типизация ABI (Алексей Турбин, 2016)
- hasher
- hasher: технология безопасной сборки дистрибутива (Дмитрий Левин, 2004)
- hasher: технология виртуализации для безопасного выполнения приложений (Дмитрий Левин, 2005)
- gear
- girar
- Сборочная система git.alt (Алексей Турбин, 2008)
- Сборочная система git.alt: вчера, сегодня, завтра (Дмитрий Левин, 2010)