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.
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
Recreating the bootable CD is something I've already worked on,
by extracting the ElTorito
image and using CDImage
mkisofs doesn't work).
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.
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.
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
net user and went with some VBScript.
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
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:
Components. Each key is a GUID
REG_SZ (or, better,
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.
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:
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:
$EXEDIRbefore prompting the user to insert a CD
To take a break and play with art for a bit, I made a 150x57 pixel header image in Illustrator.
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
a drive before starting the program.
This is an InstallShield installer, but the
setup.iss file was already created. I had to make a
to kill the copy of notepad that's spawned at the end.
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 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.
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.
Photoshop, PageMaker, Premier, Illustrator, Distiller are all
InstallShield, so all it took was creating
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 is InnoSetup, but there is a little custom prompt at
the beginning that isn't handled either by
/verysilent. The keysending
script is used to get rid of that and from there it runs