I have the task of packaging and shipping a commercial application bundle, which will include:
This is not a complete answer but just a bunch of ideas. I wrote an installer for a client that incorporated some ideas that might be useful to you.
It was Linux only so I focussed on just that. We needed to ship specific custom versions of mySQL, lighttpd, python, memcached, a few 3rd party Python modules and some custom scripts. We needed to launch all these services without any problems and let the user control them using regular initscripts. It should work fine on a bunch of popular distros and therefore shouldn't rely on distro specific stuff.
What I did was as follows.
deb-bootstrap
on the mountpoint to create a custom Debian install./etc/init.d
and some scripts that would setup the database and stuff at the beginning. /opt
on the host machine, chroot inside the directory and run a setup script that would ask the user a few questions like db username/password etc. and set things up. After that, it would fetch the scripts I mentioned in step 5 and put them on the host OS.The initscripts would simply chroot into the partition and start supervisord. It would then take care of launching all the services we cared about. Shutting down the application was simply a matter of connecting to running supervisord and running a command. We wrapped this in the initscript so that the user experience was UNIX like.
Now, we'd give clients the self extracting .run
file. They'd run it, get asked a few questions and it would create a directory under /opt
which contained our app and all it's dependencies. The init scripts would be modified to start our app on bootup and things would work as expected.
I think step 4 gives you the freedom to install whatever you want, however you want so that things would work fine.