Lorsque l’on a créé un programme, il existe plusieurs solutions pour le « packager ». Il est possible de créer une archive compressée et de laisser l’utilisateur le soin de la décompresser et de réaliser l’installation manuellement. Il est également possible de créer un package lié à une distribution (deb, rpm …) mais cela implique de créer autant de packages qu’il y a de systèmes différents. Une autre option est de créer une archive auto-extractible qui réalise automatiquement la décompression et lancer un potentiel script d’installation. C’est cette dernière méthode qui est passée en revue dans cet article au travers d’un exemple concret et avec l’aide de Makeself.

Présentation du programme

Le programme « Liloterie » que j’ai développé est composé de plusieurs fichiers placés dans les répertoires « /opt/liloterie » et « /etc/cron.d/ » :

# ls -l /opt/liloterie/
-rw-r–r– 1 root root 22176 mars 20 19:25 gains.pl
-rwxr–r– 1 root root 237 mars 20 19:25 geteuromillions
-rwxr–r– 1 root root 213 mars 20 19:25 getloto
-rwxr–r– 1 root root 614 mars 20 19:25 getlotto
-rw-r–r– 1 root root 145 mars 20 19:25 grilles_euromillions.txt
-rw-r–r– 1 root root 124 mars 20 19:25 grilles_loto.txt
-rw-r–r– 1 root root 98 mars 20 19:25 grilles_lotto.txt

# ls -l /etc/cron.d/
-rw-r–r– 1 root root 202 mars 20 19:25 liloterie

Le but est donc de créer une archive auto-extractible que l’on nomme « Liloterie-2.1.run » et qui va décompresser les fichiers automatiquement. Puis l’installation permettant de placer ces différents fichiers dans les répertoires ci-dessus sera aussi lancée automatiquement.

Création de l’archive

Plaçons dans « /tmp » le répertoire de « liloterie » avec tous les fichiers nécessaires aux fonctionnement du programme.

# ls -l /tmp/liloterie
-rw-r–r– 1 root root 22176 mars 19 19:29 gains.pl
-rw-r–r– 1 root root 237 mars 19 18:57 geteuromillions
-rw-r–r– 1 root root 213 mars 19 18:57 getloto
-rw-r–r– 1 root root 614 mars 19 19:03 getlotto
-rw-r–r– 1 root root 145 mars 19 19:03 grilles_euromillions.txt
-rw-r–r– 1 root root 124 mars 19 19:03 grilles_loto.txt
-rw-r–r– 1 root root 98 mars 19 19:02 grilles_lotto.txt
-rw-r–r– 1 root root 202 mars 19 21:46 liloterie

A noter que nous n’oublions pas le fichier « liloterie » qui est vient du répertoire « /etc/cron.d ».

La commande permettant de créer une archive est la suivante :

makeself.sh [args] archive_dir file_name label startup_script [script_args]

args contient les paramètres qui peuvent être passé à la commande. La liste des paramètres existant se trouvent sur le site du projet.
archive_dir contient le répertoire à archiver.
file_name correspond au nom de l’exécutable qui va être créé.
label contient un texte décrivant le package.
startup_script correspond au script a lancer après le désarchivage. C’est donc ici qu’on spécifie le script d’installation à exécuter.
Voici la commande que nous pouvons lancer avec notre exemple :

# makeself ./liloterie/ liloterie.run « Liloterie 2.1? echo « Fin de l’extraction »
Header is 402 lines long

About to compress 60 KB of data…
Adding files to archive named « liloterie.run »…
./
./grilles_lotto.txt
./getlotto
./grilles_loto.txt
./geteuromillions
./liloterie
./grilles_euromillions.txt
./gains.pl
./getloto
CRC: 3865603020
MD5: c8090df3f089c56113bee11e7b3316b8

L’archive liloterie.run est créée. En l’exécutant, on obtient :

# ./liloterie.run
Verifying archive integrity… All good.
Uncompressing Liloterie 2.1……….
Fin de l’extraction

Lors de la création de l’archive avec Makself nous n’avons pas spécifié de script d’installation. A la place nous avons utilisé la commande « echo « Fin de l’extraction » ». Du coup lors de l’exécution de liloterie.run l’archive a seulement été décompressée en affichant « Fin de l’extraction » à la fin des différentes étapes.

Développement d’un script d’installation

Pour procéder à l’installation des fichiers après la décompression, il faut créer un script d’installation qui réalisera les différentes étapes de déploiement. Voici le script « install.sh »que j’ai créé dans le cadre de notre exemple :

#!/bin/sh
#Création du répertoire d’installation et copie des fichiers extraits

DEST= »/opt/liloterie »

echo -n « Test de présence du répertoire ${DEST} : »

if [ ! -d ${DEST} ]
then
echo « création »
mkdir -p ${DEST}
else
echo « déjà présent »
fi

echo « Copie des fichiers extraits »
cp -v ./* ${DEST}/
mv -vf ${DEST}/liloterie /etc/cron.d/
echo « Application des droits »
chmod -v u+x ${DEST}/geteuromillions ${DEST}/getloto ${DEST}/getlotto
rm -rf ${DEST}/${0##*/}
echo « Fin de l’installation »

exit 0

Ce script créé le répertoire « /opt/liloterie » s’il n’existe pas et y copie tous les fichiers décompressés. Ensuite, le fichier « liloterie » correspondant à la crontab est déplacé dans le répertoire « /etc/cron.d/ ». Enfin, les droits d’exécutions adéquates sont définis sur les fichiers qui en ont besoin. On n’oublie pas à la fin de supprimer le fichier « install.sh » qui n’a pas de raison d’être dans le répertoire d’installation.

Nous avons alors dans notre répertoire à « packager » les fichiers suivants :

# ls -l /tmp/liloterie
-rw-r–r– 1 root root 22176 mars 19 19:29 gains.pl
-rw-r–r– 1 root root 237 mars 19 18:57 geteuromillions
-rw-r–r– 1 root root 213 mars 19 18:57 getloto
-rw-r–r– 1 root root 614 mars 19 19:03 getlotto
-rw-r–r– 1 root root 145 mars 19 19:03 grilles_euromillions.txt
-rw-r–r– 1 root root 124 mars 19 19:03 grilles_loto.txt
-rw-r–r– 1 root root 98 mars 19 19:02 grilles_lotto.txt
-rwxr–r– 1 root root 508 mars 19 22:33 install.sh
-rw-r–r– 1 root root 202 mars 19 21:46 liloterie

On retrouve bien le fichier d’installation “install.sh”. Les droits d’exécution ont été définis sur ce fichier sinon le script ne se lancera pas.

La commande suivant permet de créer l’archive auto-extractible :

makeself ./liloterie/ liloterie-2.1.run « Liloterie v2.1? ./install.sh

Nous pouvons maintenant lancer l’exécutable « liloterie-2.1.run » qui procède à l’installation du programme.

# ./liloterie-2.1.run
Verifying archive integrity… All good.
Uncompressing Liloterie v2.1……….
Test de présence du répertoire /opt/liloterie : déjà présent
Copie des fichiers extraits
« ./gains.pl » -> « /opt/liloterie/gains.pl »
« ./geteuromillions » -> « /opt/liloterie/geteuromillions »
« ./getloto » -> « /opt/liloterie/getloto »
« ./getlotto » -> « /opt/liloterie/getlotto »
« ./grilles_euromillions.txt » -> « /opt/liloterie/grilles_euromillions.txt »
« ./grilles_loto.txt » -> « /opt/liloterie/grilles_loto.txt »
« ./grilles_lotto.txt » -> « /opt/liloterie/grilles_lotto.txt »
« ./install.sh » -> « /opt/liloterie/install.sh »
« ./liloterie » -> « /opt/liloterie/liloterie »
« /opt/liloterie/liloterie » -> « /etc/cron.d/liloterie »
Application des droits
le mode de « /opt/liloterie/geteuromillions » a été conservé à 0744 (rwxr–r–).
le mode de « /opt/liloterie/getloto » a été conservé à 0744 (rwxr–r–).
le mode de « /opt/liloterie/getlotto » a été conservé à 0744 (rwxr–r–).
Fin de l’installation

Nous avons créé notre archive auto-extractible de manière relativement simple. La seule partie plus complexe est la création d’un script d’installation permettant de déployer le programme. Il existe également de nombreuses options de Makeself pour des besoins plus spécifiques. Par exemple, il est envisageable de spécifier une méthode de compression particulière (par défaut gzip est employé) utiliser un fichier lsm pour la description du programme ou de suivre les liens symboliques dans une archive. Je vous invite à vous rendre sur le site de Makeself pour plus d’information.

Laisser un commentaire

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

Post Navigation