Uninstall support!
Ryan C. Gordon
icculus at icculus.org
Thu Jan 24 06:07:14 EST 2008
As of svn revision #462, MojoSetup has an uninstaller.
How to use:
Upgrade to the latest Subversion. Then, do nothing. The uninstaller
support is enabled by default.
On Unix, this will write out "uninstall-$PACKAGENAME.sh" to the root of
the installation folder. On Windows, we will eventually hook into
Add/Remove Programs, but there's still a lot of work to do on the
Windows port before we even consider that.
If you don't want an uninstaller included with your package, add this to
your config.lua's Setup.Package section...
support_uninstall = false,
write_manifest = false,
...and you'll get the usual installer behaviour.
Also, you need the Lua parser enabled when compiling the C code (it is
by default).
The way this works, in a nutshell:
- The installer writes out a metadata directory with the manifest of
installed files as a Lua script (etc).
- The installer also copies itself to the metadata directory, stripping
any attached archives (so your three gigabyte self-extracting installer
only copies about 150 kilobytes), and also any files it needs from the
archives, like UI plugins, etc.
- The installer writes out the shell script like this:
#!/bin/sh
exec "`dirname $0`"'/.mojosetup/mojosetup' uninstall 'duke3d' $*
exit 1
('duke3d' being the package id.)
...so the shell script runs the copied installer binary with command
lines to make it uninstall the package.
- (un)installer loads the manifest, which is just a Lua table, and
prompts the user for confirmation, and shows a progress dialog, using
the same UI plugins available to it during installation, and eventually
deletes everything in the manifest. It reports success and we're done.
Windows will basically do the same thing, but it will launch the
uninstaller from the Windows control panel instead of a shell script.
There are probably still minor issues to work out (for example,
uninstalling a package deletes the uninstaller too, so if there's more
than one package in the same directory, it'll break the other's
uninstallation support), but it seems to be 99% good to go already. I'm
pretty pleased with how this turned out. It's robust against manually
moving the installation directory, too, since it doesn't use a central
repository like loki_setup's ~/.loki/installed ...
Problems and questions: write here.
I did some more fixing on the ncurses UI today, too...next thing on my
todo list will probably be installing Gnome/KDE/Windows start menu items.
--ryan.
More information about the mojosetup
mailing list