Créer un autoextractible avec « makeself »
Un tuto très basique, juste pour expliquer comment marche « makeself » sous Linux.
Cet utilitaire permet de créer un programme exécutable, auto extractible , qui peut lancer un script shell après sa décompression avec des fichiers en argument.
Exemple:
On crée un répertoire, appelé par exemple « rep », et 2 fichiers dedans, appelés par exemple « fic1 » et « fic2 »:
$ mkdir rep1 $ echo 'coucou' > rep1/fic1 $ echo 'hello' > rep1/fic2 Ensuite, on rajoute dans le répertoire "rep1" un script shell. Par exemple il ne fera qu'exécuter un "ls": $ echo 'cat fic1; cat fic2' > rep1/monscript.sh
On rend ce script exécutable…
$ chmod +x rep1/monscript.sh Et on compresse le tout avec makeself:
$ makeself ./rep1 ./fic.run "TEST makeself" ./monscript.sh Header is 401 lines long About to compress 12 KB of data... Adding files to archive named "./fic.run"... ./ ./fic1 ./fic2 ./fic.sh CRC: 3933999350 MD5: 2e22c175c87aa4baa63115d19419d774 Self-extractible archive "./fic.run" successfully created. $ Voilà on a obtenu un fichier nommé "fic.run": $ ls -l total 12 -rwxr-xr-x 1 jrullier users 9506 Oct 8 15:11 fic.run drwxr-xr-x 2 jrullier users 41 Oct 8 15:09 rep1 $ Qui est de type "POSIX shell script executable (binary data)" : $ file fic.run fic.run: POSIX shell script executable (binary data) $ Si vous essayez un more fic.run, vous verrez qu'il est en partie en clair, et en partie (la fin) en binaire. On peut maintenant supprimer le répertoire "rep1": $ mv rep1 rep1.old $ Lançons l'auto-extractible: $ ./fic.run Verifying archive integrity... All good. Uncompressing TEST makeself.... coucou hello $ Il est a noter que le répertoire rep1, et les fichiers fic1 et fic2 ne sont pas restaurés (contrairement à l'extraction d'un Zip par exemple). Seul le résultat du script "monscript.sh" a été obtenu. $ ls -l total 12 -rwxr-xr-x 1 jrullier users 9539 Oct 8 15:53 fic.run drwxr-xr-x 2 jrullier users 47 Oct 8 15:49 rep2 $ Remarque: On peut voir la liste des fichiers contenus dans un autoextractible, sans le lancer, grâce à l'option "--list" : $ ./fic.run --list Target directory: rep1 drwxr-xr-x jrullier/jrullier 0 2019-10-08 16:56 ./ -rw-r--r-- jrullier/jrullier 6 2019-10-08 16:56 ./fic2 -rw-r--r-- jrullier/jrullier 19 2019-10-08 16:56 ./monscript.sh -rw-r--r-- jrullier/jrullier 7 2019-10-08 16:55 ./fic1 $