Booting four OSs proved to be difficult because XP, Vista, and OSX aren't bootable by GRUB from logical partitions. OSX though, can install to a logical partition so the trick was just figuring out how to boot it. That, and some additional research into the quirks between OSs and their installers.
Here are the instructions I wrote for myself but since it wasn't an obvious process I thought I'd share the knowledge.
This file contains instructions (in ODT) and additional files to get everything working.
http://3dfolio.com/files/Quad-boot_instructions.zip
How to boot to gparted (Gnome Partition Editor)
You can download a bootable iso for gparted here:
http://gparted.sourceforge.net/download.php
Important things to know before installing OSX:
The tricky part to watch out for is that OSX rewrites the partition tables of the drive it's installed on. The problem that this creates is that if any Windows partition is out of order, for example:
OSX will rewrite the partition table so that each partition is now in chronological order like this:Code: Select all
/dev/sda3 - /boot /dev/sda1 - XP /dev/sda2 - Vista /dev/sda4 |- /dev/sda7 - Macintosh |- /dev/sda5 - / |- /dev/sda6 - linux-swap
When this happens if you try to boot XP or Vista it will attempt to load itself from the wrong partition (XP will try to load from /dev/sda1 when it is actually now at /dev/sda2). Vista can recover from this by using the emergency repair console (bootrec.exe and fixboot.exe) but it is impossible to repair XP because the installation CD is unbootable when a linux partition is present on the system (it hangs on boot).Code: Select all
/dev/sda1 - /boot /dev/sda2 - XP /dev/sda3 - Vista /dev/sda4 |- /dev/sda5 - Macintosh |- /dev/sda6 - / |- /dev/sda7 - linux-swap
Setup your Windows XP installation disk:
If you plan on using a sata drive or a disk connected to a raid controller you must slipstream the appropriate drivers to your XP CD (nLite makes this easy).
Step 1 – Install Windows XP:
To follow these instructions it's expected that the drive bring installed to has no pre-existing partitions.
The Windows XP installation CD will not boot with Linux (ext3) partitions present on the sysem or even Linux-flagged unpartitioned space (with gparted). It will boot with an OSX hfs+ patition present but in order to get the OSX partition on an extended partition in chronological order partitions would need to be setup with gparted, which has already been established as not an option.
Boot to the Windows XP installation CD and partition 200mb (for GRUB /boot), 20GB for XP, and 20GB for Vista. Reboot into gparted and hide the first partition (we don't want XP to put C:\ here!). Boot back into the XP cd and install C:\ on the first 20GB partition after the boot partition.
When XP is done installing boot into it and format the second 20GB partition NTFS for Vista using XP's disk manager. The NTFS filesystem used by gparted is not compatible with Vista. NTFS is forwards compatible but not completely backwards compatible. If you format this partition with Vista and boot into XP it will think the new meta data is a file system error and try to correct it, creating problems for Vista. Vista will be happy to run on XP's version of NTFS if you format it ahead of time.
It's also important to not format using the Vista CD because it uses a new partitioning method that is not yet standardized and can cause problems for other partitions that already exist around it.
Create an extended partition in the remaining unpartitioned space using XP's disk manager. The reason we make the partition in XP is that if we ever need to reinstall XP or boot to the emergency console then we will only need to delete the Linux partitions.
Boot into gparted and extend the new extended partition to the length of the drive and create a new 20GB hfs+ logical partition.
Step 2 – Installing OSX:
Disclainer: You are expected to purchase a license for OSX prior to using any OSx86 distro.
Boot to an OSx86 install disk (iDeneb 10.5.5 is a good distro) and format the hfs+ partition (I prefer hfs+ journaled). Continue to the next screen and choose Customize to choose the correct packages for your hardware. OSx86 distros will not detect them for you. Install OSX.
OSX somehow manages to set its logical partition as active (?) so when you attempt to boot without the CD you will get a boot1 or boot0 error (OSX can't boot to itself on a logical partition). Confirm that OSX has installed properly by booting from the iDeneb installation CD and using its bootloader to boot OSX.
If everything is working properly in OSX boot into gparted and set the XP partition as active to test that it still boots. If it does not then you will have to start over because your partition table was out-of-order prior to installing OSX.
Step 3 – Installing Vista:
Boot to gparted and set the Vista partition as the active partition. This allows Vista to recognize this as a valid installation partition and also instructs if to use it as the C:\ partition. Boot to the Vista CD and choose the NTFS-formatted 20GB partition (formatted in XP) as the install disk. Installation is pretty straightforward.
Step 4 – Installing Linux:
Boot to your Linux distro (Fedora is used in this example). When you get to the partition screen choose the option to customize your own layout. Set the 200MB partition as the /boot partition and create a new 20GB logical partition after OSX for /. Create an additional 4GB partition and format it as linux-swap. After the partitions have been formatted ** need more info about setting /boot as boot partition ** Complete the installation.
If GRUB does not boot after Linux has been installed boot into gparted and set the 200MB /boot partition as active. Boot into GRUB and then into your Linux distro.
Once you're logged in open the console.
Type:
'su' to obtain root privileges and sudo to run gedit with them. After your Linux boot entry add the following to your GRUB menu.lst:Code: Select all
su sudo gedit /boot/grub/menu.lst
The way GRUB works is it numbers all drives (sata, scsi, ide) as 'hd' with two numbers after it. The first number is the drive number and the second is the partition starting with 0, by constrast fdisk starts with 1 so you will need to subtract 1 from each entry for GRUB.Code: Select all
title Microsoft Windows XP rootnoverify (hd0,1) chainloader +1 title Microsoft Windows Vista rootnoverify (hd0,2) chainloader +1
You can confirm this in the console by typing:
My output is:Code: Select all
su /sbin/fdisk -l
Getting OSX to boot is a little more tricky. GRUB can't boot OSX directly and it can't chainload it because it's on a logical partition.Code: Select all
Device Boot Start End Blocks Id System /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 2575 20482875 7 HPFS/NTFS /dev/sda3 2576 5125 20482875 7 HPFS/NTFS /dev/sda4 5126 30401 203029470 5 Extended /dev/sda5 5126 7675 20482843+ af Unknown /dev/sda6 7676 10225 20482843+ 83 Linux /dev/sda7 10226 10735 4096543+ 82 Linux swap / Solaris
Luckily someone has made a very nice boot loader that works perfectly.
http://forum.insanelymac.com/index.php?showtopic=85508
http://netkas.org/?cat=5
Simply copy boot_v9 to your GRUB folder and add the following entry to your GRUB menu.lst:
Make sure that GRUB mounts the boot partition so that it can load the kernel boot file ((hd0,0) in this case).Code: Select all
title Apple Macintosh OSX 10.5.5 root (hd0,0) kernel /grub/boot_v9
Other notes:
The most difficult part of getting this to work is booting from the XP CD. To make things fairly future-proof I suggest installing drivers, service packs, and XP updates to XP and copying the partition at the end of the extended partition before installing applications. This way you can copy it back (paste onto the partition, don't delete the old one or it will ruin the partition numeration!) without needing to format.
Don't ever add or change the order of any partitions before the OSX one if you ever plan to reinstall it. It should be safe to resize the partitions.
Touchpad scrolling in OSX:
Instructions here:
http://forum.insanelymac.com/index.php?showtopic=88811
Abridged synposis -
1. Backup "/System/Library/Extensions/ApplePS2Controller.kext" incase anything goes wrong
2. Download and extract the full install package:
( See included files )
3. Run ALPS Glidepad Driver.pkg
4. After completing the install, it will ask you to reboot, do so. After rebooting you will get an error saying FFScroll is needs permission to run. Click "Fix" and reboot again.
5. Copy com.apple.driver.ApplePS2Trackpad.plist (found in the install package) to: /Users/[Your Username]/Library/Preferences AND /Library/Preferences. For some reason, if you do not place the plist file in both locations, FFScroll will not load it.
6. Open terminal and type:
sudo killall -9 FFScrollDaemon
sudo /usr/local/bin/FFScrollDaemon
These commands will kill the FFScroll Process and restart it. You must do this everytime you edit your Apple2PS2Trackpade.plist.
7. Go into System Preferences, then FFScroll, you should see that 2-finger scrolling is enabled. You can tweak its settings here.
8. Go back to System Preferences, go to keyboard & mouse, click the "Trackpad" tab. You can adjust the touchpad sensitivity here if you need to.
9. Copy the FFScrollDaemon directory from the install package to /Library/StartupItems. Enter your password to authenticate. This will allow FFScrollDaemon to startup automatically when you start OSX. The next time you reboot, it will ask you to fix it, click Fix and then reboot your computer.
My settings for apple.driver.ApplePS2Trackpad.plist:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ALPSPreferences</key> <dict> <key>Hotspots</key> <array/> <key>ScrollAreas</key> <array/> <key>TwoFinger</key> <dict> <key>circularScrollingEnabled</key> <false/> <key>circularScrollingInvert</key> <false/> <key>circularScrollingRate</key> <integer>2</integer> <key>circularScrollingThreshold</key> <integer>2</integer> <key>horizontalScrollingEnabled</key> <true/> <key>horizontalScrollingInvert</key> <false/> <key>horizontalScrollingRate</key> <integer>14</integer> <key>horizontalScrollingThreshold</key> <integer>0</integer> <key>scrollDominantOnly</key> <true/> <key>verticalScrollingEnabled</key> <true/> <key>verticalScrollingInvert</key> <false/> <key>verticalScrollingRate</key> <integer>13</integer> <key>verticalScrollingThreshold</key> <integer>0</integer> <key>zAcceptThreshold</key> <integer>90</integer> <key>zAcceptsToStart</key> <integer>7</integer> <key>zArraySize</key> <integer>8</integer> <key>zDeclineThreshold</key> <integer>10</integer> <key>zDeclinesToStop</key> <integer>8</integer> </dict> <key>calibrateMode</key> <false/> <key>doubleTapTolerance</key> <integer>100</integer> <key>hasHotspots</key> <true/> <key>hasScrollAreas</key> <true/> <key>maxTapDragRevTime</key> <integer>500000000</integer> <key>maxTapDragTime</key> <integer>250000000</integer> <key>maxTapDuration</key> <integer>80000000</integer> <key>maxX</key> <integer>1</integer> <key>maxY</key> <integer>1</integer> <key>minDragAssumedTime</key> <integer>500000000</integer> <key>minTapDragTime</key> <integer>25000000</integer> <key>minTapDuration</key> <integer>25000000</integer> <key>minX</key> <integer>1000</integer> <key>minY</key> <integer>1000</integer> <key>physicalButton1Action</key> <integer>1</integer> <key>physicalButton2Action</key> <integer>2</integer> <key>physicalButtonBothAction</key> <integer>0</integer> <key>physicalButtonDragAction</key> <integer>1</integer> <key>scaleTrackpadSpeed</key> <true/> <key>speedScale</key> <integer>150</integer> <key>tapTolerance</key> <integer>10</integer> </dict> <key>SynapticsPreferences</key> <dict> <key>Hotspots</key> <array/> <key>ScrollAreas</key> <array/> <key>TwoFinger</key> <dict> <key>circularScrollingEnabled</key> <false/> <key>circularScrollingInvert</key> <false/> <key>circularScrollingRate</key> <integer>2</integer> <key>circularScrollingThreshold</key> <integer>2</integer> <key>horizontalScrollingEnabled</key> <true/> <key>horizontalScrollingInvert</key> <false/> <key>horizontalScrollingRate</key> <integer>14</integer> <key>horizontalScrollingThreshold</key> <integer>0</integer> <key>scrollDominantOnly</key> <true/> <key>verticalScrollingEnabled</key> <true/> <key>verticalScrollingInvert</key> <false/> <key>verticalScrollingRate</key> <integer>10</integer> <key>verticalScrollingThreshold</key> <integer>0</integer> <key>zAcceptThreshold</key> <integer>80</integer> <key>zAcceptsToStart</key> <integer>8</integer> <key>zArraySize</key> <integer>8</integer> <key>zDeclineThreshold</key> <integer>10</integer> <key>zDeclinesToStop</key> <integer>8</integer> </dict> <key>calibrateMode</key> <false/> <key>doubleTapTolerance</key> <integer>100</integer> <key>hasHotspots</key> <true/> <key>hasScrollAreas</key> <true/> <key>maxTapDragRevTime</key> <integer>500000000</integer> <key>maxTapDragTime</key> <integer>250000000</integer> <key>maxTapDuration</key> <integer>80000000</integer> <key>maxX</key> <integer>1</integer> <key>maxY</key> <integer>1</integer> <key>minDragAssumedTime</key> <integer>500000000</integer> <key>minTapDragTime</key> <integer>25000000</integer> <key>minTapDuration</key> <integer>25000000</integer> <key>minX</key> <integer>1000</integer> <key>minY</key> <integer>1000</integer> <key>physicalButton1Action</key> <integer>1</integer> <key>physicalButton2Action</key> <integer>2</integer> <key>physicalButtonBothAction</key> <integer>0</integer> <key>physicalButtonDragAction</key> <integer>1</integer> <key>scaleTrackpadSpeed</key> <true/> <key>speedScale</key> <integer>400</integer> <key>tapTolerance</key> <integer>125</integer> </dict> </dict> </plist>