24 janvier 2012

Bref, j'ai restauré OSX

Un Mac, c'est beau, ça marche (presque) tout seul, et des fois ... y'a un soucis.

Dan mon cas, c'est Aperçu, la visionneuse à tout faire, qui a commencé à bagotter : cet outil permet de reprendre rapidement une image pour la re-cadrer / re-dimensionner, ce qui est très pratique quand on a 30 photos à intégrer dans des slides. Sans raison évidente, Aperçu a décidé qu'il ne voulait plus sauvegarder (sous OSX Lion, la sauvegarde est automatique et incrementale, couplée à Time-Machine). En soit ce n'était pas super gênant, juste un peu pénible de devoir lancer un soft de retouche d'image rien que pour ça.

Hier soir, faute de solution proposées par mon amis Google (faut dire, faire une recherche sur "Preview" c'est pas simple) j'ai donc tenté la restauration TimeMachine.


TimeMachine c'est un soft intégré à OSX qui réalise des sauvegarde du système en tâche de fond sur un disque dur externe. Bien plus que les "points de restauration" de Windows, TimeMachine permet de revenir en arrière dans tous vos documents avec une belle interface comme Apple sait les faire. Ici c'est l'utilisation brute-force qui m'intéresser : restaurer tous le système tel qu'il était il y a 15 jours.

Au démarrage, [Cmd +R] fournit le menu de maintenance et l'outil de restauration. La mauvaise surprise c'est que cette restauration se fait en mode override : tout le disque est écrasé, soit 500Go à faire passer par le cable USB, autant dire que je n'ai pas beaucoup bossé hier après midi...

Toujours est-il que dans la soirée j'ai retrouvé OSX en état de marche, et DropBox m'a restauré mon travail en cours. Je ne regrette donc pas les quelques euros dépensés dans ce disque dur externe, et si vous n'utilisez pas TimeMachine (ou un équivalent sous Windows ?) ... bein vous devriez.




du Ruby sous OSX

Les outils DevOps sont quasiment tous basés sur Ruby, ce langage ayant à la fois la force d'un langage de haut niveau - au moins autant que Java en ayant une syntaxe bien plus compactes - et le potentiel d'un langage proche de l'OS, de nombreux paquets 'gem' nécessitant des extensions système re-compilées à l'installation - essayez de faire un lien symbolique en Java...


Sous Mac OS, comme pour de nombreux autres outils, Ruby est installé par défaut, mais évidemment dans une version un peu ancienne et customisée par Apple. Cela permet de faire immédiatement tourner des outils Ruby mais cela veut aussi dire qu'on risque à un moment ou un autre d'être coincé par une spécificité de la plateforme au barreaux dorés.

J'ai donc voulu installer RVM, qui est un gestionnaire de version de Ruby, permettant accessoirement de rester en mode utilisateur sans accès root. L'installation de RVM en elle même n'est pas un soucis :

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

par la suite, on va y installer des versions de ruby et/ou de ses variantes (jRuby par exemple) - et là, ça se complique, d'où ce blog pour vous éviter d'avoir comme moi à éplucher les réponses de Google.

D'abord, il va falloir compiler Ruby lors de l'installation - je vous l'ai dit, Ruby est fortement lié à l'OS et se recompile lors de l'installation, il n'est pas distribué sous forme d'un paquet dmg installable par glisser / déposer comme les autres logiciels Mac - donc disposer d'un compilateur, ce qui dans le monde Mac signifie télécharger et installer les quelques Go de XCode ... bon, ensuite :

There has been an error while running make. Halting the installation.

Il manque à Ruby deux librairies systèmes : readline et libxml2. OSX étant basé sur BSD, on peut lui ajouter de nombreux paquets Gnu/Linux via des portages - j'utilise MacPorts.

sudo port install readline libxml2

un petit café plus tard, retour à l'installation de ruby, auquel il faudra ajouter des arguments --with-xx-dir pour préciser le chemin d'installation de ces dépendances. Nouveau problème, nouveau paquet manquant (libiconv), et cette fois l'astuce macport ne suffit pas. On va donc demander à RVM de résoudre le problème lui même :

rvm pck install iconv

et enfin, 

rvm install 1.9.3 -C --with-readline-dir=/opt/local/lib --with-libxml2-dir=/opt/local/lib --with-iconv-dir=/Users/nicolas/.rvm/usr

et voilà ! Reste plus qu'à choisir cette version comme interpreteur Ruby par défaut (rvm --default use 1.9.3) et on est fin prêt pour utiliser ruby dans une version récente, et installer des paquets Gem sans être root.

Tiens au passage, un petit troll, histoire de ne pas renier mes racines :

{troll:on}
à ceux qui se plaignent de Maven, le gestionnaire de paquets Gem va vous plaire : installation systématique les docs (deux pour le prix d'une : ri et rdoc), conflits de versions - je n'arrivais pas à installer veewee sur mon vagrant avant un downgrade de ce dernier) - etc.
{troll:off}


Ceci dit, je ne connais aucun système de gestion de paquets/dépendance qui ai résolu de manière définitive ce problème :D