Пять ложных трактовок инцидентов нотаризации на облачном Mac
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 1 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 2 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 3 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 4 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 5 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 6 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 7 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 8 фиксирует необходимость журналировать Team ID и путь keychain-db.
curl здоров, а timeout:Сначала прокси и PATH.
Вчера ок, сегодня Invalid:Сравните entitlements и exportOptions.
validate ок, клиент видит повреждение:Сверьте байты CDN и объект staple.
Нестабильно только при шаринге:Разделите файл связки ключей и пользователей.
df свободен, загрузка падает:Разведите TMPDIR и смотрите iostat.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 9 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 10 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 11 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 12 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 13 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 14 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 15 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 16 фиксирует необходимость журналировать Team ID и путь keychain-db.
Выделенный хост против смешанной рабочей станции
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 17 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 18 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 19 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 20 фиксирует необходимость журналировать Team ID и путь keychain-db.
| Измерение | Только нотаризация | Смешение с Xcode | Безлюдный CI |
|---|---|---|---|
| Риск сертификатов | Ниже с файлом связки | Выше при смешанном signing | Средне, нужен ротационный план |
| Человеческий фактор | Низкий | Высокий | Низкий |
| IO | Можно изолировать temp | Конкуренция DerivedData | Мелкий clone и temp отдельно |
| Регион | Часовой пояс подписанта | Часовой пояс разработки | Реестр артефактов и Git |
| Аренда | День прогон, потом месяц | Еженедельный контроль | Квартал и уборка |
Стабильность меньше про ping и больше про то, делят ли submit, staple и validate одну аудируемую сессию.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 21 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 22 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 23 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 24 фиксирует необходимость журналировать Team ID и путь keychain-db.
Каркас notarytool и stapler
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 25 фиксирует необходимость журналировать Team ID и путь keychain-db.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 26 фиксирует необходимость журналировать Team ID и путь keychain-db.
xcrun notarytool store-credentials "AC_PROFILE" --keychain "$HOME/Library/Keychains/ci-notary.keychain-db" --apple-id "..." --team-id "..." --password "app-specific" xcrun notarytool submit ./Dist/MyApp.zip --keychain-profile "AC_PROFILE" --wait xcrun notarytool log SUBMISSION_ID --keychain-profile "AC_PROFILE" xcrun stapler staple ./Dist/MyApp.zip xcrun stapler validate ./Dist/MyApp.zip
Совет:храните JSON notarytool log рядом с хешем артефакта.
Когда нотаризация Developer ID и stapler переносится с офисного ноутбука на арендованный bare-metal облачный Mac, сбои чаще выглядят как очереди notarytool, разное наследование HTTPS_PROXY у SSH и launchd, дрейф порядка поиска в связке ключей после импорта distribution в login keychain и конкуренция временных ZIP с DerivedData на одном томе APFS. Блок 27 фиксирует необходимость журналировать Team ID и путь keychain-db.
Шестишаговый runbook от дневной аренды к месячному контракту
Каждый шаг должен оставлять артефакт: поле тикета, tarball или журнал с UTC-меткой.
Окно обслуживания не должно пересекаться с тяжёлой индексацией или снимками симулятора.
Заморозить роли:Пользователь, путь связки, Team ID.
Бэкап exportOptions:Tarball с UTC.
Прогон за день:Маленький zip сквозь цепочку.
Развести temp:Не делить с DerivedData.
Время и прокси:Владельцы NTP и TLS-хранилища.
Месячный ритм:Еженедельная уборка и ротация логов.
На еженедельном обзоре держите успешность загрузки и дисковый уровень на одной панели.
Для шести регионов публикуйте таблицу, какой инстанс — первичный источник для какой команды Apple.
Провалы складывайте по submission id и прикладывайте минимальные команды воспроизведения.
Пороги для часов, памяти и временных каталогов
Числа ниже — ориентиры для операционной коммуникации, не гарантии железа.
Калибруйте по своим гистограммам, но оставляйте формулировки проверяемыми в постмортеме.
Дрейф времени:Если расхождение с эталоном около двух минут и отказы плавают, сначала NTP.
Смешанная нагрузка 16 ГБ:Индексация, zip нотаризации и симулятор одновременно — инцидент размерности.
Запас temp:Около 30 ГБ свободной записи под temp нотаризации, ниже 15 ГБ — стоп крупным Archive.
Внимание:пороги — руководство, не SLA облака.
Разделение хоста нотаризации и интерактивной разработки снижает столкновение истории связки ключей и стабильности загрузки.
Краткая аренда в шести регионах даёт burn-in перед месячным закреплением.
Аренда bare-metal Mac mini у MESHLAUNCH помогает проверить матрицу нотаризации на стабильном выходе и реальном железе.
Используйте отдельных пользователей и файл связки ключей. См. runbook изоляции и цены.
Примените неглубокий clone и sparse-checkout из руководства по диску mono-repo и откройте центр помощи.
Сначала часовой пояс подписанта и стабильный выход, затем Git и артефакты. Качество сессий — матрица SSH и Mosh.
