Сравнительная таблица: tmux и «голый» сеанс SSH
| Измерение | Голый SSH | tmux с командной политикой имён |
|---|---|---|
| Переживает обрыв | Нет — SIGHUP без nohup и ухищрений | Да — tmux attach -t ИМЯ |
| Несколько потоков вывода | Один поток; только буфер терминала | Окна и панели; общий scrollback по политике |
| Координация и аудит | Сложно понять владельца shell | Имя сеанса ↔ человек, тикет или полоса |
| Изоляция от CI | Слабая при одном пользователе | Без отдельных учёток и путей всё ещё слабая |
| Риск при злоупотреблении | Потеря работы на нестабильной сети | «Вечные» сеансы с устаревшим окружением и xcode-select |
Вывод: tmux закрывает транспортную устойчивость, а не границу безопасности. Сочетайте его с раздельными учётными записями builder и разработчика и держите долгие сеансы вне корней автоматизации, если это не оговорено оркестратором.
Матрица решений по устойчивости сеансов
| Сигнал | Предпочесть | Эскалация |
|---|---|---|
| Нестабильный VPN или Wi‑Fi у клиента | tmux и SSH keepalive | Задокументировать attach в вики |
| Один общий кэш CocoaPods или npm | Серийная полоса и flock | Второй узел или раздел кэша |
| GUI-тесты и headless CI на одном хосте | Разнести узлы или окна по времени | Выделенный хост Simulator |
| Отладка «как в проде» на общем Mac | Break-glass и краткоживущий клон | Ротация секретов после сеанса |
Минимальные параметры конфигурации tmux
Базовая линия в ~/.tmux.conf или /etc/tmux.conf — предсказуемость, не дизайн.
set -g mouse onset -g history-limit 50000(на слабых VM меньше)set -g default-terminal "screen-256color"илиtmux-256colorsetw -g aggressive-resize onset -g detach-on-destroy off
Имена: tmux new -s инициалы-тикет или pool-ci-lane-2; без анонимных сеансов на пуле. ClientAliveInterval в sshd_config + клиентский ServerAliveInterval — против NAT idle.
Шаги изоляции пользователей и каталогов
- Разделите личности: учётки вроде
builder-ciиdev-shared; CI не входит под личный аккаунт разработчика. - Группы и владение: для
/srv/builds— POSIX-группаbuilders, на каталогах с совместной записьюchmod 2770, в профилях этих ролейumask 027. - Корни работ:
/srv/builds/<user>/…или непересекающиеся git worktree — в одном ритме с политикой lockfile. - ACL точечно: на macOS дополнительные ACL только для break-glass чтения логов; без мировой записи в
/tmpдля артефактов. - Keychain и подпись: раздельные связки ключей по ролям; общие Apple ID для людей не смешивать — детали в FAQ по SSH/VNC выше.
namei -l из каждой роли; ежемесячно — каталоги 777 и сбитое владение кэшем.
FAQ: очередь сборок и пороги файловых блокировок
Зачем flock с tmux: долгий shell держит замки и неявные ресурсы Simulator и keychain — политика shell = политика очереди.
Глубина: около двадцати ожидающих на полосу; детали в FAQ по очереди и flock.
flock -w ниже таймаута job; долгое ожидание в tmux → ищите держателя или сужайте критическую секцию.
Смешанный хост: CI — flock -n и быстрый отказ на другой узел; люди — короткие -w для кэша.
Алерты: медиана ожидания около пятнадцати минут или серия таймаутов замка → сигнал к второму Mac под серию.
Чеклист: снижение риска вытеснения сборочных сеансов
- Опубликуйте схему имён и одну страницу attach/detach; запретите анонимный tmux на пуле.
- Сопоставьте полосы tmux с метками runner, чтобы concurrency в YAML совпадала с реальной изоляцией кэша.
- Ограничивайте время удержания замков; при зависании логируйте runner id, PID и путь lock.
- Ежемесячно: осиротевшие tmux, зомби Simulator, каталоги с ослабленными правами.
- Масштабируйте узлами раньше, чем героическим параллелизмом: второй арендованный Mac для GUI или подписи, если пункты повторяются еженедельно.
Итог, мультиузлы и дальнейшие шаги
tmux — про обрывы; группы, каталоги, очередь — про предсказуемость. Персистентность ≠ параллелизм: конкуренцию лечат узлы и серийные полосы. Один tmux.conf, именованные сеансы, одни числа очереди и flock в YAML и runbook.
Вместо третьей панели — второй узел под GUI или подпись. Пул: FAQ: очередь, квоты, конфликты. Главная (железо без входа), тарифы, справка, блог.
Стандартизируйте сеансы или добавьте узел
Удалённые Mac Meshmac с SSH и VNC: перенесите базовый tmux в runbook, согласуйте пороги flock с очередью и масштабируйтесь на несколько машин, когда чеклист перестаёт быть теорией.