web-dev-qa-db-fra.com

Comment fonctionnent les installateurs binaires Linux (.bin, .sh)?

Certains logiciels (par exemple les NetBeans IDE ) livrent les programmes d’installation Linux dans des fichiers .sh. Curieux de savoir comment exactement ils "empaquettent" tout un IDE dans un "script shell", j'ai ouvert le fichier dans un éditeur. J'ai vu du code de script Shell en texte brut, puis du charabia aléatoire, que je considère comme du texte "binaire" ou non-clair. 

Je me demande comment ils combinent des scripts Shell simples et appellent ensuite probablement les éléments «non lisibles», à savoir les fichiers binaires. 

Avez-vous un aperçu de cela? 

62
user59634

Fondamentalement, il s’agit d’un script Shell ajouté au début d’une archive compressée, telle qu’une archive tar. Vous utilisez la commande tail ou sed sur vous-même (la variable $0 dans Bourne Shell) pour supprimer le script Shell au premier plan et transmettre le reste à votre gestionnaire.

Par exemple, créez le script suivant en tant que self-extracting:

#!/bin/sh -e
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup
exit

La commande sed ci-dessus supprime toutes les lignes de la première ligne du fichier à la première qui commence par "exit", puis transmet le reste. Si ce qui commence immédiatement après la ligne "exit" est un fichier tar, la commande tar l'extraire. Si cela réussit, le fichier ./project/Setup (vraisemblablement extrait de l'archive) sera exécuté.

Ensuite:

mkdir project
echo "#!/bin/sh" > project/Setup
echo "echo This is the setup script!" >> project/Setup
chmod +x project/Setup
tar czf - project >> self-extracting

Maintenant, si vous vous débarrassez de votre ancien répertoire project, vous pouvez exécuter self-extracting pour extraire ce fichier tar et exécuter le script de configuration.

86
Curt J. Sampson

Vous voudrez peut-être consulter makeself.sh

D'après les notes des auteurs.

makeelf.sh est un petit script Shell qui génère une archive tar.gz auto-extractible à partir d'un répertoire. Le fichier résultant apparaît sous la forme d'un script Shell (la plupart d'entre eux ont un suffixe .run) et peut être lancé tel quel. L'archive se décompresse ensuite dans un répertoire temporaire et une commande arbitraire optionnelle sera exécutée (par exemple, un script d'installation). 

Les archives Melfelf incluent également des sommes de contrôle pour l'auto-validation de l'intégrité (sommes de contrôle CRC et/ou MD5).

Le script makeelf.sh n’est utilisé que pour créer les archives à partir d’un répertoire de fichiers. L'archive résultante est en réalité une archive TAR compressée (avec gzip, bzip2 ou compress), avec un petit module de script shell au début. Ce petit module effectue toutes les étapes d'extraction des fichiers, d'exécution de la commande intégrée et de suppression des fichiers temporaires une fois l'opération terminée. Tout ce que l'utilisateur doit faire pour installer le logiciel contenu dans une telle archive consiste à "exécuter" l'archive [c'est-à-dire exécuter le script]

J'essaie de garder le code de ce script aussi portable que possible, c'est-à-dire qu'il ne dépend d'aucune fonctionnalité spécifique à bash et n'appelle que des commandes installées sur tout système compatible UNIX qui fonctionne. Ce script ainsi que les archives qu’il génère doivent s’exécuter sur n’importe quelle version d’Unix, avec n’importe quel Bourne Shell compatible, à condition bien sûr que les programmes de compression soient disponibles.

Enfin, le package makeself lui-même se présente sous la forme d'un script à extraction automatique appelé makeself.run .

52
nik
11
seb

Sharutils GNU:

http://www.gnu.org/software/sharutils/

est un jeu d'outils permettant de créer des archives Shell et fournit des fonctionnalités supplémentaires qui peuvent être utiles (telles que les sommes de contrôle permettant de s'assurer que la charge utile n'est pas endommagée pendant le transit).

La protection contre les modifications malveillantes n’est pas vraiment réalisable lorsque le produit final doit être interprétable par Shell: toute personne qui comprend la technique de génération peut également modifier la somme de contrôle.

4
James F

Il existe également d'autres constructeurs/installateurs de logiciels commerciaux (comme InstallAnywhere) qui possèdent leur propre version de shar/makeelf.

Netbeans a son propre moteur d’installation, et une partie de celui-ci, qui effectue le décompactage et le lancement, est réalisée dans le composant lanceur natif NBI: http://wiki.netbeans.org/NBINativeLaunchers

Crée une archive Shell (script) pour Linux/Unix/MacOS et un exécutable natif pour Windows. Vous pouvez également utiliser cet outil pour vos propres projets.

0
eckes