
Собрать прошлое: как архивировать весь трафик сборки SONiC
denballakh 27 минут назад Собрать прошлое: как архивировать весь трафик сборки SONiC Средний 12 мин 1.1K Блог компании Yandex Cloud & Yandex Infrastructure Блог компании Яндекс DevOps * Системное администрирование *...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: denballakh 27 минут назад Собрать прошлое: как архивировать весь трафик сборки SONiC Средний 12 мин 1. 1K Блог компании Yandex Cloud & Yandex Infrastructure Блог компании Яндекс DevOps * Системное администрирование * IT-инфраструктура * Кейс Интернет — это зависимость без зафиксированной версии. Сегодня он возвращает одно, завтра — другое, а послезавтра — ничего.
Поэтому мы решили сохранить для сборки тот интернет, который она однажды увидела. Для этого пришлось перехватывать HTTPS, выпускать собственные сертификаты, переподписывать индексы Debian и выяснять, почему Docker отправляет «случайные» заголовки. Меня зовут Денис, я из команды сетевой автоматизации в Yandex Infrastructure, где мы разрабатываем YaSONiC — сетевую ОС на базе SONiC.
Технические детали
В этой статье я расскажу, как разрабатывал кеширующую MITM-проксю, которая перехватывает весь HTTP/HTTPS-трафик и отдаёт ранее сохранённые ответы. Разберу также неочевидные технические проблемы, с которыми пришлось столкнуться. Проблема: нет воспроизводимости сборки SONiCПолная сборка образа SONiC (и YaSONiC) занимает несколько часов, в ходе которых выполняется несколько тысяч запросов в сеть: выкачиваются пакеты из Debian-репозиториев, исходники с GitHub, Python-пакеты с PyPI, образы из нескольких docker-registry и другие внешние артефакты, необходимые для сборки.
Всё это живёт своей жизнью и постоянно меняется. Недостатков такого положения дел несколько: две сборки, запущенные друг за другом, могут установить разные версии пакетов; используемый нами пакет в любой момент может быть удалён из Debian-репозитория, что сделает сборку невозможной и заставит бросить разработку фичи, чтобы починить сборку. Особенно неприятно с таким сталкиваться во время сборки хотфикса :) собрать старую версию крайне сложно, так как она зависит от пакетов неопределённых версий, которых вдобавок уже нет в Debian-репозиториях.
В апстримном SONiC для борьбы со схожей проблемой есть механизм SONIC_VERSION_CONTROL_COMPONENTS. Он включает «пиннинг» версий для разных классов ресурсов: # SONIC_VERSION_CONTROL_COMPONENTS - Valid values: none|all|components... , the components consist of one or multiple: deb,py2,py3,web,git,docker, seperated by comma # none : disable the version control # all : enable the version control for all components # deb : debian packages # py2 : python2 packages # py3 : python3 pakcages # web : web packages, downloaded by wget, curl # git : git repositories, donloaded by git clone # docker: docker base images SONIC_VERSION_CONTROL_COMPONENTS ?
= py2,py3,web,git,dockerРеализован он по-разному для каждого компонента. В образ устанавливается пакет sonic-build-hooks, который через манипуляции с PATH подменяет команды скачивания (apt-get, pip, wget, curl, git) своими обёртками. Версии хранятся в текстовых файлах в дереве files/build/versions/.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





