I'm interested in any and all suggestions you might have, including pointers to large Perl apps with good installation systems.
Here's what I've learned from writing and supporting (until the 1.4.6 release) the Bricolage installer:
You can't rely on doing live CPAN.pm runs at install time. It puts you at the mercy of the internet, and every time a new module release comes out your software might no longer install successfully. We fixed this in a couple places by hard-coding versions into the script, but that will only work until the author deletes them!
It's really hard to use the Apache that comes with most Linux and BSD distributions for a large-scale Apache/mod_perl app. Many of them use a DSO mod_perl which is terribly unstable, and many of them mess with the Apache defaults.
Bricolage uses PostgreSQL which comes with pg_config which makes adjusting to the local setup fairly easy. MySQL has a similar program, mysql_config. As long as the install script can find these programs everything works.
Trying to support numerous systems with a single installation system source leads to a very complicated system.
Users get frusterated quickly by a failed installation. Many won't take a second look.
Bricolage can be run by a developer directly out of a CVS checkout. A system which imposes a build step between coding and testing Perl code won't be as easy to work with.
Given these lessons, I'm trying to devise a better system. Here's a few things I'm pretty sure I'll implement. This isn't a complete specification, but if I had that I'd already be coding!
By including the module distributions we can be sure we have working versions and installation can proceed much more quickly. Installing them into an application local directory means that we won't get unintended changes when the user installs a module at the system level. It also makes it easier to support uninstalls, and allows multiple versions of the application with different module requirements to run on the same machine.
It's relatively easy to build Apache/mod_perl from source in a portable manner but very hard to use an existing install. This should make supporting more platforms easier.
I plan to create a module providing basic build and install services. The individual platform scripts will use this module to implement installation on each system. This may require the user to specify their platform if the platform guessing code can't tell.
The steps required to build Apache/mod_perl and the CPAN modules for a given platform need only be done once. Then we'll package up the results and build an installer which simply checks prerequisites and copies the files into place. A test implementation of this system has provided good results.
So, what am I missing?
-sam
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |