Подключение б/у Mac mini, который приехал с macOS на две версии старше
С машиной всё было в порядке. Шестнадцать гигабайт, Apple M4, чистое стирание. Но на ней стояла macOS 15.6.1, а Xcode, который мы ставим каждому клиенту, не запускается ниже 26.2. Ниже о том, как это определить, и о неочевидных частях обновления. В конце список, который мы теперь проходим, прежде чем платить за б/у Mac.
Узнайте минимум у самого Xcode
Не гадайте по заметкам к релизу. Xcode указывает свою нижнюю границу в собственном property list.
$ /usr/libexec/PlistBuddy -c "Print :LSMinimumSystemVersion" \
/Applications/Xcode.app/Contents/Info.plist
26.2Машина ниже этой версии без проблем регистрируется, а потом валит первую же клиентскую сборку. Теперь наш скрипт регистрации проверяет это в первую очередь. Если версия ниже, он отказывается и выводит точную команду для загрузки более нового релиза.
Software Update показывает только новейшую мажорную версию
На macOS 15 Системные настройки предлагали macOS 27 и больше ничего. Старые мажорные версии никуда не делись. Их надо запросить по имени, из командной строки.
$ softwareupdate --list-full-installers * Title: macOS 27 Golden Gate, Version: 27.0, Build: 26A428 * Title: macOS Tahoe, Version: 26.7, Build: 25G229 * Title: macOS Tahoe, Version: 26.6.2 ... * Title: macOS Sequoia, Version: 15.8 ... $ softwareupdate --fetch-full-installer --full-installer-version 26.7
Список зависит от модели, так что запускайте его на нужной машине. На нашей предлагалась только 27. Поэтому мы поставили 27 осознанно, а не по умолчанию. Для парка машин эта разница важна.
Прежде чем ставить новую мажорную версию на машину из парка
Для каждой формулы Homebrew, которую мы ставим, бутылка под новый релиз уже была. Поэтому регистрация заняла обычное время, а не целый вечер компиляции Ruby.
Что проверяет регистрация, прежде чем машина поступит в продажу
Проверка версии это начало работы, а не её конец. Прежде чем машину кому-то предложат, она должна доказать четыре вещи. Каждую мы измеряем, а не предполагаем.
- Настоящий рабочий стол. VNC-клиент забирает фреймбуфер и считает цвета. Больше ста тысяч разных цветов это рабочий стол. Два это чёрный экран.
- Настоящая компиляция.
xcrun swiftcсобирает и запускает бинарник от имени учётной записи клиента. - Активная сессия.
whoпоказывает строку console для учётной записи клиента. - Телеметрия идёт. Хаб видит машину, её версию macOS и её сессию на панели парка.
Наша прошла все четыре на macOS 27. Именно поэтому, а не из-за номера версии, она в продаже.
Испуг, который оказался не багом
Первые две загрузки после регистрации не выполнили автовход. На совершенно новой мажорной macOS это похоже на регрессию, и мы чуть было не описали это как регрессию. Это была не она.
При первой загрузке система индексировала только что скопированный Xcode на 3.8 GB, средняя нагрузка была выше 160. Вход не успел завершиться, и macOS выставила lastLoginPanic в настройках loginwindow. Из-за этого флага автовход пропускается и при следующей загрузке. Мы сбросили флаг и перезагрузили уже успокоившуюся машину. Всё заработало, с тем же паролем и теми же скриптами, и с 8, и с 32 символами.
sudo defaults delete /Library/Preferences/com.apple.loginwindow lastLoginPanic sudo shutdown -r now
Что дело не в новой ОС, доказал контрольный запуск. Мы выполнили ту же диагностическую команду на исправной машине на одну мажорную версию старше и получили ту же ошибку. Эта история и ещё четыре похожих в посте проверки, которые не могут упасть.
Что проверить при покупке б/у mini
Ничего из этого не относится только к CI. Это стоит проверить, прежде чем отдавать деньги за любой б/у Mac. Просто у нас больше причин сделать всё правильно с первого раза. Машина уходит клиенту в течение часа.
Вопросы
- Как установить версию macOS, которую не показывает Software Update?
- Выполните softwareupdate --list-full-installers, чтобы увидеть все релизы, которые Apple предлагает для этой модели. Затем softwareupdate --fetch-full-installer --full-installer-version 26.7 с нужной версией. Установщик появится в /Applications.
- Работает ли Xcode 26.6 на macOS 27?
- Да. LSMinimumSystemVersion в Info.plist у Xcode равен 26.2, и это нижняя граница, а не жёсткая привязка. Он запускается и собирает на 27.
- Стоит ли просто ставить самую новую macOS на CI-машину?
- Только осознанно. Одна машина на другой мажорной версии, чем остальной парк, ломает воспроизводимость для CI-клиентов. Сначала проверьте, что для нового релиза есть бутылки Homebrew. Иначе каждая установка будет компилироваться из исходников.
- Что проверить перед покупкой б/у Mac mini?
- Серийный номер и модель, память, реальный объём диска, версию macOS. Убедитесь, что FileVault и Activation Lock выключены, Find My выключен и нет регистрации в MDM. Наш продавали как 500 GB, а оказалось 256.
Посчитайте свои цифры в калькуляторе или арендуйте раннер.