macOSが2世代古いまま届いた中古Mac miniをフリートに登録する
マシン自体は問題ありませんでした。メモリ16 GB、Apple M4、きれいに消去済み。ただしmacOSは15.6.1で、当社がすべてのお客様に提供しているXcodeは26.2未満では起動しません。その見分け方と、アップグレードのわかりにくい部分を説明します。最後に、中古のMacにお金を払う前に今は必ず確認している項目を載せています。
最小バージョンはXcode自身から読む
リリースノートから推測しないでください。Xcodeは自分のプロパティリストに下限を書いています。
$ /usr/libexec/PlistBuddy -c "Print :LSMinimumSystemVersion" \
/Applications/Xcode.app/Contents/Info.plist
26.2それより古いマシンは、登録は問題なく通り、お客様の最初のビルドで失敗します。現在、当社の登録スクリプトは何よりも先にこれを確認します。満たさない場合は登録を拒否し、新しいリリースを取得するための正確なコマンドを表示します。
ソフトウェアアップデートは最新のメジャーバージョンしか表示しない
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のformulaには、どれもすでに新しいリリース向けのbottleがありました。そのため、Rubyのコンパイルで午後を潰すこともなく、登録はいつもどおりの時間で終わりました。
販売前に登録処理が検証すること
バージョンの確認に通るのは、作業の始まりであって終わりではありません。マシンを誰かに提供する前に、4つのことを証明する必要があります。どれも推測ではなく、測定で確かめます。
- 本物のデスクトップ。VNCクライアントがフレームバッファを取得し、色の数を数えます。10万色を超えればデスクトップです。2色なら真っ黒な画面です。
- 実際のコンパイル。
xcrun swiftcで、顧客アカウントとしてバイナリをビルドし、実行します。 - ログイン済みのセッション。
whoに、顧客アカウントのconsoleの行が表示されます。 - テレメトリが届いていること。ハブのフリートダッシュボードで、マシン、そのmacOSのバージョン、セッションが確認できます。
当社のマシンは、macOS 27でこの4つすべてに合格しました。販売しているのはそのためです。バージョン番号が理由ではありません。
バグではなかった騒ぎ
登録後の最初の2回の起動で、自動ログインが効きませんでした。出たばかりのmacOSメジャーバージョンでは、これはリグレッションに見えます。危うくそう報告するところでした。実際はそうではありませんでした。
最初の起動では、コピーしたばかりの3.8 GBのXcodeのインデックス作成が走り、ロードアベレージは160を超えていました。ログインが時間内に完了せず、macOSはloginwindowの設定にlastLoginPanicをセットしました。このフラグがあると、次の起動でも自動ログインをスキップします。負荷が落ち着いたマシンでこのフラグを消して再起動すると、うまくいきました。パスワードもスクリプトも同じで、8文字でも32文字でも動きました。
sudo defaults delete /Library/Preferences/com.apple.loginwindow lastLoginPanic sudo shutdown -r now
新しいOSのせいではないと証明したのは、対照実験でした。1つ前のメジャーバージョンを入れた正常なマシンで同じ診断コマンドを実行すると、同じエラーが出たのです。この話と、似たような4つの話は失敗しようがない確認処理に書きました。
中古のminiを買うときに確認すること
どれもCIに限った話ではありません。どんな中古のMacでも、お金を払う前に確認すべきことです。当社には、最初から正しく確認する理由がほかより多いだけです。マシンは1時間以内にお客様の手に渡るからです。
よくある質問
- ソフトウェアアップデートに表示されないmacOSのバージョンをインストールするには?
- softwareupdate --list-full-installers を実行すると、そのモデル向けにAppleが提供しているリリースがすべて表示されます。次に softwareupdate --fetch-full-installer --full-installer-version 26.7 を、必要なバージョンを指定して実行します。インストーラは/Applicationsに置かれます。
- Xcode 26.6はmacOS 27で動きますか?
- 動きます。XcodeのInfo.plistにあるLSMinimumSystemVersionは26.2ですが、これは下限であって固定ではありません。27でも起動し、ビルドもできます。
- CI用のマシンには、とにかく最新のmacOSを入れればよいですか?
- 意図して選ぶ場合だけにしてください。フリートの中で1台だけメジャーバージョンが違うと、CIのお客様にとって再現性が損なわれます。まず新しいリリース向けのHomebrewのbottleがあるか確認してください。ないと、すべてのインストールがソースからのコンパイルになります。
- 中古のMac miniを買う前に何を確認すべきですか?
- シリアル番号とモデル、メモリ、実際のディスク容量、macOSのバージョンです。さらに、FileVaultとアクティベーションロックがオフであること、「探す」がオフであること、MDMに登録されていないことも確認します。当社が買ったものは500 GBとして売られていましたが、実際は256でした。