GMC Setup

Alright, I am here in Mauritania and I've been collecting bits and pieces of software for the last two years and I'm trying to get all wrapped up now. So that other people can have a clue as to what I've been doing, this is a record of the different bits.

Automated XP Install

The GMCs are run by volunteers with a variety of backgrounds. Some are comfortable with computers and software installations, but others are not. To this end I want to have a largely unattended install. To this end I made a unattended install config which goes in the i386 folder.

Recreating the bootable CD is something I've already worked on, by extracting the ElTorito image and using CDImage (since mkisofs doesn't work).

Slipstream

I tried for a week to download the second service pack without success. In the end I had to go with the first because time was too short.

MUI

Mauritania is an interesting environment to deploy software in. Particularly at the GMCs because girls' education is generally a low priority. It means that girls are frequently only partially educated in a widely used language, and because of racial issues in Mauritania some girls will know only French while others know only Arabic.

A bit part of dealing with this is the deployment of XP's MUI. It allows the users language to be configured as either English, French or Arabic depending on the account. Supposedly the translation is about 90% of what you get with a localized version which is good enough.

Account Creation

The account creation is a little more complicated. The problem is that there are three accounts I want to create, one for each of the available languages. The name of the account is simply "student" in the appropriate language (student, étudiant, and طالبة). The problem is that the command interpreter only supports 8-bit characters. I could use ISO-8859-1 for the Latin or ISO-8859-6 for the Arabic, but to have both in the same file, I need unicode. I tried UTF-8: didn't work. I tried UTF-16: didn't work. Both were interpreted as ISO-8859-1. So, I ended up abandoning net user and went with some VBScript.

Lockdown

After I've created the accounts I need to change some registry keys to configure the interface language and homepage and whatnot. The problem is that these keys go into the CURRENT_USER hive and this hive is stored in %USERPROFILE%\ntuser.dat. %USERPROFILE% isn't created until the user logs in for the first time. I could require the person doing the setup to log into each account and then run a program, but that's not a very elegant solution.

A better solution involves manipulating the process by which the profile is created. The process is called "Active Setup" and one part of it involves a set of keys at: HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components. Each key is a GUID with the REG_SZ (or, better, REG_EXPAND_SZ) value StubPath, REG_SZ value ComponentID and REG_DWORD value IsInstalled set to 1. When the Active Setup is performed the StubPath is run.

Creating the GUID and adding the keys is another bit of VBScript. Because I'd like the install to give the user the option of restricting the users access to the system, the registry edits are divided into a personalized set for each language (english, français and أربيك). Then there is a general set to control the user's access.

Configuration

I don't want for this process to be too restricted to my idea of the setup that I am doing. I would like to give the users some degree of control with a minimum of effort. At the same time this is my last project, my chef d'ɶuvre so to speak. I want for it to be pretty, because no matter for technically impressive a project, the users won't respect a thing without some prettiness.

So, I want to go with a graphical installer to let the user pick what they'd like to install. This is run by the automated install, and to create it I think NSIS is a good choice.

What is the difference between a GMC setup and a normal XP install? (I.e. what operations does the installer need to perform?

In creating the installer I've got two goals:

  1. This setup could use a couple more pieces, but my time is short and this'll have to do. Adding new programs should require a minimum of effort and programming experience
  2. The programs for this install are obviously not going to go on a single CD. The target product will be a multi-CD set, but it should work if run over a network or from a single medium such as a DVD or flash drive

The main problem I am having is unicode support. As before, there is no ISO character set that contains both Arabic and extended Latin characters. In the end the installer is in ISO-8859-1 and certain tasks, like creating the Arabic user account are spawned out to UTF-16 VBScripts.

The installer is broken into two main parts. The main installer handles the account creation and whatnot. It also includes the programs list which uses macros in an attempt to be as quick to update as possible.

It was necessary to create a couple custom headers for the install as well:

Branding

To take a break and play with art for a bit, I made a 150x57 pixel header image in Illustrator.

Rosetta Stone

As long as I am creating installers, I ought to do one for the Rosetta Stone software. The copy that I have can run without a CD, but it has to be installed in a certain way. Also, the files for the French and English are over 900mb and I am hoping that creating an installer will compress them to under 700mb so I can but them on a single CD.

It takes about 30 minutes to run, but NSIS manages to make an installer that's around 600mb. It also needs a command file to subst a drive before starting the program.

Tap'Touche

This is an InstallShield installer, but the setup.iss file was already created. I had to make a command file to kill the copy of notepad that's spawned at the end.

Mavis Beacon Teaches Typing

Also an InstallShield installer, this one needed a setup.iss created with setup -R. Also it needed a command file to kill the registration program and remove some unwanted shortcuts. Actually, I remove all the shortcuts because the program that's started is an unnecessary menu and recreate it in the NSIS config.

Encarta Encyclopédie

The basic install is easy enough. The installer is a MSI, so adding the /qb- switch automates it. The problem is that the data files aren't copied over, so that has to be done manually. I added that section to the NSIS config and added a registry key as well.

Office 2003 Français

This setup was a little different. I downloaded Office XP's resource kit which includes a wizard for creating Microsoft installer transforms (MSTs). Using this I made a mst which takes out Outlook, InfoPath and Publisher, and adds in some of the French and Arabic bits.

Adobe Programs

Photoshop, PageMaker, Premier, Illustrator, Distiller are all InstallShield, so all it took was creating setup.iss files.

IrfanView

IrfanView was an interesting one. The installer seems to be custom GUI code and I couldn't get it to install unattended for the life of me. For this one I wrote a script to pass keystrokes into a program.

Celestia

Celestia is InnoSetup, but there is a little custom prompt at the beginning that isn't handled either by /silent or /verysilent. The keysending script is used to get rid of that and from there it runs fine.