Подключение, сборка и диагностика

Разберите проблему облачного Mac на выполнимые проверки

Начните не с расплывчатого «попробуйте ещё раз». Сначала проверьте точку подключения, затем инструменты, зависимости, данные подписи, диск и логи. Каждый шаг содержит ожидаемый результат — для сборок iOS, автоматизации macOS и экспериментов MLX на выделенном физическом сервере OakVPS.

По вопросам существующего заказа войдите в консоль и создайте тикет. Не отправляйте на публичной странице приватные ключи, пароли сертификатов подписи или полные платёжные данные.

Выберите задачу

Сначала определите этап сбоя

Шесть точек входа. Если проблема затрагивает несколько этапов, начните с первого места появления сбоя, не очищая сразу всю среду.

SSH

Первое подключение

Проверьте права ключа, отпечаток хоста, имя пользователя, порт и локальную сеть. Определите, произошёл сбой до аутентификации или после неё.

Диагностировать подключение
XCODE

Сборка Xcode

Проверьте текущую toolchain, scheme проекта, состояние зависимостей, файлы подписи, свободное место и доступный для экспорта пакет.

Показать команды сборки
FASTLANE

Автоматизированный pipeline

Разделяйте ошибки Ruby, плагинов, параметров lane и Xcode. Сохраняйте полный лог, а не только последнюю строку.

Проверить вывод автоматизации
TRANSFER

Передача файлов

Сначала упакуйте артефакты и создайте контрольную сумму, затем передавайте архив. Не переносите каталоги сборки или кэш зависимостей, которые ещё записываются.

Показать порядок передачи
SESSION

Сеанс удалённой разработки

Убедитесь, что локальная сеть стабильна, задача продолжится после разрыва сеанса, а перед уходом вы завершите интерактивный сеанс и удалите временные данные.

Проверить границы сеанса
MLX

Среда MLX

Проверяйте unified memory, файлы моделей, изолированную среду и записи эксперимента. Не оценивайте состояние среды по непроверяемым цифрам скорости.

Проверить среду эксперимента
Базовая проверка подключения

Сбой SSH-подключения: проверяйте по порядку рукопожатия

Сначала сохраните исходную ошибку, затем меняйте по одной переменной. Одновременная смена имени пользователя, порта и ключа лишает диагностику смысла.

01

Права ключа

Выполните локально chmod 600 ~/.ssh/oakvps_key. Если приватный ключ доступен для чтения другим пользователям, SSH-клиент отклонит его ещё до начала аутентификации.

02

Отпечаток хоста

При первом подключении сопоставьте отпечаток в терминале с данными подключения в консоли и только потом подтверждайте его. Если сведения о хосте изменились, не удаляйте старую запись, пропуская проверку.

03

Имя пользователя

Используйте системное имя пользователя из данных подключения заказа. Не подставляйте в удалённую команду адрес электронной почты или имя пользователя локального компьютера.

04

Порт

Явно укажите порт из данных подключения, например ssh -p 22 user@host. Тайм-аут обычно возникает до аутентификации, а отказ в доступе — на этапе аутентификации.

05

Разрешение сетевого доступа

Убедитесь, что корпоративная сеть, VPN, локальный firewall и политика выхода разрешают целевой порт. Для повторной проверки можно перейти в доверенную сеть, но не передавайте учётные данные проекта через ненадёжную сеть.

06

Первая проверка

После успешного входа сначала выполните whoami, sw_vers и df -h, запишите пользователя, версию системы и свободное место, а затем импортируйте файлы проекта.

Определение по выводу команды

Разделяйте вывод подключения, сборки и автоматизации

Последняя строка терминала обычно показывает результат, но не обязательно причину. Следующие три группы команд отдельно проверяют личность подключения, точку входа Xcode и состояние lane fastlane. Перед выполнением замените параметры примера своими данными подключения, workspace и scheme.

  • Подключение установленоВозвращаются имя удалённого пользователя, версия системы и сведения о диске.
  • Точка входа сборки доступнаXcode корректно распознаёт workspace, scheme и целевую платформу.
  • Цепочка автоматизации читаетсяОшибки Bundler, плагинов и lane сохраняются каждая с полным контекстом.
oakvps-task-session

Проверка подключения и среды

$ ssh -i ~/.ssh/oakvps_key -p 22 oak@203.0.113.10
$ whoami
oak
$ sw_vers -productVersion
15.x
$ df -h /

Что проверить:Если команда уже вернула имя удалённого пользователя, значит сеть и аутентификация пройдены; ищите дальнейшую проблему в правах системы или среде проекта.

Точка входа Xcode

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcodebuild -version
Xcode 16.x
$ xcodebuild -workspace App.xcworkspace \
  -scheme App \
  -destination 'generic/platform=iOS' \
  build | tee build.log

Что проверить:Сначала проверьте каталог разработчика, затем workspace и scheme. Сохраните build.log, а не только краткое сообщение о сбое в конце.

Фрагмент вывода fastlane

$ bundle exec fastlane lanes
$ bundle exec fastlane ios build \
  --verbose 2>&1 | tee fastlane.log
[09:24:18]: Driving the lane 'ios build'
[09:24:19]: Resolving package dependencies

Что проверить:Вывод списка lane подтверждает доступность точки входа зависимостей Ruby. При последующем сбое ищите самую раннюю ошибку в логе, а не только код завершения.

Диагностика сбоя сборки

Проверяйте зависимости по порядку, не переустанавливая всю среду

Версии, кэш, подпись, диск и логи взаимосвязаны. Такой порядок уменьшает число лишних изменений и помогает следующему инженеру воспроизвести тот же сбой.

Порядок проверок сбоя сборки, команды и критерии оценки
Порядок Объект проверки Выполнить или записать Критерий оценки
01 Версия Xcode xcodebuild -version и xcode-select -p Toolchain соответствует требованиям проекта и активному каталогу; командная строка и графический интерфейс не используют разные версии.
02 Кэш зависимостей Сначала запишите lock-файл, затем проверьте состояние Swift Package, CocoaPods или собственного кэша проекта. Lock-файл не изменён случайно; очищайте только кэш, связанный с текущей ошибкой, не удаляя все повторно используемые зависимости.
03 Данные подписи Сопоставьте target, bundle identifier, действительность сертификата и provisioning profile. Данные соответствуют текущему target сборки; пароли и секреты не попадают в логи, репозиторий или вложения тикета.
04 Место на диске df -h, размер каталога проекта и DerivedData. Для каталога сборки, зависимостей, архивов и временных файлов достаточно места; каталоги с аномальным ростом выявлены отдельно.
05 Полный лог Используйте tee для одновременного вывода и сохранения данных; запишите команду, время и код завершения. Лог содержит первую ошибку, контекст и итоговый статус, поэтому другой инженер сможет воспроизвести её той же командой.
Проблемы зависимостей

Сначала сравните lock-файлы, затем очистите кэш

Если разрешение зависимостей внезапно изменилось, сначала проверьте различия lock-файлов до и после коммита, настройки источников пакетов и результат сети. Удаляйте кэш соответствующей области только после подтверждения повреждения, чтобы не превратить воспроизводимую проблему в разовый случай.

Проблемы подписи

Разделяйте отсутствие данных и несовпадение target

Ошибка может быть вызвана недоступным сертификатом, несовпадением provisioning profile и bundle identifier или неверно выбранным target. Запишите код ошибки и имя target, но не добавляйте в тикет пароль сертификата, приватный ключ или полные данные подписи.

Проблемы логов

Сохраните полный контекст первого сбоя

Повторный запуск может изменить кэш и временные файлы. После первого сбоя сначала сохраните логи, команду, состояние workspace и сведения о диске, а затем повторите проверку с одной переменной, чтобы понять, устранило ли изменение проблему.

Передача сеанса и артефактов

Сделайте удалённый сеанс и передачу файлов независимо возобновляемыми

Удалённое окно — лишь точка управления, а не единственное место хранения состояния задачи. Команды, логи, артефакты и контрольные суммы должны находиться в определённых каталогах.

Удалённый сеанс

Проверяйте состояние перед подключением и перед уходом

  1. 01
    Подготовка к подключению

    Проверьте локальную сеть, отпечаток хоста, целевое имя пользователя и источник файлов проекта. Импортируйте чувствительные файлы только при необходимости.

  2. 02
    Длительная задача вне окна

    Запускайте сборку или эксперимент в возобновляемом менеджере сеансов и одновременно записывайте стандартный вывод в файл лога.

  3. 03
    Завершение при уходе

    Убедитесь, что файлы сохранены и состояние задачи записано, затем завершите графический интерфейс или SSH-сеанс. Не оставляйте несохранённые изменения в окне.

  4. 04
    Отзыв прав

    После ухода участника из команды или завершения задачи отзовите ненужные ключи и права доступа, затем проверьте общие каталоги.

Передача файлов

Разделяйте артефакты, логи и чувствительные данные

  1. 01
    Остановите запись

    Убедитесь, что сборка завершена, и только затем архивируйте артефакты. Не передавайте каталоги или файлы базы данных, которые ещё создаются.

  2. 02
    Создайте манифест

    Запишите имена файлов, версию сборки, версию среды, команду генерации и контрольные суммы, чтобы получатель мог проверить целостность.

  3. 03
    Проверьте загрузку

    Распакуйте архив локально и проверьте ключевые файлы. Убедитесь, что это не пустой каталог и что необходимые логи на месте.

  4. 04
    Удалите чувствительные файлы

    По правилам команды удалите временные ключи, токены, данные подписи и ненужные копии моделей, сохранив общедоступные записи сборки.

Проверки экспериментов MLX

Сначала зафиксируйте модель, среду и пределы памяти, затем оценивайте результат

MLX использует unified memory Apple Silicon. Файлы модели, потребление в runtime, длина контекста и промежуточные результаты совместно определяют доступное пространство. Поэтому нельзя смотреть только на размер файла модели или судить о производительности по времени одного запуска.

Все три конфигурации — выделенные физические серверы: базовая использует M4, 16 ГБ памяти и 256 ГБ хранилища; продвинутая — M4, 24 ГБ памяти и 512 ГБ хранилища; конфигурация с большим объёмом памяти — M4 Pro, 64 ГБ памяти и 2 ТБ хранилища. Выбирайте вариант по фактическому потреблению модели, датасета и параллельных задач.

01

Изолируйте среду эксперимента

Зафиксируйте для каждого проекта версию Python и зависимостей, сохраните воспроизводимый список зависимостей и не смешивайте несколько версий эксперимента в системной среде.

02

Проверьте размер файлов модели

Отдельно запишите размер загружаемого пакета, распакованных файлов, кэша и каталога вывода. Оставьте место для временных файлов, чтобы эксперимент не прервался из-за нехватки диска.

03

Выберите объём памяти

Запишите пиковое потребление через Activity Monitor или командную строку. При постоянном заметном давлении на память уменьшите параллелизм, сократите задачу или измените конфигурацию, а не просто повторяйте запуск.

04

Сохраняйте лог эксперимента

Запишите версию кода и зависимостей, идентификатор модели, параметры, краткое описание входных данных, расположение вывода и сведения об ошибках, чтобы следующий запуск можно было воспроизвести.

Перед отправкой запроса в поддержку

Оформите тикет как воспроизводимую запись

Службе поддержки нужно знать заказ, узел, шаг и период возникновения проблемы. Чем точнее сведения, тем быстрее можно перейти к диагностике.

Идентификатор заказа

Укажите видимый в консоли идентификатор заказа. Не отправляйте платёжные реквизиты или полные платёжные данные.

Обязательно
Физический узел

Укажите узел заказа и текущую точку подключения, чтобы различать сетевой маршрут и область среды.

Обязательно
Время возникновения

Используйте время с часовым поясом и укажите, возникает ли проблема постоянно, периодически или только в одной задаче.

Обязательно
Шаги воспроизведения

Начните с нормального состояния и по порядку перечислите команды, параметры, ожидаемый и фактический результат. Не пропускайте промежуточные действия.

Обязательно
Обезличенные логи

Приложите полный контекст ошибки и код завершения, удалив приватные ключи, токены, пароли сертификатов, учётные данные репозитория и чувствительное содержимое проекта.

Рекомендуется приложить

Нужен облачный Mac, готовый к работе?

Выберите Oak M4, Oak M4 Plus или Oak M4 Pro и арендуйте выделенный физический сервер на нужный срок. После заказа смотрите в консоли заказ, данные подключения и тикеты поддержки.