24 août 2011

HG + SSH


Dans le cas où on utilise Mercurial dans un mode client/serveur il faut choisir un protocole de communication entre les clients et le serveur. Cette page récapitule les options possibles.

Si on ne veut pas installer des applications supplémentaires (Rhodecode, hgweb, hg-ssh ect…) la seule solution efficace est ssh. Mais c’est aussi la solution la moins documentée !

Le principe de fonctionnement de hg + ssh est le suivant :
Le hg coté client va utiliser ssh pour exécuter les commandes hg coté serveur et communiquer avec.

Le problème c’est que des commande comme celle-ci on n’a pas envie de les taper ni de rentrer le mot de passe à chaque fois.

“C:\Program Files\TortoiseHg\TortoisePlink.exe” -ssh -2 -i “C:\Documents and Settings\All Users\Documents\ssh\hg\id_rsa.ppk" hg@mon.domaine.com “hg -R /home/hg/repo1 serve –stdio”

Pour automatiser il faut :

  • Utiliser un client graphique. Il s’occupera de construire la commande et de l’exécuter.  Le meilleur des clients graphiques est TortoiseHg
  • Utiliser ssh avec une paire de clefs publique/privée pour éviter de taper le mot de passe à chaque commande.
1) Installation de Mercurial

On partira du principe que le serveur est sous Unix et le client sous Windows.

* L’installation de TortoiseHg sur le poste Windows n’est pas un problème. Il inclut tout : Mercurial, l'interface graphique et même le client ssh : TortoisePlink.exe (mais on peut en utiliser un autre).
* L'installation de Mercurial sur le serveur Unix est basique. Il suffit d'installer le package correspondant à son Unix ou à sa distribution Linux. (Il faut avoir python 2.6+ deja installé).


2) La paire de clefs publique/privée

Il faut ensuite créer la paire de clefs, déposer la clef publique sur le serveur Unix et expliquer à TortoisePlink ou trouver la clef privée. Attention la clef privée doit être au format ppk. Ce format de clef est propre à PuTTY, et TortoisePlink est basé sur le Plink de PuTTY.

Pour générer cette paire de clefs il faut utiliser puttygen, qui ne fait pas partie de TortoiseHg mais de de PuTTY.  Voir cette page sur comment générer cette paire de clefs avec puttygen.

Important : Pour simplifier ne pas attribuer de passphrase à la clef privée.

Par la suite on supposera que les noms de fichiers pour la paire de clefs sont:
   Publique : hg_rsa.pub
   Privée : hg_rsa.ppk

Déposer la clef publique sur le serveur Unix dans le répertoire de l’utilisateur dédié à hg. En principe on crée un utilisateur nommé ‘hg’ et les repository sont stockés dans son home directory.  Donc on dépose la clef publique hg_rsa.pub dans le répertoire /home/hg/.ssh  du serveur.

Ensuite il faut ajouter cette clef publique à la fin du fichier /home/hg/.ssh/authorized_keys
   cat hg_rsa.pub >> authorized_keys
On peut ensuite supprimer le fichier hg_rsa.pub coté serveur
   rm hg_rsa.pub



3) Mercurial.ini
Il faut maintenant expliquer à Hg comment utiliser ces clefs.
Dans le fichier %USERPROFILE%\Mercurial.ini ajouter dans la section [ui] la ligne

ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -i "C:\Documents and Settings\Path\To\hg_rsa.ppk"

4) Init + Clone
Coté serveur, en utilisant le user dédié à hg, créer un repository vide:

cd /home/hg
hg init PremierTest

Coté client créer le repertoire PremierTest
Click bouton droit sur ce répertoire puis dans le menu contextuel sélectionner TortoiseHg > Clone ..



Remplacer le contenu du champ « Source » par   
   ssh://hg@mon.serveur.com//home/hg/PremierTest
ou  
   ssh://hg@mon.serveur.com/PremierTest
(en supposant que votre utilisateur soit hg)

ATTENTION : 
  Ne pas oublier le nom du user coté Unix (ici hg)
  Respecter la case du path coté Unix.  
  C'est bien un double / ou un simple / entre le nom du serveur et le path

Quand le path commence par un double / cela signifie qu'il est absolu.
Quand il commence par un simple / cela signifie qu'il est relatif au home directory du user (ici 'hg')

Un path relatif est moins dépendant des variations de l'organisation sur le disque du serveur et est donc préférable car plus stable.

Puis cliquer sur le bouton "Clone".

A partir de là il ne sera plus nécessaire de faire référence à ssh ou au nom du serveur. TortoiseHg a tout enregistré et générera les commandes ssh adéquates.

5) Apprendre !

Voici un très bon tutoriel (plein d'humour) sur Mercurial. Il ne présente que l'utilisation de la ligne de commande (hg). Mais la conversion en clicks sur l'interface graphique de TortoiseHg est facile.


23 juillet 2011

Reverse avec apktool

Si, pour vous instruire sur Android, vous avez regardé le contenu d’un fichier apk (qui est en fait un fichier zip) vous avez constaté que les fichiers texte, comme les xml, sont illisibles. Heureusement il y a apktool !

Apktool est une application open source, écrite en java, qui permet de faire du reverse engineering sur des applications Android (apk).

Attention son téléchargent se fait en deux temps :
  1. Le fichier java apktool.jar, le même quelle que soit la plateforme Win/Mac/Linux.
    Le nom de l’archive qui contient ce fichier est de la forme apktool<x.y.z>.tar.bz2
  2. Un script et  un binaire (dépendant de la plateforme) pour lancer l’exécution du jar.
    Le nom de l’archive qui contient ce fichier est de la forme apktool-install-<plateforme>-r<xx>-brut1.tar.bz2
On copy l’ensemble de ces fichiers dans le même répertoire. L’idéal est d'avoir ce répertoire dans le PATH
Sous Windows on a donc : apktool.jar + apktool.bat + aapt.exe

USAGE 
Ouvrir une console (boite dos) et taper ( sans oublier le 'd' )

apktool  d  \path\to\application.apk

Un répertoire avec le nom de l’application a été créé dans le repertoire courant. Il contient les fichiers en clair. Il ne vous reste plus qu'a explorer !...
(Pour plus de détails sur les paramètres taper juste : apktool)

Où est le code java ?
Les fichiers java sont présentés sous forme de fichiers "smali". Il s'agit du code assembleur utilisé par la machine virtuelle Dalvik.

Application utile:
Il existe des sites web qui vous proposent de créer enligne votre application Android (et iPhone). Les applications ainsi générées nécessitent des droits très surprenant sans rapport avec les besoins réel de l'application. Que contient le fichier .apk à la fin ? Grâce à apktools vous allez découvrir tout ce qui est ajouté (en cachette) à votre application (pub, appel de numéro, liens vers d'autre sites, player étrange, ect) et tout ce qui en fait n'est pas dans votre application mais sur des serveurs.
Donc, grâce à apktool, j'ai appris qu'il ne fallait surtout pas utiliser ces services : trop gratuits pour être honnêtes  !!
Pour aller plus loin...


16 juillet 2011

Bug du SDK r12 d'Android


Quand on utilise le SDK r12 pour Android et que l’on tente d’exécuter un programme Android depuis Eclipse on obtient cette erreur : 

[2011-07-10 21:00:51 - Emulator] invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.
[2011-07-10 21:00:51 - Emulator] Hint: use '@foo' to launch a virtual device named 'foo'.

Le Paramètre invalide Files\Android\android-sdk\tools/emulator-arm.exe est en fait la deuxième partie de C:\Program Files\Android\... coupé par l'espace. Le problème vient donc de l’espace dans le path du SDK: C:\Program Files\Android\android-sdk

Solution :

1) Ouvrir une boite dos et taper la commande 
dir /x \ 
pour déterminer le chemin au format dos du répertoire « \Program Files » 

>dir /x \ 

Répertoire de C:\
17/01/2011  22:45       0    AUTOEXEC.BAT
17/01/2011  22:45       0    CONFIG.SYS 
24/01/2011  10:44    <REP>   DOCUME~1     Documents and Settings
10/07/2011  10:54    <REP>   PROGRA~1     Program Files 
17/06/2011  02:07    <REP>                WINDOWS
Ici le nom dos est “PROGRA~1

2) Dans Eclipse cliquer dans le menu sur : Window > Preferences > Android
Dans le champ SDK Location remplacer \Program Files\ par \PROGRA~1\

10 juillet 2011

Android: Versions, Api, Noms

Il n’est pas toujours facile de se repérer entre les numéros de version d’Android, leur nom de code et le « Api Level ».
  • L’Api level est le seul qui techniquement à une influence.Si ce numéro ne change pas c’est qu’aucune fonction n’est apparue, ou n’a disparue.
  • Le nom de code regroupe plusieurs versions ayant en gros les mêmes fonctionnalités.
  • Le numéro de version, comme l’Api level , montre l’évolution de logiciel mais avec en plus une hiérarchisation des changements.
2003 Octobre : Création de Android Inc.
2005 Aout: Rachat de Android Inc. par Google.
2005 Novembre: Création du consortium Open Handset Alliance.