For the longest time I have been able to avoid programming. I took classes in high school, but did enough to get by. I went so far (to get by) as do avoid functions in Pascal all together. Imagine the guy who writes a Pascal program to print calendars, but doesn’t use functions at all. I’m that guy.
At work, I have been working on a project using the open-source tripwire/system management tool Radmind. Recently, the project was greatly expanded to include a DVD-based installer to deploy ECN’s customizations to new machines. In order to (eventually) bring this up to par with what they use for the Windows side, I will be creating a custom deployment app. The process will tentatively go like this:
- Tech person boots off DVD.
- Initial app asks what OS to deploy (Panther or Tiger), gets information on how to partition the drive, does the partitioning and pushes a minimal install of the selected OS to the machine from an image stored on a central server (I love asr).
- App reboots machine.
- Machine boots on minimal install, spits out DVD, runs 2nd app. (It’s important to get the DVD back early; as the big installer runs, you can walk away and use the DVD again).
- 2nd app asks about IP address, machine name, packages to be installed (this is tricky; the app, which will initally have DHCP, will query an SQL database that will know which packages; this database will maintain Radmind’s files for it, and create new client records.).
- 2nd app installs packages using installer.
- 2nd app removes itself from startup items, reboots, and whala, machine is deployed to its individual spec.
- File maintenance and future software deployments are carried out my Radmind.
- Periodic admin password changes are executed via Remote Desktop.
These two apps will be true OS X apps, which created two problems: I don’t know Objective-C; and, I don’t know Cocoa.
This is the perfect opportunity to learn. On Tuesday, three books are showing up that will be the base of my learning:
There are more books I want to pick up, but this should give me a good start. I also have an O’Reilly book, Learning Cocoa with Objective-C, and Todd is lending his excellent Cocoa Recipes for Mac OS X.
I’m excited about finally learning this stuff; maybe now I can stop saying “It’d be awesome if there were an app that…” and actually write the thing.
A couple points
1) Make sure you have the sql client in your initial load so you can contact the SQL database (I know..sounds apparent but some people might forget).
2) More importantly, have some idea of common “builds” or some such and select from those. For example, you don’t want to select every damn application that will go on a machine. It’s a lot simpler to say “This is a web server with WebObjects” (which is really just a pointer to a list of applications and install orders). This will make installs much less painful (also leads to potential for easier upgrades, etc.)
m.
Matt -
The common “builds” are a good idea, and the way you said it is better than how I had imagined it. They way it was in my head, when it would query the packages set to be installed it would just enable them (via checkboxes or whatever). Instead, I can do straight “packages” like you described, while retaining the ability to alter individual packages.
The NetBoot idea is brilliant. I can’t believe I passed it over. We were concerned about using DVD’s because not everyone has a DVD drive, but were planning to get around it with a FireWire DVD drive. NetBoot is 1000x better, and smooth as hell - something to make the Windows team envious.
Thanks for the ideas!
Hi , how are you? You are pretty good at programming so?