Первое подключение
Проверьте права ключа, отпечаток хоста, имя пользователя, порт и локальную сеть. Определите, произошёл сбой до аутентификации или после неё.
Диагностировать подключениеНачните не с расплывчатого «попробуйте ещё раз». Сначала проверьте точку подключения, затем инструменты, зависимости, данные подписи, диск и логи. Каждый шаг содержит ожидаемый результат — для сборок iOS, автоматизации macOS и экспериментов MLX на выделенном физическом сервере OakVPS.
По вопросам существующего заказа войдите в консоль и создайте тикет. Не отправляйте на публичной странице приватные ключи, пароли сертификатов подписи или полные платёжные данные.
Шесть точек входа. Если проблема затрагивает несколько этапов, начните с первого места появления сбоя, не очищая сразу всю среду.
Проверьте права ключа, отпечаток хоста, имя пользователя, порт и локальную сеть. Определите, произошёл сбой до аутентификации или после неё.
Диагностировать подключениеПроверьте текущую toolchain, scheme проекта, состояние зависимостей, файлы подписи, свободное место и доступный для экспорта пакет.
Показать команды сборкиРазделяйте ошибки Ruby, плагинов, параметров lane и Xcode. Сохраняйте полный лог, а не только последнюю строку.
Проверить вывод автоматизацииСначала упакуйте артефакты и создайте контрольную сумму, затем передавайте архив. Не переносите каталоги сборки или кэш зависимостей, которые ещё записываются.
Показать порядок передачиУбедитесь, что локальная сеть стабильна, задача продолжится после разрыва сеанса, а перед уходом вы завершите интерактивный сеанс и удалите временные данные.
Проверить границы сеансаПроверяйте unified memory, файлы моделей, изолированную среду и записи эксперимента. Не оценивайте состояние среды по непроверяемым цифрам скорости.
Проверить среду экспериментаСначала сохраните исходную ошибку, затем меняйте по одной переменной. Одновременная смена имени пользователя, порта и ключа лишает диагностику смысла.
Выполните локально chmod 600 ~/.ssh/oakvps_key. Если приватный ключ доступен для чтения другим пользователям, SSH-клиент отклонит его ещё до начала аутентификации.
При первом подключении сопоставьте отпечаток в терминале с данными подключения в консоли и только потом подтверждайте его. Если сведения о хосте изменились, не удаляйте старую запись, пропуская проверку.
Используйте системное имя пользователя из данных подключения заказа. Не подставляйте в удалённую команду адрес электронной почты или имя пользователя локального компьютера.
Явно укажите порт из данных подключения, например ssh -p 22 user@host. Тайм-аут обычно возникает до аутентификации, а отказ в доступе — на этапе аутентификации.
Убедитесь, что корпоративная сеть, VPN, локальный firewall и политика выхода разрешают целевой порт. Для повторной проверки можно перейти в доверенную сеть, но не передавайте учётные данные проекта через ненадёжную сеть.
После успешного входа сначала выполните whoami, sw_vers и df -h, запишите пользователя, версию системы и свободное место, а затем импортируйте файлы проекта.
Последняя строка терминала обычно показывает результат, но не обязательно причину. Следующие три группы команд отдельно проверяют личность подключения, точку входа Xcode и состояние lane fastlane. Перед выполнением замените параметры примера своими данными подключения, workspace и scheme.
$ ssh -i ~/.ssh/oakvps_key -p 22 oak@203.0.113.10
$ whoami
oak
$ sw_vers -productVersion
15.x
$ df -h /
Что проверить:Если команда уже вернула имя удалённого пользователя, значит сеть и аутентификация пройдены; ищите дальнейшую проблему в правах системы или среде проекта.
$ 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, а не только краткое сообщение о сбое в конце.
$ 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-файлов до и после коммита, настройки источников пакетов и результат сети. Удаляйте кэш соответствующей области только после подтверждения повреждения, чтобы не превратить воспроизводимую проблему в разовый случай.
Ошибка может быть вызвана недоступным сертификатом, несовпадением provisioning profile и bundle identifier или неверно выбранным target. Запишите код ошибки и имя target, но не добавляйте в тикет пароль сертификата, приватный ключ или полные данные подписи.
Повторный запуск может изменить кэш и временные файлы. После первого сбоя сначала сохраните логи, команду, состояние workspace и сведения о диске, а затем повторите проверку с одной переменной, чтобы понять, устранило ли изменение проблему.
Удалённое окно — лишь точка управления, а не единственное место хранения состояния задачи. Команды, логи, артефакты и контрольные суммы должны находиться в определённых каталогах.
Проверьте локальную сеть, отпечаток хоста, целевое имя пользователя и источник файлов проекта. Импортируйте чувствительные файлы только при необходимости.
Запускайте сборку или эксперимент в возобновляемом менеджере сеансов и одновременно записывайте стандартный вывод в файл лога.
Убедитесь, что файлы сохранены и состояние задачи записано, затем завершите графический интерфейс или SSH-сеанс. Не оставляйте несохранённые изменения в окне.
После ухода участника из команды или завершения задачи отзовите ненужные ключи и права доступа, затем проверьте общие каталоги.
Убедитесь, что сборка завершена, и только затем архивируйте артефакты. Не передавайте каталоги или файлы базы данных, которые ещё создаются.
Запишите имена файлов, версию сборки, версию среды, команду генерации и контрольные суммы, чтобы получатель мог проверить целостность.
Распакуйте архив локально и проверьте ключевые файлы. Убедитесь, что это не пустой каталог и что необходимые логи на месте.
По правилам команды удалите временные ключи, токены, данные подписи и ненужные копии моделей, сохранив общедоступные записи сборки.
MLX использует unified memory Apple Silicon. Файлы модели, потребление в runtime, длина контекста и промежуточные результаты совместно определяют доступное пространство. Поэтому нельзя смотреть только на размер файла модели или судить о производительности по времени одного запуска.
Все три конфигурации — выделенные физические серверы: базовая использует M4, 16 ГБ памяти и 256 ГБ хранилища; продвинутая — M4, 24 ГБ памяти и 512 ГБ хранилища; конфигурация с большим объёмом памяти — M4 Pro, 64 ГБ памяти и 2 ТБ хранилища. Выбирайте вариант по фактическому потреблению модели, датасета и параллельных задач.
Зафиксируйте для каждого проекта версию Python и зависимостей, сохраните воспроизводимый список зависимостей и не смешивайте несколько версий эксперимента в системной среде.
Отдельно запишите размер загружаемого пакета, распакованных файлов, кэша и каталога вывода. Оставьте место для временных файлов, чтобы эксперимент не прервался из-за нехватки диска.
Запишите пиковое потребление через Activity Monitor или командную строку. При постоянном заметном давлении на память уменьшите параллелизм, сократите задачу или измените конфигурацию, а не просто повторяйте запуск.
Запишите версию кода и зависимостей, идентификатор модели, параметры, краткое описание входных данных, расположение вывода и сведения об ошибках, чтобы следующий запуск можно было воспроизвести.
Службе поддержки нужно знать заказ, узел, шаг и период возникновения проблемы. Чем точнее сведения, тем быстрее можно перейти к диагностике.
Укажите видимый в консоли идентификатор заказа. Не отправляйте платёжные реквизиты или полные платёжные данные.
ОбязательноУкажите узел заказа и текущую точку подключения, чтобы различать сетевой маршрут и область среды.
ОбязательноИспользуйте время с часовым поясом и укажите, возникает ли проблема постоянно, периодически или только в одной задаче.
ОбязательноНачните с нормального состояния и по порядку перечислите команды, параметры, ожидаемый и фактический результат. Не пропускайте промежуточные действия.
ОбязательноПриложите полный контекст ошибки и код завершения, удалив приватные ключи, токены, пароли сертификатов, учётные данные репозитория и чувствительное содержимое проекта.
Рекомендуется приложитьВыберите Oak M4, Oak M4 Plus или Oak M4 Pro и арендуйте выделенный физический сервер на нужный срок. После заказа смотрите в консоли заказ, данные подключения и тикеты поддержки.