self extracting shell script

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.



你可能感兴趣的:(linux,installer,self-extracting,shell-script)