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.