/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 — слева направо по приоритету. Замените плейсхолдеры внутреннего кеша и организационного ключа на боевые значения команды.
Для одноразовых экспериментов удобен NIX_CONFIG с extra-substituters; для постоянного раннера закрепите конфиг в образе или IaC, чтобы повторный провижининг не сбрасывал доверенные ключи.
Flake lockfile: обновление, точечный input и откат
Обновляйте lock тем же major nix, что и в CI, чтобы отловить несовместимость до merge. Откат в проде — через git или заранее сохранённую копию файла. Практика «один PR — одно изменение lock» совпадает с дисциплиной из матрицы Rust lockfile.
Повторы при сбоях и пороги диска (параметры в 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
- 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-матрица.