y2blog » OSX Mavericksのインストーラーについて

10

27

2013

OSX Mavericksのインストーラーについて

OSX Mavericks用の起動可能なインストールメディアを作成してみる

  

OSX Mavericksが一般向けに提供されるようになったので、今回はOSX MavericksでのOSアップデートインストールの仕組みについて簡単に触れておくことにします.尚、この記事ではOSX Mavericksの具体的なインストール手順については触れませんので、そのような情報が必要な方はどこかの入門記事でも探してください.


OSX Lion(10.7)からは、これまでの起動可能メディア(DVD or USBメモリなどの外付けデバイス)によるOSインストラーという形式から、”App Store.app” 経由でインストーラーアプリをダウンロードし、インストーラーアプリを起動してOSをアップグレードするという手順に変更されました.ダウンロードしたインストーラーアプリから起動可能なインストールメディアを作成するという方法については、以前にもこのブログの記事で紹介しているので、既存の古いOSを上書き(アップデートインストール)する意外にも、新しいOSを真っ新な状態で新規インストールすることも可能です.


今回この記事を書こうと思ったのは、今回のMavericksのアップデートではこれまでのアップデートインストールの仕組みとは少しばかり様子が異なっていたことがきっかけです.勿論一般のユーザの視点ではこれまでのアップデートインストールとまったく同じようにしか見えないと思いますが、注意深くアップデートインストールの様子を監察していると、”あれっ?”と思わせるような箇所がありました.


その一番の点は、これまでのような単独起動可能なインストールメディアの作成でつまづいた事でした.OSX Mavericksではこれまでと同じ手法が使えないのです.この点をハッキリさせるため、Mountain Lion と Mavericksのインストールアプリの中身を覗いてみます.


Mountain Lion Install Package
Mountain Lion のインストーラーアプリの中身を覗いてみたところ(上)
イメージファイル”InstallESD.dmg”の中身(下)


Mountain Lion のインストーラーアプリ “Install OS X Mountain Lion.app” を右クリックで “Show Package Contents” することで、アプリケーションパッケージの構成ファイルを覗くことができますが、”SharedSupport” フォルダの中に “InstallESD.dmg”というイメージファイルがあり、このイメージファイルをディスク等にリストアすることで起動可能なインストールメディアが作成できます.


Mt Lion Install Disk 起動可能なOSインストールディスクが作成された様子


一方、OSX Mavericksの方もアプリケーションパッケージの構成ファイルは殆ど似ており、個々のフォルダの中身を逐一比較しなければ違いは分かりませんが、”InstallESD.dmg”というイメージファイルの中身をマウントして覗いて見れば Mountain Lionの場合とは大きく異なっているのが分かります.Mountain Lionには含まれていた作業用の起動OSのシステム関連ファイルが全く見当たりません.これでは”InstallESD.dmg”というイメージファイルをディスク等にリストアしても起動可能なインストールメディアは作成できません.


Mavericks Install Package  Mavericks のインストーラーアプリの中身を覗いてみたところ(上)
イメージファイル”InstallESD.dmg”の中身(下)

OSX Mavericksのインストーラーアプリを実行すると、確かに既存のシステムとは別な領域にインストール用のOSシステムが作成され、再起動後にそのインストール作業用のOSシステムが起動しています.それではこのインストール作業用のOSシステムは一体何処に作成されているのでしょうか?
インストール作業用のOSシステムの確保場所を探るために、OSX Mavericksのインストーラーアプリを実際に動かしながら、その動きや振る舞いを注意深く監察して行くことにしましょう.

インストーラログ情報から起動可能なインストールメディアを作成するヒントが得られた


インストーラが吐き出すログメッセージを見ていたらインストーラがどのような処理を行っているのか窺い知ることができます.次に示すログは “ia.log” という名前のログファイルで、インストーラが一時的に吐き出した作業ログのようです.インストール作業が終われば恐らく消えてしまう(後処理で消されてしまう?)類の物なので、インストール作業を途中でストップするなどしてちょっとトリッキーな事をしないと見ることができないかもしれません.


通常 “App Strore.app”からダウンロードしたMavericksのインストーラアプリは “Application” フォルダ ( /Applications ) に置かれますが、ここでは”Tmp” という名前のボリュームにコピーしてからインストーラーアプリ( “/Volumes/Tmp/Install OS X Mavericks.app” ) を起動しています.


Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: @(#)PROGRAM:Install  PROJECT:Install-845
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: @(#)PROGRAM:IA  PROJECT:InstallAssistant-464
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Hardware: iMac13,2 @ 3.40 GHz (x 8), 32768 MB RAM
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Running OS Build: Mac OS X 10.9 (13A598)
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: PATH=/usr/bin:/bin:/usr/sbin:/sbin
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: TMPDIR=/var/folders/ch/2cvs8_0d79zg4fsf4gx_t6fw0000gn/T/
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: SHELL=/bin/bash
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: HOME=/Volumes/Home/yasuaki
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: USER=yasuaki
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: LOGNAME=yasuaki
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: SSH_AUTH_SOCK=/tmp/launch-hSQ9Bo/Listeners
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: Apple_PubSub_Socket_Render=/tmp/launch-DXlTX3/Render
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: __CF_USER_TEXT_ENCODING=0x1F5:0:0
Oct 26 21:12:04 iMac27.local Install OS X Mavericks[1431]: Env: __CHECKFIX1436934=1
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Using distribution archive from /Volumes/Tmp/Install OS X Mavericks.app/Contents/SharedSupport/OSInstall.mpkg
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Configuring products from SharedSupport folder
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Install is double-dmg. Not adding chunklist to download list.
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Using product  based on media at /Volumes/Tmp/Install OS X Mavericks.app/Contents/SharedSupport at distance 5
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Using product  based on distribution at /Volumes/Tmp/Install OS X Mavericks.app/Contents/SharedSupport/OSInstall.mpkg at distance 5
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: Checking Software Update catalog URL https://swscan.apple.com/content/catalogs/others/index-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: JS: installCheckScript threw exception TypeError: 'null' is not an object (evaluating 'my.target.systemVersion')
Oct 26 21:12:05 iMac27.local Install OS X Mavericks[1431]: No available package ref for compatibility update. Ignoring.
 ...
Oct 26 21:12:06 iMac27.local Install OS X Mavericks[1431]: No available package ref for compatibility update. Ignoring.
Oct 26 21:12:06 iMac27.local Install OS X Mavericks[1431]: Using product  from product keys (null) at distance 25
Oct 26 21:12:15 iMac27.local Install OS X Mavericks[1431]: LSExceptions [0x6180000a3ba0] unloaded
Oct 26 21:13:18 iMac27.local Install OS X Mavericks[1431]: IATool launched
Oct 26 21:13:18 iMac27.local Install OS X Mavericks[1431]: Connected to IATool 27c4c0
Oct 26 21:13:19 iMac27.local Install OS X Mavericks[1431]: Preventing machine sleep.
Oct 26 21:13:19 iMac27.local Install OS X Mavericks[1431]: Using product IA_PKSecureNetEnabledProduct  at distance 5
Oct 26 21:13:19 iMac27.local InstallAssistantTool[1440]: Using existing boot files dir at /Volumes/Tmp/.IABootFiles
Oct 26 21:13:19 iMac27.local Install OS X Mavericks[1431]: Using mutable product path: /Volumes/Mavericks/OS X Install Data
Oct 26 21:13:19 iMac27.local Install OS X Mavericks[1431]: Using boot files path: /Volumes/Tmp/.IABootFiles
Oct 26 21:13:19 iMac27.local Install OS X Mavericks[1431]: Retrieving 1 packages (0.000 GB)
Oct 26 21:13:20 iMac27.local Install OS X Mavericks[1431]: Retrieved package com.apple.pkg.CompatibilityUpdate (http://swcdn.apple.com/content/downloads/32/63/031-1527/e9wa1u55eu6ztuvi4f4jf6a65kzn7xleln/OSX_10_9_IncompatibleAppList.pkg)
Oct 26 21:13:23 iMac27.local Install OS X Mavericks[1431]: Verifying InstallMacOSX.pkg/InstallESD.dmg
Oct 26 21:13:32 iMac27.local Install OS X Mavericks[1431]: Finished operation queue
Oct 26 21:15:29 iMac27.local Install OS X Mavericks[1431]: Opening /Volumes/Tmp/Install OS X Mavericks.app/Contents/SharedSupport/InstallESD.dmg
Oct 26 21:15:30 iMac27.local Install OS X Mavericks[1431]: Extracting boot files from /Volumes/OS X Install ESD/BaseSystem.dmg
Oct 26 21:15:31 iMac27.local Install OS X Mavericks[1431]: Extracting Boot Bits from Inner DMG:
Oct 26 21:15:31 iMac27.local Install OS X Mavericks[1431]: Copied kernelcache
Oct 26 21:15:32 iMac27.local Install OS X Mavericks[1431]: Copied Boot.efi
Oct 26 21:15:32 iMac27.local Install OS X Mavericks[1431]: Copied PlatformSupport.plist
Oct 26 21:15:32 iMac27.local Install OS X Mavericks[1431]: Ejecting disk images
Oct 26 21:15:33 iMac27.local Install OS X Mavericks[1431]: Generating the com.apple.Boot.plist file
Oct 26 21:15:33 iMac27.local Install OS X Mavericks[1431]: com.apple.Boot.plist: {
	    "Kernel Cache" = "/.IABootFiles/kernelcache";
	    "Kernel Flags" = "container-dmg=file:///Install%20OS%20X%20Mavericks.app/Contents/SharedSupport/InstallESD.dmg root-dmg=file:///BaseSystem.dmg";
	}
Oct 26 21:15:33 iMac27.local Install OS X Mavericks[1431]: Done generating the com.apple.Boot.plist file
Oct 26 21:15:33 iMac27.local Install OS X Mavericks[1431]: Blessing /Volumes/Tmp -- /Volumes/Tmp/.IABootFiles
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: Blessing Mount Point:/Volumes/Tmp Folder:/Volumes/Tmp/.IABootFiles plist:com.apple.Boot.plist
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: ***************************** Setting Startup Disk *****************************
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: ******           Path: /Volumes/Tmp
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: ******     Boot Plist: /Volumes/Tmp/.IABootFiles/com.apple.Boot.plist
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: /usr/sbin/bless -setBoot -folder /Volumes/Tmp/.IABootFiles -bootefi /Volumes/Tmp/.IABootFiles/boot.efi -options config="\.IABootFiles\com.apple.Boot" -label OS X Installer
Oct 26 21:15:33 iMac27.local InstallAssistantTool[1440]: Bless on /Volumes/Tmp succeeded


このログから、”Tmp” ボリューム配下に “.IABootFiles” という隠しディレクトリを作成し、そこにOSXのミニカーネルを作りEFIのブートローダー “boot.efi” を置き、テンポラリなOSX起動システムを作成しています.blessコマンドで起動ディスクを切り替えています.

iMac27:~ yasuaki$ ls -la /volumes/Tmp
total 72108048
drwxrwxr-x  38 yasuaki  staff         1360 Oct 26 21:15 .
drwxrwxrwt@ 16 root     admin          544 Oct 26 21:27 ..
-rw-r--r--@  1 yasuaki  staff        12292 Oct 26 21:08 .DS_Store
d--x--x--x   7 yasuaki  staff          238 Oct 26 19:30 .DocumentRevisions-V100
drwx------   8 yasuaki  staff          272 Oct 26 21:15 .IABootFiles
-rw-r--r--@  1 yasuaki  staff          305 Oct 26 21:15 .IAProductInfo
drwx------   5 yasuaki  staff          170 Mar 30  2013 .Spotlight-V100
drwxrwxrwt@  4 yasuaki  staff          136 Jul  6 17:03 .TemporaryItems
d-wx-wx-wt   5 yasuaki  staff          170 Oct 26 21:23 .Trashes
-rw-r--r--   1 yasuaki  staff          303 Mar 31  2013 .apdisk
-rw-r--r--@  1 yasuaki  staff            0 Apr 28 10:51 .com.apple.timemachine.donotpresent
-rw-r--r--   1 yasuaki  staff            0 Mar 31  2013 .com.apple.timemachine.supported
drwx------   5 yasuaki  staff          170 Oct 26 21:15 .fseventsd
drwxr-xr-x   7 yasuaki  staff          238 Oct 26 15:00 ADC
drwxr-xr-x   4 yasuaki  staff          136 Apr 11  2013 AdobeCS6US
-rw-r--r--@  1 yasuaki  staff      4400361 Dec 17  2012 AudirvanaPlus_1.4.1.dmg
-rw-rw-rw-@  1 yasuaki  staff     13202490 Dec 18  2012 BBEdit_10.5.1.dmg
 ...
 
iMac27:~ yasuaki$ ls -la /volumes/Tmp/.IABootFiles
total 33168
drwx------   8 yasuaki  staff       272 Oct 26 21:15 .
drwxrwxr-x  38 yasuaki  staff      1360 Oct 26 21:15 ..
-rw-r--r--@  1 yasuaki  staff       785 Oct 26 21:15 .disk_label
-rw-r--r--@  1 yasuaki  staff      3125 Oct 26 21:15 .disk_label_2x
-rw-r--r--@  1 yasuaki  staff      4308 Aug 25 10:40 PlatformSupport.plist
-rw-r--r--@  1 yasuaki  staff    505400 Aug 25 14:31 boot.efi
-rw-r--r--@  1 yasuaki  staff       425 Oct 26 21:15 com.apple.Boot.plist
-rw-r--r--@  1 yasuaki  staff  16451177 Sep 30 07:37 kernelcache


Mavericksインストールメディアの作成方法


Mavericksインストーラアプリのコンテンツの中に “createinstallmedia” というコマンドが用意されています.このコマンドを起動することでMavericksインストール用の起動可能なメディアを作成することができます.


Create Install Media
インストーラアプリのパッケージ中に”createinstallmedia” というコマンドが用意されている


この”createinstallmedia”の使い方は、パラメータを何も指定せずに起動することで “Usage” を表示されることができる.


iMac27:~ yasuaki$ /Volumes/Tmp/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia
Usage: createinstallmedia --volume  --applicationpath  [--force]

Arguments--volume, A path to a volume that can be unmounted and erased to create the install media.
--applicationpath, A path to copy of the OS installer application to create the bootable media from.
--nointeraction, Erase the disk pointed to by volume without prompting for confirmation.

Example: createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install OS X Mavericks.app

This tool must be run as root.


ここでは予め16GBのUSBメモリを “OSXMavericks” というボリューム名で作成(GPT形式)し、マウントしてあります.–volume パラメータでこのUSBメモリを出力先に指定し、コマンドを実行します.(バックスラッシュは空白をエスケープするためのメタキャラクタ)

iMac27:~ root# /Volumes/Tmp/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/OSXMavericks --applicationpath /Volumes/Tmp/Install\ OS\ X\ Mavericks.app
Ready to start.
To continue we need to erase the disk at /Volumes/OSXMavericks.
If you wish to continue type (Y) then press return: y
Erasing Disk: 0%... 10%... 20%...100%...
Copying installer files to disk...
Copy complete.
Making disk bootable...
Copying boot files...
Copy complete.
Done.



USB Media
USB Bootable Disk 起動可能なMavericksのインストールメディアが完成




iMac27:~ yasuaki$ cd "/Volumes/Install OS X Mavericks"
iMac27:Install OS X Mavericks yasuaki$ ls -la
total 32
drwxrwxr-x  15 yasuaki  staff   578 Oct 26 22:16 .
drwxrwxrwt@ 11 root     admin   374 Oct 30 22:45 ..
-rw-r--r--@  1 yasuaki  staff  6148 Oct 26 22:10 .DS_Store
drwxr-xr-x   8 yasuaki  staff   272 Oct 26 22:16 .IABootFiles
-r--r--r--@  2 yasuaki  staff   475 Sep 30 07:12 .IABootFilesSystemVersion.plist
-rw-r--r--   1 yasuaki  staff   253 Oct 26 22:16 .IAPhysicalMedia
drwx------   5 yasuaki  staff   170 Oct 26 22:09 .Spotlight-V100
d-wx-wx-wt   2 yasuaki  staff    68 Oct 26 22:09 .Trashes
drwx------  11 yasuaki  staff   374 Oct 30 22:19 .fseventsd
drwxr-xr-x   3 yasuaki  staff   102 Oct 26 13:38 Install OS X Mavericks.app
drwxr-xr-x@  3 yasuaki  staff   102 Oct 26 22:16 Library
drwxr-xr-x@  3 yasuaki  staff   102 Oct 26 22:16 System
drwxr-xr-x@  3 yasuaki  staff   102 Oct 26 22:16 usr
iMac27:Install OS X Mavericks yasuaki$ ls -la .IABootFiles
total 33176
drwxr-xr-x   8 yasuaki  staff       272 Oct 26 22:16 .
drwxrwxr-x  15 yasuaki  staff       578 Oct 26 22:16 ..
-rw-r--r--@  1 yasuaki  staff      1241 Oct 26 22:16 .disk_label
-rw-r--r--@  1 yasuaki  staff      4949 Oct 26 22:16 .disk_label_2x
-rw-r--r--@  2 yasuaki  staff      4308 Aug 25 10:40 PlatformSupport.plist
-rw-r--r--@  3 yasuaki  staff    505400 Aug 25 14:31 boot.efi
-rw-r--r--   2 yasuaki  staff       425 Oct 26 22:16 com.apple.Boot.plist
-rw-r--r--@  2 yasuaki  staff  16451177 Sep 30 07:37 kernelcache
i

【補足】”Disk Utility”のデバッグメニューを表示させる方法


GUIベースの “Disk Utility” は標準状態では隠しパーティションが表示されませんが、隠しパーティションが表示されないと複雑なパーティション操作は行えません.コマンドラインベースで全て操作する場合は不要ですが、GUIベースの “Disk Utility.app” を使いこなすには隠しパーティションが表示されるように設定を変更する必要があります.


コマンドライン上で 下記の”default” コマンドを入力すれば “Disk Utility.app” の画面に隠しパーティションが表示されるようになります.


defaults write com.apple.DiskUtility DUShowEveryPartition -boolean YES


これ以外に、”Disk Utility.app”のメニューに “Debug” メニューを追加し、”Debug” メニューの項目を利用して隠しパーティションを表示させることもできます.


defaults write com.apple.DiskUtility DUDebugMenuEnabled -boolean YES


“Show every partition” をチェックすれば隠しパーティションが見えるようになります.


DiskUtil Debug ON
Disk UtilityにDebugメニューを追加して、隠しパーティションを表示させたところ


Local Search

Calendar

November 2018
S M T W T F S
« Oct    
 123
45678910
11121314151617
18192021222324
252627282930  
  • Blogroll

  • Meta