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.