Archive auto-extractible ou le package universel

Lorsqu’on doit livrer des scripts ou des programmes, on constitue un « package ». C’est la solution classique, mais elle est dépendante de l’OS ou de la distribution utilisée: il faut créer autant de paquet que d’OS (au format txz, deb, rpm, lpp, pkg, etc.). On peut aussi envoyer un fichier au format « tgz » ou « tar.gz » avec une procédure d’installation, mais faire de la doc, c’est chiant.

Il peut être plus simple de fournir un script shell qui contiendra l’archive ainsi que les scripts d’installation et de configuration spécifiques à chaque OS. Oui, tout ça dans un simple script. Pour info, cette technique n’est pas nouvelle: elle était très utilisée dans les années 90/2000 par des éditeurs qui devaient supporter plusieurs plateformes (AIX, HPUX, Linux, Solaris, Unixware, etc.).

One script to rule them all

Le script ci-dessous se charge de tout. L’archive doit être concaténée à la fin de celui-ci.

#!/bin/sh
#
# Objet : Shell autoextractible pour installer "foobar"
NBLIGNES=29                          # Nombre de lignes de ce script
TEMP="/tmp"
ARCHIVE="${TEMP}/archive.tar.$$"     # Archive temporaire
ARCHIVE_DIR="foobar"                 # Nom du dossier de l'archive
rm -rf ${ARCHIVE} ${TEMP}/${ARCHIVE_DIR}

tail -n +${NBLIGNES} $0 > $ARCHIVE   # Reconstitution de l'archive

tar xf $ARCHIVE -C ${TEMP}           # Extraction de l'archive
if [ $? -ne 0 ] ; then
        echo "Erreur lors de l'extraction de l'archive"
        rm -rf ${ARCHIVE} ${TEMP}/${ARCHIVE_DIR}
        exit 1
fi
OSNAME=$(uname -s)
INSTALL="${TEMP}/${ARCHIVE_DIR}/${OSNAME}/install.sh"
if [ -x ${INSTALL} ] ; then
        ${INSTALL}
        rc=$?
else
        echo "${OSNAME}: Plateforme non supportée."
        rc=1
fi
exit ${rc}
# End of script
### Tar archive begin after this line

Exemple d’utilisation

Un exemple vaut mieux qu’un long discours: vous devez disposer du script ci-dessus et d’une archive (par exemple) « foobar.tgz » avec l’arborescence suivante:

tar tvzf foobar.tgz
 ./foobar/SunOS/install.sh
 ./foobor//FreeBSD/install.sh
 ./foobar/Linux/install.sh
 ./foobar/data/*
 ./foobar/lib/*
 ...

Pour créer le script d’installation autoextractible, il suffit de taper la commande suivante:

  cat script.sh foobar.tgz > install.sh
  chmod +x install.sh

Ce script ne contient aucun « bashisme » et devrait être compatible avec tous les UNIX courants. Si vous devez le personnaliser, vérifiez bien le nombre de lignes et modifiez la variable NBLIGNES si besoin.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>