Setting up a OS X netboot server is fairly easy. ... Thanks for the pointer. 4) see attachment Looks like the kernel is unable to find the nic based on this output. I agree. The ke...
See more...
Setting up a OS X netboot server is fairly easy. ... Thanks for the pointer. 4) see attachment Looks like the kernel is unable to find the nic based on this output. I agree. The key thing in the successful output are these lines: AppleIntel8254XEthernet: Ethernet address 00:0c:29:4a:58:71 Got boot device = IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/P2P0@11/IOPCI2PCIBridge/S3F0@2/AppleIntel8254XEthernet/IOEthernetInterface BSD root: en0 netboot: using network interface 'en0' It shows that in the successful case (Fusion 3), the AppleIntel8254XEthernet driver (which drives the virtual e1000 NIC) loads, whereas in the failing case (Fusion 3.0.1) it does not. Based on this valuable information, I strongly suspect the issue is with #1, i.e. our virtual EFI change. Let's check this theory: o Install a fresh Fusion 3.0.1 o Download the EFI ROMs from Fusion 3 which I have made available to you at: http://ftpsite.vmware.com/download/bgarner/EFI32.ROM http://ftpsite.vmware.com/download/bgarner/EFI64.ROM o Modify your VM to use the downloaded EFI ROMs (from Fusion 3) instead of the default ones (from Fusion 3.0.1), by adding these lines to your .vmx file: efi32.filename = "" o Power on the VM If I'm correct, then this time NetBoot will work. So what did we change in our virtual EFI? In the new EFI, we improved boot time by allowing the Apple bootloader (boot.efi) to load the single .mkext file (kernel + all kexts in one file) whereas in the old EFI the Apple bootloader was loading all these component as individual files. So I suspect the following: on the small filesystem that you initially boot in your VM, the folder /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AppleIntel8254XEthernet.kext (which is being picked up by the bootloader running on top of the old EFI) exists, but for some reason it is not part of the file /System/Library/Extensions.mkext (which is being picked up by the bootloader running on top of the new EFI). You can check the contents of an .mkext file with the mkextunpack utility. Interestingly, on my physical MacPro2,1 here, the kextstat shows that the AppleIntel8254XEthernet.kext driver is loaded, but for some reason it is not part of /System/Library/Extensions.mkext either. Forcing a rebuild of that file by touching /System/Library/Extensions does not help. I suspect this is because in the AppleIntel8254XEthernet.kext, the Info.plist has its key OSBundleRequired set to Network-Root instead of Root, and to rebuild the .mkext cache, the system calls kextcache with the -l option (local disk boot) only. So I see 2 possible ways to solve this issue, please let me know if they work for you (don't forget to re-install Fusion 3.0.1 and remove the 2 lines from your .vmx file before you test them!): 1) Change /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AppleIntel8254XEthernet.kext/Contents/Info.plist so it says Root instead of Network-Root. Check that the system has re-built /System/Library/Extensions.mkext and reboot the VM. This will only work until a system update resets the content of the Info.plist file (maybe that never happens in your case). 2) Re-build /System/Library/Extensions.mkext yourself, but pass the -n option (network boot) on top of the -l option to kextcache, then reboot the VM. This will only work until the system re-builds /System/Library/Extensions.mkext (maybe that never happens in your case). To conclude: If, as I believe, you are responsible for generating the .mkext file in this kind of setup, then I believe that on a real Mac, you would need the -n option as well for this setup to work. So far (Fusion 2 and Fusion 3), our virtualization ignored this .mkext file to boot Mac OS, so you have been lucky it worked without the -n option. But as Fusion 3.0.1 improved and now honors the .mkext file, you need the -n option. I hope it helps, -- hpreg