Over the past week or so I have been reviewing the landscape of Installers that I can use to get Chef installed on people’s machines. The landscape has changed quite a bit since the last time I looked, with a lot more small install authoring tools available. Before, it was just InstallShield or Wise Installer – now there’s NSIS, InnoSetup (I know, not new..), AdvancedInstaller, and several other viable tools.
And after carefully reviewing many of them, I’ve run into road blocks with my setup needs that can’t be fulfilled without spending upwords of $500. So I now have a setup using Visual Studio 2005’s deployment projects. It’s not quite what I wanted when I first started down the road but it’s not too bad either. In fact, I may actually end up liking this method a bit more. Read on for details.
My problem revolves around SQL Express with Advanced Services, which I have build Chef around for it’s Full Text Indexing capabilities. The install for this product is a whopping 200+MB. Over 200! I should have realized this much earlier, but I didn’t – so oh well. After getting over the initial shock, I had to find some way to get this thing packaged.
My first inclination was to do a VS 2005 deployment project (vdproj) that has a custom action to download the sqlexpr_adv.exe file when the user chose to install the database component. This started ok, I built a setup wizard that downloaded the file as needed. But then ran into the inflexibility of .vdproj in that I couldn’t conditionally show wizard panels or not – I wanted to allow the user to configure the database only if they chose that component.
Thus began my adventures into the 3rd party tools. I was willing to spend $250 at most for a product and gave a few a try. Each and everyone one I tried ended up not working out for some reason or other. For instance, I ran into what looks like a great product in AdvancedInstaller. I tried it out and it was looking very good. It allowed many of the things others didn’t. Except for custom dialogs. That feature is only available in the Enterprise edition for 2x the cost.
Long story short, I finally decided to ditch the requirement of having the installer only download the 300MB if it needed to for the database install. I realized after trying out the downloading that I don’t like installers that do such a thing – if for some reason I need to reinstall later I don’t want to have to rely on that file existing remotely and the internet working. I like having the one big file in my possession. So I went back to the good ‘ol .vdproj.
Then I ran into a snag with SQL Express’ installer. It cannot be run from inside another msi-based installer. Well there goes my installation plan, again! I recall thinking. However, after some brainstorming I came up with what I think may end up being a better solution all together. A single, ableit large, msi installer that installs the application and places the sqlexpress setup on the user’s machine. The first time they fire up Chef, they are presented with a choice to either install a new database or connect to an existing one. Two clicks later and they have an instance up and running and Chef talking to it. Not too bad I don’t think.
So now that my install is over 200MB, it became obvious that I could no longer host the file off of my home internet connection (not to mention it’s against my tos). So I then spent a couple days host shopping. I chose WebHost4Life‘s basic plan which is pretty awesome. For $4.95/month I get 1 GB of disk space and…unlimited bandwidth. That’s right, unlimited, I asked multiple sales people about this. Since they offer a money back guarantee, I decided to give them a shot and it’s actually fast too. At peak times I get 400-500KBps download speeds. Hopefully it’ll stay that way, because that definitely eases my mind when talking about such a large download that would take seemingly forever on a slower connection.