В 2026 году постоянные удалённые Mac под Apple Silicon чаще совмещают Nix Flake с трансграничным egress: важны flake.lock, порядок substituters и пары trusted-public-keys, а также согласование max-jobs, cores и диска под /nix. Ниже — копируемый фрагмент nix.conf, команды обновления и отката lockfile, сравнительная таблица трёх классов кеша, лестница повторов и пороги свободного места. Без входа: каталог блога, главная MacPull, материалы FAQ: пул, параллельный pull и диск и матрица GHCR/registry.

Lock входов, трансграничный pull и реальность раннера в 2026

Flake фиксирует коммиты inputs в flake.lock и даёт воспроизводимый CI, но холодный прогон всё равно тянет narinfo и NAR. Если список substituters не отсортирован по фактической задержке и политике доверия, а max-jobs завышен на общем пуле, вы ловите TLS-таймауты, лавину локальных сборок и быстрое заполнение store.

Приоритет разбора инцидентов
  • Рассинхрон lock: в PR изменили flake.nix, но не закоммитили flake.lock, или наоборот.
  • Недоверенный substituter: в логе ignoring untrusted substituter — фактически без бинарного кеша.
  • Коллизия параллелизма: несколько job × высокий max-jobs умножают одновременные загрузки.
  • Диск: жёсткий порог не подключён — получаются «шумные» сбои демона и полузаписанный store.

Меняйте по одному рычагу за итерацию мониторинга: сначала доверие и порядок substituter, затем max-jobs, и только потом версии inputs.

Таблица: локальный store vs удалённый substituter vs свой бинарный кеш

Локальный здесь — попадание в уже существующие пути Nix Store на том же раннере без исходящего трафика. Удалённый и корпоративный кеш добавляют аудит, подписи и стоимость эксплуатации.

Вариант Типичный выигрыш Риски / цена Связь с nix.conf
Локальный store (остаток прошлых сборок) Нет egress, минимальная задержка Мультиарендность и неверный ключ кеша CI → «тихие» старые drv Не добавляется в substituters; контролируйте тот же lock и изоляцию агентов
Удалённый substituter (например cache.nixos.org) Массовые готовые пути, короче холодный старт Трансграничный канал, SNI; приватные оверлеи всё равно собираются локально substituters в начале списка + согласованные trusted-public-keys
Свой кеш (S3/MinIO, Harmonia, nix-serve и т.п.) LAN/VPN, зеркала организационных закрытий Ротация ключей, консистентность индекса, цена первого прогрева HTTPS endpoint организации + подпись своей пары ключей; при необходимости прокси с аутентификацией

Копируемый nix.conf: substituters, trusted-public-keys, max-jobs, cores

Разместите в файле, который читает демон Nix (часто /etc/nix/nix.conf на мультипользовательской установке). Порядок в substituters — слева направо по приоритету. Замените плейсхолдеры внутреннего кеша и организационного ключа на боевые значения команды.

# /etc/nix/nix.conf — консервативный профиль для удалённого Mac CI (2026, подстройте по метрикам) substituters = https://cache.nixos.org https://nix-cache.example.internal trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGsppcDbrj= YOUR_ORG_CACHE_KEY_NAME:BASE64_PART_HERE== max-jobs = 2 cores = 0 experimental-features = nix-command flakes # cores=0 — автоопределение CPU; на шумном пуле иногда выгоднее max-jobs = 1, # чтобы не душить соседние job и трансграничный канал.

Для одноразовых экспериментов удобен NIX_CONFIG с extra-substituters; для постоянного раннера закрепите конфиг в образе или IaC, чтобы повторный провижининг не сбрасывал доверенные ключи.

Flake lockfile: обновление, точечный input и откат

Обновляйте lock тем же major nix, что и в CI, чтобы отловить несовместимость до merge. Откат в проде — через git или заранее сохранённую копию файла. Практика «один PR — одно изменение lock» совпадает с дисциплиной из матрицы Rust lockfile.

# Полная пересборка lock из flake.nix nix flake lock # Только один input (пример: nixpkgs) nix flake lock --update-input nixpkgs # Быстрая проверка графа без тяжёлой сборки (набор команд подстройте) nix flake show nix flake metadata # Откат A: в репозитории git checkout HEAD~1 -- flake.lock # Откат B: в job сохраните резервную копию cp flake.lock flake.lock.bak nix flake lock --update-input nixpkgs # если результат неприемлем: mv flake.lock.bak flake.lock

Повторы при сбоях и пороги диска (параметры в runbook)

Обёртка вокруг шагов CI должна использовать лестницу 2 → 4 → 8 секунд с небольшим джиттером ±20%, чтобы раннеры не били в апстрим синхронно. Перед nix build проверяйте свободное место на томе с store: мягкий порог — профилактика GC и алерт, жёсткий — немедленный выход без записи в store.

Параметр Стартовые значения (общий egress, несколько job) Комментарий
Паузы при TLS / reset / 5xx (сек) 2 → 4 → 8, не более 3–4 попыток, джиттер ±20% При серии ошибок сначала снизьте max-jobs, затем удлиняйте паузы
Предупреждение по диску (свободно меньше) 18 ГиБ — GC (nix-store --gc) или тикет дежурному Крупные закрытия можно сдвинуть вверх, если есть тренд по дашбордам
Жёсткий стоп новых сборок 12 ГиБ — fail fast, избегать частично записанных путей Стыкуется с разделом «триггеры диска» в FAQ пула и диска
max-jobs на общем Mac 1–2 Рост только при стабильном p95 сети/диска и отсутствии всплесков narinfo

Кратко для meta title и description

Тезисы для SEO и внутренних шаблонов
  • Title: включайте «2026», «удалённый Mac», «Nix», «Flake», «substituter», «nix.conf», «матрица»; длина порядка 55–65 символов латиницей или эквивалент по кириллице, чтобы сниппет не обрезался слишком рано.
  • Description: одно предложение про lock update/rollback, три класса кеша, max-jobs и пороги 18/12 ГиБ плюс лестница повторов — это совпадает с телом страницы и JSON-LD.

В блоке <head> этой статьи уже выставлены согласованные title и meta name="description"; структурированные данные BlogPosting, BreadcrumbList, HowTo и FAQPage отражают те же формулировки.

FAQ

Сообщение ignoring untrusted substituter

Добавьте недостающие trusted-public-keys для каждого HTTPS-кеша из списка substituters. Не оставляйте на долгий срок отладочные «доверить всё» на общих CI-нодах.

После bump lockfile сборка стала дольше

Новые коммиты nixpkgs и др. могут сместить закрытие на пути без бинарников; сравните размер закрытия и убедитесь, что внутренний кеш не исчез из substituters и маршрутизации прокси.

Итог

На горизонте 2026 выигрыш даёт связка: flake.lock как единственный источник правды по inputs, nix.conf с согласованными substituter и ключами, умеренные max-jobs и cores под реальный egress, плюс явные повторы 2/4/8 с и 18 / 12 ГиБ для диска store. Нужен выделенный Apple Silicon под длительные эксперименты — откройте тарифы, оформите узел на странице покупки / аренды, загляните в центр помощи или продолжайте с каталогом блога и главной — всё доступно без обязательного входа.

Резюме: синхронно коммитьте flake.nix и flake.lock; проверяйте пары substituters × trusted-public-keys; на пуле держите низкий max-jobs; внешняя сеть — 2/4/8 с с джиттером; диск store — пороги 18 и 12 ГиБ.

Nix Flake на удалённом Mac: воспроизводимость и кеш без сюрпризов

Главная, покупка / аренда, центр помощи и блог — без обязательной авторизации; в тему: FAQ диска, GHCR-матрица.