I’ve been using makeself from http://megastep.org/makeself/.
This is an excellent tool for distributing self-extracting executables.
There is one issue that was not apparent to me. You can tell the resulting script to execute a file within the archive after extraction. Hence, the following will run test.sh after setup extracts everything:
./makeself.sh --compress ~/tmp setup "Test Installation Setup" ./test.sh
./test.sh
is what is extracted. The leading ./
is necessary because the file is executed relative to the extracted directory.