2010-02-23 2 views
0

J'ai besoin de distribuer du code Erlang qui est une source fermée à un client. Je pense que le plus simple serait de simplement donner une commande shell Erlang pour tirer le code d'un hôte distant. L'hôte distant sera une machine virtuelle Erlang qui ne partage pas le même cookie secret que le client. Comment puis-je faire ceci?Existe-t-il une commande Erlang pour lire les fichiers BEAM d'un référentiel distant?

Par exemple, si je suis dans le shell Erlang, je voudrais quelque chose Thats me permet de faire:

load_lib(mysql). 
load_lib(postgres). 

: et Erlang voudrais télécharger et installer les fichiers BEAM, et me permettre d'utiliser MySQL ou postgres: modules Erlang de ce point sur

Mise à jour: 1) J'ai suggéré d'utiliser tarballs, donc je suppose que la procédure dans ce cas serait quelque chose comme:

Find Erlang lib directory and CD to it 
wget tarball to the current directory 

Pas aussi bien que gem install, mais son meilleur que Erlang peut faire

+0

Vous m'avez perdu un peu. Pourriez-vous clarifier? –

+0

J'ai ajouté des clarifications – Zubair

+0

Pourquoi ne pas inclure le code dans une archive tar que vous envoyez au client? – Christian

Répondre

1

Vous ne pouvez pas vraiment faire cela entre deux nœuds Erlang non fiables. Ce cookie secret est la seule mesure de sécurité existant entre les nœuds. Vous aurez besoin de déployer votre propre protocole, même si c'est juste HTTP. Ce que vous pouvez faire à partir de ce moment-là est d'envoyer un fichier BEAM sur le réseau, ou simplement envoyer les données binaires contenues dans un. Vous pouvez ensuite charger le module en appelant le code:load_file/1 pour le BEAM ou code:load_binary/3 pour les données binaires.

Tout cela me semble relativement fragile. Un dépôt, comme suggéré par Roberto Aloi serait probablement la meilleure idée.

+0

Donc, il serait fondamentalement impossible d'implémenter quelque chose comme gem: installer sur Erlang dites-vous? Pourquoi est-ce plus fragile que l'idée tarball? – Zubair

+0

Je ne sais pas comment gem: install fonctionne (ne l'a jamais utilisé), mais à partir des docs, une chose sûre est qu'il ne connecte pas deux instances d'une machine virtuelle directement avec le mécanisme de distribution natif de la machine virtuelle. Il semble aller à un dépôt (probablement avec des URL et tout sur un protocole donné) pour récupérer des fichiers et les vider sur votre ordinateur. Ceci est principalement une réponse à votre concept VM-to-VM. Rien ne vous empêcherait vraiment d'aller chercher des fichiers et de les mettre dans un chemin de recherche par tous les moyens que vous voulez. Connecter deux VM distantes de cette façon (sans cookie) n'est tout simplement pas le meilleur plan pour le faire. –

+0

Aussi, pour ajouter plus, l'utilisation du code: load_binary/3 peut vous permettre de récupérer des données binaires à partir de n'importe quelle ressource et de les charger dans la machine virtuelle Erlang sans sauvegarder aucun fichier. Une fois la VM redémarrée/arrêtée, tout est parti.Cela peut être une option intéressante, mais c'est celle qui m'a paru particulièrement fragile. –

1

Impossible vous suffit de télécharger votre code à un certain référentiel et fournir un accès au client? Vous pouvez également fournir un script pour charger automatiquement les nouvelles versions du code sans arrêter le système en direct ... Ou est-ce que je manque quelque chose?

Questions connexes