Follow me
RSS feed
My sources
My Viadeo

GemMenu (et non MenuGems)

Greg | 22 Jul 2009

GemMenuMise à jour : ROSXAuth est maintenant disponible sur RubyForge.

Voilà, comme je l'avais promis il y a quelques jours, je viens de pousser GemMenu sous GitHub. Ceux qui suivent (merci !) auront remarqué que j'ai poussé en même temps ROSXAuth. J'ai en effet décidé de sortir une petite partie du projet pour en faire un module à part entière. Comme son nom le laisse penser, ROSXAuth est une petite classe permettant, avec Ruby, de lancer un script avec les droits de l'administrateur.

Je n'ai pas pris le temps de packager proprement les deux projets. ROSXAuth devrait prendre sa place sur RubyForge, ce qui permettra de le récupérer comme un gem "classique". Pour le moment, vous pouvez passer pas GitHub. Notez bien que ce module est nécessaire pour utiliser GemMenu. Si vous ne l'installez pas, le menu se lancera sans problème, mais vous ne pourrez pas faire les mises à jour.

En ce qui concerne GemMenu, il faudra récupérer les sources et compiler le projet vous même.

Ceux qui vont passer le pas devraient se rendre rapidement compte des limitations de l'outil. Voici donc une petite liste de courses pour les jours à venir :

Autre amélioration à prévoir : il n'y a aucun retour sur l'update. En fait, tout est loggué dans la console.

GemMenu-logs

Je pense qu'il serait préférable de permettre d'afficher ce log. A voir !

Je suis également très énervé contre le panneau de préférences. Il est, à mon goût, très moche et mal organisé. Malheureusement, j'ai l'impression d'avoir touché mes limites de designeur et je serais très heureux d'avoir un peu d'aide pour l'améliorer.

GemMenu-prefs

Si vous regarder le code, vous remarquerez très certainement que je gère l'authentification pour l'exécution de la mise à jour d'une façon un peu bancale. ROSXAuth est très simple à utiliser. Il suffit de créer une instance de la classe et d'utiliser ROSXAuth.exec pour exécuter le processus avec les droits root :

require 'rubygems'
require 'rosxauth'

h = ROSXAuth.new()

# execution de `/bin/ls -l /Users/greg'
f = h.exec( "/bin/ls", ["-l", "/Users/greg"] )
if f.nil?
  puts "Aie !"
else
  IO.for_fd( f ).each do |g|
    puts g
  end
end

Tout cela est fait en utilisant le service de gestion des autorisations de MacOSX. C'est la première fois que je jouais avec et j'ai dû passer à côté de certaines subtilités, car si vous vous amusez à exécuter la commande gem via le module, vous n'aurez le droit qu'a une insulte en guise de résultat :

ERROR:  While executing gem ... (SecurityError)
    Insecure operation - exist?

En gros il y a une légère discordance entre le niveau de sécurité imposé par rubygems et celui qui est positionné via ROSXAuth. Idéalement il faudrait que l'on puisse positionner les autorisations de façon fine lors de l'instanciation. Je vais y travailler. En attendant, j'ai trouvé une solution, mais elle est très moche :

1 autz = ROSXAuth.new()
2 ...
3 output = autz.exec( 
4   "/usr/bin/sudo", 
5   [@gemExecutable.stringValue().to_s, "update", "-y" ] 
6 )

Dernier petit détail, j'ai ajouté la notification via Growl. Si vous voulez en profiter, il faudra installer growlnotifier.

Anyway, c'est sur GitHub, donc vous pouvez jouer avec...

Copyright © 2009 - 2011 Grégoire Lejeune.
All documents licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License, except ones with specified licence.
Powered by Jekyll.