NixOS – это уникальная Linux-дистрибутива, который выделяется своим функциональным подходом к управлению конфигурациями и пакетами. Создавая систему, разработчики использовали инновационные методы организации сборочного процесса, инфраструктуры и обеспечения безопасности. Понимание того, как устроена NixOS «под капотом», открывает дверь к глубокому пониманию ее преимуществ и сложностей. В основе NixOS лежат два важнейших репозитория – Nixpkgs и infra. Первый содержит определения всех пакетов и модулей, составляющих систему, а второй управляет инфраструктурой, которая поддерживает весь процесс разработки, сборки и распространения.
Доступ к репозиторию Nixpkgs открыт практически всем пользователям GitHub, что стимулирует активное участие сообщества и позволяет быстро обновлять и дополнять экосистему. Репозиторий infra сосредоточен на описании облачной инфраструктуры с помощью инструментов Terraform и OpenTofu и на настройке серверов через выражения Nix, что обеспечивает единообразие и масштабируемость всех компонентов. Начинающим пользователям необходимо сначала скачать ISO-образ NixOS с сайта channels.nixos.org.
Этот сайт устроен сложнейшим образом, в котором сетевая инфраструктура играет ключевую роль. Домены, такие как channels.nixos.org и cache.nixos.
org, настроены через систему DNSControl. Управление доменами осуществляется с помощью провайдера Gandi.net и хранится в инфраструктурном репозитории. Этот процесс обеспечивает простоту обновления DNS-записей и прозрачность для участников команды. Для хранения ISO-образов и бинарных пакетов используется интеграция AWS S3 в комбинации с Fastly CDN.
S3 предоставляет объектное хранилище, а Fastly обеспечивает кэширование и доставку контента с минимальными задержками по всему миру. Такая архитектура гарантирует, что пользователи получают самые свежие версии образов и пакетов с высокой скоростью и надежностью. Переходя к процессу сборки пакетов, основное значение имеет репозиторий Nixpkgs. Вся логика определения пакетов и модулей сосредоточена именно в этом месте. Для проверки качества и совместимости изменений используется система автоматических проверок и CI-процессы, интегрированные в GitHub Actions.
Интересно, что большинство CI-запусков выполняются на ARM машинах под управлением Ubuntu 24.04, а не на NixOS. Это связано с соображениями экономии, так как ARM-окружение обходится дешевле. GitHub Actions включают разнообразные проверки — от линтинга изменений до оценки влияемых derivations и сборки документации. Применение специализированных инструментов, таких как nixpkgs-vet, помогает обеспечивать соответствие изменениям в пакетах согласно стандартам NixOS (например, RFC 140).
Автоматически выполняются различные действия по маркировке pull request’ов и вызову ревьюверов, что значительно упрощает процесс интеграции новых изменений. Тем не менее полноценная сборка и тестирование пакетов производится в отдельной системе под названием OfBorg. Эта платформа, названная в честь фракции из вселенной Star Trek, автоматизирует построение пакетов и проведение тестов в больших масштабах. Изначально OfBorg управлялся спонсорами, но после окончания поддержки в конце 2024 года инфраструктура была переделана и сейчас размещается на разных выделенных серверах в tetaneutral, MacStadium и Hetzner Cloud. Управление инфраструктурой OfBorg осуществляется через отдельный репозиторий, что способствует прозрачности и управляемости.
После проверки качества и успешной сборки, следующий шаг — публикация пакетов. Эта задача возлагается на систему Hydra. Hydra – это старейший CI-сервис, созданный специально для Nix-проектов. Она обеспечивает централизованное управление сборочными заданиями и сопровождается подписанием артефактов, что критично с точки зрения безопасности. При этом для поддержки Integrity пакетов используется криптографическая подпись, которая хранится на доверенных машинах, к которым имеет доступ ограниченный круг разработчиков.
Структура работы Hydra организована в иерархию: проекты, jobset’ы и отдельные задания. Эта система управляет сборкой образов, таких как minimal ISO для конкретных релизов NixOS, а также обеспечивает проверку и создание запакованных бинарных вариантов программ. Именно в Hydra происходит финальный этап перед публикацией итоговых пакетов в кеш cache.nixos.org, где пользователи и системы могут загрузить готовые билды.
Несмотря на обширность и продуманность архитектуры, не обходится и без проблем. Особое внимание вызывает то, что ключи подписи пакетов в Hydra используютя уже более десяти лет без замены, что потенциально представляет риск компрометации. Также исходный код Hydra содержит некоторые устаревшие методы разработки, которые могут привести к уязвимостям, например, использование вызовов оболочки для операций с git без должной защиты. Это создает необходимость в постоянном аудите и модернизации компонентов системы. В целом, процесс создания NixOS представляет собой слаженную цепочку действий, в которой активное сообщество, прозрачность проекта и надежные инструменты CI/CD играют ключевую роль.
От определения пакетов в Nixpkgs, через автоматические проверки и сборки в GitHub Actions и OfBorg, к финальному подписанию и публикации в Hydra – каждый этап важен для поддержания качества и безопасности дистрибутива. Такой прозрачный и открытый подход позволяет не только создавать стабильную и безопасную систему, но и вдохновляет исследователей и разработчиков детально погружаться в устройство NixOS. Возможность ознакомиться со всеми этапами сборочного процесса и инфраструктурой предоставляет уникальные преимущества для сообщества, а также открытый доступ к коду и конфигурациям скрывает меньше загадок и способствует всестороннему контролю. Несмотря на сложности и вызовы, с которыми сталкивается проект, динамичное развитие CI-процессов, интеграция современных облачных сервисов и постоянная поддержка сообщества делают NixOS одним из самых передовых и надежных операционных систем в мире open-source. Эти свойства делают ее отличным выбором не только для энтузиастов и исследователей, но и для коммерческих организаций с высокими требованиями к безопасности и воспроизводимости.
В будущем ожидается дальнейшая работа над безопасностью, в том числе обновление подписи ключей, рефакторинг инфраструктуры Hydra и расширение возможностей автоматизации. Такой путь будет способствовать тому, чтобы NixOS продолжала развиваться как эталонный пример современной, надежной и открытой операционной системы, построенной на гибкой и проверенной временем технологии.