In a previous post, I talked a lot about the hardware that runs my development PC. Getting that all set up and going was only half the battle, though. In this post, I’ll be talking about how I configured up my dual OS development environment to take advantage of the strengths of my hardware. There’s a lot to cover, so this is going to be an epic and totally geeky post. If that’s your thing, great!
OS Choice and Setup
As discussed in the hardware synopsis, I purchased four hard drives. Three of the hard drives were intended as OS and application drives and the fourth for backups and shared storage. The first thing I had to do upon assembly was install my operating systems. The following are what I went with:
- Windows 7 Ultimate
- Windows 8 Consumer Preview
- Ubuntu Linux 11.10
I installed Windows 7 first because that is the OS that I’m most familiar with. I won’t bore you with the details of the setup and update process, but it went smoothly and all my hardware was recognized immediately.
Next, I installed Ubuntu on the second SSD. This went fairly smoothly, but I did hit two snags:
- Ubuntu didn’t want to install until I modified the installation directive with
nomodeset
andacpi=off
– I’m still not sure why I had to do that - Getting all three of my monitors to work was a pain in the butt – I had to download and install NVidia’s proprietary drivers and then fiddle with the settings for three days until they would work the way I wanted them to
Eventually I got everything running the way I wanted in Ubuntu (although there is still some weirdness with dragging things across the desktop) and moved on to setting up Windows 8. Again, that was a breeze and everything was recognized immediately. I installed Windows 8 because I love the Metro desktop paradigm and want to develop apps for the platform.
Hard Drive Partitioning
After getting all the OSes I wanted to use setup appropriately, it was time to partition the bigger magnetic drive into the pieces I wanted. There were several things to consider:
- I wanted to make sure both Windows and Ubuntu could read and write to all shared partitions
- I wanted to make sure I used a sizable portion of the shared hard drive for backups
- I wanted to make sure that I could share development and virtual host assets between OSes so I could work on projects from either platform
Making sure that both Windows and Ubuntu could operate on all the partitions meant they had to be formatted as NTFS or FAT. Because FAT limits file sizes to 2 GB, I went with NTFS. Windows uses NTFS natively and it is easy enough to mount NTFS partitions in Linux when you need to, so it is really the only route you can go.
The following image shows what the hard drive partitions look like in Windows Explorer:
Each is labeled so you can probably tell what they’re each used for, but I’ll explain a bit more anyways:
- Backup
- Holds Windows 7/8 and Ubuntu backups
- Windows 7
- Holds the Windows 7 installation and all installed programs
- Windows 8
- Holds the Windows 8 installation and all installed programs
- Sites
- Holds all the active website projects I’m working on (archived ones, too, as they don’t take up that much room)
- MySQL
- Holds all the database files pertaining to MySQL – in Ubuntu and Windows 7 I changed the data directory for the installed MySQL service to point at where this drive is mounted (drive letter or path)
- Other
- This holds miscellaneous other stuff that I want to share between Windows and Ubuntu
The only drive / partition that isn’t shown in that image is the one for Ubuntu. It is just a standard ext4 formatted drive with 17GB of swap space.
This partitioning strategy has held me in good stead so far. I wish I could share Apache virtual host configuration files between Windows and Ubuntu, but that just seemed like it was going to cause way more problems then it would solve.
Installed Applications
I tend to not install a bunch of things on my computer. I install the tools I’m going to use and that’s pretty much it. Here’s what I’ve got installed:
Windows
- Microsoft Office – bookkeeping, long-form documentation, etc.
- Adobe Creative Suite 5.5 – reading and writing Photoshop files, PDFs, etc.
- WAMP Server – all in one web server install so I can do minor development on Windows (mostly frontend stuff so I can match Photoshop comps)
- Sublime Text 2 – general text editing and development
- Microsoft Visual Studio – so I can do awesome .NET programming
- Google Chrome – general web browsing
- Mozilla Firefox – testing HTML / CSS
- Skype – communication with the world at large
Ubuntu
- LAMP Stack – for my day job
- Sublime Text 2 – general text editing and development
- Google Chrome – general web browsing
- Mozilla Firefox – testing HTML / CSS
- Node JS and Node Package Manager – So I can build awesome things
- Pidgin – IM chat with my friends and colleagues
So as you can see, I’ve got a very limited selection of things that I actively installed and use on a day to day basis. I’m pretty happy with the setup, though.
Finishing Up
That’s pretty much all there is to say about my setup. It has worked out exceedingly well for me at this point and I can’t really think of any drawbacks. Everything I need to be able to do is easy and accessible and I don’t spend any time fiddling with my setup anymore.