53 votes

Comment compiler un shell linux script pour qu'il soit un exécutable autonome *binaire* (c'est-à-dire pas seulement par exemple chmod 755) ?

Je suis à la recherche d'un ensemble d'outils libres et gratuits qui compilera divers langages de script "classiques", par exemple Korn Shell, ksh, csh, bash etc. sous forme d'un exécutable -- et si le script appelle d'autres programmes ou exécutables, pour qu'ils soient inclus dans l'exécutable unique.

Raisons :

  1. Pour obscurcir le code à livrer à un client afin de ne pas révéler notre propriété intellectuelle - pour le livrer à un client du client mes propres machines/systèmes pour lesquels je n'ai aucun contrôle sur les autorisations que je peux définir en matière d'accès, de sorte que le fichier du programme doit être binaire, ce qui fait que le fonctionnement ne peut pas être facilement vu en l'affichant dans un éditeur de texte, ou hexdump téléspectateur.

  2. Réaliser un programme unique, simplement déployé pour le client, sans ou avec un minimum de dépendances externes.

Je préférerais quelque chose de simple sans avoir besoin de gestionnaire de paquets depuis :

  1. Je ne peux pas compter sur les connaissances du client pour exécuter les instructions d'emballage (non) et les instructions d'emballage (non).

  2. Je ne peux pas me fier aux politiques régissant leurs machines en ce qui concerne l'installation de paquets (et même de tiers).

L'approche préférée la plus simple est de pouvoir compiler en code machine correct un seul exécutable qui fonctionnera sans aucune dépendance.

1voto

Blessed Points 11

Les options qui s'offrent à vous :

  • Écrivez une logique dans votre code qui, lorsque le code est exécuté pour la première fois sur une boîte, il vérifiera si tous les paquets requis existent. Et si ce n'est pas le cas, le code ira automatiquement chercher les paquets lui-même et les installera... sans demander à l'utilisateur de faire quoi que ce soit. La seule question à poser à l'utilisateur est "Est-ce que je peux procéder à l'installation des paquets susmentionnés ? (O/N)". Tout ce qui est en dehors de cela est trop.

  • Une fois le code ci-dessus terminé (oui, je suis conscient qu'il n'est peut-être pas si simple pour vous de le coder, ou peut-être qu'il l'est, je ne connais pas vos capacités de codage), copiez et collez votre code terminé sur un site tel que kinglazy.com et un fichier exécutable réel sera généré pour vous.

Cette option présente un certain nombre d'avantages :

  • Oui, vous serez en mesure d'exécuter la version cryptée de votre script sans exposer aucune information propriétaire.
  • Personne ne peut essayer de "visualiser" votre script, car s'il le fait, il ne verra rien d'autre qu'un jargon indéchiffrable et crypté qui n'aura aucun sens pour lui.
  • Personne ne peut tenter de modifier votre script car s'il le fait, le script deviendra immédiatement inopérant.
  • Personne ne peut lancer un débogueur sur votre script pour voir comment il fonctionne. S'il le fait, le script s'interrompra.
  • De même, personne ne peut créer de copies de votre script sur le même serveur. S'ils le font, le processus s'interrompra et ne fonctionnera pas. Il permettra seulement aux utilisateurs de créer des liens symboliques vers l'emplacement original de l'endroit où vous voulez que le script soit.

Il se peut que je manque certaines choses dans ce que vous avez demandé, mais je pense que ce qui précède satisfait une bonne partie de ce que vous vouliez.

Je ne sais pas si cela fonctionne pour d'autres scripts, mais c'est certainement le cas pour les scripts shell.

-1voto

Carl Ambroselli Points 554

Vous pouvez également utiliser la version en ligne gratuite de CCsh pour compiler un shell script en un binaire : http://www.comeaucomputing.com/tryccsh/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X