Makeself is a small command-line utility to generate self-extracting archives for Unix. It is pretty popular and it is used by VirtualBox and CMake projects.
Makeself creates archives that are just small startup scripts (.run, .bin or .sh) concatenated with tarballs.
When you run such self-extracting archive:
- A small script (shim) extracts the embedded archive into the temporary directory
- Script passes the execution to the entry point within the unpacked archive
- application is being run
- The temporary directory removed
Therefore, it transparently appears just like a normal application execution.
With help of deploy generator, it’s only needed to invoke
makeself.sh in order to generate
self-extracting archive for the further deployment:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)` curl "https://github.com/megastep/makeself/releases/download/release-2.4.0/makeself-2.4.0.run" --output $TMPDIR/makeself.run -L chmod +x $TMPDIR/makeself.run $TMPDIR/makeself.run --target $TMPDIR/makeself $TMPDIR/makeself/makeself.sh $PREFIX md5.run "conan-generated makeself.sh" "./conan-entrypoint.sh"
PREFIX variable in the example points to the directory where binary artifacts are situated. The
md5.run is an output SFX archive:
$ file md5.run md5.run: POSIX shell script executable (binary data)
conan-entry-point.sh is a simple script which sets requires variables (like
#!/usr/bin/env bash set -ex export PATH=$PATH:$PWD/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib pushd $(dirname $PWD/md5) $(basename $PWD/md5) popd
Check out the complete example on GitHub.