今天试着用 Win7 + VirtualBox 4.3 + MacOSx 10.6 + hdiutil + Mavericks.app.dmg 纯手工制作用于 VirtualBox 虚拟机安装的 MacOSx 10.9 Mavericks ISO 安装盘镜像文件,本文中未使用github上那个基于 ruby 的 InstallESD 制作工具,也未用变色龙等启动工具,就只用到下载的 Mavericks.app.dmg 安装包、hdiutil 和几个 kexts 等核心文件来制作虚拟机安装盘 ISO/DMG 镜像。
由于纯手工安装 mavericks 的过程相当折腾,没有一两斤耐心,估计很难坚持到最后。不过,这一通折腾下来,相信自己对 MacOSX 系统的了解一定比只用鼠标乱戳更深入一些。
为了理清思路,折腾过程被人为分成了零~五共六个阶段。另外注意:试验电脑为联想 Thinkpad (Intel 芯片),家里没有基于 AMD 芯片的电脑,所以本文中操作步骤还没有在 AMD 电脑上作测试,结果亦未知。
下图为安装后虚拟机截屏:
## 第零阶段:准备工作
首先将从 apple.com 或一些云网盘下载得到的 Mavericks 安装包文件 mavericks.app.dmg (约5GB) 放在一个 Win7 目录中(假设为 F:\downloads),不必将其复制进到 MacOSX 虚拟机中,以免使虚拟机 VDI 占用过大磁盘空间;
将此目录在 Win7 中共享出来,权限设置为当前用户拥有“读写”权限,稍后可以在 MacOSX 中以当前用户的身份连接到该共享目录;然后打开 VirtualBox,并启动 MacOSX 10.6,连接到这个 Win7 共享目录;具体方法是在 Finder 中选择“前往 - 连接到服务器”,输入 Win7 系统 IP 或主机名称,象这样:smb://t400s 或 smb://192.168.1.13,然后提示输入你在 Win7 中的登录帐户和密码;连接共享目录成功后,你的 Win7 目录就会出现在 /Volumes 目录下面,根据上面假设应该为:/Volumes/downloads
注意:要想 MacOSX 成功连接 Win7 共享目录,除了在 Win7 中正确设置共享帐户/权限等,还必须在 [MacOSX 控制面板/共享] 中勾选 [文件共享] 选项;在 Win7 中设置共享时,记住一定要勾选中“写”权限,因为下面命令会利用宿主机器的硬盘空间,而不必复制到虚拟机VDI中,前面说了,是为了避免虚拟机 VDI 文件搞的过大。
还有一点切记:在 MacOSx 中操作这个共享目录过程中,千万不要到 Win7 中再对这个共享目录作任何操作,哪怕是浏览都不可,否则极易导致 Win7 + VirtualBox 4.x 访问该共享目录出错,并且此问题似乎来自 netbios 核心驱动程序,挂了就不可修复,重启 VM 不管用,除非重启 Win7 再来。
下面假设挂载 Win7 共享目录一切顺利过关,然后进入该目录,下面所有命令均以此为当前目录;
# cd /Volumes/downloads# ls -trlF (列一下目录看是否正常)
注意:当前目录 /Volumes/downloads 所在磁盘要留足够空间,最好留够20GB空闲磁盘空间,下面操作中涉及的 dmg/iso 文件都是尺寸在 6GB 左右的大块头儿。
## 第一阶段:初步制作 mavericks.sparseimage 启动盘镜像
挂载 MacOSX 10.9 下载包 mavericks.app.dmg 到 MacOSX 虚拟机的文件系统;
# hdiutil attach ./mavericks.app.dmg -noverify -nobrowse -mountpoint /Volumes/app
再挂载 mavericks.app.dmg 内部的 InstallESD.dmg (所在目录:/Volumes/app/Install\ OS\ X\ Mavericks.app/Contents/SharedSupport/)
# hdiutil attach /Volumes/app/Install\ OS\ X\ Mavericks.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/iesd
然后将 InstallESD.dmg 中的 BaseSystem.dmg 转换成 UDSP 格式的 dmg,大概2GB左右,耗时约5分钟;
# hdiutil convert /Volumes/iesd/BaseSystem.dmg -format UDSP -o ./mav.sparseimage
将转换得到的 mav.spareimage 空间扩至 8GB,以便稍后添加 packages 等内容;
# hdiutil resize -size 8g ./mav.sparseimage
再将转换得到的 mav.spareimage 挂载到文件系统,以便复制 packages 包文件进去,并对其内容进行适当调整;
# hdiutil attach ./mav.sparseimage -noverify -nobrowse -mountpoint /Volumes/mav
先删除 /Volumes/mav/System/Installation/Packages 文件,这只是一个符号连接,直接删除,稍后会复制进真正的 Packages 内容;
# rm /Volumes/mav/System/Installation/Packages
复制进真正的 Packages 内容,大概需要10多分钟;
# cp -rp /Volumes/iesd/Packages /Volumes/mav/System/Installation/
复制完成后,这个 mav.sparseimage 大概就超过5GB了,为了制作 ISO,需调整一下其尺寸;
# hdiutil detach /Volumes/mav (调整尺寸前必须先卸载 DMG,否则会提示资源暂时不可用)
# hdiutil resize -limits ./mav.sparseimage (先查询一下最小尺寸)
这个命令会显示出三个数字,象这样:Num1 Num2 Num3,这里只需要记下第一个数字 Num1,然后运行下面命令;
# hdiutil resize -size Num1b ./mav.sparseimage (其中:将Num1换成上面显示的第一个数字,注意后面加一个小写‘b’字母,其他照写)
完成以上步骤,基本就可以转换成 ISO 安装盘了,可用来安装到 macbook,但在非 mac 硬件或虚拟机中还无法使用;
## 第二阶段:调整驱动程序和核心模块
以下步骤将调整这个安装包内容,为了使其能安装到非 mac 硬件或虚拟机中;针对不同硬件,以下步骤全盘照搬也许不能成功启动/安装,请根据硬件情况作调整;
首先需要准备一些第三方核心和驱动程序文件,可从网络上下载;我是从这里下载的:http://www.iferrari.nl/downloads/install109.zip 其中包含有 mach_kernel, kexts 等文件,下面步骤中主要用到其中的 mach_kernel 和 kexts 驱动程序文件。
由于第一阶段中,在调整 DMG 尺寸时将其从文件系统卸载了,现在我们需要将其重新挂载到文件系统,以便进行修改;
# hdiutil attach ./mav.sparseimage -noverify -nobrowse -mountpoint /Volumes/mav
挂载成功后,将 mach_kernel 文件复制到 /Volumes/mav 中,即安装盘镜像 DMG 文件的根目录中;
# cp -rp ./Install109/Kernel/mach_kernel /Volumes/mav
再将以下三个驱动程序复制到安装包 Extensions 目录中;
ElliottForceLegacyRTC.kext
FakeSMC.kext
NullCPUPowerManagement.kext
# cp -rp ./Install109/Kexts/*.kext /Volumes/mav/System/Library/Extensions
# chmod -R 0755 /Volumes/mav/System/Library/Extensions (可能需要设置一下目录/文件属性)
为了方便后续操作,除了将 kexts 驱动程序复制到 /System/Library/Extensions 目录中,我们还可以在此 ISO 安装盘中创建一个 /Backup 目录,用于保存这些第三方驱动和工具软件,稍后会用到;
# mkdir /Volumes/mav/Backup
# cp -rp ./Install109/* /Volumes/mav/Backup
做完这一步,基本就可以转换生成 ISO 用于虚拟机中启动安装了。网上还看到有一些教程,包括改动 OSInstall.pkg 等内容,但那种情况似乎是要求在同一块硬盘上同时安装多个系统 windows / macosx。若只安装于 VirtualBox 似乎没必要折腾它。
这里还考虑到一个具体情况,Mavericks 安装要求电脑具备至少2GiB内存,而目前一般电脑多配置4GB内存,运行 Win7 + VirtualBox + MacOSX 比较拮据;若为虚拟机分配 2GB 内存,宿主 Win7 系统运行起来就显得有点力不从心了。其实 Mavericks 安装程序有 1GB 内存就基本可以运行了,不知为何 Mavericks 安装程序默认要求至少 2GB 内存;考虑到这种情况,为了减少安装时这个内存最小需求,还得动手在上面安装包中改一处设置;当然,如果电脑中内存不是问题就不必要改这个设置了,直接往下跳过这几步即可。为了改这个2GB设置,有点兴师动众,可能需要安装 XCode,需要利用其中一个开发工具:Flat package editor;首先将 /Volumes/mav/System/Installation/Packages/OSInstall.mpkg 复制到桌面或其他某个目录;运行 Flat package editor:
# open /Developer/Utilties/PackageEditor.app (此工具深藏在 XCode 中)
再在该软件中通过菜单打开 Flat package editor,载入复制出来的 OSInstall.mpkg 文件,将其中的 distribution 文件拖出来放到桌面,再用文本编辑器修改其中这一行:
minRam=2048 (改为 1024,表示只要多于1GB内存就能运行 Mavericks 安装程序了)
改好保存,再将其拖回放入 OSInstall.mpkg 包中,并把其中原版 distribution 文件删除,然后将此 OSInstall.mpkg 包复制覆盖到 mav.sparseimage 包的相应目录中;
# cp ~/Desktop/OSInstall.mpkg /Volumes/mav/System/Installation/Packages/
# ls -trlF /Volumes/mav/System/Installation/Packages (确认一下是否更新成功)
至此,安装包制作的准备工作基本就绪,接下来就是发布命令,转换生成 iso 或 dmg 启动盘镜像,此转换过程大约耗时18分;
# hdiutil convert ./mav.sparseimage -format UDTO -o ./mav (由此生成 ./mav.cdr 改名为 ./mav.iso 即可)
或者,
# hdiutil convert ./mav.sparseimage -format UDRO -o ./mav (这将生成 ./mav.dmg 包)
完成以上步骤,就得到一个 6GB 大小的 ISO 或 DMG 文件;这时,可以将当前运行的虚拟机关闭,如果内存不足以再多开一个虚拟机同时运行的话;
如果不关闭此虚拟机进行后续操作,则最好及时将上面挂载的 DMG 和共享目录全部卸载,如下:
# hdiutil detach /Volumes/mav
# hdiutil detach /Volumes/iesd
# hdiutil detach /Volumes/app (iesd, app 这两项卸载顺序不要弄反)
# hdiutil detach /Volumes/downloads (安全卸载共享目录)
## 第三阶段:VirtualBox 中安装 Mavericks
首先在 VirtualBox 4.3.x 中创建一个 Mavericks x64 虚拟机项目,多数默认参数即可,除了以下几项:
Memory 内存 | 最好 1500MB 以上 |
VDI 硬盘 | 加大到 80GB,默认 20GB 太小 |
CD/DVD 光驱 | 挂接到第二阶段中生成的 ISO 或 DMG 文件 |
EFI | 必须启用 |
Network Adapter 网卡 | 可默认用 NAT,也可改为 Bridge adapter,如果有带DHCP路由器,选择后者比较好,LAN中可分配独立的IP地址。 |
Boot order 启动顺序 | 设置为从 CD/DVD 优先启动 |
创建好虚拟机并启动。。。如果启动顺利,此虚拟机会在2~10分钟内进入图形安装界面,显示出多国语种“欢迎”。。。通常,这个启动过程通常会有各种“卡死”,可能会卡死在多个地方,我在此过程中就卡了无数次,通过反复试验上网查资料,最终摸索出上述操作步骤才得以顺利通关,浪费了大量时间,你看上面步骤中动不动就是6GB的大块头儿和原地等待近20分钟的转换/复制!卡死的情况主要有以下一些情况:
Loading kernel cache 卡死
Could not load mach_kernel 卡死
IOHDAFamily triggered rebuild 卡死
current thread: kernel_task 卡死
AppleIntelCPUPowerManagement timed out 卡死
Missing Bluetooth Controller Transport 卡死(可能与蓝牙没关系,可能是下一操作卡死了)
Waiting for DSMOS 卡很久,但最终一般能通过
如果你遭遇不同的卡死情况,可能需要返回第二阶段重新操作,根据情况调整或删除一些驱动程序后,再制作 ISO 安装盘。。。注意:若要禁用某些驱动程序,建议将其暂时移动到安装包 ISO/DMG 内的 /Backup 目录中,而不是直接删除,以备未来不时之需。
如果在 VirtualBox 中顺利启动并进入到图形安装界面,那就基本上宣告成功在望了。这时可作一些初步设置,让安装程序运行完成;注意:其间,在选择安装盘时,最初磁盘分区列表可能为空白,因为虚拟机 VDI 硬盘还没有分区/格式化,你需要进入菜单中的“磁盘工具”,抹掉 VDI 硬盘内容,并设置一个卷标号,这里假设为:Mavericks
这阶段 Mavericks 安装过程实际上大概需要50分钟,尽管画面提示只要23分钟,那很可能是在 macbook 上的估算时间,在VirtualBox中安装时,你的二分钟被折算成了一分钟;## 第四阶段:在 VDI 硬盘中补充安装驱动程序
安装完成后 Mavericks 就会自动重新启动;这时你也许会长舒一口气,以为大功告成,其实不然,这时你禁用光驱并直接从 VDI 硬盘启动将 1000% 无法启动成功;不过,也不要着急,只是还有点问题需要手工处理一下;为了处理这个启动问题,暂时还是从上面制作的安装光盘 ISO 镜像启动,当进入图形安装界面后,不要选择继续安装,而是通过上方菜单直接进入 Shell 终端控制台,我们要对虚拟机 VDI 硬盘中驱动程序进行补充;
经过上述安装后无法启动的原因是我们在 ISO 中加入的 kexts 驱动程序没有被正确安装到 VDI 硬盘 /System/Library/Extensions 目录中,所以,我们需要再次手工安装它们;
由于 Mavericks 安装程序默认按只读方式挂载了 VDI 虚拟硬盘,所以得先卸载掉,再重新挂载为读/写模式,命令如下:
# umount /Volumes/Mevericks (先卸下只读盘,Mevericks是我们在上面安装时格式化 VDI 硬盘时设置的名称)
# hdiutil attach /dev/disk0s2 -mountpoint /Volumes/mnt
(用mount -t hfs+-o rw /dev/disk0s2 挂载失败,提示:no such file or directory,而/etc/fstab又为只读无法编辑,所幸换用 hdiutil 挂载,成功!)
# cp -rp /Backup/Kexts/ElliottForceLegacyRTC.kext /Volumes/mnt/System/Library/Extensions
# cp -rp /Backup/Kexts/FakeSMC.kext /Volumes/mnt/System/Library/Extensions
# cp -rp /Backup/Kexts/NullCPUPowerManagement.kext /Volumes/mnt/System/Library/Extensions
(安装这三个驱动程序,其他几个暂时不要安装进去;这里就用到了上面早有预谋的 /Backup 目录和备份内容,而不必又抓狂去挂载U盘啥的)
# chmod -R 0755 /Volumes/mnt/System/Library/Extensions
# chown -R root:wheel /Volumes/mnt/System/Library/Extensions (更正文件目录属性)
# hdiutil detach /Volumes/mnt (完成后立即卸下虚拟机 VDI 硬盘)
操作成功后,直接关机,然后在 Virtualbox 中将 iso 光驱卸下,或者更改启动顺序为从 VDI 硬盘重新启动。。。如果一切顺利,很快就能启动进入 MacOSX 10.9 了。。。
这一阶段的操作,也可以选择将此虚拟机 VDI 硬盘临时挂载到第一阶段中用于制作 ISO 镜像文件的那个 MacOSX 虚拟机中,进行以上操作可能会更简便。
## 第五阶段:调整 MacOSX 设置
进入 MacOSX 10.9后,最好先打开控制面板,在节能器中将节能选项全部关闭,以免过一会儿不用,虚拟机自动进入节能导致无法唤醒。
还有一点,当 Reboot 时一般会在 "Waiting for DSMOS" 卡上好一阵子才能过关,有人说用这个命令:
# sudo chown root:wheel /
可解决;试了一下,似乎有效,通关卡的时间有所减少 :)
注意:按上述步骤安装出来的 MacOSX 10.9 在 VirtualBox 4.3.6 中运行没有声音,声卡驱动程序的安装步骤有待进一步研究。。。
默认安装后,屏幕尺寸为 1024*768,为了加大屏幕尺寸,最简单的方法是添加以下设置到虚拟机目录中的 mavericks.vbox 文件中:
<ExtraDataItem name="VBoxInternal2/EfiGopMode" value="4"/>
其中“4”表示:1440×900
0 – 640×480
1 – 800×600
2 – 1024×768
3 – 1280×1024
4 – 1440×900
关于virtualbox设置,可以参考 https://www.virtualbox.org/manual/ch03.html
本章就到此为止,以上就是本篇所有内容,欢迎大家交流。
最后还是拉票阶段:http://vote.blog.csdn.net/blogstaritem/blogstar2013/yorhomwang ,支持我的朋友不妨投我一票吧~
----------------------------------------------------------------
欢迎大家转载我的文章。
转载请注明:转自Yorhom's Game Box
http://blog.csdn.net/yorhomwang
欢迎继续关注我的博客