self extracting shell script
*) The payload
*) files (binaries, tarballs, text files, etc.)
*) installer
*) The builder script
*) The decompression script
chenqi@pek-qchen1-d1:~/Test/installer$ find .
.
./decompress
./build
./payload
./payload/installer
./payload/display.tar
chenqi@pek-qchen1-d1:~/Test/installer$ cat decompress
#!/bin/bash
echo ""
echo "Self Extracting Installer"
echo ""
export TMPDIR=`mktemp -d /tmp/selfextract.XXXXXX`
ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' $0`
tail -n+$ARCHIVE $0 | tar xzv -C $TMPDIR
CDIR=`pwd`
cd $TMPDIR
./installer
cd $CDIR
rm -rf $TMPDIR
exit 0
__ARCHIVE_BELOW__
chenqi@pek-qchen1-d1:~/Test/installer$ cat build
#!/bin/bash
cd payload
tar cf ../payload.tar ./*
cd ..
if [ -e "payload.tar" ]; then
gzip payload.tar
if [ -e "payload.tar.gz" ]; then
cat decompress payload.tar.gz > selfextract.bsx
else
echo "payload.tar.gz does not exist"
exit 1
fi
else
echo "payload.tar does not exist"
exit 1
fi
chmod a+x selfextract.bsx
echo "selfextract.bsx created"
exit 0chenqi@pek-qchen1-d1:~/Test/installer$ cat payload/installer
#!/bin/bash
echo "Running Installer ... "
DEST=$HOME/Test/dest
echo "Installing files into $DEST ... "
mkdir -p $DEST
tar -xf ./display.tar -C $DEST
echo "Installation Finished"chenqi@pek-qchen1-d1:~/Test/installer$ ./build
selfextract.bsx created
chenqi@pek-qchen1-d1:~/Test/installer$ ./selfextract.bsx
Self Extracting Installer
./display.tar
./installer
Running Installer ...
Installing files into /home/chenqi/Test/dest ...
Installation Finished
chenqi@pek-qchen1-d1:~/Test/installer$ find .
.
./selfextract.bsx
./payload.tar.gz
./decompress
./build
./payload
./payload/installer
./payload/display.tar
chenqi@pek-qchen1-d1:~/Test/installer$ ls ../dest/
display2.c display.c
See http://www.linuxjournal.com/node/1005818 for more info.