GenSMBIOSを使って機種情報を設定する

以前、シリアル番号を決めるツールとしてmacserialを紹介しました。macserialを使いやすくしたツールにGenSMBIOSがあります。OpenCoreのガイドでよく使われていますので試してみました。config.plistにシリアル情報などを書きこめて便利でした。

Hackintoshの機種設定

Hackintoshを作ったら、それに機種ID、シリアル番号、UUID情報などのID情報を設定しておく必要があります。正しく設定しないと、macOSが動かないことがありますし、iCloudのサービスが使えないことがあります。さらにはユーザのApple IDが使用禁止にされてしまうこともあります。これらの設定はconfig.plistの中に書きます。CloverではSMBIOSのセクションOpenCoreではPlatformInfoのセクションに書き込みます。

UUIDなどのIDは世界に一つしかない番号ならばなんでも良いです。uuidgenなどのコマンドで乱数発生させて作れば良いです。またOpenCoreのROM番号はEthernetのMACアドレスを流用するのが一般的です。一方でMacのシリアル番号は、生産地、生産年・週、番号、機種固有番号などから構成されています。全体の構成はMacの世代で違うことがありますし、機種固有番号は機種ごとに違います。シリアル番号の規則をリバースエンジニアリングして、生成・チェックするソフトが作られています。それがmacserialです。シリアル番号の仕組みとmacserialの使い方は、以下の記事で詳しく紹介しました。

GenSMBIOSの使い方

最近のOpenCoreのガイドでは、シリアル番号などの機種情報を生成するために、GenSMBIOSというPythonプログラムがよく使われています。 これも中ではmacserialを動かしているのですが、より簡単に使えて、さらにconfig.plistへの書き込み機能を備えているので便利です。この記事ではGenSMBIOSを使ってみます。GenSMBIOSは以下からダウンロードできます。

ダウンロードするとGenSMBIOS.commandというファイルがあります。これが本体です。Terminal.appでこれを起動します(アイコンをダブルクリックしても良いです)。すると以下のメインメニューが現れます。

#######################################################
# GenSMBIOS #
#######################################################
MacSerial v2.1.2
Current plist: None
Plist type: Unknown

1. Install/Update MacSerial
2. Select config.plist
3. Generate SMBIOS
4. Generate UUID
5. List Current SMBIOS

Q. Quit

Please select an option:

このメニューを順番に説明します。

1. Install/Update MacSerial

最初のメニューは、内部で使用するmacserialの更新です。GenSMBIOS.commandがあるディレクトリの中に、Scriptsというディレクトリがあります。この中にmacserialが入っています。macserialの使い方は、過去の記事を見てください。macserialは、新しいMacが出るたびに、それをサポートするために更新されています。なので、GenSMBIOSのこのメニューは、macserialを最新版に更新します。既存のMacのシリアル番号生成規則も更新されている可能性もありますので、とりあえずは選択しておくのが良いと思います。

  #######################################################
 #                 Getting MacSerial                   #
#######################################################
Gathering latest macserial info...
- MacURL: https://github.com/acidanthera/macinfopkg/releases/download/2.1.2/macinfo-2.1.2-mac.zip

Downloading macinfo-2.1.2-mac.zip...
- Extracting...
- Found macserial
- Chmod +x...
- Copying to Scripts directory...

Cleaning up...

Done.

2. Select config.plist

生成したシリアル番号などを書き込む先のconfig.plistを指定します。ここで書き込み先のconfig.plistへのパスを入力するか、もしくは説明にあるとおりそのアイコンをドラッグ&ドロップします。すごいところは、Cloverのconfig.plistにも、OpenCoreのconfig.plistにもどちらにも対応しているところです。

  #######################################################
 #                   Select Plist                      #
#######################################################

Current:
Type:    OpenCore

C. Clear Selection
M. Main Menu
Q. Quit

Please drag and drop the target plist: 

試しに、OpenCoreに付属のデフォルトconfig.plistであるSample.plistをコピーして、config.plistに改名して入力してみました。

3. Generate SMBIOS

GenSMBIOSのメイン機能です。このメニューでSMCIOS情報を生成します。Macの機種IDを聞かれますので、入力します。ここではiMac19,1を指定しました。

  #######################################################
 #                  Generate SMBIOS                    #
#######################################################

M. Main Menu
Q. Quit

Please type the SMBIOS to gen and the number
of times to generate [max 20] (i.e. iMac18,3 5):    iMac19,1

その結果、シリアル番号、ボードシリアル番号、UUIDが生成されます。2番目のメニューで、変更先のconfig.plistを指定してあれば、それに書き込まれます。指定していなければ、情報が表示されるだけです。その場合はテキストエディタなどで開いたconfig.plistにコピペします。

  #######################################################
 #               iMac19,1 SMBIOS Info                  #
#######################################################

Type:         iMac19,1
Serial:       C02DN9ZSJV3Q
Board Serial: C020453004NLNV91M
SmUUID:       2BCB8DF6-7633-4F0E-B63C-975E3EFCEDFE

Flushing SMBIOS entry to /Volumes/Users/bootmacos/config.plist

Press [enter] to return...

今回は、前述のようにデフォルトのSample.plistと同一内容のconfig.plistを変更するように指定してあります。どのように変更されたかを確認するために、diffコマンドでconfig.plistと、元データのSample.plistを比較してみました。一見、多くの差分があるように見えますが、実は、

% diff config.plist Sample.plist
134,136c134
< <data>
< Q3B1UG0AAAA=
< </data>
---
> <data>Q3B1UG0AAAA=</data>

とあるように、元のSample.plistで<data>情報</data>という1行で記述された内容が、GenSMBIOSの処理により3行に分けられただけの場所が多いです。このような変更点を除いた、実質的に差分のある場所は、以下でした。

% diff config.plist Sample.plist

(略)
893c824
< 			<string>C020453004NLNV91M</string>
---
> 			<string>M0000000000000001</string>
903c832
< 			<string>C02DN9ZSJV3Q</string>
---
> 			<string>W00000000001</string>
905c834
< 			<string>2BCB8DF6-7633-4F0E-B63C-975E3EFCEDFE</string>
---
> 			<string>00000000-0000-0000-0000-000000000000</string>

ということで、000000…などの数値で仮に書かれていたシリアル番号、ボードシリアル番号、UUIDの場所だけが、今回新しく生成されたデータで書き直されていることがわかります。

なお、シリアル番号は、下記のサイトでそれが未使用であることを確認しておくべきです。ここで生成された番号を入力し、「申し訳ありませんが、このシリアル番号は有効ではありません。ご確認の上、もう一度やり直してください。」と表示されれば、その番号は未使用です。今回生成した番号はOKでした。

4. Generate UUID

これはおまけ的な機能だと思いました。UUIDだけを生成します。uuidgenというコマンドを動かしているだけだと思います。ちなみにこのメニューを選択しても、config.plistには書き込まれません。

#######################################################
# Generated UUID #
#######################################################

773F1659-07F1-4130-8C3B-FE2F900F9E95

Press [enter] to return...

5. List Current SMBIOS

これは現在起動中のマシンの情報を表示します。上のメニューで指定したconfig.plistファイルの内容ではありません。macserialの–infoオプションと同様に、シリアル番号の分析と有効性を表示してくれます。

まとめ

GenSMBIOSコマンドで、シリアル番号を生成して、config.plistに書き込む作業が楽になります。その過程で、シリアル番号が有効かどうかをAppleのサイトで確認しておく必要はあります。また、このコマンドでは、OpenCoreのconfig.plistにおけるPlatformInfo–>Generic–>ROMの設定は行ってくれません。Sample.plistでは0x112233445566になっています(Base64ではESIzRFVm)。任意の6バイトの数値で良いのですが、唯一の数字にしておくべきです。通常はEthernetのMACアドレスに設定しておくと良いようです。生成したシリアル番号は大抵の場合未使用ですし、ROMの値もAppleによって厳しくチェックされる情報でもありませんので、GenSMBIOSで設定すれば、とりあえずは起動してしまっても大丈夫だと思います。

9件のコメント

    1. 情報ありがとうございます。10桁のランダムな英数字番号になるってことですね。

  1. 確認後削除していただけると助かりますが,bootmacosのhttps対応化は検討されてますか?

      1. 勘違いしてしまいました.申し訳ありません.
        私の環境(Chrome on Catalina)で表示すると「保護されてない通信」と表示されていたので,https化されてないものだと・・・

        1. Chromeでアクセスして(いつもはSafari使ってました)その警告を確認しました。調べたら、httpsに移行する前に作った画像のリンクとメニューのリンクにhttpが残存してました。リンクにhttpが含まれているとChromeはそれも警告してくれるのですね、直しましたので今は大丈夫かと思います。また何かありましたら教えてください。ありがとうございました!!

  2. 質問があります。
    同一のPCを使用して、SSDでMojaveとCatalinaを起動分けする場合、Serial、Board Serial、SmUUIDは、MojaveとCatalinaで同じにすれば良いのでしょうか?
    両方のOSからiCloudやiMessageを使用する前提です。

      1. コメント、ありがとうございます。
        SmUUIDがハードディスクのUUIDなのかPC自体のUUIDなのか、分からなかったので設定に躊躇していました。

返信を残す

メールアドレスが公開されることはありません。